Cost KPIs
All KPIs are computed by 3x from imported spend and its own session data. Platform-reported conversions, CPA and ROAS are shown next to them for comparison but never mixed in.
| KPI | Formula | Notes |
|---|---|---|
| Spend | Σ cost, converted to the project currency | Google: campaign rows (PMax has no ad rows); others: ad rows |
| Impressions, clicks | Σ platform values | Meta: link clicks |
| CPC | spend ÷ clicks | |
| CTR | clicks ÷ impressions | fraction 0–1 |
| Sessions | matched sessions (any method) | see Matching |
| Cost per session | spend ÷ sessions | |
| Relevant sessions | sessions with relevance ≥ settings.ads.relevantMinScore | default 30 (engaged and above) |
| Cost per relevant session | spend ÷ relevant sessions | the KPI to optimize for lead-gen sites |
| Leads | matched sessions with a lead (identify or POST /leads), spam excluded | |
| CPL | spend ÷ leads | |
| Conversions | matched sessions with a conversion | |
| Cost per conversion | spend ÷ conversions | |
| Conversion value | goal values + conversion values of matched sessions | |
| ROAS | conversion value ÷ spend |
Ratios with a zero denominator are null (shown as "–"), never infinity or 0.
The relevance threshold
"Relevant" uses the project's relevance score. The default threshold 30
corresponds to the engaged label. Change it per project in Settings → Relevance or
PATCH /v1/projects/{project} (settings.ads.relevantMinScore). Changing the scoring rules
re-scores past sessions, so historical cost per relevant session stays comparable.
Levels and filters
Reports exist at platform, campaign, ad set and ad level. The cost side is filtered by the date range and the platform/account/entity; the session side accepts the complete analytics filter (device, country, landing page, goal reached, …). A device filter therefore changes sessions, leads and conversions, but not spend – platforms do not report cost per device in the same breakdown.
Currencies and days
- Every cost row is converted with the ECB reference rate of its day (previous available day on weekends and holidays). Mixed currencies are never summed.
- Costs belong to the ad account's day, sessions to the project's day (LinkedIn: UTC).
- The last seven days are restated daily because platforms adjust late clicks and invalid traffic.
Long ranges
Ranges up to 90 days always use exact session queries. Longer ranges read session counts from daily rollups when the filter only uses rollup dimensions (for example channel, UTMs, device, country, entry page group); filters on single pages, browsers, events, goals or click ids fall back to exact queries. Drill-downs below campaign level are always exact.