Reports and ROI: find the funnel leak and the slices that make money
The Reports page pivots every click your campaigns captured into a funnel table, grouped by campaign, geo, sub or day. Revenue, EPC, Cost and ROI sit right next to the funnel, so deciding what to scale and what to kill is one glance instead of three spreadsheets.
Build a report
- Open Reports and pick a dimension in the group-by selector: Campaign, Geo, Sub1 or Day.
- Scope it with the campaign dropdown ("All campaigns" by default). "Campaign X by geo" is the classic split-test readout.
- Set the date range. Both dates are UTC, and the "to" date includes the whole day.
- Share the URL. All filters live in the query string, so the exact view (dimension, campaign, dates) travels to a teammate as a plain link.
Reading the funnel
Columns go Clicks → Landed → Started → Registered → Leads → Deposits → FTD. Each column counts clicks that reached at least that stage. A click's status only moves forward, so numbers can only shrink left to right, and the biggest drop between two adjacent columns is your leak. CR→FTD is the end-to-end click-to-FTD rate. A Total row sums the visible slice. Reports cap at 500 rows sorted by traffic (Day is chronological), so high-cardinality subs show their top slices.
The leftmost column is the dimension value itself, and it has a null case: clicks with no campaign, no geo, or no sub1 (whichever dimension you're grouped by) collapse into a single "—" row. Day has no such gap, since every click carries a timestamp. That row is real traffic, not a rendering glitch, so don't filter it out of your read.
Revenue and EPC
Revenue is the sum of payouts attached to conversion events of the clicks in each row. The payout arrives with the conversion itself: when your advertiser or your own integration reports a deposit or ftd through the events API, include the payout field and the dollars land in this column. Only events billed as charged or free count. Refunded, blocked, pending and error events are excluded, so a conversion still working its way through the billing pipeline shows as $0 here, same as a refund or a block. EPC, earnings per click (Revenue divided by Clicks), is the unit-economics number that matters: an EPC above your average CPC means the slice prints money, below means it burns it.
Cost and ROI (Campaign dimension only)
Switch to the Campaign dimension and two more columns appear: Cost and ROI. Cost is editable right in the table: click the cell, type what you spent on the campaign, then press Enter or click away. It saves to the campaign immediately and ROI recomputes as (Revenue - Cost) / Cost. Clearing the cell removes the cost; ROI shows a dash until a cost exists. The "—" row (clicks with no campaign) has no Cost cell to edit either, since there's no campaign to attach spend to.

The Cost cell rejects negative or non-numeric values silently: nothing saves, and there's no error message. If a number you typed doesn't stick, check for a stray character or a minus sign before assuming the request failed.
Geo, Sub1 and Day slices deliberately have no Cost column. Spend is a campaign attribute; a geo has no spend of its own.
Raw analysis: the clicks CSV
When four dimensions aren't enough (you want sub2 by geo, or an hour-level cut), go to Clicks, set the same filters (status, campaign, date range, search) and hit Export CSV. The export fetches every matching row, not just the visible page, with columns id, campaignId, sub1, sub2, sub3, geo, status, createdAt. Pivot it in Sheets or a notebook however you like.
Common pitfalls
- Cost is one number per campaign, not per date range. Filter the report to last week and Revenue is last week's, but Cost is whatever you typed last. Keep the number updated for the period you're reading, or ROI lies.
- Dates are UTC. "Yesterday" in your ad account's timezone is not this page's yesterday; align before comparing spend.
- Revenue stays at $0 until a conversion carries a
payoutand its billing status lands onchargedorfree. Zero EPC on a converting campaign can be an integration gap, but it can also just be an event sitting inpendingorerrorwhile billing catches up, so check the payout and billing status before you assume the funnel is broken. - A "—" row shows up wherever the current dimension has no value: no campaign, no geo, or no sub1. It's real traffic, so don't ignore it, and in the Campaign dimension you won't be able to give it a Cost.