Conversions and attribution across channels
Conversion work in Orbit spans several surfaces that all read the same recorded signals. This overview ties them together so you can pick the right surface for the question in front of you — a single goal’s drill-down, a whole-program channel split, campaign-level economics, or the funnel through-flow. It is the map; the depth lives in the linked guides.1. How to choose an attribution surface
“Which of the goal-shaped surfaces answers my question?” is the first fork. They all join recorded conversions to touches; they differ in the join key and the reporting shape.
Work the fork as four questions, in this order:
- “Did my goal fire?” — open the named goal under Insights → Goals; the goal detail page is the drill.
- “Did my campaign ROI?” — read the campaign’s own ROAS view (journey goals feed its per-step conversion) rather than re-deriving economics from a goal page.
- “Which channels drive the program?” — the multi-touch attribution report allocates credit across channels and campaigns over the CDP event stream.
- “Which ads acquire leads?” — the click-to-chat funnel attributes chat-opens and their downstream conversions back to the ad that opened the chat, first-touch.
2. How attribution models allocate value
A conversion is a recorded event tied (optionally) to a contact, with a timestamp and an optional monetary value. You define which events count by creating a conversion goal (Insights → Goals), a journey goal (on a campaign’s journey), or by naming a conversion event in an ad-hoc attribution report. From there, every attribution surface applies the same grammar of two choices:- The model —
first_touch,last_touch,linear,time_decay, and (where supported) a position-basedcustomsplit. The model decides how each conversion’s credit or value spreads across the touches the contact had. It re-weights the answer, never the sample — switching models on saved-off totals never changes which conversions exist. - The lookback window — how far back from each conversion a touch counts. Goals carry a 1–180 day window on their definition; ad-hoc reports parameterize it per run (up to a year on the multi-touch endpoints). A window that is too tight shows up as unattributed revenue; one that is too wide over a high send cadence can truncate the per-conversion join.
Same three touches, same $100 conversion — four different answers. `first_touch` hands the whole value to the SMS that started the journey; `last_touch` hands it to the email that closed it; `linear` splits evenly; `time_decay` weights recent touches heavier (weights halve every seven days here, normalized back to $100). None of them is “the true answer” — each is a lens. Pick one model per reporting question and record which one a saved-off figure used, because mixing models is where reconciliation fights start (section 5 below).
The conversion goals guide walks goal creation, the four goal models, firing by pixel, webhook, or direct record, and role gating end to end. The program-wide split is covered in multi-touch attribution.
3. Lookback-window pitfalls
The window is the second dial, and it fails in three predictable ways:- Unattributed counters at a 1-day window. If your buying cycle runs weeks but the goal’s window is one day, conversions land with no in-window touchpoints and pile into the unattributed bucket. A rising unattributed share on a healthy send program is a tracking-coverage signal — widen the window before you blame the channel mix.
- Truncation at the 100-touchpoint cap. The goal-attribution join considers at most 100 touchpoints per conversion. A contact hammered by a daily send cadence over a 180-day window can exceed that; the join then truncates to the most recent touches, so
first_touchover a wide window may stop crediting the actual first touch. Keep window and cadence proportional. - Window vs campaign cadence. Match the window to the buying cycle, not to the send schedule. A seven-day window over a daily campaign double-counts overlapping touches across conversions; a 180-day window over a burst campaign credits a stale touch. Ad-hoc reports let you re-run with a different window — use that before rewriting the goal definition.
4. The “first check twice”: unattributed counters
Conversions recorded with no contact id, or with no in-window touchpoints, surface as unattributed counters rather than being silently dropped — treat that share as a signal about your tracking coverage, not noise. Orbit attributes touches over your own sending channels (messages, AI-agent conversations); it never invents a touch to explain a conversion. A concrete example: your purchase pixel fires server-side with no contact id on 1,000 checkouts this week because thefrontend tracker lost its session linkage. The goal detail page will show those 1,000 checkouts in the unattributed counter, not among the attributed messages/campaigns rows — so a streak of unattributed conversions there usually means the pixel, webhook, or import path stopped carrying the contact id. Check twice: once on the streak itself (is the unattributed share climbing?), and once on the firing integration (is the contact id still populated on the record?). The goal detail page’s recent-conversions table is the row-level view that shows which conversions fell into the unattributed bucket instead of a joined touch — read it bare, no export needed.5. Export and reconcile without mixing models
Three export paths cover the reporting needs, ordered by shape:-
Campaign-level bulk export.
GET /campaigns/roi-summaryreturns Cost / Revenue / Conversions / ROI for up to 200 campaigns in one bounded call — the endpoint behind the Insights → Reports Campaign ROI card. Use it for flat report rows; never fan the per-campaign attribution endpoints out in a loop.The campaign ROI bulk export guide maps API fields to CSV columns. - Per-conversion row audit. The goal detail page’s recent-conversions table and the analytics record endpoints give row-level conversions with the attributed message / campaign / agent each joined to — the reconciliation surface when a rollup looks wrong.
- Direct-attribution aggregates. Bulk exports and report cards compute direct-attribution aggregates; multi-touch detail endpoints compute allocated credit. They answer different questions by design.
linear allocation against a first_touch report card and call the difference a bug. Note which model a figure came from before you compare it to another figure.
6. Where the deep guides and references plug in
- Conversion goals (Insights → Goals) — the one deep guide this overview positions: goals from end to end.
- Multi-touch attribution — channel and campaign credit across the whole program.
- Campaign ROAS and revenue attribution — per-campaign economics, including the campaign attribution-funnel view.
- Read the click-to-chat attribution funnel — ad-entry attribution for click-to-chat traffic.
- Agent ROI attribution — goal-attributed revenue read back per AI agent.
- Campaign ROI bulk export — the export path for flat campaign rows.
- CDP event model — the event vocabulary every conversion surface matches against.
- The API endpoints behind these surfaces live in the analytics, insights, CDP, and campaigns references — as the dashboard side of the surfaces above, so you can mirror every read from your own tooling.