AI Playbook/Recipe

Show your boss

What % of last month's payouts went to my top 10 partners?

The 80/20 question, answered from your own data: how much of last month's payouts went to your top 10 partners, and how exposed that leaves you if one of them leaves.

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
~15 min to ship

Medium

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

Quick Answer

Pulls last month's payout per partner, sorts it yourself rather than trusting the server's order, sums the top 10 and returns the share as a single number. Handles top-5 / top-20, last quarter, last year with one input swap. Drops a one-line answer and a breakdown into Slack or your inbox, so the answer is ready before someone asks for it in a Monday call.
Everflow, Slack, Email
This prompt uses
02

The Pain

"What percent of last month's payouts went to our top 10 partners?" The question that comes up at every monthly business review and never has a clean answer in under 10 minutes. Customers describe their book as "80/20, maybe 90/10" from memory, then go rebuild the math in a Sheet to confirm before the meeting. The Reporting page can group by affiliate and sort by payout. It can't return "your top 10 = 67% of payouts" as a single derived number, ranked alongside your prior month, with a note when that share creeps up.

The pattern
Roughly 1 in 50 customers raise the 80/20 split, usually as some version of "20% of our partners produce 80% of our volume." The math is rarely on a dashboard.

The 80/20 rule is pretty present in our program. 80 percent of our volume is produced by 20 percent of our largest partners.

VP of operations, lead-gen marketplace (home services)
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. Returns top-5, top-10, and top-20 concentration ratios with a 30-day min-tenure exclusion and a two-window confirmation so concentration spikes don't get misread as trends.

# role
You are an Everflow concentration-risk 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}
top_n         = {TOP_N}             # default 10. also report top_5 and top_20 alongside.
window        = {WINDOW}             # last_month | last_quarter | last_year | trailing_30d
slack_webhook = {SLACK_WEBHOOK_URL}

# task
1. Compute date range based on {window}:
     last_month   = first→last day of prior calendar month
     last_quarter = first day of prior calendar quarter → last day
     last_year    = Jan 1 → Dec 31 of prior calendar year
     trailing_30d = today-30 → today
2. POST /v1/networks/reporting/entity/table
     body: {
       from: "{from}", to: "{to}",
       columns: [{"column":"affiliate"}],
       query: { filters: [], exclusions: [] },
timezone_id: 80,             # America/New_York; swap if needed
       currency_id: "USD"
     }
3. Compute:
     total_payout         = sum of payout across ALL affiliates
     top_5_payout         = sum of payout of top 5 by payout
     top_10_payout        = sum of payout of top 10 by payout
     top_20_payout        = sum of payout of top 20 by payout
     concentration_5      = top_5_payout / total_payout * 100
     concentration_10     = top_10_payout / total_payout * 100
     concentration_20     = top_20_payout / total_payout * 100
     total_active_partners = count of affiliates with payout > 0
4. Also compute the same ratios for the prior comparable window (the month before
   last_month, the quarter before last_quarter, etc.) so you can show direction.
5. Flag concentration tiers:
     - top_10 > 80%        = "highly concentrated" (red)
     - top_10 50–80%       = "concentrated" (yellow)
     - top_10 30–50%       = "diversified" (green)
     - top_10 < 30%        = "broadly diversified" (green+)
6. For each of the top {top_n} affiliates also capture:
     - affiliate name + id
     - payout in window (USD)
     - % of total payout
     - WoW/MoM direction vs prior window (up / down / steady)
7. Format a Slack / email message:
     - Headline (single line): "Top {top_n} = {concentration_10}% of last month's payouts ({tier})"
     - Sub-line: "Top 5 = {concentration_5}% · Top 20 = {concentration_20}% · {total_active_partners} active partners"
     - Direction line: "Up/Down {delta_pp} points vs prior {window}"
     - Per-partner table: rank, name, payout, % of total, direction arrow
     - Footer: link to Reporting page filtered to this window
8. POST to slack_webhook.
9. Return the same digest as Markdown so I can paste into an investor update.

# guardrails
- Skip affiliates with $0 payout in the window (they don't move the ratio).
- Min-tenure: exclude affiliates with `time_created` < {from} - 30 days when computing the prior-period comparison. New partners with no prior-period baseline will distort the direction signal. Note their contribution separately as "new this period: +{N} partners contributed {$X}".
- Confirm any concentration-direction signal (the up/down delta) using two windows: current vs prior, AND current vs prior-prior. A one-month swing without the longer-window context is noise.
- Round currency to whole dollars; round percentages to 1 decimal.
- Use base currency only (no FX mixing, API returns USD-converted).
- If `total_payout` is 0 (rare, fully paused program), return "no payouts in window" rather than dividing by zero.
- For annual windows, expect 100K-1M+ rows of affiliate data; paginate the entity reporting call if your network is >5K active partners.

# 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.

   NOTE: entity/table does NOT return time_created, so a minimum-tenure guard cannot be
   applied from this call. Get it from GET /v1/networks/affiliates?page=1&page_size=5000 and
   join on columns[0].id. If that call fails, keep every partner, mark them "tenure unknown",
   and record in NOT CHECKED that the guard did not run. Never drop it silently.
04

The Steps

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.

Pick your time window

Default is last full month. Quarterly and annual are common alternates. Trailing-30d works for ongoing monitoring.

Pick your "top N" tier

Default is top 10. Top-5 is the more aggressive concentration cut (red flag if >50%). Top-20 is the more forgiving cut (yellow flag if >80%).

Run the prompt

With MCP connected, just run the prompt as written. On the API tab, first replace {API_KEY}, {NETWORK_ID}, {TOP_N} (default 10), {WINDOW} (default last_month), and your delivery channel, then run it.

Schedule it monthly

Drop the prompt into Make, Zapier, or Apps Script. Run it on the 2nd of each month so the prior month's payouts have fully settled, and the report lands before your monthly business review.

05

Sample Output

Everflow
Everflow Reports <reports@everflow.io>
to me  ·  Tue, May 1 at 8:00 AM
MONTHLY
Acme Affiliate Program · concentration check · April 2026
Top 10 = 64.2% of last month's payouts · 🟡 concentrated
Top 5 = 41.8% · Top 20 = 82.1% · 187 active partners
↓ -3.2 points vs March, program diversifying
Rank · Partner Payout % share Δ MoM ────────────────────────────────────────────────────────────────── 1. Push-traffic aggregator $48,200 11.4% ▼ 2. Tier-1 search publisher $39,800 9.4% ▲ 3. Coupon network $31,200 7.4% ▼ 4. Native widget partner $27,900 6.6% ▲ 5. Email-blast specialist $24,100 5.7% ─ 6. Influencer creator network $19,200 4.5% ▲ 7. Display retargeter $17,800 4.2% ▼ 8. Comparison site $15,400 3.6% ─ 9. Cashback site $14,100 3.3% ▼ 10. SEO content publisher $12,300 2.9% ▲ Top 10 subtotal: $250,000 · Total program payout: $389,400
Tier-1 search publisher up 18% MoM: single-partner reliance increasing. Watch for next month's check.
✓ Program added 14 new partners this month, contributing $8,400 of payout. The long tail is growing.
06

FAQ

Real questions, real answers
What share should I actually worry about?
There is no industry threshold, and anyone who quotes you one is guessing. What matters is whether you could absorb losing the top one or two. The recipe colour-codes tiers so you can see the shape at a glance - top-10 above 80% means a single departure moves your whole number, 50-80% means it hurts, under 50% means the program carries itself. Read it against how replaceable those partners actually are, not against a benchmark.
Why payouts and not revenue?

Payouts represent your actual cost-to-acquire allocation. Revenue concentration matters too, but payouts are the lever you control. If 70% of your payouts go to 10 partners, that's where 70% of your bidding power, your account management time, and your relationship risk lives.

Why top 10? Why not top 5 or top 20?
Top 10 is a convention, not a rule - it is just the cut most people reach for when they say 80/20. The recipe returns top-5, top-10 and top-20 together so you do not have to pick. Top-5 is the harsh read, top-20 the forgiving one, and the gap between them tells you more than any single number: if top-5 and top-20 are close, your volume is concentrated in a handful of partners whatever cut you use.
06b

Notes & Counter-Cases

Edge cases, gotchas, and things to watch.

Vocabulary note for the prompt output. Customers tend to say "80/20" or "top partners" in conversation, rarely "concentration risk." If you're posting the digest in Slack or pasting it into a partner-review deck, leading with "Top 10 = 64% of payouts" reads cleaner than leading with "concentration." The recipe outputs both; pick the framing that fits where it lands.

Structural vs fixable concentration. Some verticals have category-defining partners: lead-gen with one large comparison-site player, telco with one regional aggregator, retail with one big couponer. Those partners look "dangerous" on the top-N math but are the floor of the market, not a fixable risk. The recipe surfaces the ratio. Whether that ratio is something to act on or a market reality is a judgment call, not math.

Top-5 vs top-20 cuts. Top-5 = 50% is a red flag in most programs. Top-20 = 80% is the forgiving cut. Run all three (top-5, top-10, top-20) in one prompt. The spread tells you whether you have a "few whales" or a "long tail" shape.

Mover detection. Run the same prompt against a 3-month rolling window and flag when the top-10 share creeps up by more than 5 percentage points month-over-month. That’s the early signal that you're becoming more concentrated, not less. Re-run monthly and watch the trend, not just the absolute.

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.

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.