Read the attribution reports
Read customer cohorts, source attribution, and lifetime revenue with their coverage limits.
Use Reports to compare customers’ lifetime net revenue by the source credited with their first paid conversion. The date range selects customers by conversion date; it does not select payments received in that range.
Before you start: send events that resolve visitors into people and subscription_started events with a subscription_ref. Payments alone create money and customer status, but no paid conversion for this report. See Revenue events.
Inspect results at these levels:
Surface | Where | What it answers |
|---|---|---|
Revenue by source | Reports | Which channels and campaigns earned the money |
People behind a source | Reports, View people on a row | Who those customers are |
The attributed journey | People, open a person | Why this person was credited to that source |
ROAS and You vs Google | Google Ads → Reports | What Google spend earned back |
MCP. tracking_reports_revenue_by_source, tracking_reports_source_people and tracking_reports_attributed_journey return the first three to an agent.
Which traffic these reports cover
Cookieless browser events count as traffic but cannot create or join a person. They cannot supply a browser journey for attribution or person-based funnels. This does not exclude all revenue from someone who declined: backend events can independently identify them and record money.
Stored cookieless events appear in totals, Events, Live, and Google Ads paid tracking health. Their missing identifiers prevent those particular events from being assigned to a person.
Read event totals and person-based reports as different measures:
- Event totals include stored cookieless traffic.
- Person counts and funnels need resolved identities. Cookieless browser events cannot form that history.
- Backend revenue is independent of browser consent. Source credit still requires a qualifying touchpoint.
More events than people can reflect consent coverage rather than delivery failure. Paid tracking health shows the cookieless share of paid clicks in its window, not of all visitors. See Tracking and consent.
A site without a consent banner runs in full mode. Normal delivery and identity requirements still apply.
Set the four controls
- Open
Reportsand set the model, lookback window, date range, and domain. All four affect the result and are stored in the URL, so a colleague can open the same view.
Control | Options | Default | What it decides |
|---|---|---|---|
Attribution model | Last Click, First Click | Last Click | Which touchpoint of a journey gets the credit |
Lookback window | 7, 14, 30, 60, 90 days | 30 days | Only touchpoints inside this window before the conversion can be credited |
Date range | Last 7 days, Last 30 days, Last 90 days, Custom | Last 30 days | Which customers are in the report — not which money is counted |
Domain filter | All domains, or one of yours | All domains | Which touchpoints are considered at all |
Each control change recalculates attribution from stored history; it does not modify events or freeze decisions at sale time.
Read revenue by source
- Read the channel rows for customer counts and revenue, then expand a row for its campaign breakdown.
Each row combines customers whose first paid conversion is in the date range with their lifetime net revenue. Those measures have different time boundaries:
- The date range selects people, not payments. Someone whose first paid conversion was in the range is in the report, and everything they have paid before or since — later renewals included — is in their number.
- Someone whose first ever paid conversion was before the range is not in the report at all, even if they paid you during it. A customer who churned and came back is counted once, in the range of their original conversion.
The report’s paid conversion is subscription_started with a subscription_ref. A payment alone adds money and can create Customer status, but creates no conversion to credit. See Revenue events.
Revenue is net of refunds, with refunded amounts shown alongside it. Each currency has its own line; there is no exchange-rate conversion or combined total.
The four channels
A touchpoint takes the first matching channel:
- Paid — the landing URL carried an advertising click id (
gclid,fbclid,msclkid,ttclid,twclid,li_fat_id,dclid,gbraidorwbraid), or itsutm_mediumwascpc,ppc,paid,paidsocialordisplay. A URL carrying more than one click id keeps the first of that list, so a Google click that has bothgclidandgbraidis agclid. - Email —
utm_mediumwasemail. - Organic — the visit had a referrer on a host that is not one of your own.
- Direct — no referrer at all, or a referrer from a domain the same person was already browsing on.
Navigation between your own sites is direct rather than organic; it does not create an external source.
Expanded rows group the winning touchpoint by utm_source / utm_medium / utm_campaign. Untagged visits appear as (no UTM). Rows with ad click ids stay separate from rows without them, even if UTM tags match. The row describes the winning visit, not every visit.
Unattributed
Unattributed contains conversions with no touchpoint in the lookback window and money without an associated person. Tracking does not redistribute it to other sources.
Investigate these causes when unattributed revenue is high:
- your lookback window is shorter than your sales cycle;
- your traffic arrives on pages the script does not run on;
- the events that carry your revenue reach Tracking without anything that ties them to a browser;
- a large share of your visitors decline consent.
Declined browser consent removes the ids needed to connect that activity to a purchase. A backend event can still record the purchase and its customer. Without another qualifying touchpoint, the conversion stays unattributed; a report setting cannot reconstruct missing browser history.
A domain-filtered Unattributed row contains conversions without a qualifying touchpoint on that domain. Ownerless money is excluded from the filtered view.
Match rate
Match rate is the percentage of selected conversions credited to a touchpoint. It measures conversion count, not money; one high-value unattributed customer can account for substantial revenue despite a high match rate.
What the numbers do not mean
- They are not the revenue you received during the date range. They are the lifetime revenue of the customers who first converted during it.
- They are not a share of credit. One touchpoint takes all of it; there is no split across a journey and no fractional model.
- They are not comparable across currencies, and two currencies are never added together for you.
- A channel is not a claim about intent. It is a classification of the tagging and the referrer of one visit, no more.
Follow a row down to one person
-
Choose
View peopleon a channel or campaign row. The list keeps the report controls and shows 50 people at a time withLoad more. Each person’s lifetime net revenue contributes to the row you opened. -
Open a person and read their journey and
Attributioncard. The card shows conversion, model, window, credited channel and source, and a reason such aslast qualifying paid touchpoint within 30d. The winning event is marked in the journey.
Interpret the decision with these limits:
- A person gets a decision for their originating conversion — the earliest paid conversion they ever had. Later ones do not produce a second decision.
- Someone with no paid conversion yet reads
No paid conversion yet for this person. No qualifyingsubscription_startedevent has been recorded. A person can already have payments andCustomerstatus without that conversion.
The journey inherits model and window from the link, so its explanation matches the report.
Put Google spend against it
Google Ads → Reports compares spend and revenue under its date-range, model, and lookback controls:
- ROAS — your Google Ads accounts, campaign by campaign, with
Cost,Attributed revenue,Conversions,ROASandCPA. Campaigns expand into ad groups and ads; cost is shown at every level, and attributed revenue and the two ratios at campaign level. - You vs Google — the same campaigns with your attributed revenue and conversions beside the conversions and conversion value Google reports itself.
Check these conditions before comparing the figures:
- Each account is shown in its own account currency, and only revenue you recorded in that currency counts towards its ROAS. A euro account earning dollars shows those dollars nowhere in its ratio.
- Cost is whatever was last synced from Google. A badge marks an account whose cost has not been refreshed, and stale cost makes ROAS look better than it is.
- Attributed conversions and Google’s own conversions count different things and will not agree. The comparison shows the size of the gap; it is not something to reconcile to zero.
Paid tracking health shows how many paid clicks were cookieless and could not form a person’s browser history.
How to trust a report
- Check match rate before interpreting the channel split.
- Read currencies separately.
- Compare the same model and window:
Last Click/ 30 days andFirst Click/ 90 days answer different questions. - Verify a result: open a row’s people, then a person. Check that the highlighted touchpoint and reason match the controls and that the person’s revenue contributes to the row.
Next steps
- Send revenue from your backend: send
subscription_startedwith asubscription_ref, or there is nothing to credit. - Feed conversions back to Google Ads: spend sync, the URL suffix and conversion feedback.
- Identify a visitor: connect stored activity and backend revenue to a person.
- Fix a report that looks wrong: revenue, conversions and the date range, in order.