Skip to main content
Back to blog

Journey Sankey vs Call-Tracking Attribution: Which Analytics Surface Answers Your Question?

Devotel Orbit ships three attribution surfaces — the cross-channel journey Sankey at /insights/journey-paths, inbound call attribution at /insights/attribution, and campaign-level goals at /outbound/goals. This decider maps each buyer question to the surface that answers it, with example queries and a side-by-side comparison table.

Orbit Editorial Team

Quick answer: Devotel Orbit ships three analytics surfaces that all claim to answer "attribution," and they are not interchangeable. The journey-path Sankey (/insights/journey-paths) reconstructs the cross-channel sequences customers actually walk — it answers how customers move. Call-tracking attribution (/insights/attribution, Call attribution tab) ties inbound phone calls back to the campaign or UTM that sourced them — it answers which marketing touched them first. Campaign goals with multi-touch attribution models (/outbound/goals, backed by Insights > Goals) attribute conversions to outbound touchpoints with a chosen credit model — it answers which touch earns the conversion credit. The decision rule: structural questions about channel behavior go to the Sankey, marketing-sourcing questions go to call attribution, campaign-credit questions go to goals. Most teams need all three; this post is the decider that tells you which to open first and how to keep the answers from contradicting each other.

The full walkthroughs for each surface already exist — the Sankey deep-dive, call tracking and DNI, and outbound goals with route preview. What was missing is the piece that puts them side by side and says "your question determines your surface." This is that piece.

The three surfaces, one line each

SurfaceDashboard pathQuestion it owns
Journey-path Sankey/insights/journey-paths"What sequences do customers actually walk across our channels, and where do they drop off?"
Call-tracking attribution/insights/attribution → Call attribution tab"Which ad, campaign, or partner sourced the inbound phone calls we just received?"
Campaign goals + attribution models/outbound/goals (and Insights > Goals)"Of the outbound touches we made, which one earns credit for the conversion, under which model?"

None of the three produces a number the others contradict, because they count different things. Contradiction only appears when a team asks one surface a question that belongs to another — sequence questions to goals, sourcing questions to the Sankey, credit questions to call attribution.

Side by side: journey Sankey vs call-tracking attribution

These two get confused most often, because both connect "marketing" to "conversation." They differ on unit of analysis, direction of travel, and what counts as an answer.

DimensionJourney-path SankeyCall-tracking attribution
Unit of analysisAggregate journey — thousands of contacts folded into ordered touchpoint sequencesIndividual call, traced to the tracking pool and its source
Marketing question"Which channel sequences repeat, and where do customers stop?""Which campaign/UTM/keyword made the phone ring?"
DirectionBoth directions — inbound and outbound touches in one ordered pathInbound only — a call the customer places to you
Data sourceConversation traffic across voice, chat, email, WhatsApp, SMS, RCSDynamic Number Insertion pools (/numbers/tracking-pools) matching UTM/referrer
OutputNode/link/stage flow, most-walked paths, per-stage drop-off rateCalls and callers attributed per source, per pool
Wrong question to ask it"Which Google Ads campaign deserves credit?" (it has no campaign join)"Where in the journey do customers drop off?" (it has no journey structure)

A concrete way to feel the difference: a home-services company runs Google Ads with two DNI pools. Call attribution tells them emergency-repair ads generate 3x the calls of estimate ads. The Sankey tells them callers who started on WhatsApp convert to voice at stage 2 three times out of four. Both true, both actionable, answering different questions.

The third leg: outbound attribution against the Sankey canvas

The comparison neither of the above owns: an outbound program — dialer campaigns, broadcast calls, journey-triggered sends — that wants to know which touchpoint caused a conversion. That question has no Sankey node and no DNI pool; it lives in Outbound > Goals & attribution (/outbound/goals), where a named conversion goal plus one of four models (last touch, first touch, linear, time decay) turns delivered → answered → converted into per-campaign ROI.

Set against the Sankey canvas:

  • The Sankey asks "given everything that happened, what did the sequence look like?" — reconstructive, model-free.
  • Goals ask "given a conversion, which of our touches takes the credit?" — assignive, model-driven.

An outbound team that tries to read campaign credit off the Sankey will find sequences, not credit. A team that reads goals without the Sankey will know which touch closed but not why 40% of journeys abandoned at stage 2. The two surfaces are complements, and the outbound walkthrough covers the model choice per campaign.

A decision framework you can follow in one pass

Ask the question aloud and route it:

  1. "Which marketing source is making the phone ring / form fill fire?" → Call-tracking attribution (/insights/attribution, Call attribution tab). Requires DNI pools on your inbound numbers (/numbers/tracking-pools).
  2. "How do customers move between our channels, and where do we lose them?" → Journey-path Sankey (/insights/journey-paths). Pure conversation traffic — no setup beyond having channels connected.
  3. "Which of our outbound touches earns credit for the conversion?" → Goals (/outbound/goals or Insights > Goals) with the model that matches the sales cycle — last touch for dialer-close teams, time decay for long nurture cycles, linear when finance wants an honest split.
  4. "Before we send, which route will this message actually take?" → Route preview (/outbound/route-preview) — pre-flight, read-only, the same recommendation the send commits to. Not attribution, but the surface that keeps routing surprises out of your attribution math.

When two surfaces answer adjacent questions, pair them rather than argue: Sankey for structure plus call attribution for source, or goals for credit plus Sankey for the abandonment shape.

Worked example queries on the public endpoints

The dashboard surfaces are backed by tenant-scoped reads you can also call directly. Base URL is https://orbit.devotel.io; every call carries your API key in the Authorization: Bearer header and is scoped to your tenant.

Sankey — order the sequences, prune the noise:

curl "https://orbit.devotel.io/api/v1/analytics/journey-paths?window=30d&entry_channel=whatsapp&min_journeys=10" \
  -H "Authorization: Bearer $ORBIT_API_KEY"

Returns the node/link/stage shape the canvas renders: journeys in the window, per-stage drop-off, most-walked full paths. Raise min_journeys until one-off sequences stop dominating.

Call attribution — which source sent the calls:

The Call attribution tab is backed by:

curl "https://orbit.devotel.io/api/v1/insights/call-attribution" \
  -H "Authorization: Bearer $ORBIT_API_KEY"

Calls attributed to the tracking pools you enabled under Numbers > Call Tracking — per source, per pool.

Goals — credit a conversion under a chosen model:

A goal is created on the Outbound > Goals surface with a model attached (last touch, first touch, linear, or time decay) and an optional monetary value; the same module is readable from Insights > Goals so "outbound" people and "analytics" people see the same definitions. The reads are tenant-scoped queries against the analytics API:

curl "https://orbit.devotel.io/api/v1/analytics/goals" \
  -H "Authorization: Bearer $ORBIT_API_KEY"

Each goal's funnel read (reached → delivered → engaged → converted, with the per-model attribution breakdown) is what turns calls-placed into ROI.

Route preview — pre-flight before a send:

curl -X POST "https://orbit.devotel.io/api/v1/messages/route-preview" \
  -H "Authorization: Bearer $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"+15557654321","body":"Delivery window confirmed for tomorrow 9-11.","message_type":"transactional","urgency":"medium"}'

Returns the channel the smart router would commit to, the reason, the ordered fallback chain, a cost estimate against your tenant's billing posture, and a predicted engagement score — without placing any traffic. Use it to validate routing before a campaign, not to steer sends after the fact. The dashboard page at /outbound/route-preview is a screen that calls this endpoint; the endpoint itself is the one above.

Channel surfaces, compared honestly

A buyer deciding "which analytics surface" is really deciding which channels their attribution has to see. Orbit's read is honest about scope:

  • Voice, chat, email, WhatsApp, SMS, RCS all feed the Sankey — it is the widest surface, and blind to campaign identity.
  • Inbound voice on your DIDs feeds call attribution — narrow, but campaign-precise where the Sankey is campaign-blind.
  • Outbound voice, SMS, WhatsApp, email, and push can carry goals — attribution with a model, scoped to what you sent.
  • Every channel appears on the dashboard's channel surfaces with per-channel delivery truth underneath all three analytics reads — the Sankey sequence, the call source, and the goal funnel never disagree about whether a message actually delivered, only about what that delivery means.

Compare entry: the canonical decider lives on /compare/journeys

The comparison table on the buyer-facing journey-builder comparison now links this piece as its analytics-decider companion. If you landed here from that page: the table told you whether the platform ships the analytics class at all; this post tells you which of the shipped surfaces answers your specific question — the decider the /compare/journeys page itself cannot render without becoming a blog post.

Frequently asked questions

Can I use the Sankey to attribute a conversion to a campaign?

No — the Sankey is campaign-blind by design. It reconstructs sequences from conversation traffic, and conversation traffic carries channels and order, not campaign identity. Attribution to a campaign is what goals (outbound touches) and call attribution (inbound calls via DNI) exist for. The split is deliberate: one surface that never argues with itself about credit, two surfaces that argue about credit with explicit models.

Do the three surfaces double-count the same conversation?

They count different properties of it. A call can be a node in a Sankey path (structure), an attributed call in the Call attribution tab (source), and a touch in a goal funnel (credit) simultaneously — three reads of one event, not three events. Conversation-level truth is shared; the surfaces disagree about nothing except what question was asked.

Which attribution model should I pick for outbound goals in this comparison?

Match the model to the decision it feeds, not to a default. Last touch is the working default for dialer-close campaigns. Time decay fits long cycles where recent touches carry. Linear is the finance-fair split across a blended journey. First touch answers the acquisition question "which source seeded this contact." The outbound goals walkthrough carries the full model table.

Does route preview affect any of the three attribution surfaces?

No. It is read-only — it returns the routing recommendation a send would commit to without placing traffic. Its role in the attribution story is upstream: validating the route pre-send keeps the fallback surprises out of your delivery truth, so the attribution you read afterward describes what you intended to send.

We only have budget to set up one surface first — which?

If your team runs outbound campaigns, goals first — campaign ROI is the question finance will actually ask. If you run paid ads that drive inbound calls, DNI pools + call attribution first. If you support existing customers across channels and churn is the worry, the Sankey first — it needs no setup beyond the channels you already have.

Journey Sankey vs Call-Tracking Attribution: Which Analytics Surface Answers Your Question? — Orbit by Devotel