Documentation
Marketing attribution
Channel resolution, multi-touch models, lookback, and the Attribution report.
Intently attributes conversions to marketing channels using first-party signals you already collect: UTMs, paid click IDs, and referrers. Premium feature key: marketing_attribution.
Open the report at Attribution. Setup lives under Attribution settings.
How a channel is chosen
Resolution priority for each touchpoint:
- Explicit UTM (
utm_source/utm_medium/utm_campaign, …) - Paid click IDs (
gclid,fbc/fbclid,ttclid,msclkid,li_fat_id,ScCid, …) - Referrer (organic search, AI assistants, social, generic referral)
- Direct
Browser cookies alone (_fbp, _pin_unauth) are not treated as paid evidence. Only click IDs such as fbc / fbclid or gclid classify paid ads.
Same-site referrers (internal navigation) resolve to direct, so they do not steal last-touch credit from a paid landing.
Paid channels (examples)
| Signal | Channel key |
|---|---|
Google UTM / gclid | google_ads |
Meta UTM / fbc | meta_ads |
Microsoft / msclkid | microsoft_ads |
TikTok / ttclid | tiktok_ads |
LinkedIn / li_fat_id | linkedin_ads |
UTM sources like facebook + medium cpc canonicalize to meta_ads so you do not split meta_paid vs meta_ads.
Email, SMS, AI assistants
utm_medium=email(ornewsletter) → channelemailutm_medium=sms(ortext) → channelsms- Referrers from ChatGPT, Gemini, Perplexity, Claude, Grok, Copilot → dedicated AI channels
Click IDs stick in localStorage for 90 days so later pages without query params still carry the paid landing.
Credit models
On a conversion, Intently loads the visitor’s touchpoints inside the lookback window and distributes credit:
| Model | Behavior |
|---|---|
| Last touch | 100% to the final touch (default) |
| First touch | 100% to the first touch |
| Last non-direct | 100% to the last non-direct touch (skips bookmark/direct) |
| Linear | Equal split across touches |
| Linear paid | Equal split across paid ad touches only |
| U-shaped | 40% first / 40% last / 20% middle |
| Time decay | Exponential decay (7-day half-life); newer touches get more |
| First / last touch (source) | Filter to one paid channel (e.g. Meta), then first or last within that source |
Lookback windows: switch 1 day → lifetime (LTV) on the report or in settings. Credit recomputes on the stored journey — no re-ingest.
Model comparison on /attribution runs the core models on one dataset load so you can see revenue spread and whether the top channel changes.
Journey inspector: expand any conversion to see per-touch credit % under the active model, plus a credit-by-model matrix.
What the report shows
- KPI cards: conversions, revenue (primary currency), Stripe vs on-site, touchpoints, verified delivery %
- Period-over-period deltas vs the previous equal-length window
- Channel table with sessions, conversions, revenue, delivery proof
- Campaign breakdown + ROAS when spend is imported (Ad spend & ROAS)
- Pipeline vs ad spend time series
- Recent deals with first-touch / last-touch source toggle
- Cohort experience gaps (converter vs non-converter behavior)
- Export JSON / CSV
Mixed currencies: channel totals use the primary currency (largest absolute revenue share). Others are listed but not summed into one number.
Readiness
Settings → Attribution (and the readiness API) score setup items: tracking, touchpoints, conversions, destinations, delivery proof, Stripe, and ad spend. Aim for tracking + conversions before trusting ROAS.