Two prompts: first, rank your active partners by this-month payout so you know who to look at. Then pull a full plain-language snapshot for any one of them: revenue, clicks, conversions, trend. The answer to the question you keep getting in Slack, in 30 seconds.
Every affiliate manager has the same Slack moment. "Hey, how's Partner X doing this month?" The honest answer is "Let me pull that up," which means navigating to Reporting, scoping the partner, picking month-to-date, eyeballing the table, screenshotting, pasting in Slack with one sentence of context. Five minutes per question. Three or four questions per week. Most never get answered with the same depth twice.
The pattern shows up in customer calls and emails. Partner ops leads emailing Everflow asking which partners to look at this month, AMs walking through monthly syncs without being able to answer per-partner questions live without leaving the call to pull a report. Roughly 1 in 50 customer calls names a partner and asks how they're doing this month. That sounds small until you realize every program manager runs that prompt mentally on themselves several times a week. The recipe externalizes it.
Everflow's Reporting page can answer this. The recipe doesn't beat it on data, it beats it on how fast you can ask. Part 1 narrows the universe (most managers know 3-5 partners by name, but the top mover this month may not be one of them). Part 2 returns the full per-partner read in plain language, ready to paste into Slack.
Aside from [our top partner], only a few partners have driven conversions this month. Are there any specific [partners we should look at]…
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.txtTwo prompts in this recipe. Part 1 ranks your active partners this month. Scan it, pick the one you want, grab their affiliate ID. The scan matters even if you think you know who to ask about: most managers can name 3-5 partners off the top of their head, but the top mover this month may not be one of them. Part 2 takes that ID and writes the full snapshot in plain language, ready to paste into the Slack thread it came from.
# PART 1: Find the right partner
# Run this first to get a ranked list of active partners for the current month.
# role
You are an Everflow reporting assistant.
# 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}
# task
1. Compute MTD range: from = first day of current calendar month, to = today.
2. POST /v1/networks/reporting/entity/table
body: {
from: "{from}", to: "{to}",
columns: [{"column":"affiliate"}],
timezone_id: 80, currency_id: "USD"
}
3. Filter to affiliates with payout > 0 this month.
4. Return a numbered list:
Rank | Affiliate Name | Affiliate ID | MTD Payout | MTD Conversions | MTD Clicks
After the list: "Copy the Affiliate ID of the partner you want to dig into, then run Part 2."
# guardrails
- Show max 25 partners. If more, note "showing top 25 by MTD payout."
- Round payout to whole dollars.
────────────────────────────────────────────────────────────
# PART 2: Full MTD snapshot for one partner
# role
You are an Everflow reporting assistant. Write in plain language: clear and
specific, suitable to read aloud or paste into a Slack message.
# inputs
api_key = {API_KEY}
network_id = {NETWORK_ID}
affiliate_id = {AFFILIATE_ID} # from the Part 1 list
# task
1. MTD range (this month + prior month for MoM).
2. POST /v1/networks/reporting/entity/table with columns [offer, sub1], filtered to affiliate_id.
3. Compute totals + top 3 offers + MoM deltas (clicks, conversions, revenue).
4. Write a plain-language summary in this format:
[Affiliate Name]: Month to Date ([Month Year])
[2-3 sentence narrative: headline number, MoM direction, one notable thing]
Numbers
Clicks / Conversions / CVR / Revenue / Payout / EPC
vs last month: Clicks {+/-X%} · Conversions {+/-X%} · Revenue {+/-X%}
Top offers this month
1. {offer}: ${revenue} · {conversions} conversions
2. ...
3. ...
Anything to watch
[1 sentence max, or "Nothing flagged, program running normally."]
# guardrails
- Round revenue/payout to whole dollars; CVR/EPC to 2 decimals.
- No activity MTD: return "No activity recorded: check if active or if tracking is set up correctly."
- No prior month data: note "No prior month data available" instead of percentages.
- Narrative = 2-3 sentences max. "Anything to watch" = 1 sentence max.
- Don't invent a concern. If nothing notable, say so.
# 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.
# PART 1: Find the right partner
# Run this first to get a ranked list of active partners for the current month.
# role
You are an Everflow reporting assistant.
# 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}
# task
1. Compute MTD range: from = first day of current calendar month, to = today.
2. POST /v1/networks/reporting/entity/table
body: {
from: "{from}", to: "{to}",
columns: [{"column":"affiliate"}],
timezone_id: 80, currency_id: "USD"
}
3. Filter to affiliates with payout > 0 this month.
4. Return a numbered list:
Rank | Affiliate Name | Affiliate ID | MTD Payout | MTD Conversions | MTD Clicks
After the list: "Copy the Affiliate ID of the partner you want to dig into, then run Part 2."
# guardrails
- Show max 25 partners. If more, note "showing top 25 by MTD payout."
- Round payout to whole dollars.
────────────────────────────────────────────────────────────
# PART 2: Full MTD snapshot for one partner
# role
You are an Everflow reporting assistant. Write in plain language: clear and
specific, suitable to read aloud or paste into a Slack message.
# inputs
api_key = {API_KEY}
network_id = {NETWORK_ID}
affiliate_id = {AFFILIATE_ID} # from the Part 1 list
# task
1. MTD range (this month + prior month for MoM).
2. POST /v1/networks/reporting/entity/table with columns [offer, sub1], filtered to affiliate_id.
3. Compute totals + top 3 offers + MoM deltas (clicks, conversions, revenue).
4. Write a plain-language summary in this format:
[Affiliate Name]: Month to Date ([Month Year])
[2-3 sentence narrative: headline number, MoM direction, one notable thing]
Numbers
Clicks / Conversions / CVR / Revenue / Payout / EPC
vs last month: Clicks {+/-X%} · Conversions {+/-X%} · Revenue {+/-X%}
Top offers this month
1. {offer}: ${revenue} · {conversions} conversions
2. ...
3. ...
Anything to watch
[1 sentence max, or "Nothing flagged, program running normally."]
# guardrails
- Round revenue/payout to whole dollars; CVR/EPC to 2 decimals.
- No activity MTD: return "No activity recorded: check if active or if tracking is set up correctly."
- No prior month data: note "No prior month data available" instead of percentages.
- Narrative = 2-3 sentences max. "Anything to watch" = 1 sentence max.
- Don't invent a concern. If nothing notable, say so.
# 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.
# PART 1: Find the right partner
# Run this first to get a ranked list of active partners for the current month.
# role
You are an Everflow reporting assistant.
# 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}
# task
1. Compute MTD range: from = first day of current calendar month, to = today.
2. POST /v1/networks/reporting/entity/table
body: {
from: "{from}", to: "{to}",
columns: [{"column":"affiliate"}],
timezone_id: 80, currency_id: "USD"
}
3. Filter to affiliates with payout > 0 this month.
4. Return a numbered list:
Rank | Affiliate Name | Affiliate ID | MTD Payout | MTD Conversions | MTD Clicks
After the list: "Copy the Affiliate ID of the partner you want to dig into, then run Part 2."
# guardrails
- Show max 25 partners. If more, note "showing top 25 by MTD payout."
- Round payout to whole dollars.
────────────────────────────────────────────────────────────
# PART 2: Full MTD snapshot for one partner
# role
You are an Everflow reporting assistant. Write in plain language: clear and
specific, suitable to read aloud or paste into a Slack message.
# inputs
api_key = {API_KEY}
network_id = {NETWORK_ID}
affiliate_id = {AFFILIATE_ID} # from the Part 1 list
# task
1. MTD range (this month + prior month for MoM).
2. POST /v1/networks/reporting/entity/table with columns [offer, sub1], filtered to affiliate_id.
3. Compute totals + top 3 offers + MoM deltas (clicks, conversions, revenue).
4. Write a plain-language summary in this format:
[Affiliate Name]: Month to Date ([Month Year])
[2-3 sentence narrative: headline number, MoM direction, one notable thing]
Numbers
Clicks / Conversions / CVR / Revenue / Payout / EPC
vs last month: Clicks {+/-X%} · Conversions {+/-X%} · Revenue {+/-X%}
Top offers this month
1. {offer}: ${revenue} · {conversions} conversions
2. ...
3. ...
Anything to watch
[1 sentence max, or "Nothing flagged, program running normally."]
# guardrails
- Round revenue/payout to whole dollars; CVR/EPC to 2 decimals.
- No activity MTD: return "No activity recorded: check if active or if tracking is set up correctly."
- No prior month data: note "No prior month data available" instead of percentages.
- Narrative = 2-3 sentences max. "Anything to watch" = 1 sentence max.
- Don't invent a concern. If nothing notable, say so.
# 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.
Get any partner's month-to-date numbers in plain language.
Using the Everflow MCP server:
1. get_account_info first.
2. Ranking: run_performance_report grouped by affiliate, first-of-month to today, sorted by payout desc.
Return Rank, Affiliate Name, Affiliate ID, MTD Payout, MTD Conversions, MTD Clicks (top 25).
3. I'll pick an Affiliate ID.
4. Snapshot: get_affiliate with include=activity for that ID, plus run_performance_report this month
and last month (filtered to that affiliate) for MoM. Write a short plain-language summary:
headline number, MoM direction, clicks/conversions/CVR/revenue/payout/EPC, top 3 offers,
and one "anything to watch" line (or "nothing flagged").
Whole dollars; CVR/EPC 2 decimals; narrative 2-3 sentences; don't invent concerns.
# 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.
Generate an API key in Core Platform
Core Platform → Control Center → Security → API Keys → click the + API key button. Read-only on Reporting is enough.
Rank your active partners
Run the first prompt. It returns a ranked list of your active partners sorted by this-month payout. Scan the list and find the partner you want to look at.
Copy the affiliate ID
From the ranked list, copy the affiliate ID next to the partner you want. You will drop this into the second prompt.
Add the affiliate ID to the second prompt
Replace {AFFILIATE_ID} in the second prompt block with the ID you just copied.
Run the second prompt
The full MTD snapshot lands in under 30 seconds: headline numbers, top 3 offers, month-over-month comparison, and a one-sentence callout on anything worth watching.
Because knowing which affiliate ID to look up requires logging into Everflow first, which defeats the purpose of the recipe. Part 1 gives you a ranked list of active partners in the same session so you never have to leave your AI tool to find the ID.
Yes. Run Part 2 once per affiliate ID. Paste the outputs side by side for a comparison. If you're doing this regularly for a fixed list of VIP partners, build a template with multiple Part 2 calls pre-loaded with each ID.
The AI extrapolates from your current daily average (MTD revenue ÷ days elapsed) to project the full-month total. It's an estimate, not a guarantee. Useful for quick directional context, not for financial commitments.
Partner Self-Serve: The same shape works for partners self-serving the answer. Swap affiliate_id = self and a partner-scoped API key, and any partner can run this recipe against their own performance, no AM needed. Useful for networks that want partners to answer “How am I doing?” on their own. Everflow reps have asked for this pattern on 6+ calls.
No activity yet this month. If a partner has zero activity for the month, the prompt returns a check-tracking message rather than a zero-everywhere snapshot. Saves you from sending an inadvertent "your partner is dead" report when the real problem is the partner reset their pixel last Thursday.
Multi-network managers. Agency operators managing 5+ Everflow accounts can run the recipe against each network with the right credential. The recipe does not aggregate across networks (per-network credentials, per-network output). That is a separate join recipe.
Why "this month" not full date range. The recipe defaults to month-to-date because that is the question that gets asked. Custom ranges (last 7 days, last week, last quarter) work by swapping {WINDOW} in the second prompt. Most users never change the default after first run.
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.