← Back to blog

The Revenue Graph Data Model: Connecting Journeys, Systems, and Closed Revenue

The Revenue Graph Data Model: Connecting Journeys, Systems, and Closed Revenue

Most companies do not lack data. They lack relationships. CRM tables, ad exports, call logs, ecommerce orders, and product events each tell a partial story. When those records are not connected, reporting becomes reconciliation theater—and AI assistants get isolated facts instead of a revenue engine they can reason over.

A Revenue Graph is Convertmax’s model for keeping people, touchpoints, business systems, and revenue events connected. It underpins revenue intelligence on the platform. For the product thesis, see The Revenue Graph article. This methodology focuses on the data model: entities, edges, how attribution queries the graph, and how to build connected measurement without boiling the ocean.

Why siloed tables lose the plot

Siloed approachWhat you seeWhat you lose
Ad platform exportClicks, platform conversionsClosed revenue, assists, CRM quality
CRM-only reportingPipeline and won dealsPre-CRM journey and campaign truth
GA4 / web analyticsSessions and goalsCalls, invoices, multi-system identity
Commerce adminOrders and SKUsAcquisition path and LTV by channel
Warehouse star schemas without graph intentJoins you must re-inventStable relationship semantics for product + AI

A graph does not magically create missing events. It preserves edges so a closed-won deal remains tied to the sessions, campaigns, and calls that preceded it.

Core entities

EntityMeaningTypical sources
PersonIndividual buyer / userForms, CRM contacts, commerce customers
AccountCompany / household / orgCRM accounts, B2B enrichment
SessionVisit on owned propertiesFirst-party analytics
Campaign / ChannelMarketing investment unitUTMs, ad platforms, email
TouchpointInteraction node (page, content, ad click)Web, email, ads
CallPhone conversationCallRail, CTM, etc.
OpportunitySales pipeline objectCRM
Order / InvoiceCommerce or billing outcomeShopify, Magento, Vendure, Stripe
Revenue eventNormalized money outcomeClosed-won, paid invoice, refund
ConvertUCP-normalized outcome eventWeb, CRM, calls, commerce

Edge types (relationships that matter)

  • Campaign influenced Session; Session belonged to Person
  • Person is member of Account
  • Person placed Call
  • Person owns Opportunity; Opportunity produced Revenue event
  • Person placed Order; Order produced Revenue event
  • Session or Campaign assisted Convert (UCP)
  • Agentic context labeled on Session or Convert

Edges are the difference between “we have a Google Ads row” and “this $48k deal was assisted by three campaigns and two calls.”

CRM-alone vs Revenue Graph

QuestionCRM aloneRevenue Graph
When did the journey start?Often at lead createAt first first-party session
Which campaigns influenced the deal?UTM fields if luckyConnected touchpoints + converts
Did calls matter?Notes / activities if loggedFirst-class call nodes with source
What is LTV by channel?Hard / incompleteTraversable person → orders → revenue
Can AI explain a revenue dip?Partial CRM contextCross-system neighborhood of the graph
Vendor lock-inHigh if CRM is center of universeCRM is one source among many

Convertmax is CRM agnostic by design: the graph is the intelligence layer; the CRM is a critical operational system, not the only truth.

How attribution queries the graph

Attribution is a walk over time-ordered touchpoints and converts for a person (or account), ending at a revenue event:

  1. Select revenue events in a period (closed-won, paid orders).
  2. Resolve the person/account neighborhood.
  3. Collect ordered touchpoints and UCP converts before the outcome (and within your lookback policy).
  4. Apply a model (first, last, linear, U-shaped, time-decay, data-driven).
  5. Aggregate credit to campaigns/channels for budget decisions.

Without edges, step 3 collapses into last-click folklore. With edges, models become comparable experiments on the same facts.

Data flow architecture

  1. First-party web/app, call tracking, CRM, commerce/billing, and product events feed identity resolution.
  2. Identity resolution writes into the Revenue Graph.
  3. UCP converts attach to the same people and accounts.
  4. Attribution, journey, and LTV views read from that connected model.

First-party analytics feed sessions under ITP constraints. UCP normalizes converts. The graph stores both as connected structure for revenue intelligence.

Methodology: build connected measurement in sequence

  1. Pick the revenue definition — pipeline, booked, collected, or net. Write it down.
  2. Instrument first-party journeys — owned-domain collection before pixel archaeology.
  3. Choose identity keys — email, CRM ID, commerce ID; enforce on known converts.
  4. Connect one CRM or commerce source end-to-end — prove one closed path before adding five integrations.
  5. Add calls if phone is a conversion path — otherwise high-intent demand stays invisible.
  6. Normalize converts with UCP semantics — same language across emitters.
  7. Label agentic traffic — protect human revenue metrics (Agentic Commerce).
  8. Compare attribution models on the graph — do not swap tools to change the story; change weights on shared facts.
  9. Operationalize decisions — budget, creative, sales routing—from graph-backed reports, not platform screenshots.

Example questions the graph should answer

  • Which campaigns assisted deals that closed above a revenue threshold after including calls?
  • Which channels create customers with higher repeat order rate—not just first purchase?
  • Where do journeys drop between first session and opportunity create?
  • Which AI referrals correlate with qualified pipeline without counting agent crawlers as buyers?
  • Why did revenue in a region decline—campaign mix, sales velocity, or acquisition quality?

These are relationship questions. Flat exports struggle; a Revenue Graph is built for them—and for AI systems that need coherent context rather than disconnected rows.

Minimal viable graph vs mature graph

You do not need every entity on day one.

StageEntities in scopeDecision unlocked
MVPSession, Person, Campaign, one Revenue event (CRM or commerce)Channel contribution to closed revenue
Growth+ Call, Opportunity stages, Order line itemsSales-assist and product mix quality
Mature+ Account buying committees, product usage, agentic labels, refundsLTV, expansion, AI-era demand quality

Expand breadth only after one vertical path is trustworthy. A shallow graph with clean identity beats a wide graph of contradictory joins.

Anti-patterns

Anti-patternWhy it hurts
Making the CRM the only node that “counts”Erases pre-CRM demand creation
Storing campaigns only inside ad platformsBreaks historical joins when accounts change
Deduplicating people aggressively without keysMerges strangers; corrupts attribution
Ignoring refunds/churn edgesOverstates channel LTV
Feeding AI raw unrelated CSVsModels guess relationships the graph should declare

Quality checks before you trust a report

  1. Coverage — What share of closed revenue events have at least one pre-CRM marketing touchpoint?
  2. Identity — What share of revenue events resolve to a person with a durable key?
  3. Ambiguity — How often is channel still Direct/none after enrichment?
  4. Conflict — How far do ad-platform claimed conversions diverge from graph-attributed revenue?
  5. Stability — Do model comparisons move budgets the same direction week over week, or is the graph still shifting under you?

If coverage and identity are weak, fix collection before debating U-shaped vs data-driven weights. Models cannot repair missing edges.

From graph to operating rhythm

  • Weekly — channel contribution vs spend on shared revenue definition.
  • Monthly — journey quality (LTV, win rate, sales cycle) by source.
  • Quarterly — model policy review with marketing, sales, and finance.
  • Continuously — exception queues for high-revenue deals with broken identity or missing campaign context.

That rhythm turns the Revenue Graph from architecture into a management system.

What “good enough” looks like after 90 days

You do not need a perfect historical backfill to start. After roughly a quarter of clean first-party collection and connected converts, most teams can answer:

  • Which two or three channels deserve more budget under a shared revenue definition?
  • Which sources create meetings or orders that sales actually wants?
  • Where Direct/none still dominates—and whether that is an identity gap or a true brand effect?
  • Whether call paths are load-bearing for revenue or noise?

If those answers remain murky, the issue is usually missing edges or inconsistent convert types—not a shortage of dashboards. Fix the graph; then the reports get interesting.

Connected measurement is a product of discipline: shared revenue definitions, first-party capture, identity keys, and converts that mean the same thing in every system. The Revenue Graph is how that discipline stays durable as tools change. When relationships are explicit, budget debates get shorter—and AI answers stop hallucinating joins that were never in the data.

Related