Theme
The dormant-partner reactivation list, with paused/seasonal/brand-new-affiliate false positives filtered out before it lands in your inbox.
A copy-paste prompt that 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 weekly on a cron.
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 (122 distinct accounts in the last 16 months) — the biggest partner-ops pain in the dataset, more-mentioned than fraud or leaderboards. 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…" — is 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. Paste it once, then run any recipe on top of it. Ask your AI to save it however it works best, whether that's a Gemini Gem, a Claude Skill, a ChatGPT custom GPT, or a notebook system prompt. Same content, your AI's format.
# 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.
v1.0 · tag
# 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.Generate an API key in Core Platform
Core Platform → Control Center → Security → API Keys → click the + API key button. Read-only on Reporting + Affiliates is enough. Make sure you're using 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.
Paste your keys into the prompt
Replace {API_KEY}, {NETWORK_ID}, {DAYS}, and {NEW_PARTNER_DAYS} in the block below.
Run it in Claude, ChatGPT, or Gemini
First run gives you the dormant list grouped by tier (high-priority reactivation, watch list, safe to offboard). The summary lands in 30 to 60 seconds.
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 step 6. 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.