Metric definitions and the figures that are easy to misread
Conversion rate over visitors, null versus zero, AI referrals versus crawlers, rates as ratios, and Convultra's definition of every headline metric.
On this page · 7 sections
The Convultra API and MCP server are in Beta. Four figures cause nearly every support question about them. GET /meta/metrics (get_metric_definitions) returns every definition programmatically, so a script or an assistant can read them rather than assume. This page is the human version.
Conversion rate is conversions divided by visitors, never sessions
A visitor is unique by first-party id over the period, with bots and excluded IPs removed before counting. A tool that divides by sessions will always show Convultra lower, and the gap is not an error in either.
The one exception, stated plainly: conv_rate on get_breakdown rows is per session, because those rows count sessions and visitors is null there. Do not compare a breakdown rate with an overview rate.
null is not zero
A null spend, ROAS or CPA means the integration is not connected. Unknown spend and zero spend are different answers, and a ROAS built on the second is a lie. Every one of those fields comes with a sibling explaining itself: spend_unavailable_reason when no cost has been synced, spend_omitted_reason when the credential lacks spend:read or the granularity cannot carry it. Read the reason and report “unavailable”, not “0”.
The same rule holds throughout: null means “cannot tell you”, 0 means “nothing happened”. A null revenue on a breakdown row means that dimension cannot report revenue. A missing row in a timeseries would mean a bug, which is why there are never missing rows, only zeros.
AI referrals count in every total; AI crawlers count in none
An AI referral is a human who clicked a link inside ChatGPT, Claude, Perplexity or Gemini. It is a real session with real revenue, and it is already inside the overview’s visitors, conversions and revenue. Adding get_ai_referrals figures to a total double-counts.
An AI crawler is GPTBot or ClaudeBot fetching pages for indexing or training. It is a bot, filtered out at ingest, and it appears in no traffic, conversion or revenue figure anywhere. get_filtered_out is the only place it is reported, and within that response total_bot_events and total_ai_crawler_events overlap, so do not add those either.
Rates are ratios between 0 and 1
conv_rate, bounce_rate, delivery_rate, recovery_rate, drop_off_rate, attributed_share and share are ratios to 4 decimal places. The field name says _rate or _share, so the value is never pre-multiplied by 100. Money is rounded to 2 decimal places. Percentage changes in get_overview’s change block are also ratios, and are null, not Infinity, not 0, when the earlier figure was zero.
Definitions
| Metric | Definition |
|---|---|
| Visitors | Unique by first-party id over the period. Bots and excluded IPs removed before counting. |
| Sessions | 30-minute inactivity window. Bots and excluded IPs removed before counting. |
| Conversions | An event marked as a conversion in settings, deduplicated by the four windows in Settings → Tracking. |
| Revenue | Conversion value in the project’s reporting currency, converted at the rate on the conversion date. The original amount and currency are stored alongside. |
| Blended ROAS | Total revenue divided by total spend across connected ad platforms, including sources with no spend. |
| CPA | Spend divided by conversions for the source. |
| AI referral | A human session whose referrer is a known AI assistant. Counted in all totals. |
| Filtered out | Bots, AI crawlers, blocked and spam traffic, and excluded IPs. Never in any figure, always reportable. |
Convultra is the source of truth for its own numbers. These are the same definitions the dashboard shows in its tooltips and the email report uses.
Recovery and attribution denominators
Two more figures need their denominators stated:
recovery_ratefromget_recoveryis the recovered share of attributed conversions (those with a captured click id), not of all conversions.attributed_sharefromget_attributionis the share of total conversions that carry at least one ad click. The platform rows describe only that share; organic, direct and email conversions are in the total and in no platform row.
Before you compare with another tool
- Call
get_metric_definitionsand confirm the denominator. - Check
meta.rangefor the timezone actually used. See Date ranges and timezones. - Call
get_tracking_health. A tracking outage and a bad week look identical in the numbers. - Check whether the other tool counts view-through, or dates conversions by click rather than by event.
See API operations for the per-operation traps.