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:

  1. Explicit UTM (utm_source / utm_medium / utm_campaign, …)
  2. Paid click IDs (gclid, fbc/fbclid, ttclid, msclkid, li_fat_id, ScCid, …)
  3. Referrer (organic search, AI assistants, social, generic referral)
  4. 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.

SignalChannel key
Google UTM / gclidgoogle_ads
Meta UTM / fbcmeta_ads
Microsoft / msclkidmicrosoft_ads
TikTok / ttclidtiktok_ads
LinkedIn / li_fat_idlinkedin_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 (or newsletter) → channel email
  • utm_medium=sms (or text) → channel sms
  • 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:

ModelBehavior
Last touch100% to the final touch (default)
First touch100% to the first touch
Last non-direct100% to the last non-direct touch (skips bookmark/direct)
LinearEqual split across touches
Linear paidEqual split across paid ad touches only
U-shaped40% first / 40% last / 20% middle
Time decayExponential 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.

Next