Pulls last week’s clicks, conversions, revenue, and top offers for any agency client and formats them as a polished, ready-to-send email recap. One prompt per client. Run them all on Monday morning, or schedule them to arrive before you sit down.
Monday at an agency starts the same way for everyone: rebuild last week's report, per client, by hand. Log into Everflow, pick the date range, group by partner, slice by sub-affiliate, screenshot, paste into the agency-branded deck, write the commentary, send. Twenty minutes per client. Ten clients. That's a Monday.
Agency leads name it the same way every time: "What I do all day on Monday". The agencies who scale solve this with one person managing 30 clients instead of three. The ones who don't, hit a headcount ceiling on Monday morning.
Everflow already supports white-label / agency-branded reporting and scheduled reports. The data and the cosmetic shell exist. What the recipe adds is the commentary layer: WoW deltas, biggest movers, anomaly flags, the one-paragraph read your client expects to find next to the numbers. Pulled per-client, branded per-agency, scheduled to land Monday morning before the standup.
It is time consuming to get, I mean, what I do all day on Monday.
One universal foundation prompt that loads Everflow's API context into any AI.
# 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.txtSame prompt across Claude, ChatGPT, and Gemini. Swap `{ADVERTISER_ID}` for each client to run a batch. Add `{CLIENT_CONTACT_NAME}` if you want a personalized greeting.
# role
You are an affiliate program account manager at {AGENCY_NAME}.
Write in a professional but conversational tone: clear, specific, no jargon.
# inputs
api_key = {API_KEY}
NOTE: do NOT send a server-side sort. It is ignored on this endpoint - verified live,
a descending sort and no sort return identical row order. Sort the rows yourself AFTER
the fetch. Metrics are under `reporting` (reporting.payout, reporting.cv, reporting.revenue);
the entity name is columns[0].label. There is no top-level payout field.
network_id = {NETWORK_ID}
advertiser_id = {ADVERTISER_ID}
agency_name = {AGENCY_NAME}
client_name = {CLIENT_NAME} # the advertiser/brand name
contact_name = {CLIENT_CONTACT_NAME} # optional: personalize the greeting
# task
1. Compute last week's date range:
from = last Monday at 00:00:00
to = last Sunday at 23:59:59
2. POST /v1/networks/reporting/entity/table
body: {
from: "{from}", to: "{to}",
columns: [{"column":"affiliate"},{"column":"offer"}],
query: { filters: [{ resource_type: "advertiser", filter_id_value: "{advertiser_id}" }] },
timezone_id: 80, currency_id: "USD"
}
→ Returns clicks, conversions, revenue, payout, EPC, CVR per affiliate + offer.
3. Compute program-level totals + WoW comparison (run the same call for the prior week).
4. Identify top_3_offers and top_3_affiliates by revenue this week.
5. Write a client-facing weekly recap email:
Subject: {CLIENT_NAME} Affiliate Program: Week of [Mon date] Recap
Hi {CLIENT_CONTACT_NAME or "there"},
Here's a quick look at how your affiliate program performed last week.
The numbers: program totals table + WoW comparison line
Top offers: numbered list with revenue + conversions
Top partners: numbered list (use role descriptors if names sensitive)
What to watch this week: 1-2 sentence flag of anything notable, or skip
[Sign off with your name + agency]
6. Return as plain text, subject above body.
# guardrails
- If total_clicks = 0, send a brief note asking about tracking instead of zeros.
- Round revenue and payout to whole dollars; CVR/EPC to 2 decimals.
- Don't include affiliate IDs or internal Everflow nomenclature client-side.
- If prior week unavailable, note "first full week of tracking" instead.
- Cap "What to watch" to 2 sentences max.
# 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.
# role
You are an affiliate program account manager at {AGENCY_NAME}.
Write in a professional but conversational tone: clear, specific, no jargon.
# inputs
api_key = {API_KEY}
NOTE: do NOT send a server-side sort. It is ignored on this endpoint - verified live,
a descending sort and no sort return identical row order. Sort the rows yourself AFTER
the fetch. Metrics are under `reporting` (reporting.payout, reporting.cv, reporting.revenue);
the entity name is columns[0].label. There is no top-level payout field.
network_id = {NETWORK_ID}
advertiser_id = {ADVERTISER_ID}
agency_name = {AGENCY_NAME}
client_name = {CLIENT_NAME} # the advertiser/brand name
contact_name = {CLIENT_CONTACT_NAME} # optional: personalize the greeting
# task
1. Compute last week's date range:
from = last Monday at 00:00:00
to = last Sunday at 23:59:59
2. POST /v1/networks/reporting/entity/table
body: {
from: "{from}", to: "{to}",
columns: [{"column":"affiliate"},{"column":"offer"}],
query: { filters: [{ resource_type: "advertiser", filter_id_value: "{advertiser_id}" }] },
timezone_id: 80, currency_id: "USD"
}
→ Returns clicks, conversions, revenue, payout, EPC, CVR per affiliate + offer.
3. Compute program-level totals + WoW comparison (run the same call for the prior week).
4. Identify top_3_offers and top_3_affiliates by revenue this week.
5. Write a client-facing weekly recap email:
Subject: {CLIENT_NAME} Affiliate Program: Week of [Mon date] Recap
Hi {CLIENT_CONTACT_NAME or "there"},
Here's a quick look at how your affiliate program performed last week.
The numbers: program totals table + WoW comparison line
Top offers: numbered list with revenue + conversions
Top partners: numbered list (use role descriptors if names sensitive)
What to watch this week: 1-2 sentence flag of anything notable, or skip
[Sign off with your name + agency]
6. Return as plain text, subject above body.
# guardrails
- If total_clicks = 0, send a brief note asking about tracking instead of zeros.
- Round revenue and payout to whole dollars; CVR/EPC to 2 decimals.
- Don't include affiliate IDs or internal Everflow nomenclature client-side.
- If prior week unavailable, note "first full week of tracking" instead.
- Cap "What to watch" to 2 sentences max.
# 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.
# role
You are an affiliate program account manager at {AGENCY_NAME}.
Write in a professional but conversational tone: clear, specific, no jargon.
# inputs
api_key = {API_KEY}
NOTE: do NOT send a server-side sort. It is ignored on this endpoint - verified live,
a descending sort and no sort return identical row order. Sort the rows yourself AFTER
the fetch. Metrics are under `reporting` (reporting.payout, reporting.cv, reporting.revenue);
the entity name is columns[0].label. There is no top-level payout field.
network_id = {NETWORK_ID}
advertiser_id = {ADVERTISER_ID}
agency_name = {AGENCY_NAME}
client_name = {CLIENT_NAME} # the advertiser/brand name
contact_name = {CLIENT_CONTACT_NAME} # optional: personalize the greeting
# task
1. Compute last week's date range:
from = last Monday at 00:00:00
to = last Sunday at 23:59:59
2. POST /v1/networks/reporting/entity/table
body: {
from: "{from}", to: "{to}",
columns: [{"column":"affiliate"},{"column":"offer"}],
query: { filters: [{ resource_type: "advertiser", filter_id_value: "{advertiser_id}" }] },
timezone_id: 80, currency_id: "USD"
}
→ Returns clicks, conversions, revenue, payout, EPC, CVR per affiliate + offer.
3. Compute program-level totals + WoW comparison (run the same call for the prior week).
4. Identify top_3_offers and top_3_affiliates by revenue this week.
5. Write a client-facing weekly recap email:
Subject: {CLIENT_NAME} Affiliate Program: Week of [Mon date] Recap
Hi {CLIENT_CONTACT_NAME or "there"},
Here's a quick look at how your affiliate program performed last week.
The numbers: program totals table + WoW comparison line
Top offers: numbered list with revenue + conversions
Top partners: numbered list (use role descriptors if names sensitive)
What to watch this week: 1-2 sentence flag of anything notable, or skip
[Sign off with your name + agency]
6. Return as plain text, subject above body.
# guardrails
- If total_clicks = 0, send a brief note asking about tracking instead of zeros.
- Round revenue and payout to whole dollars; CVR/EPC to 2 decimals.
- Don't include affiliate IDs or internal Everflow nomenclature client-side.
- If prior week unavailable, note "first full week of tracking" instead.
- Cap "What to watch" to 2 sentences max.
# 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.
MCP mode: the agent calls Everflow directly, no API key to paste. (MCP is a connector that lets your AI tool talk to Everflow on its own.) Same client recap as the API version, the agent just pulls the numbers itself.
# role
You are an affiliate program account manager at {AGENCY_NAME}.
Write in a professional but conversational tone: clear, specific, no jargon.
Use the Everflow MCP tools to pull the numbers.
# inputs
advertiser_id = {ADVERTISER_ID}
agency_name = {AGENCY_NAME}
client_name = {CLIENT_NAME} # the advertiser or brand name
contact_name = {CLIENT_CONTACT_NAME} # optional, for the greeting
# steps
1. everflow:get_account_info
Confirm network currency and timezone.
2. everflow:run_performance_report
- dimensions: "affiliate,offer"
- filter to this one client: filters for advertiser {advertiser_id}
- window: last Monday through last Sunday
Capture clicks, conversions, revenue, and payout per partner and offer.
Run the same report for the week before so you can show week-over-week direction.
3. Compute program-level totals and the week-over-week comparison. Identify the top 3
offers and top 3 partners by revenue this week.
4. Write a client-facing recap email:
Subject: {CLIENT_NAME} affiliate program, week of [Monday date] recap
Greeting to {contact_name} or "there", then:
- The numbers: program totals plus the week-over-week line
- Top offers: a short numbered list with revenue and conversions
- Top partners: a short numbered list (use role descriptors if names are sensitive)
- What to watch this week: 1 to 2 sentences, or skip if nothing stands out
Sign off from {agency_name}. Return the email so I can read it before sending.
# guardrails
- Read-only. Never write anything back to Everflow.
- Round currency to whole dollars, conversion rate to 1 decimal.
# 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.
Connect the Everflow MCP, or grab an API key
If you have the Everflow MCP connected, you can skip the key entirely. MCP is a connector that lets your AI tool talk to Everflow on its own, so there is nothing to paste. No MCP yet? Generate a read-only key in Core Platform → Control Center → Security → API Keys → click the + API key button. Read-only on Reporting is enough.
Find your client's advertiser ID
In Everflow: Advertisers → find the client → copy the advertiser ID from the URL or the advertiser detail page.
Run the prompt
With MCP connected, just run the prompt as written. On the API tab, first replace {API_KEY}, {NETWORK_ID}, {ADVERTISER_ID}, and {AGENCY_NAME}, then run it.
Run it in Claude, ChatGPT, or Gemini
The recap lands in under 60 seconds, formatted as a ready-to-send email with a subject line included.
Schedule it weekly
Drop the prompt into Make, Zapier, or Google Apps Script. One workflow per client, triggered every Monday at 7 AM, so the recaps arrive in your inbox before you sit down.
Duplicate the prompt, swap {ADVERTISER_ID} and {CLIENT_NAME} for each client, and run them in sequence. With a scheduler like Make or Google Apps Script, you can trigger one workflow per client every Monday morning and have all recaps arrive in your inbox before 8 AM.
Yes. Add a line to the prompt: "Sign off with [your name], [agency name], [website], [phone]." You can also add a standard opening line like "Happy Monday!" or a branded header note to make the format consistent across all client recaps.
Add a guardrail line: "Refer to affiliates by traffic type only (e.g. cashback, content, email) rather than by name." Useful when the client relationship is sensitive or when you're managing publisher confidentiality.
Currency mixing across clients. Agencies running US, EU, and APAC clients see FX-mixed totals if they roll up across the book. The recipe defaults to per-client native currency. For multi-currency client rollups (agency P&L view), add an FX rate to the prompt or run one digest per currency.
On-hold / manual-scrub timing. Some agency-managed networks hold a percentage of conversions for review for 24–72 hours before releasing. Last week's released-now conversions backdate into the prior digest window. Rerun the prompt with the same window after the next scrub release; the recap numbers can shift by a few percent.
White-label branding. Agencies want their client-facing recap to look like the agency, not Everflow. The recipe's email template accepts a logo URL + footer block. Some agencies use Everflow's native white-label config for the deeper reporting view; the recipe's recap is the agency's overlay on top.
One client mega-week distorting the agency-roll-up. When one client doubles WoW because they launched a campaign, the agency's portfolio average looks great while the other nine clients are flat. The recipe surfaces per-client digests so the agency sees the spread, not just the average.
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.
One Tuesday email. Latest industry news plus new recipes the day they ship. Unsubscribe in one click.
Share what's working with the Everflow API. Our team will reach out about details, timelines, and next steps.