AI Playbook/Recipe

Spot risks early

How do I get alerted the moment a Facebook (Meta) ad set's conversion quality drops in my Everflow data?

Get an early warning the moment a Facebook (Meta) ad set's conversion quality drops. Watch your clean Everflow data, not a blended pixel number.

Copy
Copy & export
Copy link
Plain page URL.
Copy page as Markdown
Full recipe content for LLMs
Open in AI
Open in Claude
Recipe prefilled.
Open in ChatGPT
Recipe prefilled.
Open in Gemini
Recipe prefilled.
Open-in actions need you logged into your Claude / ChatGPT / Gemini account in this browser. Not logged in? Copy as Markdown and paste it in.
Share
Dasha DagayevaEverflow
Dasha Shareyko
Product Education Manager
~1 to 2 hrs

Medium

LinkedIn
COMMUNITY RECIPE · SUBMITTED BY
Gaia, Inc
LinkedIn
~1 to 2 hrs
Medium
https://www.linkedin.com/in/dasha-shareyko-d-778b82120/
01

Quick Answer

A scheduled loop that reads your Everflow conversion quality per Facebook (Meta) ad set (true partner and sub-ID level, with rejected and scrubbed conversions excluded), checks each ad set against a rule you set, for example "conversion rate under 1% over the last 48 hours, but only after at least 200 clicks", and sends you an alert the moment an ad set crosses the line. Slack by default, or Twilio SMS if you want it in your face. You see the problem ad sets and their reason, in the channel you already watch, before the budget bleeds for hours.

Before you start: build the sub-ID bridge (one time)

The alert can only name a Meta ad set if it can tie an Everflow conversion back to that exact ad set. You build that bridge once, in your Meta ad URLs. Map Meta's dynamic macros into Everflow sub-ID fields, for example ...?sub1={{campaign.id}}&sub2={{adset.id}}&sub3={{ad.id}}. Stamp the ID macros, not the name macros: IDs are stable and numeric, names change and collide. The rest of this recipe assumes sub2 holds the ad set ID.

Everflow, Slack, Email
This prompt uses
02

The Pain

At scale, budget bleeds on losing ad sets before a human ever notices. A buyer running hundreds or thousands of Facebook (Meta) ad sets cannot watch them all. Some share of them spend money without producing quality outcomes, and the loss compounds for hours or days before anyone catches it. The ask we hear is consistent: tell me the moment something breaks, in the channel I already live in, so I can decide what to do.

The trap is that "underperforming" hides two different problems. One is top-of-funnel waste: spend piling up with no or low clicks. That is an impression-level problem and it lives inside Meta. The other is bottom-of-funnel waste: the clicks come, but the conversions, or the quality of those conversions, are bad. That second problem is exactly where a tracker adds signal a pixel cannot match, because Everflow can see performance down to the partner, the placement, and the sub-ID, and it can tell a clean approved conversion from a rejected or fraudulent one before the rule ever counts it.

The right tool depends on the rule. The "spent $10 with zero clicks, flag it" rule is keyed to impressions and spend, and Meta does not share impression-level data with any third-party tracker, not Everflow, not RedTrack, not Voluum, not ClickFlare. That rule belongs in Meta's own Automated Rules, where the impression and spend data already lives. This recipe owns the next rule, the one Meta's native rules and a raw pixel cannot see clearly: conversion quality, scored on real, fraud-filtered, partner and sub-ID level data.

Where Everflow comes in: the quality of the signal feeding the rule. Plenty of media-buying tools can watch a conversion rule and act on it, so the question is not whether a rule exists, it is what the rule can see. Everflow gives you granular, partner and sub-ID level conversion data with rejected and scrubbed conversions excluded, plus an open API and MCP. That means you can compose the alert into your own stack, route it to any channel you already watch, and decide for yourself what to do with it. The signal is yours to shape and send, not locked inside one vendor's screen.

The pattern
The ask is old and still unmet: requested in writing as far back as 2021 and raised again since - five distinct requests across five years, plus a partner add-on that productized exactly this. It is a durable request rather than a frequent one, and it sits directly on top of the conversion data Everflow already holds.

I want CAMPAIGN 1 to run in my ad account until $50 is spent. If CAMPAIGN 1 does not have a purchase event in Everflow by the time that $50 is spent, I want Everflow to turn off CAMPAIGN 1 in my ad account. Is something like this possible?

Media buyer, inbound support request, 2021
02b

Foundation Prompt

Set this once. Reuse across every recipe.

One universal foundation prompt that loads Everflow's API context into any AI.

~55 lines · ~340 tokens
# Everflow API Foundation Prompt

## Role & Objective
You are an Everflow API specialist. Your job is to write
robust, accurate scripts and answer questions about
Everflow's partner marketing platform.

## Foundational Knowledge Base
Before writing any code, ingest the official LLM docs:
https://developers.everflow.io/llms.txt
03

The Prompt

Same prompt across Claude, ChatGPT, and Gemini. MCP-first: if you have the Everflow MCP connected, the agent pulls the conversion numbers directly, no key handling. No MCP? It calls the read-only Everflow Reporting API instead. The only thing this prompt writes is a message to your alert channel. It never touches your ad account.

# role
You are an Everflow performance-monitoring agent. Watch Meta ad sets using Everflow
CONVERSION-QUALITY data, and ALERT me the moment an ad set crosses a rule I set.
You only read Everflow data and send a notification. You do not change anything in any
ad account.

# inputs
everflow_mcp        = true            # set false to use the REST API path instead
everflow_api_key    = {EF_API_KEY}    # only needed when everflow_mcp = false
subid_field         = sub2            # the sub field that holds the Meta ad set ID
window              = last 48h
rule                = alert if conversion_rate < 1%        # your rule, in your words
min_clicks          = 200             # minimum-volume guard, never alert below this
alert_channel       = slack           # slack | sms | email (pluggable, your call)
slack_webhook_url   = {SLACK_WEBHOOK_URL}   # the example channel for this prompt

# step 0 — confirm the sub field actually holds Meta ad set IDs. Always. First.
This recipe assumes {subid_field} carries the Meta ad set ID. On many accounts it does not.
Verified on a live network: sub2 held page URLs and article titles such as
"/collaborator-subcategories/running-traffic" and "the-everflow-marketplace". A run that skipped
this check would have alerted that an ad set called "/collaborator-subcategories/running-traffic"
breached the conversion-rate rule - confidently, in Slack, to a media buyer.
POST /v1/networks/reporting/entity/table for the last 7 days with
columns: [{"column": "{subid_field}"}] and print the 10 most common values.
Then STOP and ask the user to confirm they are Meta ad set IDs before running anything else.
If they are URLs, page titles, campaign names or blank, say so plainly and ask which sub field
(sub1-sub10) holds the ad set ID. Do not proceed on a guess: everything downstream is named after
this field, so getting it wrong produces a confident, well-formatted, entirely wrong alert.
⚠️ The sub slots are often ALREADY OCCUPIED by something else - one customer had sub4/sub5 taken by
an A/B-testing tool - so treat any macro map in this recipe as an example allocation, never THE
allocation. And some customers do not know what a sub is; if they cannot answer, that is a finding.

# step 1: pull conversion quality per ad set (the signal)
- If everflow_mcp = true: use the Everflow MCP to pull conversions for {window},
  grouped by {subid_field}.
- If everflow_mcp = false: POST /v1/networks/reporting/conversions?page=1&page_size=1000
      Body MUST carry from, to, timezone_id, currency_id, show_conversions: true,
      show_events, and query.filters. Omitting show_conversions returns 400.
      Paging is QUERY-STRING ONLY; page/page_size in the body are silently ignored.
      Do not filter status server-side - each row carries status and is_scrub, so filter
      after fetch and say that you did. with the date range
  for {window}, grouped by {subid_field}, authenticating with X-Eflow-API-Key.
- Count APPROVED / scrubbed conversions only. Exclude pending, rejected, and
  fraud-flagged conversions, so the rule runs on clean data.
- For each ad set ({subid_field} value), compute the rule metric over the window:
    conversion_rate = approved_conversions / clicks
    earnings_per_click = revenue / clicks
    fraud_rate = scrubbed_conversions / total_conversions
  (Cost-per-acquisition and return-on-ad-spend need Meta spend, which Everflow does not
   hold. If the rule uses spend, also pull it from the Meta Insights API and join on the
   ad set ID. Otherwise stay on the click-relative metrics above.)

# step 2: apply the rule
- Build the list of ad sets that BREACH {rule} over {window}.
- Drop any ad set with fewer than {min_clicks} clicks. Never alert below the guard.
- Sort breaching ad sets by how badly they miss, worst first.

# step 3: send the alert
- If no ad set breaches: send nothing (or a quiet "all clear" only if I asked for one).
- If one or more breach: send ONE message to {alert_channel}.
  For slack: POST a JSON payload to {slack_webhook_url}. Include, per ad set:
  the ad set ID ({subid_field} value), the metric value, the threshold it broke,
  the window, and the click count. Add a one-line "open this ad set in Meta" hint.
  For sms: send a short Twilio text with the count of breaching ad sets and the worst one.
  For email: send the same list as a readable summary.

# step 4: keep a record
- For every ad set considered, output: ad set ID, metric value, threshold, window,
  click count, breached (yes/no), timestamp. Keep this as the run log so there is an
  audit trail of what fired and when.

# guardrails
- Verify exact endpoint shapes against developers.everflow.io before calling anything.
  Do not invent payloads.
- This recipe only READS Everflow data and SENDS a message. It must not call any Meta
  write endpoint. Pausing is out of scope here (see the optional note below).
- Never alert on an ad set below {min_clicks}. A brand-new ad set with three clicks is
  not a loser, it just has not been judged yet.
- Respect Everflow API rate limits: paginate and back off on 429s.
- Nothing here is real-time. The loop runs on whatever schedule you set, and a little
  lag is normal. Do not promise instant detection.
- For the "spend with zero clicks" rule, tell the user to use Meta's native Automated
  Rules. Impressions are not shared with any tracker, so this agent cannot drive that rule.

# What you must disclose — NOT CHECKED
An empty result is NOT a clean result. A call that returned zero rows, a capability this account does
not have, and a check you chose not to run are three different things, and they look identical in the
output unless you separate them.
End every run with a NOT CHECKED block. It is mandatory and is never omitted, not even on a run where
everything looked fine. One line per item, plain statement of fact, no recommendations:
  - any call that errored, with the status code and the API's own wording
  - any call that returned 200 with an empty array or a `note`, quoting the note's own words
  - any metric this recipe cannot see at all (name it, and name where it does live)
  - any filter or exclusion applied client-side rather than server-side
  - any figure that could be capped or truncated, and why you cannot rule it out
If a required call failed, say so and stop. Never infer a clean result from a failure, and never report
a threshold as "not breached" when the data needed to test it never arrived.

# Paging and volume
/reporting/conversions paging is QUERY-STRING ONLY (?page=&page_size=, max 2000). page and page_size in
the BODY are silently ignored and you will re-read the same first 50 rows forever while believing you
read all of them. Read paging.total_count and loop until you have collected it; state both numbers.
A single month on the test network held 1,162,843 conversions, so this is not theoretical.
/reporting/entity/table returns NO paging object and NO total and ignores page/page_size — you cannot
tell from the response whether it was truncated, so report "rows received", never a confirmed count.
Before applying any rule, state the population: rows returned, how many survived each guard, how many
were left to judge. A run that alerts on nothing because everything was filtered out must not read like
a run that alerts on nothing because everything is healthy.
04

The Steps

Connect the AI to Everflow

Run the Foundation Prompt above so the AI knows the Everflow API and MCP (it loads developers.everflow.io/llms.txt). If the Everflow MCP is connected, there is no key to paste. No MCP yet? Generate a read-only key in Control Center > Security > API Keys, then click the + API key button. Read-only on Reporting is enough.

Write your rule and pick a channel

One metric, one threshold, one window, plus a minimum-volume guard. Example: alert me if conversion rate is under 1% over the last 48 hours, but only after at least 200 clicks. The guard stops the alert from firing on an ad set that has not had enough traffic to judge yet. Then point it at a channel: a Slack incoming-webhook (the easy default), a Twilio SMS number, or an email. The channel is pluggable, so pick whatever you already watch.

Schedule it

Run it on a timer (a cron, which is just a scheduler that fires a script on an interval). Every 30 to 60 minutes is sensible. Nothing here is real-time: Meta's own Automated Rules evaluate roughly every 30 minutes too, so a little overspend past your threshold before the next check is unavoidable on any approach.

05

Sample Output

Everflow MonitorAPP
#media-buying-alerts                                        Everflow Monitor  APP

3 Meta ad sets crossed your rule
RULE: conversion_rate < 1% over last 48h   GUARD: min 200 clicks
SIGNAL: Everflow approved conversions, grouped by sub2 (= Meta ad set ID)

ad_set_id          clicks   approved_cv   conv_rate
2384xxxx1183          612            3       0.49%
2384xxxx0907          430            2       0.47%
2384xxxx2250          388            3       0.77%

(1 more ad set was below the 200-click guard and was not judged.)
Open these in Meta Ads Manager to review or pause them yourself.

A note on the data, written by us, not the AI: a low conversion rate has several possible causes, from genuinely weak targeting to an attribution window that has not fully closed on a longer-consideration funnel. The alert is an early warning, not a verdict. Read the flagged ad sets and align your window to how long your buyers actually take to convert.

06

FAQ

Real questions, real answers
Can I get the "spent $10 with zero clicks, alert me" rule with Everflow?

No, and neither can any other third-party tracker. That rule is keyed to impressions and spend, and Meta does not share impression-level data with trackers. Use Meta's native Automated Rules for it. This recipe handles the conversion-quality rule, which is the part a tracker can see better than a raw pixel.

So what is Everflow's actual edge here?

The edge is the signal, not the action. Many media-buying tools can watch a conversion rule and act on it. What changes the outcome is what the rule can see. Everflow gives you true partner and sub-ID level conversion data with rejected and scrubbed conversions excluded, and an open API plus MCP so the rule is yours to compose and send wherever you want, not locked inside one vendor's screen.

Is this real-time?

No. The loop runs on whatever timer you set, and Meta's own rules evaluate on roughly a 30-minute schedule. Some lag is unavoidable on any platform. Plan for it.

06b

Notes & Counter-Cases

Edge cases, gotchas, and things to watch.
  • Use only approved, scrubbed conversions. If you feed the rule raw conversions, fraud inflates the conversion rate and the alert under-fires. Pending conversions deflate it and the alert over-fires. Clean data is the whole point.
  • Tune the threshold and guard before you trust it. Run it for a few days and watch what it flags. A good rule alerts on real losers and stays quiet otherwise. If it cries wolf, raise the volume guard or widen the window.
  • Align the window to your funnel. A 48-hour window on a week-long sales cycle will flag winners. Match the window to how long your buyers take. The minimum-volume guard also protects a brand-new ad set with three clicks from ever being flagged.
  • You never give Everflow access to your Meta account. This recipe reads your Everflow conversion data and sends you a message. What you do with that message is up to you.
  • Respect rate limits and keep the run log. Paginate and back off on 429s, and keep a simple record of what fired and when so the alerts are easy to trust and easy to debug.
  • Watch more than 500 ad sets? Use the REST API. If you watch more than 500 ad sets in a window, the Everflow MCP report caps at 500 rows. Switch that data pull to the REST API, which pages past the cap, so no ad set is missed.

Optional, going further: auto-pausing. We do not suggest auto-pausing campaigns until you know this recipe is working for you. Notifications first. Once you have validated the rule on your own data and you trust what it flags, your LLM or agent could wire up Zapier, n8n, Supabase, or the Meta Marketing API to pause the breaching ad sets automatically instead of just messaging you. That is an option, but it writes to a live ad account, so treat it as an advanced extension with real caution: start in a notify-only mode, add a cap on how many ad sets can be paused per run, keep an easy un-pause path, and never point an unattended agent at a live ad account with no rails. This recipe is focused on notifications. Pausing is a path you can grow into once the signal has earned your trust.

ASK US ANYTHING

Got a question this playbook hasn't answered yet?

Drop us the question you wish had a prompt. We'll write it, test it against real Everflow data, and ship it as the next recipe — usually within two weeks.

DJReviewed every Tuesday by Dasha & Jordan
NEWSLETTER

First dibs on new recipes

One Tuesday email. Latest industry news plus new recipes the day they ship. Unsubscribe in one click.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
×
Submit a recipe

Got a recipe of your own?

Share what's working with the Everflow API. Our team will reach out about details, timelines, and next steps.

Reviewed weekly · Author credit on every published recipe · We respond to every submission
Submit your idea and our team will reach out about details, timeline, and process.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
×
SHARE THIS RECIPE

Spread the playbook

LinkedIn no longer accepts pre-filled captions via URL. Two clicks: copy the caption below, then open LinkedIn and paste in the composer.

Your caption
Copy first, then open LinkedIn and paste in the composer.