Audit partners
Stop losing revenue to partners who quietly go dark. Get a clean reactivation list, with false positives already filtered out, delivered to your inbox every week.
Pulls every active partner with zero clicks and zero conversions in the last 30 days, filters out the false positives (paused, brand-new, seasonal, low-volume-but-high-quality), and emails you a clean list grouped by reactivation priority. Runs on a weekly schedule.
Every affiliate program has a long tail of partners who stopped sending traffic months ago and never got cleaned up. They sit in the partner list, look "approved," and quietly distort every average: your active-partner CVR, your per-partner payout, your "We have 800 partners" number on the sales deck. The fix is the same workflow at every company: open Reporting, filter to last 30 days, scroll for affiliates with zero clicks, decide one by one whether to reactivate, pause, or offboard. Hours of work, nobody's job, gets pushed to next quarter.
It comes up in roughly 1 in 5 customer conversations, the biggest partner-ops pain. The Everflow Reporting page can filter by zero-click partners, but the manual scrub (which is dormant intentionally vs needs outreach vs should be offboarded) is what nobody has 90 minutes for on a Wednesday. The recipe pulls every active partner with zero activity in the last 30 days, filters out the false positives (paused on purpose, brand-new, seasonal, low-volume-but-high-quality), and emails a clean reactivation/offboard list grouped by recommended action.
The workflow Everflow's own solutions engineers walk customers through on demos: "They haven't sent us any traffic in 30 days, we're going to deactivate them…" That’s exactly what this recipe automates. Same logic, runs weekly, surfaces the list before anyone has to remember to look.
Trying to activate and re-engage dormant affiliates… currently, we're not able to segment out based off of that activity. Do you have something like that?
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. Pulls every active partner with zero clicks/conversions in the window, then filters out paused, brand-new (under 30 days), and seasonal-pattern partners before tiering the rest by reactivation priority.
# role
You are an Everflow ops assistant.
# inputs
api_key = {API_KEY}
network_id = {NETWORK_ID}
days = {DAYS} # default 30
new_partner_days = {NEW_PARTNER_DAYS} # default 30
seasonal_lookback = 365 # for spotting Q4-only partners
min_lifetime_value = 500 # USD, partners under this = "low value"
# task
1. POST /v1/networks/affiliatestable
- body: { filters: { account_status: ["active"] } }
- returns the full active partner roster with affiliate_id + name +
network_affiliate_id + time_created
2. POST /v1/networks/reporting/entity
- body: { from: today - {days}, to: today,
columns: [{column: "affiliate"}],
query: {} }
- returns clicks + conversions per active partner over the window
3. Cross-reference: any partner from step 1 NOT in step 2's results,
OR present with clicks=0 AND conversions=0, is a dormancy candidate.
4. Apply false-positive filters. Exclude a partner if ANY are true:
- time_created < today - {new_partner_days}d (too new)
- account_status != "active" (paused or archived intentionally)
- they had clicks or conversions in the prior {days}d window before this one
(intermittent activity, not dormant)
5. Score remaining partners by reactivation priority. For each, also pull
their lifetime stats:
- POST /v1/networks/reporting/entity with from = time_created,
to = today, columns: [{column: "affiliate"}]
Tier them:
- tier_high = lifetime conversions >= 50 OR lifetime payout >= 5000
- tier_watch = lifetime conversions 5-49 OR lifetime payout 500-4999
- tier_offboard = lifetime conversions < 5 AND lifetime payout < 500
6. For seasonal detection, check the same partner's activity in the
same window one year ago (today - 365d to today - 365d + {days}d).
If they had >0 clicks then but 0 now, tag them "seasonal_check" and
move to tier_watch regardless of lifetime score.
7. Format an email digest grouped by tier. For each partner show:
- name, network_affiliate_id, days_since_last_click, lifetime_payout,
lifetime_conversions, account_manager (if available), seasonal_check tag
- link to the partner's page in Core Platform
8. Return Markdown summary so I can verify counts before sending.
# guardrails
- Do not include partners with account_status = "paused" or "rejected".
- Min-tenure: exclude partners with `time_created` < today - {new_partner_days} days (default 30). New partners haven't been on long enough to confirm dormancy, they're still in onboarding. Default 30d; tighten to 14d for mobile, loosen to 60d for e-com with longer ramp-up.
- Confirm any "dormant" verdict using two windows: last {days} days AND last {days}*2 days. A partner who shows dormant on the short window but had activity in the longer window is intermittent, not dormant: drop to tier_watch instead of tier_offboard.
- Do not double-count partners who appear in both step 1 and step 2 with
zero activity (they're the same row).
- If a partner has no clicks but has conversions (server-postback only),
they are NOT dormant. Skip them.
- Cap email digest at top 50 per tier. Larger lists overwhelm the AM.# role
You are an Everflow ops assistant.
# inputs
api_key = {API_KEY}
network_id = {NETWORK_ID}
days = {DAYS} # default 30
new_partner_days = {NEW_PARTNER_DAYS} # default 30
seasonal_lookback = 365 # for spotting Q4-only partners
min_lifetime_value = 500 # USD, partners under this = "low value"
# task
1. POST /v1/networks/affiliatestable
- body: { filters: { account_status: ["active"] } }
- returns the full active partner roster with affiliate_id + name +
network_affiliate_id + time_created
2. POST /v1/networks/reporting/entity
- body: { from: today - {days}, to: today,
columns: [{column: "affiliate"}],
query: {} }
- returns clicks + conversions per active partner over the window
3. Cross-reference: any partner from step 1 NOT in step 2's results,
OR present with clicks=0 AND conversions=0, is a dormancy candidate.
4. Apply false-positive filters. Exclude a partner if ANY are true:
- time_created < today - {new_partner_days}d (too new)
- account_status != "active" (paused or archived intentionally)
- they had clicks or conversions in the prior {days}d window before this one
(intermittent activity, not dormant)
5. Score remaining partners by reactivation priority. For each, also pull
their lifetime stats:
- POST /v1/networks/reporting/entity with from = time_created,
to = today, columns: [{column: "affiliate"}]
Tier them:
- tier_high = lifetime conversions >= 50 OR lifetime payout >= 5000
- tier_watch = lifetime conversions 5-49 OR lifetime payout 500-4999
- tier_offboard = lifetime conversions < 5 AND lifetime payout < 500
6. For seasonal detection, check the same partner's activity in the
same window one year ago (today - 365d to today - 365d + {days}d).
If they had >0 clicks then but 0 now, tag them "seasonal_check" and
move to tier_watch regardless of lifetime score.
7. Format an email digest grouped by tier. For each partner show:
- name, network_affiliate_id, days_since_last_click, lifetime_payout,
lifetime_conversions, account_manager (if available), seasonal_check tag
- link to the partner's page in Core Platform
8. Return Markdown summary so I can verify counts before sending.
# guardrails
- Do not include partners with account_status = "paused" or "rejected".
- Min-tenure: exclude partners with `time_created` < today - {new_partner_days} days (default 30). New partners haven't been on long enough to confirm dormancy, they're still in onboarding. Default 30d; tighten to 14d for mobile, loosen to 60d for e-com with longer ramp-up.
- Confirm any "dormant" verdict using two windows: last {days} days AND last {days}*2 days. A partner who shows dormant on the short window but had activity in the longer window is intermittent, not dormant: drop to tier_watch instead of tier_offboard.
- Do not double-count partners who appear in both step 1 and step 2 with
zero activity (they're the same row).
- If a partner has no clicks but has conversions (server-postback only),
they are NOT dormant. Skip them.
- Cap email digest at top 50 per tier. Larger lists overwhelm the AM.# role
You are an Everflow ops assistant.
# inputs
api_key = {API_KEY}
network_id = {NETWORK_ID}
days = {DAYS} # default 30
new_partner_days = {NEW_PARTNER_DAYS} # default 30
seasonal_lookback = 365 # for spotting Q4-only partners
min_lifetime_value = 500 # USD, partners under this = "low value"
# task
1. POST /v1/networks/affiliatestable
- body: { filters: { account_status: ["active"] } }
- returns the full active partner roster with affiliate_id + name +
network_affiliate_id + time_created
2. POST /v1/networks/reporting/entity
- body: { from: today - {days}, to: today,
columns: [{column: "affiliate"}],
query: {} }
- returns clicks + conversions per active partner over the window
3. Cross-reference: any partner from step 1 NOT in step 2's results,
OR present with clicks=0 AND conversions=0, is a dormancy candidate.
4. Apply false-positive filters. Exclude a partner if ANY are true:
- time_created < today - {new_partner_days}d (too new)
- account_status != "active" (paused or archived intentionally)
- they had clicks or conversions in the prior {days}d window before this one
(intermittent activity, not dormant)
5. Score remaining partners by reactivation priority. For each, also pull
their lifetime stats:
- POST /v1/networks/reporting/entity with from = time_created,
to = today, columns: [{column: "affiliate"}]
Tier them:
- tier_high = lifetime conversions >= 50 OR lifetime payout >= 5000
- tier_watch = lifetime conversions 5-49 OR lifetime payout 500-4999
- tier_offboard = lifetime conversions < 5 AND lifetime payout < 500
6. For seasonal detection, check the same partner's activity in the
same window one year ago (today - 365d to today - 365d + {days}d).
If they had >0 clicks then but 0 now, tag them "seasonal_check" and
move to tier_watch regardless of lifetime score.
7. Format an email digest grouped by tier. For each partner show:
- name, network_affiliate_id, days_since_last_click, lifetime_payout,
lifetime_conversions, account_manager (if available), seasonal_check tag
- link to the partner's page in Core Platform
8. Return Markdown summary so I can verify counts before sending.
# guardrails
- Do not include partners with account_status = "paused" or "rejected".
- Min-tenure: exclude partners with `time_created` < today - {new_partner_days} days (default 30). New partners haven't been on long enough to confirm dormancy, they're still in onboarding. Default 30d; tighten to 14d for mobile, loosen to 60d for e-com with longer ramp-up.
- Confirm any "dormant" verdict using two windows: last {days} days AND last {days}*2 days. A partner who shows dormant on the short window but had activity in the longer window is intermittent, not dormant: drop to tier_watch instead of tier_offboard.
- Do not double-count partners who appear in both step 1 and step 2 with
zero activity (they're the same row).
- If a partner has no clicks but has conversions (server-postback only),
they are NOT dormant. Skip them.
- Cap email digest at top 50 per tier. Larger lists overwhelm the AM.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 dormant-partner digest as the API version, the agent just pulls the numbers itself.
# role
You are an Everflow ops assistant. Use the Everflow MCP tools.
# inputs
days = {DAYS} # default 30
new_partner_days = {NEW_PARTNER_DAYS} # default 30
# steps
1. everflow:get_account_info
Confirm network currency and timezone.
2. everflow:run_performance_report
- dimensions: ["affiliate", "affiliate_status"]
- window: last {days} days
This returns clicks, conversions, and payout per partner, plus whether each partner is
active, paused, or archived. Keep only active partners.
3. A partner with zero clicks AND zero conversions in the window is a dormancy candidate.
Pull each candidate's lifetime totals with another everflow:run_performance_report over
a long window (since the partner started), so you can weigh how valuable they were.
4. Apply false-positive filters. Drop a partner from the dormant list if any are true:
- the partner was created in the last {new_partner_days} days (still onboarding)
- the partner is not active (paused or archived on purpose)
- the partner had clicks or conversions in the {days}-day window just before this one
(intermittent, not dormant)
- the partner has conversions but no clicks (server-postback only, not dormant)
5. Tier the remaining partners:
- high priority: lifetime conversions 50 or more, OR lifetime payout 5000 or more
- watch: lifetime conversions 5 to 49, OR lifetime payout 500 to 4999
- offboard: lifetime conversions under 5 AND lifetime payout under 500
6. Seasonal check: compare the same partner's activity to the same window one year ago.
If they had traffic then but none now, tag them "seasonal check" and move them to watch.
7. Format an email digest grouped by tier. For each partner show its name and ID, days
since last click, lifetime payout and conversions, account manager if available, and
the seasonal-check tag. Return a Markdown summary so I can verify counts before sending.
# guardrails
- Read-only. Never write anything back to Everflow.
- Confirm any "dormant" call against two windows: the last {days} days and the last
{days} times 2 days. Active in the longer window means intermittent, not dormant: move
to watch instead of offboard.
- Cap the digest at the top 50 partners per tier so the list stays usable.
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 and Affiliates is enough, and use your Network Operating Partner key, not the Reporting key.
Decide your dormancy window
Default is 30 days. Lead-gen and iGaming usually run 30. E-com brands with longer purchase cycles can run 60. Mobile usually runs 14.
Decide your "new partner" guardrail
Partners onboarded in the last 30 days get excluded automatically so you don't chase someone who hasn't even launched yet.
Run the prompt
With MCP connected, just run the prompt as written. On the API tab, first replace {API_KEY}, {NETWORK_ID}, {DAYS}, and {NEW_PARTNER_DAYS}, then run it.
Read it in Claude, ChatGPT, or Gemini
First run gives you the dormant list grouped by tier: high-priority reactivation, watch list, and safe to offboard. The summary lands in 30 to 60 seconds. The same prompt works in any of the three.
Yes. Reporting can group by affiliate and filter for zero clicks in a window. What it doesn't do is the scrub layer: separate dormant-on-purpose from genuinely-needs-outreach from should-be-offboarded, exclude brand-new partners (<30 days) who don't have a baseline yet, filter low-volume-but-high-quality partners who legitimately ran zero this month, and group the remainder by recommended action. The recipe handles all of that and drops the list as a single email instead of a manual filter-and-scroll workflow.
Skipped by the new-partner guardrail. Anyone added in the last 30 days (configurable) is excluded so you don't chase someone who's still in onboarding.
Handled by the seasonal guardrail. The prompt checks the same date window one year ago. If a partner had activity then but is dormant now, they get tagged seasonal_check and moved to the watch list regardless of lifetime score, so you don't accidentally offboard your Black Friday star in March.
False positives the recipe handles. Paused on purpose (network operator put them on hold, surfaced as "paused, no action"). Brand-new (<30 days history, no baseline, listed separately under "new this period"). Seasonal (zero activity is expected for this time of year, flagged by year-over-year comparison if 12+ months of history). Low-volume-but-high-quality (partners with high CVR and small but consistent revenue; the recipe excludes from "offboard" recommendations if last 90 days revenue > $500).
What the recipe doesn't do. It doesn't make the offboard decision for you. It groups partners into "reactivate / pause / offboard" buckets with reasoning, then waits for human review. The whole point is making the manual scrub take 10 minutes instead of 90, not bypassing the judgment call.
Bulk action support. Some networks (large-network-scale) want to bulk-inactivate hundreds of dormant partners at once. The recipe outputs the list in API-callable format so the bulk action can be a follow-on script. Don't run that auto-fire, keep the human review step.
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.