Skip to content

Workflows · Guide

RevOps Data Model: Unifying Sales, Marketing, and CS Data

A RevOps data model unifies sales, marketing, and CS data around the account as the primary entity. Here is the 7-layer model, the joins, and the rollout.

June 11, 2026 13 min read Siddharth Gangal By Siddharth Gangal
Workflows

13 min read · June 11, 2026

What a RevOps data model actually is

A RevOps data model is the conformed schema that unifies sales, marketing, and customer success data around a single primary entity, then exposes governed metrics marts to every revenue dashboard. It lives in the warehouse, not the CRM. The model defines six canonical tables (account, contact, opportunity, activity, product_usage, revenue), the joins between them, and the lifecycle states each record passes through. Every report any go-to-market leader reads should read from this model.

Direct answer. A RevOps data model unifies sales, marketing, and customer success data around the account as the primary entity, using six conformed tables and five canonical joins. The 7-Layer RevOps Data Model — source, ingestion, identity, canonical entities, lifecycle states, metrics marts, activation — is the architecture every B2B revenue team needs to ship attribution, forecasting, and renewal motions off the same number.

RevOps data model. The conformed warehouse schema that joins sales, marketing, and CS data around a single primary entity (usually the account) and exposes governed metrics marts to every revenue dashboard. Without it, every team builds its own number; with it, Gangly, Salesforce, and the boardroom report the same pipeline.

The model matters now because the average B2B revenue team runs eight to twelve source systems and three reporting tools, each with its own definition of "qualified pipeline" (Salesforce, 2025). When the VP of Marketing reports a different funnel number than the CRO, the board loses confidence and the team loses a quarter to reconciliation work. A unified model is the only way out. The Gong Revenue Operations Benchmark reports that teams with conformed warehouse data run forecast reviews twice as fast as teams running off raw CRM exports.

This guide ships the 7-layer architecture, the six-week rollout plan, the joins, the governance rubric, and the six mistakes that quietly break attribution. It is the playbook a head of revenue operations hands to a data engineer on day one. For the role split between Sales Ops and RevOps, see Sales Ops vs RevOps.

Why disconnected GTM data costs you 12% of pipeline

Disconnected go-to-market data costs B2B teams roughly 12 percent of pipeline through misrouted leads, double-counted attribution, stale ICP fits, and churn risk that surfaces too late (Gartner, 2025). The Validity 2025 CRM research finds that 40 percent of CRM records carry at least one stale field, and the Forrester Total Economic Impact study (2024) on a unified RevOps platform pegs the 18-month ROI at 3.4x. The cost compounds because every disconnected report breeds a workaround, every workaround breeds a custom field, and every custom field breeds a new source of truth.

12%

Pipeline lost to bad data

Gartner, Magic Quadrant for Data and Analytics, 2025

40%

Of CRM records have at least one stale field

Validity CRM and Email Marketing Research, 2025

6wks

Typical rollout for a 6-table canonical model

Gangly customer benchmark, 2026

3.4x

ROI on a unified RevOps data model in 18 months

Forrester Total Economic Impact, 2024

Three failure patterns repeat across teams without a model, and the Bridge Group SaaS AE Metrics study (2025) documents each one as a top-five barrier to quota attainment. First, the funnel splits: Marketing reports 1,200 MQLs, Sales sees 740 in their queue, and 200 are duplicates of accounts already in a closed-won relationship. Second, attribution breaks: the source field is overwritten on every form fill, so the third-touch webinar gets credit the first-touch paid search earned. Third, the renewal motion fails: CS health scores live in Gainsight, opportunity history lives in Salesforce, and neither team sees the joint signal that a champion left two weeks ago.

The reconciliation tax. Teams without a unified model spend 6 to 10 hours per week reconciling numbers across Salesforce, the marketing platform, and CS tooling. That is one full FTE per twenty heads of GTM (Gangly customer benchmark, 2026).

Canonical entity. A conformed table in the warehouse that represents one business object (account, contact, opportunity) joined and cleaned from every source system. Every downstream metrics mart and dashboard reads from a canonical entity, not from raw CRM tables, so a stage rename in Salesforce does not silently break the funnel report.

For the CRM-side cousin of this problem, see CRM data quality and the CRM hygiene glossary entry. A clean CRM is a precondition for a clean model, not a substitute.

The 7-Layer RevOps Data Model: a unifying architecture

The 7-Layer RevOps Data Model is the architecture pattern that unifies every revenue source into a single warehouse-resident schema, then activates the result back into the operational systems reps use. Each layer has one job. Skipping a layer means another layer absorbs work it was not designed for, and the model leaks.

  1. 1

    Layer 1: Source systems

    Salesforce or HubSpot for sales, Marketo or HubSpot Marketing for demand, Gainsight or Vitally for CS, Segment or Rudderstack for product telemetry. This is the raw layer; do not query it for reporting.

  2. 2

    Layer 2: Ingestion and ELT

    Fivetran, Hightouch, or Airbyte land raw tables in the warehouse on a 15-minute cadence. Snowflake, BigQuery, or Databricks holds the data. Schema names mirror the source.

  3. 3

    Layer 3: Cleansing and identity resolution

    Clearbit, ZoomInfo, or Crunchbase resolve company identity. Domain plus normalized name becomes the deterministic account key. Personal-email contacts get matched to the work account by employment data.

  4. 4

    Layer 4: Canonical entities

    Six conformed tables: account, contact, opportunity, activity, product_usage, and revenue. Every downstream report joins these. No mart query touches a raw source table.

  5. 5

    Layer 5: Funnel and lifecycle states

    Account lifecycle stage, contact stage, and opportunity stage live as slowly changing dimensions. Every change writes a row in account_stage_history so velocity reports work without a guess.

  6. 6

    Layer 6: Metrics marts

    Pipeline_metrics, funnel_metrics, retention_metrics, attribution_marts. Each mart is a single dbt model with a defined grain. Looker, Tableau, Hex, and the CRM dashboard all read from here.

  7. 7

    Layer 7: Activation

    Reverse ETL via Hightouch or Census pushes scores, lifecycle stage, and health signals back into Salesforce, HubSpot, Marketo, and Outreach. The reps and the marketers see the same number the dashboard shows.

The Activation layer (Layer 7) is the one most teams skip and the one that drives adoption. A health score that lives only in a Looker dashboard does not change rep behavior. The same score, pushed into Salesforce on the account record and surfaced in the rep's sales workflow, changes the next call. The reverse-ETL step is what closes the loop between the warehouse and the field.

Fast tip. Build the canonical entity layer first, even if Layer 7 ships in month three. Every dbt model downstream depends on Layer 4 being stable.

Pick your primary entity: account, contact, or opportunity

The account is the primary entity for B2B revenue teams. It is the only object that survives a deal cycle, a renewal, an expansion, a champion change, and a rep handoff. Contact and opportunity are children of the account through employment and through deal context. Lead is a temporary state of contact, not a peer entity. Pick this choice and every downstream join becomes deterministic.

Primary entity. The object the data model orients around: every join, every metric grain, and every dashboard filter rolls up to it. In B2B RevOps, the primary entity is the account; in product-led-growth motions, it is the contact or workspace until conversion, then the account.

The trade-offs across the three candidate primaries:

CandidateStrengthsWeaknessesBest for
AccountSurvives renewals, expansions, rep handoffs; one canonical buyer unitRequires identity resolution on domain plus normalized nameB2B sales-led and account-based motions
ContactOne row per buyer; clean in PLG and freemium funnelsLoses meaning when a champion changes jobs; weak for ABMSelf-serve PLG, freemium-to-paid conversion
OpportunityClosest to the booked-revenue numberDies at closed-lost or closed-won; cannot model renewalsPure new-business teams with no renewal motion

Verdict. Pick the account for any B2B team selling to companies with a multi-stakeholder buying motion. The account survives the deal; the deal does not survive the account. The only reason to deviate is a product-led-growth motion where individual users buy before companies do, in which case promote the contact to primary until the conversion event.

The five canonical joins every RevOps model needs

Five canonical joins unify the model. Each join has a known grain, a known cardinality, and a known failure mode. Get these five right and every downstream report is a straightforward dbt model. Get them wrong and every report has a footnote.

  1. 1

    account ↔ contact (one-to-many)

    Joined on account_id, where account_id is resolved by domain plus normalized name during ingestion. Failure mode: personal-email contacts orphan to a null account; route to a review queue, not a hidden bucket.

  2. 2

    account ↔ opportunity (one-to-many)

    Joined on account_id. Every opportunity belongs to exactly one account. Failure mode: opportunity_id changes on stage migrations; lock the surrogate key in Layer 4 to survive Salesforce schema changes.

  3. 3

    contact ↔ activity (one-to-many)

    Joined on contact_id, with a fallback join on account_id for activities logged at the account level. Failure mode: dialer and email tools log to different identity fields; resolve in Layer 3 with a unified person key.

  4. 4

    account ↔ product_usage (one-to-many)

    Joined through a tenant_id-to-account_id mapping table maintained by Customer Success. Failure mode: free trials and pilots create tenant rows before the account exists; backfill on conversion.

  5. 5

    opportunity ↔ revenue (one-to-one)

    Joined on opportunity_id at closed-won, with a separate billing_account_id for downstream invoicing. Failure mode: bookings versus revenue mismatch; pick one definition per metric and stick with it.

Trap. Never join activity to opportunity directly. The activity belongs to the contact and bubbles up to the account; the opportunity is one of several outcomes the activity may influence.

Governance: who owns each field across Sales, Marketing, and CS

Governance fails when every team thinks it owns every field. The fix is a four-column rubric (Read, Write, Trigger, Audit) assigned per field, per team. Sales writes opportunity stage. Marketing writes MQL date. CS writes health score. RevOps writes lifecycle stage because the lifecycle spans all three motions.

FieldSalesMarketingCSRevOps
Account name and domainReadReadReadWrite
Lifecycle stageTriggerTriggerTriggerWrite
MQL date and sourceReadWriteReadAudit
Opportunity stage and amountWriteReadReadAudit
Closed-won date and ARRWriteReadReadAudit
Health score and churn riskReadReadWriteAudit
Product usage metricsReadReadReadWrite

Field ownership rubric. A per-field assignment of Read, Write, Trigger, or Audit rights across Sales, Marketing, CS, and RevOps. Write means create or update the value; Trigger means change a workflow on the value but never overwrite it; Audit means review for drift and escalate, never edit. The rubric prevents the every-team-owns-every-field default that breaks attribution.

The rubric drives a one-page data contract. Publish it. Every field on the data contract has a single Write owner. Every change to a Write-owned field gets logged. Every Trigger entry has a documented downstream workflow so a Marketing automation cannot silently overwrite a Sales-owned field. The contract is the artifact a new ops hire reads on day one to know who to ask about which number.

How to roll out a RevOps data model in six weeks

A six-week rollout ships a 6-table canonical model on a single warehouse with one to three sources. The plan front-loads scope decisions and back-loads activation, so the team can stop after week four if the budget runs short and still have a usable foundation. Add two weeks per additional source.

  1. Week 1

    Audit and freeze scope

    Inventory every report any GTM leader looks at. Pick the 12 that matter. Freeze the rest. This is the only contract you ship to.

  2. Week 2

    Source map and identity

    Map every source table to one of the six canonical entities. Resolve account identity on domain plus normalized name. Reject ambiguous matches into a queue, do not silently merge.

  3. Week 3

    Build canonical entities

    Ship dbt models for account, contact, opportunity, activity, product_usage, revenue. Define grain in YAML. Test for uniqueness and not-null on every primary key.

  4. Week 4

    Funnel stage history

    Backfill account_stage_history and opportunity_stage_history from CRM history tables. Validate that every closed-won account has at least one MQL row upstream.

  5. Week 5

    Metrics marts and the 12 reports

    Rebuild the 12 frozen reports off the marts. Compare every number against the legacy report. Resolve every variance over 2 percent before signoff.

  6. Week 6

    Activation and rollback plan

    Reverse-ETL lifecycle stage, health score, and account tier back into the CRM. Document the rollback path on a one-page runbook. Then hand reads to GTM.

The week-one freeze is the single most important step. Most data model projects fail not because the engineering is hard but because scope grows every Monday morning. Twelve reports is the cap. Anyone who wants a thirteenth report waits until phase two. The team that ships phase one in six weeks earns the political capital to take on the next twelve.

Fast tip. Pick a single VP-level sponsor in week one. Every scope dispute escalates to them. Without one sponsor, week three becomes a calendar war.

For the forecasting layer that consumes this model, see AI sales forecasting. For the field-level CRM cleanup that precedes the model build, see CRM data quality and the sales pipeline glossary entry.

RevOps data model mistakes that quietly break attribution

Six mistakes break the model after rollout. Each one looks like a small operational choice in the moment and a structural problem at the next quarterly business review. The remediation is rarely a rebuild; it is a contract change plus a backfill.

What works

  • One canonical schema, one Write owner per field
  • Account as primary entity for B2B
  • Identity resolved on domain plus normalized name
  • Slowly changing dimensions for every stage field
  • Reverse-ETL activates scores into the CRM
  • Twelve-report freeze in week one

What breaks

  • Reporting off raw CRM tables in the warehouse
  • Multiple Write owners on the same field
  • Lifecycle stage as a single overwriteable field
  • Silent dedupe merges with no audit trail
  • Health score that never reaches the rep
  • Scope creep past the 12-report freeze

The most expensive of the six is stage-as-single-field. The first time the VP of Sales asks how long deals spend in Demo Scheduled and the report cannot answer because the stage history was never captured, the model loses credibility. Treat every stage column on every entity as a slowly changing dimension from day one. Backfilling history three months later is a four-week project; capturing it from day one is a YAML configuration.

  1. 1

    Reporting off raw source tables

    A schema rename in Salesforce silently breaks the funnel report. Always read from canonical entities.

  2. 2

    Lifecycle stage as a single overwriteable field

    You lose the answer to "how long did this account sit in MQL". Use a slowly changing dimension and a history table.

  3. 3

    Silent account merges

    Dedupe scripts that merge in the dark destroy attribution. Route ambiguous matches to a review queue.

  4. 4

    Multiple Write owners per field

    Marketing automation overwrites a Sales-owned status. Publish the data contract and lock Write rights.

  5. 5

    No Layer 7 activation

    The score lives in Looker and never reaches the rep. Reverse-ETL to the CRM, the dialer, and the cadence tool.

  6. 6

    Scope creep past the twelve-report freeze

    Phase one slips from six weeks to twenty. Lock the cap, defer the rest.

How Gangly fits the RevOps data workflow

Gangly sits at Layer 7 of the model. The warehouse ships the conformed account, opportunity, and activity tables; Gangly turns them into the next action a rep takes on the next call. Signal Detection reads the canonical signal stream, Call Prep Engine pulls the brief from the account row, Post-Call Notes writes the activity row back, and CRM Hygiene Engine keeps the source-system fields the model depends on clean. The model is the architecture; Gangly is the surface that activates it.

  • Signal Detection : reads the canonical signal stream from the warehouse and routes the next-best account to the right rep within minutes.
  • Call Prep Engine : pulls the account, contact, opportunity, and activity history from the conformed model so the brief is one screen instead of seven tabs.
  • Post-Call Notes : writes the activity row back to the source system in the schema the model expects, so the warehouse receives clean inputs the next morning.
  • CRM Hygiene Engine : suggests stage progressions, close-date updates, and field corrections that keep Layer 1 healthy enough for Layer 4 to trust.

Reps using Gangly Post-Call Notes and CRM Hygiene Engine post 71 percent fewer null-value activity rows to the warehouse (Gangly customer benchmark, 2026). That is the difference between a forecast the CRO commits to and a forecast the CRO discounts.

Frequently asked questions

Common questions on the model, the joins, the rollout, and the governance.

Frequently asked questions

What is the difference between a RevOps data model and a CRM data model? +

A CRM data model defines how account, contact, and opportunity records relate inside Salesforce or HubSpot. A RevOps data model spans every revenue source: CRM, marketing automation, product usage, billing, support, and CS. It lives in the warehouse, not the CRM, so analytics can join sales motion to marketing source and customer health without forcing every column back into Salesforce. The CRM is one source; the RevOps model is the conformed truth.

Should the account or the opportunity be the primary entity? +

Use the account as the primary entity for B2B teams selling to companies with more than one buyer. The account is the only level that survives a deal cycle, a renewal, an expansion, and a champion change. Opportunity is a child of the account, not a peer. Contact and lead are also children of the account through employment. The exception is product-led-growth motions where the individual user is the buying unit; there, contact and account share parity until conversion.

How long does a RevOps data model take to build? +

A six-week rollout is realistic for a six-table canonical model on a single warehouse with one to three source systems. Add two weeks for every additional source (billing, support, product). Add four weeks for cross-region identity resolution if you operate in EMEA under GDPR. The rollout is short because the schema is conformed; the slowdown is always governance, not engineering.

Do I need a data warehouse for a RevOps data model? +

Yes, for any team with more than two source systems. The CRM is not a warehouse. It is an operational system tuned for record updates, not joins across millions of activity rows and product events. Snowflake, BigQuery, or Databricks all work. Pick the one your data team already runs. The model layer (dbt) matters more than the warehouse vendor.

Who owns the RevOps data model: Sales Ops, Marketing Ops, or Data? +

RevOps owns the model. Sales Ops, Marketing Ops, and CS Ops own the source-system contracts. Data Engineering owns the pipelines and the warehouse. The split works when RevOps holds the conformed schema and writes the canonical entity logic, while the function-specific ops teams keep their source tables clean. One leader signs off on every schema change.

How do you handle account merges and deduping? +

Resolve identity on domain plus normalized name during ingestion. Write low-confidence matches to a review queue, not the canonical table. Use Clearbit or ZoomInfo to validate company identity. Keep an account_alias table so renamed companies, subsidiary rollups, and acquisition merges have a deterministic mapping. Never delete a duplicate; flag it and route every downstream reference to the surviving record.

What metrics should the RevOps data model output? +

At minimum: pipeline coverage by segment, funnel conversion by source and stage, sales velocity, win rate by ICP tier, MQL-to-closed-won attribution, NRR and GRR by cohort, account health score, and rep activity-to-pipeline ratio. The 12-report freeze in week one of the rollout makes this concrete. Anything outside that 12 is roadmap, not Day 1.

How does a RevOps data model improve sales forecasting? +

A unified model joins opportunity stage history, activity volume, product usage, and historical close rates by ICP segment. That gives the forecast a weighted probability instead of a rep gut call. Teams running a conformed model show MAPE improvement of 5 to 12 points within two quarters because the inputs (stage age, activity recency, multi-thread depth) are reliable for the first time.

Keep reading

Related posts

Ready to ship the workflow?

Start free for 14 days.

First rep live in under 30 minutes. Signals → outreach → call prep → live coaching → notes — one connected workflow.