Show your boss
Volume is the easy number to report. Quality hides one event deeper. This report puts every funnel event side by side across key timeframes, so you can see which growth is real and which is just noise.
A read-only report that pulls any Everflow event you care about, not just the top-line conversion, across the windows that matter (this month versus the same month last year, last month versus last year, quarter to date, last quarter) and shows the change for each. So instead of demo requests are down 5%,
you see one level deeper: requests down, but qualified requests down 19% while traffic is up 158%. That's the real story, and Everflow's built-in Variance Report can't show it today because it can't filter by event.
Volume is a vanity number. Quality is the truth, and it hides one level down.
Here's a shape that happens all the time. Traffic is up huge year over year, the top of the funnel looks great, and leadership assumes things are healthy. Then you look one event deeper and the qualified leads are actually down. You grew the noise, not the pipeline.
The reason this is hard to catch: most teams compare the top-line number (demo requests, signups, leads). But a lead isn't a qualified lead, which isn't a sales-qualified lead, which isn't an opportunity. A spike in generic signups can mask a drop in the events that actually move toward revenue. You need to compare the specific event, across time, side by side.
Everflow has a Variance Report, but it can't filter by event today. So you're stuck comparing demo requests when what you needed was the layer below. This lightweight spreadsheet script bridges the gap, pulling each event across each time window and refreshing itself on every run.
An event in Everflow is any action you fire as a conversion: a signup, a qualified lead, a stage change pushed from your CRM. This recipe compares any of those events over time, so you can see where momentum is real versus just volume.
Picture a segment up 158 percent on traffic year over year, still trending behind last year on the events that actually matter. The raw lead count hides it completely. That gap is the exact moment this report earns its keep.
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. It compares specific funnel events, not just the top-line conversion, across each time window and reports the change for each. Tuned to flag tiny denominators so a 1-to-2 move does not read like a trend.
Paste this prompt into Claude. Replace {API_KEY} and {NETWORK_ID} with your values, and edit the events list to your own funnel.
# role
You are an Everflow reporting assistant. Build me an event variance report
in Google Sheets, plus an Apps Script that refreshes it on each run.
# inputs
api_key = {API_KEY}
network_id = {NETWORK_ID}
timezone_id = 80 # America/Los_Angeles; change to yours
currency_id = USD
# what I want
A table that compares specific funnel EVENTS (not just the top-line conversion) across
time windows, and shows the percent change for each. One row per event, columns grouped
by window.
# my quality ladder (events, in funnel order) - edit these to your own
# A CRM (HubSpot, Salesforce) usually fires these stage changes into Everflow as events.
events = [
{ name: "Leads", match: "conversion" }, # base conversion
{ name: "MQLs", match: "event", event_id: {MQL_EVENT_ID} },
{ name: "SQLs", match: "event", event_id: {SQL_EVENT_ID} },
{ name: "Opportunities", match: "event", event_id: {OPP_EVENT_ID} },
{ name: "Customers", match: "event", event_id: {CUSTOMER_EVENT_ID} }
]
# segment (the filter that defines this report) - pick one or combine, or leave empty
segment_filters = [
# { "filter_id_value": "{OFFER_ID}", "resource_type": "offer" },
# { "filter_id_value": "{LABEL}", "resource_type": "label" },
]
# windows (compute these dates relative to today)
MTD = this month start through today vs MTDLY = same span, last year
QTD = this quarter start through today vs QTDLY = same span, last year
# how to pull each number
- Clicks and base conversions ("Leads"):
POST /v1/networks/reporting/entity/table
body: { from, to, timezone_id, currency_id, columns:[{column:"offer"}],
query:{ filters: segment_filters } }
clicks = sum(row.reporting.total_click); leads = sum(row.reporting.cv)
- Event-level counts (MQL, SQL, Opportunity, Customer):
POST /v1/networks/reporting/postconversions
body: { from, to, timezone_id, currency_id, columns:[{column:"event_name"}],
query:{ filters: segment_filters } }
for each row: match the row's event id to my events[] and sum row.reporting.event
# output
Build a sheet "Event Comparison" with one row per event and, for each window pair, three
columns: Current, Last Year, percent change. Add a "Report Legend" block that spells out
the exact date range behind every abbreviation (MTD, MTDLY, QTD, QTDLY).
# guardrails
- Run the windows CONCURRENTLY, not one after another. This is 8 calls total
(2 per window x 4 windows); fire them in parallel and assemble the table once
they all return. Never loop one call per event - one call per window returns
every event at once.
- Percent change = (current minus prior) divided by prior. If prior is 0, show "new"
instead of a giant percentage.
- Small-base floor: if prior is under 5, show the raw counts and label the change
"low base" instead of a huge percentage.
- Event counts include every event the reporting endpoint returns. Everflow's reporting
filters have no working event-status filter, so do NOT claim "approved only" in the
output. If your funnel has meaningful review lag, say so next to the number.
- Read-only. Never write back to Everflow.
- Use the short keys in headers plus the legend; full labels are too wide.
Paste this prompt into Claude. Replace {API_KEY} and {NETWORK_ID} with your values, and edit the events list to your own funnel.
# role
You are an Everflow reporting assistant. Build me an event variance report
in Google Sheets, plus an Apps Script that refreshes it on each run.
# inputs
api_key = {API_KEY}
network_id = {NETWORK_ID}
timezone_id = 80 # America/Los_Angeles; change to yours
currency_id = USD
# what I want
A table that compares specific funnel EVENTS (not just the top-line conversion) across
time windows, and shows the percent change for each. One row per event, columns grouped
by window.
# my quality ladder (events, in funnel order) - edit these to your own
# A CRM (HubSpot, Salesforce) usually fires these stage changes into Everflow as events.
events = [
{ name: "Leads", match: "conversion" }, # base conversion
{ name: "MQLs", match: "event", event_id: {MQL_EVENT_ID} },
{ name: "SQLs", match: "event", event_id: {SQL_EVENT_ID} },
{ name: "Opportunities", match: "event", event_id: {OPP_EVENT_ID} },
{ name: "Customers", match: "event", event_id: {CUSTOMER_EVENT_ID} }
]
# segment (the filter that defines this report) - pick one or combine, or leave empty
segment_filters = [
# { "filter_id_value": "{OFFER_ID}", "resource_type": "offer" },
# { "filter_id_value": "{LABEL}", "resource_type": "label" },
]
# windows (compute these dates relative to today)
MTD = this month start through today vs MTDLY = same span, last year
QTD = this quarter start through today vs QTDLY = same span, last year
# how to pull each number
- Clicks and base conversions ("Leads"):
POST /v1/networks/reporting/entity/table
body: { from, to, timezone_id, currency_id, columns:[{column:"offer"}],
query:{ filters: segment_filters } }
clicks = sum(row.reporting.total_click); leads = sum(row.reporting.cv)
- Event-level counts (MQL, SQL, Opportunity, Customer):
POST /v1/networks/reporting/postconversions
body: { from, to, timezone_id, currency_id, columns:[{column:"event_name"}],
query:{ filters: segment_filters } }
for each row: match the row's event id to my events[] and sum row.reporting.event
# output
Build a sheet "Event Comparison" with one row per event and, for each window pair, three
columns: Current, Last Year, percent change. Add a "Report Legend" block that spells out
the exact date range behind every abbreviation (MTD, MTDLY, QTD, QTDLY).
# guardrails
- Run the windows CONCURRENTLY, not one after another. This is 8 calls total
(2 per window x 4 windows); fire them in parallel and assemble the table once
they all return. Never loop one call per event - one call per window returns
every event at once.
- Percent change = (current minus prior) divided by prior. If prior is 0, show "new"
instead of a giant percentage.
- Small-base floor: if prior is under 5, show the raw counts and label the change
"low base" instead of a huge percentage.
- Event counts include every event the reporting endpoint returns. Everflow's reporting
filters have no working event-status filter, so do NOT claim "approved only" in the
output. If your funnel has meaningful review lag, say so next to the number.
- Read-only. Never write back to Everflow.
- Use the short keys in headers plus the legend; full labels are too wide.
Paste this prompt into Claude. Replace {API_KEY} and {NETWORK_ID} with your values, and edit the events list to your own funnel.
# role
You are an Everflow reporting assistant. Build me an event variance report
in Google Sheets, plus an Apps Script that refreshes it on each run.
# inputs
api_key = {API_KEY}
network_id = {NETWORK_ID}
timezone_id = 80 # America/Los_Angeles; change to yours
currency_id = USD
# what I want
A table that compares specific funnel EVENTS (not just the top-line conversion) across
time windows, and shows the percent change for each. One row per event, columns grouped
by window.
# my quality ladder (events, in funnel order) - edit these to your own
# A CRM (HubSpot, Salesforce) usually fires these stage changes into Everflow as events.
events = [
{ name: "Leads", match: "conversion" }, # base conversion
{ name: "MQLs", match: "event", event_id: {MQL_EVENT_ID} },
{ name: "SQLs", match: "event", event_id: {SQL_EVENT_ID} },
{ name: "Opportunities", match: "event", event_id: {OPP_EVENT_ID} },
{ name: "Customers", match: "event", event_id: {CUSTOMER_EVENT_ID} }
]
# segment (the filter that defines this report) - pick one or combine, or leave empty
segment_filters = [
# { "filter_id_value": "{OFFER_ID}", "resource_type": "offer" },
# { "filter_id_value": "{LABEL}", "resource_type": "label" },
]
# windows (compute these dates relative to today)
MTD = this month start through today vs MTDLY = same span, last year
QTD = this quarter start through today vs QTDLY = same span, last year
# how to pull each number
- Clicks and base conversions ("Leads"):
POST /v1/networks/reporting/entity/table
body: { from, to, timezone_id, currency_id, columns:[{column:"offer"}],
query:{ filters: segment_filters } }
clicks = sum(row.reporting.total_click); leads = sum(row.reporting.cv)
- Event-level counts (MQL, SQL, Opportunity, Customer):
POST /v1/networks/reporting/postconversions
body: { from, to, timezone_id, currency_id, columns:[{column:"event_name"}],
query:{ filters: segment_filters } }
for each row: match the row's event id to my events[] and sum row.reporting.event
# output
Build a sheet "Event Comparison" with one row per event and, for each window pair, three
columns: Current, Last Year, percent change. Add a "Report Legend" block that spells out
the exact date range behind every abbreviation (MTD, MTDLY, QTD, QTDLY).
# guardrails
- Run the windows CONCURRENTLY, not one after another. This is 8 calls total
(2 per window x 4 windows); fire them in parallel and assemble the table once
they all return. Never loop one call per event - one call per window returns
every event at once.
- Percent change = (current minus prior) divided by prior. If prior is 0, show "new"
instead of a giant percentage.
- Small-base floor: if prior is under 5, show the raw counts and label the change
"low base" instead of a huge percentage.
- Event counts include every event the reporting endpoint returns. Everflow's reporting
filters have no working event-status filter, so do NOT claim "approved only" in the
output. If your funnel has meaningful review lag, say so next to the number.
- Read-only. Never write back to Everflow.
- Use the short keys in headers plus the legend; full labels are too wide.
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.) The Everflow MCP can pull the event counts and clicks for each window and build the variance table for you, no spreadsheet wiring on the first pass.
## STEP 0 — Ingest the Everflow docs first
Before anything else, fetch and read https://developers.everflow.io/llms.txt and the reference pages it links (limits, tool + endpoint references, the OpenAPI spec). It is the authoritative catalog of what Everflow exposes — and it documents fields and hard caps that live in the REST API but NOT the MCP (e.g. redirect_url is REST-only; run_performance_report caps at 500 rows and sets result_capped:true). Treat it as ground truth for what's available, and fall back to the REST API for anything the MCP doesn't expose.
# role
You are an Everflow reporting assistant. Build me an event variance report.
Use the Everflow MCP tools to pull the data directly.
# what I want
A table that compares specific funnel EVENTS (not just the top-line conversion) across
time windows, and shows the percent change for each. One row per event, columns grouped
by window.
# my quality ladder (events, in funnel order) - edit these to your own
# A CRM (HubSpot, Salesforce) usually fires these stage changes into Everflow as events.
events = [
"Leads", # base conversion / total conversions
"MQLs", # marketing qualified lead event
"SQLs", # sales qualified lead event
"Opportunities", # opportunity event
"Customers" # closed / customer event
]
# segment (the filter that defines this report) - pick one or combine, or leave blank
segment = "all traffic" # e.g. one offer, one label, one partner, or all traffic
# steps
1. everflow:get_account_info
Confirm network currency and timezone so every date window and count is right.
2. everflow:run_network_summary
Get a high-level read on the segment so you know the scale before drilling in.
3. everflow:run_performance_report, once per window below, scoped to the segment:
MTD this month start through today vs MTDLY same span, last year
QTD this quarter start through today vs QTDLY same span, last year
For each window: first get clicks + total conversions (the "Leads" base) with
dimensions "offer" (or your segment dimension). Then run it again with
dimensions "event_name" to get one row per event, reading each event's count from
the "events" column and matching it to my ladder by event_name / event_name_id.
4. Build a table: one row per event in ladder order, plus a Clicks row on top. For each
window pair show three columns: Current, Last Year, and percent change.
5. Add a Report Legend block that spells out the exact date range behind every
abbreviation (MTD, MTDLY, QTD, QTDLY) so the reader trusts the numbers.
6. Return a one-line read: where the top of the ladder is up but a lower rung is down,
since that gap is the early-warning signal.
# guardrails
- Run the windows CONCURRENTLY, not one after another. This is 8 calls total
(2 per window x 4 windows); fire them in parallel and assemble the table once
they all return. Never loop one call per event - one call per window returns
every event at once.
- Read-only. Never write anything back to Everflow.
- Percent change = (current minus prior) divided by prior. If prior is 0, show "new"
instead of a giant percentage.
- Small-base floor: if prior is under 5, show the raw counts and label the change
"low base" instead of a huge percentage. Tiny denominators produce misleading swings.
- Event counts include every event the reporting endpoint returns. Everflow's reporting
filters have no working event-status filter, so do NOT claim "approved only" in the
output. If your funnel has meaningful review lag, say so next to the number.
- Use short keys in the headers (MTD, MTDLY, QTD, QTDLY) plus the legend. Full labels
are too wide and make the table unreadable.
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.
List your quality ladder
Name the events you want to track, in funnel order. The CRM model is Lead, MQL, SQL, Opportunity, Customer, whatever you fire as conversion events in Everflow. An event is any action you record as a conversion. A CRM like HubSpot or Salesforce usually pushes these stage changes into Everflow as events.
Pick your segment and windows
A segment is just a filter: one offer, one label, one partner, or all traffic. The windows are month to date versus the same span last year, and quarter to date versus last year. Edit either to fit how you report.
Run the prompt
With MCP connected, just run the prompt as written and the agent builds the variance table for you. On the API tab, first replace {API_KEY} and {NETWORK_ID} and your event IDs, then run it. It returns a Google Sheet plus an Apps Script: paste the script into Extensions → Apps Script, set your filter, and run. The same prompt works in Claude, ChatGPT, or Gemini.
Read the variance
Look for the divergence: where the top of the ladder is up but a lower rung is down. That gap is your early-warning signal, weeks before it shows up in closed revenue. After this first run, the tab regenerates itself each time, so the report stays current with no rework.
The Apps Script regenerates an "Event Comparison" tab on each run. One generic segment: clicks plus the quality ladder down through Opportunities, over two of the four windows. Clicks are way up. In the current month the qualified rungs are flat-to-down; over the quarter it is subtler, and that difference is the whole point (see the read below).
Read it: year over year, traffic is up 158 percent for the month while Leads are down 31 percent and MQLs down 19 percent. Volume grew, quality did not. Now look at the quarter column: SQLs are up 87 percent even as Leads (down 12 percent) and Opportunities (down 1 percent) stay flat-to-down. A single rung rising on its own is not health if the rung below it does not follow, and here the leak sits between SQLs and Opportunities. That is why you read the whole ladder instead of one number, and it is the conversation this report starts.
The native Variance Report can't filter by event yet, so it compares the top-line number, which is often the wrong metric. This recipe drills one event deeper, so you compare MQLs or Opportunities, not just demo requests. Full overlap with the native report is fine. Many people want this answer without logging into the platform at all.
That is your call, modeled on CRM deal stages. The common split: a generic Lead (any signup, including free-email addresses) versus a Marketing Qualified Lead (a real business contact). The freemail-versus-business-email line is the load-bearing quality signal for most B2B teams. Define your ladder once and the report tracks each rung.
If you have the Everflow MCP connected, the agent pulls the event counts directly, no key to handle, and builds the variance table for you. (MCP is a connector that lets your AI tool talk to Everflow on its own.) If not, the prompt writes you a Google Sheet plus an Apps Script that calls the read-only Everflow reporting API and regenerates the tab on each run. Same report either way.
Tiny denominators lie. The lower rungs of a funnel (Opportunities, Customers) often run on small counts. A move from 1 to 13 reads as a 1,200 percent jump and means nothing. The small-base floor in the prompt flags any window where the prior value is under 5 as low base
and shows the raw counts instead, so a 1-to-2 swing does not look like a trend.
Confirm a swing across two windows. A drop that shows up month to date but not quarter to date is more likely a timing blip than a real decline. Read the MTD and QTD columns together before you raise an alarm.
Every event counts, approved or not. Everflow's reporting filters have no working event-status filter, so this report cannot restrict itself to approved events and does not claim to. If your funnel has meaningful review lag, a recent window can look soft purely because events have not been approved yet, so read the newest column with that in mind.
This overlaps Everflow's native Variance Report on purpose. The built-in report is great for the top-line number. This recipe exists for the layer below it, the specific event, and for people who want the answer without logging into the platform at all.
Your event names are your own. Lead, MQL, SQL, Opportunity, Customer is the CRM example because everyone understands it. Telehealth might track requested, consulted, approved. E-commerce might track added to cart, checked out, kept (not refunded). Swap the event names to whatever you fire in Everflow.
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.