Skip to main content
Which reporting tool should I use?
  • Aggregated stats (totals, trends, breakdowns) → run_performance_report or run_network_summary
  • Raw event records (individual clicks or conversions over a window) → search_activity (set type to click or conversion)
  • Single event by ID (attribution troubleshooting, dispute resolution) → get_entity with type="click", type="conversion", or type="transaction" (full attribution chain). See Events & Attribution.

get_report_schema

Returns the complete list of valid dimension keys, filter keys, and metric names for run_performance_report, plus an authoritative definition for every metric. Call this first if you’re unsure which keys to use — the exact strings returned here are the accepted values for dimensions, filters, and sort_by. It is also the source of truth for “what metrics are available?”, “how is <metric> calculated?”, and “what custom metrics do I have?”. Parameters: None. Response fields:
FieldTypeDescription
columnsarrayValid dimension keys for the dimensions parameter
filtersarrayValid filter keys for the filters parameter
metricsarrayValid metric names for sort_by — also returned in every report row
metric_definitionsarrayOne entry per metric, each { name, description, unit, formula, is_custom }
The metric_definitions entries describe how each metric is computed. unit is one of count, currency, percent, or ratio (see the percent note under run_performance_report). Entries with is_custom: true are this network’s user-defined custom metrics, returned with their formula — these are distinct from the custom_payout_revenue entity.

run_performance_report

Queries aggregated performance data grouped by one or more dimensions. The primary tool for campaign analysis, partner comparison, and revenue reporting. Parameters:
ParameterTypeRequiredDescription
fromstringYesStart date (YYYY-MM-DD)
tostringYesEnd date (YYYY-MM-DD)
dimensionsstringYesComma-separated dimensions (see below) — max 256 chars
filtersstringNoComma-separated inclusive type:value pairs — e.g. offer:123,affiliate:456 — max 4,096 chars total; sub-param values (sub1sub10, adv1adv10, source_id) max 600 chars each. Match several IDs for one ID filter by separating them with | — e.g. offer:1|2|5. Only inclusive filters are supported — there is no exclusion syntax.
metric_filtersstringNoNumeric conditions on the aggregated metric values — comma-separated, ANDed, max 10. E.g. clicks>100,cvr<2 or invalid_clicks<=0. Operators: >, >=, <, <=. The left side must be a metric name (not a dimension); use conversions, not cv. Applied after aggregation, before sorting and pagination. — max 512 chars
sort_bystringNoMetric name to sort by (see metrics accordion below) — max 128 chars
sort_directionstringNoasc or desc (default: desc) — max 8 chars
timezonestringNoIANA timezone name. Defaults to the network timezone (matches the Everflow portal) — max 64 chars
currencystringNoCurrency code. Defaults to the network’s base currency — max 8 chars
page_sizenumberNoRows per page (1–100, default 50)
cursorstringNoPagination cursor from a prior response — max 1,024 chars
The filters parameter uses comma-separated type:value strings — for example offer:123,affiliate:456,country_code:US. To match multiple values for the same ID filter, separate them with a pipe — offer:1|2|5 returns all three offers in a single query instead of running a separate report per offer. This differs from list_entities, which accepts a JSON object. See the filters accordion below for all valid keys.
filters and metric_filters are different axes. filters narrows by dimension/entity values (offer, affiliate, country, sub1, …); metric_filters narrows by metric values (clicks, conversions, invalid_clicks, revenue, cvr, …). A metric name is not a valid filters key, and vice-versa.Percent metrics: cvr, ctr, and margin are expressed as percentages (e.g. 2.84 means 2.84%), not 0–1 fractions. In metric_filters, write cvr<2 to mean “CVR under 2%”. For “no invalid traffic”, use invalid_clicks<=0.
Response envelope:
run_performance_report uses total_rows (not total_matching) in its pagination envelope, which differs from list tools like list_offers and list_affiliates.
FieldTypeDescription
next_cursorstringPass as cursor to retrieve the next page. Absent when there are no further pages.
rows_returnednumberNumber of rows in this page
total_rowsnumberThe true number of rows matching the query, before any cap. When result_capped is true this exceeds the number you can page to.
has_morebooleantrue when more pages exist for this query — fetch them by passing next_cursor back as cursor. This is ordinary pagination, not missing data.
result_cappedbooleantrue when the query matched more than the hard row limit and rows were dropped. Unlike has_more, paging every page will not return them — narrow the date range, add filters, or use fewer dimensions.
row_limitnumberPresent only when result_capped is true — the maximum rows the tool will return for one query (the cap that dropped rows).
has_more and result_capped are independent. has_more: true alone just means “page for the rest.” result_capped: true means the result is genuinely incomplete — to get complete data, narrow the date range, add more specific filters (e.g. a single affiliate or offer), or split the request into multiple smaller queries.
The response also carries an applied_query object — the exact, resolved query that produced the rows, so you can audit a number and reproduce it in the portal rather than trust it blind. It echoes from, to, the resolved timezone and currency (after defaulting to the network’s settings when omitted), dimensions, and — when supplied — filters, metric_filters, and sort_by/sort_direction. Empty sections are omitted. It also carries a metric_glossary object — inline one-line definitions for the metrics that are easy to misread, so methodology travels with the numbers instead of needing a separate get_report_schema call. It covers the conversion-counting family (conversions vs total_conversions vs events), revenue’s event inclusion, and the percent/ratio metrics (cvr, ctr, margin, roas) so 2.84 isn’t mistaken for a fraction. And a totals object with every metric aggregated over the full matched set — all rows, before pagination and the display cap — computed server-side so you never sum rows yourself. Additive metrics (clicks, conversions, payout, revenue, …) are summed; the ratio metrics (cvr, roas, margin, …) are re-derived from those sums (e.g. overall cvr = Σtotal_conversions ÷ Σclicks), never averaged — so the totals stay correct even when only one page of rows is returned.
Don’t add up the rows yourself for a total — use totals. Row-level ratio metrics cannot be summed or averaged into an overall figure, and summing a single page misses the rest of the result set. totals handles both correctly.
Pass one or more of these keys as a comma-separated dimensions string.Time
DimensionDescription
dateDay (YYYY-MM-DD)
hourHour of day (0–23)
hourlyFull datetime rounded to the hour
weekISO week
monthMonth (YYYY-MM)
yearYear
day_of_weekDay of week (0 = Sunday … 6 = Saturday)
Entities
DimensionDescription
offerOffer name
offer_idOffer ID
affiliateAffiliate name
affiliate_idAffiliate ID
advertiserAdvertiser name
advertiser_idAdvertiser ID
campaignSmart link / campaign name
campaign_idCampaign ID
smart_linkAlias of campaign
creativeCreative name
creative_idCreative ID
offer_groupOffer group name
offer_group_idOffer group ID
offer_urlOffer URL
offer_statusOffer status
affiliate_statusAffiliate status
originating_offerOriginating offer in a redirect chain
categoryOffer category
networkNetwork identifier
source_idTraffic source ID
event_nameConversion event name
advertiser_event_nameAdvertiser-side event name
advertiser_campaign_nameAdvertiser campaign name
Geo
DimensionDescription
countryCountry name
country_codeISO 2-letter country code
regionRegion / state
cityCity
dmaDesignated market area (US only)
postal_codePostal code
Device & Technology
DimensionDescription
browserBrowser name
platformOS platform
device_typeDevice type (desktop, mobile, tablet)
deviceAlias of device_type
device_makeDevice manufacturer
device_modelDevice model
os_versionOS version string
languageBrowser language
connection_typeConnection type (wifi, cellular, etc.)
carrierMobile carrier
ispInternet service provider
is_proxyWhether traffic came through a proxy
meta_platformMeta / Facebook platform
Tracking & Attribution
DimensionDescription
tracking_domainCustom tracking domain
transaction_idRaw transaction ID
attribution_methodAttribution method
order_idOrder ID passed on conversion
coupon_codeCoupon code
refererReferring URL
click_error_codeClick error code
conversion_error_codeConversion error code
People & Managers
DimensionDescription
affiliate_managerAffiliate manager name
account_managerAccount manager name
sales_managerSales manager name
account_executiveAccount executive name
customer_support_managerCustomer support manager name
admin_account_managerAdmin account manager name
Payout & Revenue
DimensionDescription
payout_typePayout model (CPA, CPC, etc.)
payout_amountPayout amount
revenue_typeRevenue model
revenue_amountRevenue amount
currencyCurrency code
custom_payout_revenueCustom payout/revenue rule name
custom_payout_revenue_idCustom payout/revenue rule ID
Sub-Parameters
DimensionDescription
sub1sub10Affiliate sub parameters (pass separately: sub1, sub2, …)
adv1adv10Advertiser sub parameters (pass separately: adv1, adv2, …)
App
DimensionDescription
project_idApp project ID
app_identifierApp identifier
bundle_idApp bundle ID
Pass filters as comma-separated inclusive type:value pairs — e.g. offer:123,affiliate:456,country_code:US. Only inclusive filters are supported — there is no exclusion syntax. status is not a supported filter or dimension on this tool; to filter conversions by status, use search_activity(type="conversion") instead.Multiple values (OR): for any ID filter, separate IDs with a pipe to match any of them in one query — offer:1|2|5 returns offers 1, 2, and 5 together. Repeating a key (offer:1,offer:2) does the same. Supported on the ID filters: offer, offer_group, affiliate, advertiser, creative, campaign, category, network, tracking_domain, channel. Prefer one multi-value query over many single-ID queries.Accepted aliases: the _id form and common synonyms are normalized to the canonical key, so you don’t have to guess — offer_idoffer, affiliate_id/partneraffiliate, advertiser_id/brandadvertiser, offer_group_idoffer_group, campaign_id/smart_linkcampaign. An unrecognized filter key returns an error with a suggestion rather than being silently ignored. Note: campaign is the smart-link/rotator entity; the individual ad campaign is an offer.Entities
FilterValue formatExample
offerNumeric offer IDoffer:123
offer_groupNumeric offer group IDoffer_group:45
affiliateNumeric affiliate IDaffiliate:678
advertiserNumeric advertiser IDadvertiser:99
creativeNumeric creative IDcreative:12
campaignNumeric campaign IDcampaign:7
categoryNumeric category IDcategory:3
networkNumeric network IDnetwork:1
source_idStringsource_id:google
event_nameStringevent_name:purchase
offer_urlNumeric URL IDoffer_url:8
offer_statusactive, paused, pending, deletedoffer_status:active
originating_offerNumeric offer IDoriginating_offer:123
transaction_id32-char hex stringtransaction_id:abc123...
error_codeNumeric error codeerror_code:0
coupon_codeStringcoupon_code:SUMMER20
tracking_domainNumeric domain IDtracking_domain:5
channelNumeric channel IDchannel:2
Georegion/city take internal numeric IDs; resolve a name to its ID with list_entities (type=region / type=city, and type=country for the country_id that scopes a region lookup).
FilterValue formatExample
countryISO 2-letter code (resolve names via list_entities type=country)country:US
country_codeISO 2-letter codecountry_code:US
regionNumeric region ID (resolve via list_entities type=region)region:1140
cityNumeric city ID (resolve via list_entities type=city, which requires region_id)city:534
Device & Technology
FilterValue formatExample
browserBrowser namebrowser:Chrome
device_typedesktop, mobile, tabletdevice_type:mobile
device_platformPlatform stringdevice_platform:iOS
device_makeManufacturer namedevice_make:Apple
device_modelModel namedevice_model:iPhone 15
carrierCarrier namecarrier:Verizon
languageBrowser language codelanguage:en-US
connection_typeConnection type stringconnection_type:wifi
People & Managers — numeric employee IDs; resolve a name with list_entities type=employee.
FilterValue formatExample
account_managerNumeric employee IDaccount_manager:55
affiliate_managerNumeric employee IDaffiliate_manager:12
sales_managerNumeric employee IDsales_manager:8
account_executiveNumeric employee IDaccount_executive:3
Sub-Parameters
FilterValue formatExample
sub1sub10Stringsub1:source_a
adv1adv10Stringadv1:campaign_x
Billing & Labels
FilterValue formatExample
labelLabel namelabel:top_affiliate
business_unitBusiness unit namebusiness_unit:retail
affiliate_tierTier nameaffiliate_tier:gold
billing_frequencyFrequency stringbilling_frequency:monthly
advertiser_billing_frequencyBilling frequencyadvertiser_billing_frequency:weekly
These are also the valid values for the sort_by parameter. Call get_report_schema for the same definitions in machine-readable form (metric_definitions), including any network-specific custom metrics.Volume
MetricDescription
impressionsAd impressions served
gross_clicksAll clicks before dedup/validation
clicksTotal valid clicks (post-dedup)
unique_clicksDistinct clicks within the dedup window
duplicate_clicksClicks dropped as duplicates
invalid_clicksClicks rejected by validation (geo, cap, fraud, …)
conversionsBase conversions; excludes scrubbed and view-through
total_conversions / total_cvConversions + scrubbed + view-through (does not include events)
eventsAdditional conversion events beyond the base conversion
Revenue & Cost
MetricDescription
payoutAmount paid to partners
revenueRevenue from advertisers, including event revenue
profitrevenue − payout
gross_salesSale amount attributed to conversions
media_buying_costPartner-reported media buying cost
Rates & Efficiency
MetricDescription
ctrClick-through rate = clicks ÷ impressions (percent)
cvrConversion rate = total conversions ÷ clicks (percent)
epcEarnings per click = (revenue − payout) ÷ clicks
rpcRevenue per click = revenue ÷ clicks
cpaCost per acquisition = payout ÷ conversion
cpcCost per click = payout ÷ clicks
cpmCost per thousand impressions = payout × 1000 ÷ impressions
roasReturn on ad spend = gross_sales ÷ revenue (ratio)
margin(revenue − payout) ÷ revenue (percent)
cvr, ctr, and margin are percentages (e.g. 2.84 = 2.84%), and roas is a ratio. This matters in metric_filters: cvr<2 means “under 2%“.

run_network_summary

Returns headline performance totals for a date range — no grouping, just aggregate numbers. Optionally includes a comparison against the prior equivalent period, and can be scoped to specific entities. Parameters:
ParameterTypeRequiredDescription
fromstringYesStart date (YYYY-MM-DD)
tostringYesEnd date (YYYY-MM-DD)
timezonestringNoIANA timezone name. Defaults to the network timezone (matches the Everflow portal) — max 64 chars
currencystringNoCurrency code. Defaults to the network’s base currency — max 8 chars
includestringNocomparison — adds prior-period metrics for delta analysis — max 256 chars
filtersstringNoScope the totals to specific entities — comma-separated type:value pairs. Supported keys: offer, affiliate, advertiser, creative, campaign (pipe for OR, e.g. offer:1|2). Applied to the comparison period too. — max 4,096 chars
filters enables a filtered period comparison — pair it with include=comparison to answer “is offer 91 up or down vs last week?”. Only the entity keys above are supported here; for breakdowns by country / device / sub-parameter / error-code, use run_performance_report instead — those dimensions are not available on the summary.
Like run_performance_report, the response carries an applied_query object echoing exactly what ran — from, to, the resolved timezone and currency, and any filters and include — so the totals can be audited and reproduced (empty sections omitted). It also carries the same metric_glossary object of inline definitions for the easily-confused metrics.

search_activity

Searches raw event records within a date-time window. Set type to choose the event stream:
  • type="click" — raw click events. Maximum 14-day window, up to 1,000 records (not paginated).
  • type="conversion" — conversion events. Minimum reliable window is one full day in the network timezone. Paginated via page_size (1–100, default 50) and next_cursor.
Pagination differs by type. type="conversion" is paginated — request page_size (1–100, default 50) and, while the response has has_more: true, pass its next_cursor back as cursor (with the same filters and window) to fetch the next page. type="click" is not paginated — it returns a single result set capped at 1,000 records, sorted most-recent first. For aggregated counts instead of raw records, use run_performance_report.
Results are automatically filtered by affiliate visibility. If your account has a limited affiliate scope, rows for affiliates outside that scope are silently excluded — counts may be lower than expected when querying without an affiliate_id filter.
Common parameters:
ParameterTypeRequiredDescription
typestringYesclick or conversion — selects the event stream
fromstringYesStart datetime (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
tostringYesEnd datetime
offer_idstringNoFilter by offer ID — max 64 chars
affiliate_idstringNoFilter by affiliate ID — max 64 chars
advertiser_idstringNoFilter by advertiser ID — max 64 chars
countrystringNoFilter by 2-letter ISO country code — max 64 chars
sub1sub10stringNoFilter by sub parameter value — max 600 chars each
source_idstringNoFilter by traffic source ID — max 600 chars
Type-specific parameters:
ParameterApplies toDescription
error_codetype="click"Filter by click error code
statustype="conversion"approved, pending, rejected, invalid (case-insensitive; an unrecognized value returns an error rather than being ignored)
event_nametype="conversion"Filter to conversions of a named post-conversion event (matched by name, e.g. Purchase). Base conversions have no event name.
adv1adv10type="conversion"Filter by advertiser sub parameter value — max 600 chars each
order_idtype="conversion"Filter by the merchant order ID recorded on the conversion
page_sizetype="conversion"Records per page (1–100, default 50)
cursortype="conversion"Pagination cursor from a prior response — pass it back to fetch the next page (reuse the same filters and window)
The window is interpreted in the network’s timezone (matching run_performance_report / run_network_summary). For type="click" the maximum window is 14 days. For type="conversion" the minimum reliable window is one full day (YYYY-MM-DD 00:00:00 to YYYY-MM-DD 23:59:59); shorter windows may return an error. Passing a filter that doesn’t apply to the chosen type (e.g. status with type="click") returns an error.
Response envelope:
FieldTypeDescription
clicks / conversionsarrayArray of records, keyed by the requested type
returnednumbertype="conversion" — records returned in this page
page_sizenumbertype="conversion" — the page size applied to this request
has_morebooleantype="conversion"true when more records match; pass next_cursor back as cursor to page
next_cursorstringtype="conversion" — cursor for the next page; empty on the last page
totalnumbertype="click" — records returned
capped_atnumbertype="click" — hard ceiling applied (1000)
truncatedbooleantype="click"true when more clicks matched than were returned (hit the cap)
total_matchingnumbertype="click" — the true number of matching clicks when truncated
notestringGuidance when more records exist — page with next_cursor (conversions), or narrow filters/window, or use run_performance_report (e.g. dimensions=click_error_code / conversion_error_code) for counts and breakdowns instead of paging raw events
Per-record fields (type="click"): transaction_id, timestamp, offer_id, affiliate_id, advertiser_id, campaign_id, error_code, is_unique, payout, revenue, currency, country, sub1sub10, source_id. campaign_id is returned only when the click is on a smart link. Per-record fields (type="conversion"): conversion_id, transaction_id, timestamp, click_timestamp, status, error_code, offer_id, offer_name, affiliate_id, affiliate_name, advertiser_id, advertiser_name, payout, revenue, sale_amount, event_id, order_id, country, sub1sub10, source_id. Fields that are empty/zero are omitted — coupon_code, is_scrub, event_name, and adv1adv10 appear only when populated.

Single-event & transaction lookup

Single-event lookups are served by the generic get_entity tool (type="click", type="conversion", or type="transaction" for the full attribution chain). Response fields, listing filters, and guidance on choosing between these and search_activity are on Events & Attribution.