What RevOps is
Link to section “What RevOps is”In 30 seconds
Link to section “In 30 seconds”RevOps (revenue operations) is the practice of running marketing, sales and customer success as one revenue process instead of three relay teams that each keep their own numbers. It gives those teams one set of funnel definitions, one trusted customer record, explicit hand-offs with service levels, one forecast, and revenue metrics defined once, so leaders can see where revenue is created, where it leaks and what to fix.
Most of the work is unglamorous: agreeing what a “qualified lead” or an “opportunity” is, deciding which system holds the truth about each customer object, routing a new lead in minutes rather than days, and making sure the number given to the board on Monday is the number Finance books at quarter end.
Written for beginners, RevOps practitioners, CRM and data engineers, go-to-market leaders, and the Finance partners who share the numbers. Sources were last verified on 2026-10-23.
At a glance
Link to section “At a glance”| Question | Short answer |
|---|---|
| Goal | One revenue process, measured end to end: shared definitions, clean hand-offs, a credible forecast, trusted revenue metrics |
| Primary users | RevOps teams, sales, marketing and customer success leaders, Finance (financial planning and analysis, FP&A), go-to-market (GTM) system owners |
| In scope | Funnel stage definitions and SLAs between teams, the CRM as system of record, lead routing, the forecast of record (new business, expansion, renewals), revenue metric formulas (ARR, NRR, GRR, CAC, LTV), decision rights over the GTM stack |
| Prerequisites | None; spreadsheet skills help, SQL helps more |
| Key outputs | Stage dictionary, metric definitions, routing rules and SLAs, forecast process, data-quality scorecard, stack decision log |
| Term status | Established as a function and role name, with analyst coverage and a large practitioner community; no standards body and no single definition |
| Evidence status | Partially verified: footnoted claims were checked against opened sources; sources that could not be opened are listed in the ledger |
The problem it solves
Link to section “The problem it solves”Marketing, sales and customer success operations exist in some form wherever a company sells and renews. RevOps asks a different question: do those pieces form one system? The middle column lists typical symptoms; it describes no real firm.
| Area | Without a working RevOps model | With one |
|---|---|---|
| Definitions | “Pipeline” means one thing to marketing, another to sales, a third to Finance | One stage dictionary with entry and exit criteria, owned and versioned |
| Hand-offs | Leads wait days for a first call; some are never touched | Every hand-off has an owner, an SLA and a stuck-record report |
| Data | Duplicate accounts, missing amounts, close dates in the past | Required fields at each stage, deduplication, a data-quality scorecard |
| Forecast | The number changes with the person asked; churn surprises the board | One forecast of record across new business, expansion and renewals; adjustments documented; each part scored |
| Metrics | ARR and NRR differ between the board deck and the finance model | Formulas defined once with Finance, changes disclosed and back-calculated |
| Tools | Every team buys its own tools; integrations break silently | Decision rights per object and system; changes released on a cadence |
Analyst evidence describes the same pain. A Forrester analyst reports that in Forrester’s 2024 survey, Asia-Pacific B2B leaders cite “misaligned technology, conflicting metrics, and inadequate processes” as their key operations obstacles.[1] A Gartner analyst said in 2021 that functional silos handing clients from one function to the other, “using different technologies, people and processes, are a barrier to revenue growth”.[2] These are analysts’ framings, not measurements of your business. The practical test: can you answer, with one number each, how many qualified opportunities you created last quarter, how long new leads waited for a first touch, and how much recurring revenue you kept?
What RevOps is not: naming and boundaries
Link to section “What RevOps is not: naming and boundaries”- Not an org chart. Forrester calls revenue operations “a commercial execution strategy, not an organizational structure”.[3] Its analysts list “it requires headcount centralization” among nine myths and describe successful structures that span “a completely decentralized model” to “a structurally unified centralized operations structure”.[4]
- Not SalesOps renamed. A RevOps team that only runs the sales forecast and the CRM for sellers is sales operations with a new name. The difference shows in scope: marketing-to-sales and sales-to-success hand-offs, and post-sale revenue.
- Not the chief revenue officer. In CNBC’s report on LinkedIn’s 2023 list, the job description says the head of revenue operations position “is also often labeled as ‘chief revenue officer’ or ‘head of revenue management’”.[5] The first two are different jobs: a CRO owns the revenue target and the teams that pursue it; a RevOps leader owns the system those teams run on. Confusing the two puts the referee on one of the teams.
- Not revenue management, the third title in that description. Revenue management is the pricing and availability discipline of airlines and hotels; the INFORMS Revenue Management and Pricing Section frames the question as “what price do I offer when the next customer walks in the door”.[6]
- Not healthcare revenue cycle management. In healthcare, the revenue cycle “comprises all the activities that lead to payment for services provided” (registration, coding, claims, collections);[7] that belongs to HealthOps.
- Not revenue recognition. Bookings, ARR and pipeline are operating measures; recognised revenue follows accounting standards such as IFRS 15 and the US Topic 606.[8] RevOps feeds Finance; it does not replace the accountants.
Where RevOps comes from and where it sits
Link to section “Where RevOps comes from and where it sits”Origins and evolution
Link to section “Origins and evolution”The practice is older than the label. Sales operations, marketing operations and customer success operations existed as separate teams long before “RevOps” became a job title. Only milestones traceable to sources are listed here.
| Year | Milestone |
|---|---|
| 2012 | A revised SiriusDecisions “Demand Waterfall” separates inbound and outbound inquiries and adds automated qualified, teleprospecting and sales-generated leads before the sales-qualified lead and the close, as a practitioner summarised at the time[9] |
| 2019 | Forrester completes its acquisition of SiriusDecisions, a B2B research firm, for $245 million in cash[10] |
| 2021 | Forrester releases the B2B Revenue Waterfall, “formerly known as the SiriusDecisions Demand Unit Waterfall”, adding renewal, cross-sell and upsell opportunities[11] |
| 2021 | Gartner predicts: “By 2025, 75% of the highest growth companies in the world will deploy a revenue operations (RevOps) model”[2] |
| 2023 | LinkedIn’s Jobs on the Rise list for the US ranks “Head of Revenue Operations” first, on title growth from January 2018 to July 2022[5] |
| 2023 | Forrester launches a dedicated research service, Forrester Decisions for Revenue Operations[12], and a “Saying Goodbye to MQLs” series arguing for opportunity and buying-group measurement[13] |
| 2025 | Gartner publishes a Magic Quadrant for Revenue Action Orchestration Platforms dated 15 December 2025, as cited by a vendor;[14] Clari and Salesloft, announced as merging in August, complete their merger in December[15][16] |
Two cautions. The Gartner figure is a prediction; no source opened for this page measures whether it came true. And the LinkedIn ranking measures growth in job titles, which says the label spread quickly, not that the work is new.
Glossary and mental model
Link to section “Glossary and mental model”- Go-to-market (GTM): the teams and systems that find, win and keep customers: marketing, sales, customer success, partners.
- Lead, contact, account: a person not yet qualified; a person linked to a customer organisation; the organisation itself. In Salesforce, a qualified lead can be converted “to an account, contact, and, optionally, an opportunity”.[18]
- Lifecycle stage: where a person or company is in the customer journey. HubSpot’s defaults are Subscriber, Lead, Marketing Qualified Lead, Sales Qualified Lead, Opportunity, Customer, Evangelist and Other, and its default automatic updates only move the stage forward.[19]
- MQL, SAL, SQL: a lead marketing judges ready for sales; a lead sales has accepted for follow-up; a lead sales has qualified as a potential customer. Names and criteria differ by company; that is why RevOps writes them down.
- Opportunity and its stages: a potential deal with an amount, a close date and a stage; each stage needs entry and exit criteria (what must be true to enter it and to leave it).
- Buying group: the several people who make or influence a purchase. Forrester’s 2021 Waterfall release states that “95% of current purchases involve three or more people across two or more departments”.[11]
- Hand-off SLA: a written service level between two teams, for example: sales accepts or rejects an MQL within two working days.
- Bookings, ACV, TCV: the value of contracts signed in a period; annual contract value; total contract value. Bookings and revenue “aren’t the same thing”.[20]
- ARR / MRR: annual / monthly recurring revenue, an operating measure, not accounting revenue (defined in metrics).
- GRR / NRR: gross / net revenue retention: revenue kept from existing customers excluding / including expansion.
- CAC, CAC payback, LTV: cost to acquire a customer; months of gross margin to recover it; lifetime value of a customer.
- Forecast category: a seller’s or manager’s judgement of a deal for the forecast, such as Pipeline, Best case, Commit; HubSpot’s forecast tool, for one, defines its categories by order of likelihood rather than by name.[21] (SalesOps owns the category rules.)
- Forecast of record and renewal base: the one forecast version, frozen at an agreed snapshot, that goes to Finance and is scored later; and the contracts whose term ends in a period, with their ARR, renewal date and risk.
- Role and system abbreviations: SDR (sales development representative, who qualifies leads and books meetings); AE (account executive, who owns a deal to signature); CSM (customer success manager: onboarding, adoption, renewal); CoE (centre of excellence, a shared team serving several functions); FP&A (the Finance team that owns plans and forecasts); CPQ (configure, price, quote: software that builds quotes and orders).
- System of record (SoR): the one system whose value wins for a given object or field.
A mental model: a relay, a ledger and a control loop
Link to section “A mental model: a relay, a ledger and a control loop”Hold three pictures at once:
- A relay race. The customer is the baton; marketing, sales and success are runners; races are lost in the hand-off zones. RevOps marks the zones, times them and makes someone responsible for every dropped baton.
- A ledger. Every team writes to the same book of definitions and records. A “qualified opportunity” or “ARR” has one entry, one owner and a history of changes.
- A control loop. The forecast is a measurement of the system’s future output. Comparing forecast with actual, every week and every quarter, tells you whether the system is understood.
Most RevOps failures are one of these pictures breaking: a dropped hand-off, two ledgers, or a loop nobody closes.
How RevOps relates to other Ops
Link to section “How RevOps relates to other Ops”RevOps is the integrator; most neighbours are specialists that own one segment of the same customer journey. The figure labels the main artefact on each two-way boundary; the table names the owners.
Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 140, "nodeSpacing": 14, "rankSpacing": 34}}}%%
flowchart LR
BZ["BizOps: targets and cadence"] --> R
PV["PrivacyOps: consent and objections"] -.-> R
CX["CXOps, SupportOps: customer signals"] -.-> R
R["RevOps: definitions, hand-offs, forecast, stack decisions"]
R <-->|"SLA report"| MO["MarketingOps: campaigns, scoring"]
R <-->|"forecast calendar"| SO["SalesOps: quotas, new-business call"]
R <-->|"renewal base"| CO["CustomerOps: health, renewal call"]
R -->|"field map"| MT["MarTechOps: stack plumbing"]
R -->|"definition cards"| AN["AnalyticsOps: metric layer"]
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
class R core
class BZ,MO,SO,CO,MT,AN,PV,CX neutral
Text equivalent: Three neighbours feed RevOps: BizOps (targets and planning cadence, solid line), PrivacyOps (consent and objection rules, dotted) and CXOps with SupportOps (customer signals, dotted). RevOps exchanges artefacts in both directions with three specialists — MarketingOps through the SLA report, SalesOps through the forecast calendar, CustomerOps through the renewal base — and hands stack decisions to MarTechOps as a field map and metric definitions to AnalyticsOps as definition cards. Green: RevOps. Grey: neighbouring pages.
| Neighbour | RevOps owns | The neighbour owns | Hand-off artefact |
|---|---|---|---|
| MarketingOps | MQL definition and the marketing-to-sales SLA | Campaign operations, scoring models, the marketing automation platform | Stage dictionary; SLA report |
| SalesOps | Stage dictionary (what counts as an opportunity and as pipeline); the one forecast of record (the CRO is accountable for its value) and its component scoring | Territories, quotas, capacity, deal desk; sales-stage exit criteria and commit rules; the new-business forecast call and its accuracy log by caller and method | Forecast calendar; component scorecard |
| CustomerOps | NRR/GRR formulas, the sales-to-success hand-off, the renewal record type | Health scores, renewal and expansion playbooks, the renewal call | Hand-off checklist; renewal base; retention bridge |
| MarTechOps | Which system is the record for which object | Architecture and integration of the marketing stack | Decision log; field map |
| BizOps | Funnel metrics that feed the company metric tree | Company OKRs, planning cadence, headcount plan | Revenue plan inputs |
| AnalyticsOps | The business definition of revenue metrics (with Finance) | Metric cards, semantic layer, certified dashboards | Definition card per metric |
| CXOps, SupportOps | Using journey and service signals in revenue processes | NPS/CSAT design; tickets and SLAs | Signals in the CRM |
| PrivacyOps | Applying consent and objection rules in GTM systems | Records of processing, lawful-basis decisions | Suppression lists; field-level rules |
| PeopleOps | Supplying clean attainment data | Pay structures and pay governance for sales roles | Plan rules; payroll inputs |
Principles and operating model
Link to section “Principles and operating model”Charter and principles
Link to section “Charter and principles”This charter is this Atlas’s proposal; no official RevOps manifesto exists.
Mission. Make the revenue process one measured system, from first signal to renewal, that teams trust and leaders can steer.
Principles.
- Capabilities before boxes. Decide what must work (definitions, data, routing, forecast) before deciding who reports to whom; Forrester’s analysts argue the structure should be tailored.[4]
- Define once, use everywhere. Each stage, field and metric has one definition, one owner and a version history.
- Every hand-off has an owner, a clock and an exit. Accept, reject or recycle; never leave a record waiting.
- One system of record per object. Conflicts are settled by the decision log, not by whoever synced last.
- Forecasts are measurements, targets are decisions. Keep them separate and score the forecast.[22]
- Measure from the customer’s side as well. Response time and time to value matter as much as internal conversion.
- Change the system on a cadence. Batch, test and announce changes to fields, stages and routing.
Non-goals. RevOps does not own quotas or territories, campaign creative, customer success playbooks or accounting policy. It does not “own revenue”; the CRO and the business own the number.
Invariants (must stay true). Every open opportunity has an owner, a stage that meets its entry criteria, an amount and a close date in the future. Every MQL is actioned within the SLA. Every contract ending within 120 days has a renewal record. The ARR in the board deck reconciles to the finance model. No metric definition changes without a version note.
Fundamentals and building blocks
Link to section “Fundamentals and building blocks”Forrester’s definition names four ingredients: data, processes, technology and talent.[3] This page adds a fifth, definitions, because in practice that is where most teams start, and it is the part no tool supplies.
| Building block | What it contains | Typical first artefact |
|---|---|---|
| Definitions | Stage dictionary, lifecycle rules, metric formulas, attribution rules | One-page stage dictionary |
| Data | Objects (lead, contact, account, opportunity, subscription), required fields, deduplication, enrichment | Field ownership map |
| Process | Routing, hand-off SLAs, forecast cadence, deal and renewal reviews, change control | Routing rules and SLA document |
| Technology | CRM, marketing automation, CPQ, billing, CS platform, warehouse, BI, routing and forecasting tools | Stack decision log |
| Talent and cadence | Roles, RACI, rituals, enablement on definitions | RACI and operating calendar |
Roles, ownership and RACI
Link to section “Roles, ownership and RACI”Common roles (titles vary): head of RevOps (owns definitions, operating cadence and stack decisions); GTM systems administrators and architects (CRM, automation, integrations); revenue analysts (funnel, forecast, retention analysis); deal desk and order management (often in SalesOps); enablement (teaches the process). GitLab’s handbook documents one arrangement: its Field Operations group contains, among others, Sales Operations, Deal Desk, Sales Commissions, Data Intelligence, Sales Systems, Field Enablement and Customer Success Operations, and states that “Data Intelligence (DI) is a part of Field Operations reporting to Revenue Operations”.[23] One company’s arrangement, not a template.
Three structures appear in practice, and Forrester’s analysts suggest the hybrid may be ideal for many, with a centre of excellence for “data, analytics, and technology”.[4]
| Structure | How it works | Works when | Watch for |
|---|---|---|---|
| Decentralised | Marketing, sales and CS ops stay in their functions; a council owns shared definitions | Few products, strong informal trust | Definitions drift; nobody owns cross-funnel metrics |
| Hybrid (centre of excellence) | Shared CoE for data, systems and analytics; functional ops keep specialist work | Most mid-size and large companies | CoE becomes a ticket queue without decision rights |
| Centralised | One RevOps leader owns all GTM ops staff | Strong mandate, one GTM motion | Specialist depth lost; seen as a “land grab”[4] |
RACI for the decisions RevOps is accountable for (R = responsible, A = accountable, C = consulted, I = informed). This is a proposal; adapt names to your organisation.
| Decision | RevOps | Marketing (Ops) | Sales (Ops) | Customer success (Ops) | Finance |
|---|---|---|---|---|---|
| Stage dictionary and lifecycle rules | A, R | C | C | C | I |
| Sales-stage exit criteria and commit rules | C | I | A, R | I | I |
| MQL definition (criteria and SLA) | A | R | C | I | I |
| Lead scoring model | C | A, R | C | I | I |
| Health score model | C | I | I | A, R | I |
| Lead routing rules and SLAs | A, R | C | C | I | I |
| Forecast of record: components, calendar, snapshots, scoring | A, R | I | C | C | C |
| New-business forecast call | C | I | A (CRO), R | I | C |
| Renewal and churn forecast call | C | I | I | A, R | C |
| Committed value of the forecast of record | R (compiles) | I | A (CRO) | C | C |
| ARR, NRR, GRR, CAC formulas | R | C | C | C | A |
| System of record per object | A, R | C | C | C | C |
| Territories and quotas | C | I | A, R | I | C |
Two points deserve comment. RevOps defines, compiles and scores the forecast of record, but the CRO is accountable for its committed value: the referee does not score the goals. And Finance is accountable for metric formulas that reach investors, because those numbers sit next to audited financials.
The revenue lifecycle
Link to section “The revenue lifecycle”A recurring-revenue business has two halves: winning the customer, and keeping and growing them. Winning by Design presents its “bow tie” as “a common language and data model for recurring revenue businesses”[24]; Forrester’s 2021 Waterfall likewise treats renewal, cross-sell and upsell as opportunity types.[11] The figure uses generic stage names.
Diagram source (Mermaid)
flowchart TB
subgraph ACQ["Acquire"]
A1["Target accounts and buying groups"] --> A2["Engaged: MQL or hand-raise"]
A2 --> A3["Accepted and qualified"]
A3 --> A4["Opportunity: stages with exit criteria"]
end
A4 --> W{"Closed won?"}
W -- "No" --> NR["Closed lost: reason, nurture, recycle"]
W -- "Yes" --> H["Sales-to-success hand-off"]
subgraph KEEP["Keep and grow"]
H --> K1["Onboard to first value"]
K1 --> K2["Adopt and renew"]
K2 --> K3["Expand: upsell and cross-sell"]
end
K3 -.-> A4
NR -.-> A2
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
class A1,A2,A3,A4,H,K1,K2,K3 core
class W decision
class NR risk
Text equivalent: In the acquire half, target accounts and buying groups become engaged (an MQL or a hand-raise), then accepted and qualified, then an opportunity with stage exit criteria. A lost deal gets a reason and is recycled to engagement (dotted). A won deal passes a sales-to-success hand-off into the keep-and-grow half: onboarding to first value, adoption and renewal, and expansion through upsell and cross-sell, which creates new opportunities (dotted line back). Red: the lost path. Amber: the decision.
Operating model and governance
Link to section “Operating model and governance”RevOps governance is mostly a calendar and a set of decision rights. A proposed cadence:
| Cadence | Forum | Inputs | Decisions and outputs |
|---|---|---|---|
| Weekly | Forecast-of-record review (after the sales and renewal reviews; prepared by RevOps, chaired by the CRO) | Component calls, changes since last week, slipped deals and at-risk renewals | Forecast of record with a range; risks; data fixes |
| Weekly | Hand-off health check | SLA reports, stuck records, routing exceptions | Re-routes, owner nudges, rule fixes |
| Monthly | Funnel review (marketing, sales, CS, Finance) | Cohort conversion, velocity, retention bridge | Bottleneck owners and actions |
| Quarterly | Definitions council | Change requests to stages, fields, metrics | Approved changes with versions and dates |
| Quarterly | Forecast retrospective | Forecast vs actual by component and week | Each component’s bias back to its owner |
| Every two weeks | GTM release | Tested changes to CRM, routing, automation | Release notes; enablement |
GitLab documents a similar habit: its Field Operations team delivers changes “in a batched, bi-weekly release cadence”,[23] and its field communications team grades each change high, medium or low impact and scales the announcement to the grade — sales-stage launches are high impact, “new high-priority fields” medium, a new field on a page low.[25]
Escalation. Hand-off disputes (sales rejects too many MQLs; success refuses an under-documented hand-off) go first to the weekly health check, then to the functional leaders, then to the CRO and CMO. A definition dispute is never settled by editing the field: it goes to the definitions council.
Architecture and workflow
Link to section “Architecture and workflow”Reference architecture: systems of record per object
Link to section “Reference architecture: systems of record per object”The architecture question in RevOps is less “which tools” than “which system is the truth for which object, and how do the others learn about changes”. The figure shows a common shape for a B2B subscription business.
Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 150, "nodeSpacing": 22, "rankSpacing": 34}}}%%
flowchart TB
MAP["Marketing automation: engagement, consent"] <--> CRM
CS["CS platform: health, success plans"] <--> CRM
CRM["CRM: leads, contacts, accounts, opportunities"] --> CPQ["CPQ: quotes, orders"]
CPQ --> BILL["Billing: subscriptions, invoices, ARR"]
BILL --> CRM
PROD["Product: usage events"] --> WH
CRM --> WH["Warehouse: joined history and snapshots"]
BILL --> WH
WH --> BI["Metric definitions and dashboards"]
WH -.-> CRM
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
class CRM,BILL core
class MAP,PROD,CS,CPQ neutral
class WH,BI decision
Text equivalent: Marketing automation (engagement and consent) and the CS platform (health and success plans) sync both ways with the CRM, which holds leads, contacts, accounts and opportunities. The CRM sends quotes and orders through CPQ to billing (subscriptions, invoices, ARR); billing returns subscription data to the CRM. Usage events, CRM data and billing data flow into the warehouse, which keeps joined history and snapshots, feeds metric definitions and dashboards, and can push derived fields back to the CRM (dotted). Green: the two main systems of record. Amber: the insight layer.
Write the decisions down as a table. This example is illustrative; your systems will differ.
| Object or field | System of record | Who may write | Synced to |
|---|---|---|---|
| Consent, objections, unsubscribes | Marketing automation (or a consent platform) | Marketing; the person; any channel that hears an objection (sellers, support), through one write path | CRM and every outreach tool, within one business day (proposal) |
| Lead, contact, account, opportunity, renewal record | CRM (renewal records created from billing term dates) | Sales, SDRs, CSMs, RevOps admins | Marketing automation, warehouse |
| Subscription, price, term, ARR | Billing | Order management, Finance | CRM (read-only), warehouse |
| Account health, success plan | CS platform | Customer success | CRM summary fields |
| Product usage | Product event store | Product engineering | Warehouse; derived fields to CRM |
| Forecast submissions | CRM forecast module or forecasting tool | Sales managers | Warehouse snapshots |
Three design rules follow. Read-only copies are labelled as copies (a sales rep cannot edit ARR in the CRM). Derived scores come from one place (a score computed in the warehouse is written back, not recomputed in three tools). Snapshots are kept weekly, because most CRM reports show the current state and you cannot measure forecast accuracy or stage slippage without history.
End-to-end workflow: from first signal to renewal
Link to section “End-to-end workflow: from first signal to renewal”The sequence below follows one buying group through the hand-offs that RevOps governs. Each arrow that crosses a team boundary carries a clock.
Diagram source (Mermaid)
sequenceDiagram participant M as Marketing participant S as SDR participant A as Account exec participant C as Success M->>S: MQL routed (clock 1) S->>S: Accept, reject or recycle S->>A: Qualified meeting (clock 2) A->>A: Stages with exit criteria A->>C: Won deal and checklist (clock 3) C->>C: Onboard to value (clock 4) C->>A: Expansion signal (clock 5) C->>C: Renewal call before term end (clock 6)
Text equivalent: Marketing routes an MQL to a sales development representative (SDR), starting clock 1, time to first touch. The SDR accepts, rejects or recycles it. A qualified meeting goes to the account executive (clock 2, time to accept), who runs the opportunity through stages with exit criteria. A won deal goes to customer success with a hand-off checklist (clock 3, time to kick-off). Customer success onboards to first value (clock 4, time to value) and sends expansion signals back to the account executive (clock 5, time to engage). Before each term ends, customer success records a renewal call with its risk and expected ARR (clock 6, days of notice before the renewal date).
Happy path. A lead from a known target account fills in a demo form at 10:02; routing assigns an SDR at 10:02; the SDR calls at 10:20 and books a meeting; the account executive accepts the same day and creates an opportunity once the meeting confirms a problem, a buying group and a timeline. The deal closes eleven weeks later; closed-won creates a hand-off task with the success plan fields completed; customer success runs a kickoff within five working days.
Exception paths. RevOps designs for these, because they are where revenue leaks:
| Exception | Rule (proposal) | Report that catches it |
|---|---|---|
| Lead has no owner (routing rule failed, owner left) | Fallback queue with a named queue owner; alert after 30 minutes | Unassigned leads older than 30 minutes |
| Sales rejects the MQL | Reason code required; recycle to nurture | Rejection reasons by source, monthly |
| Deal stalls in a stage | Ageing threshold per stage; manager review | Stage ageing over threshold |
| Closed won with missing hand-off fields | Stage cannot close until required fields are set | Hand-off completeness |
| Contract nears its end without a renewal record | Record created automatically from billing 120 days before term end | Contracts ending within 120 days without a renewal record |
Practices, frameworks and tools
Link to section “Practices, frameworks and tools”Core practices and playbooks
Link to section “Core practices and playbooks”Five practices carry most of the value — the stage dictionary, routing and hand-off SLAs, the forecast of record, CRM data quality and stack change control. The playbooks below give the steps; the artefacts and labs in the next part let you try each one.
Playbook: one funnel, written down
Link to section “Playbook: one funnel, written down”- Inventory the current meanings. Pull the stage and status picklists from every system (CRM, marketing automation, CS platform) and ask each team how they report “pipeline”, “qualified” and “customer”. Differences are the backlog.
- Choose the unit of the funnel. Lead-based funnels count people; opportunity-based funnels count potential deals with a buying group. Forrester argues for the second, reporting that “fewer than 1% of leads convert to closed deals” and describing the shift as moving “from managing individual leads to identifying, prioritizing, and advancing opportunities with connected buying groups”.[26][27] Many companies keep MQLs as an operational trigger but measure pipeline on opportunities.
- Write entry and exit criteria for each stage as observable facts (“a meeting held with an economic buyer”, not “good call”). Use Artefact 1 as a template.
- Encode the rules. Required fields and validation at each stage; forward-only automatic stage changes (HubSpot’s lifecycle automation, for example, only moves stages forward by default).[19]
- Publish and teach. One page, linked from every report that uses the stages; examples of borderline cases.
- Version it. Every change gets a version, an effective date and a note on how history is treated.
Acceptance criteria. Every report labelled “pipeline” uses the dictionary; open opportunities failing entry criteria fall below an agreed level (for example 2%); the dictionary has a named owner. Rollback. Keep the old stage values mapped for one quarter so historical reports still run.
Playbook: lead routing and the speed-to-lead SLA
Link to section “Playbook: lead routing and the speed-to-lead SLA”Speed matters because buyers who ask for contact move on. Oldroyd, McElheran and Elkington wrote in Harvard Business Review that “most companies are not responding nearly fast enough” to online leads.[28] (One author was then chief executive of InsideSales.com, a sales-software vendor; the widely repeated multipliers from that article are behind a paywall and are not used here.)
- Match before you route. Normalise the email domain and company name, find duplicates, and match the person to an existing account; HubSpot, for instance, deduplicates contacts by email and companies by domain, but not companies created through its API.[29] A lead from a customer or an active opportunity goes to the existing owner.
- Order the rules from specific to general and end with a default rule, so no record can fall through.
- Handle incomplete data explicitly. A record without country or company size goes to an exception queue with an owner, not to a random seller.
- Distribute fairly and visibly. Round robin skips people who are away; capacity rules are written down. HubSpot’s workflow action, for one, assigns records equally within a team by default, with round robin and load balancing options.[30]
- Start the clock. Measure creation-to-first-touch and creation-to-accept for every record, in business hours if your SLA is in business hours.
- Close the loop. Every MQL ends accepted, rejected with a reason, or recycled; rejection reasons by source go to marketing.
Acceptance criteria. Unassigned leads older than 30 minutes: zero on most days; SLA attainment reported weekly by team. Lab 2 builds a small rule engine with these properties.
Playbook: one forecast of record
Link to section “Playbook: one forecast of record”A forecast is a measurement of what the system will produce; a target is what the company wants. The forecasting textbook by Hyndman and Athanasopoulos puts it plainly: “setting targets is different from producing forecasts, and the two should not be confused”, and “Forecasters and users should be clearly segregated”.[22]
In a recurring-revenue business the number Finance and the board need is not the new-business commit alone but the movement of ARR: new business plus expansion minus what is lost at renewal — the bridge Lab 3 builds after the fact, and the split Forrester’s 2021 Waterfall makes when it adds renewal, cross-sell and upsell opportunity types.[11] RevOps owns the forecast of record: the one version, frozen at an agreed snapshot, that combines the components, goes to Finance and is scored later.
| Component | What it covers | Who makes the call | What RevOps defines |
|---|---|---|---|
| New business | First contracts with new customers in the period | Sales leadership, through the SalesOps forecast call | Stage dictionary; close-date and amount rules |
| Expansion | Upsell and cross-sell to existing customers | Account management or customer success | Expansion record type and stages |
| Renewal losses | Churn and contraction among contracts whose term ends in the period | Customer success, in the renewal review | Renewal record per contract; renewal date from billing; written risk bands |
| Roll-up | Net new ARR and end-of-period ARR | RevOps compiles; the CRO commits; Finance is consulted | One ARR definition (Artefact 2); the snapshot rule |
Diagram source (Mermaid)
flowchart TB P["Weekly snapshots: pipeline, renewal base"] --> F["Component calls by their owners"] F --> J["Judgement adjustments with reasons"] J --> N["Forecast of record, separate from target"] N --> A["Actual ARR movements at period end"] A --> E["Error and bias by component and week"] E --> C["Owners recalibrate their calls"] C --> F E --> D["Fix definitions, hygiene, coaching"] D --> P classDef core fill:#e8f3f2,stroke:#16756f,color:#122029 classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029 class P,F,N,A core class J,E,C,D decision
Text equivalent: Weekly snapshots of the pipeline and the renewal base feed the component calls, each made by its owner. Judgement adjustments with written reasons produce a forecast of record kept separate from the target. At period end the actual ARR movements are compared with it to compute error and bias by component and week. That analysis feeds back in two ways: owners recalibrate their calls, and RevOps fixes definitions, data hygiene and coaching. Amber: the steps where people judge and learn.
- Fix the calendar and the snapshot rule. Submission day and cut-off time each week, quarter weeks numbered, and one named snapshot (for example the end of week 4) that becomes the forecast of record. Later versions are kept and scored too.
- Use one unit for every component. If the board sees ARR, forecast new business, expansion and losses in ARR under the Artefact 2 definition, not bookings for one part and ARR for another.
- Build the renewal base from billing: every contract whose term ends in the period, by renewal date, with a renewal record and a written risk band. A contract ending without a renewal record is a data defect, not a surprise.
- Snapshot everything weekly: pipeline, renewal base and each submission; without history there is no accuracy.
- Document every adjustment. Hyndman and Athanasopoulos note that judgemental adjustments carry biases, and that having to “document and justify” them makes overriding harder.[22]
- Score each component and the total every quarter, with the sign stated (this page uses e = actual − forecast; see metrics); errors in the parts can cancel in the total, as Lab 4 shows.
- Return each bias to its owner. SalesOps recalibrates stage probabilities and commit rules; customer success revisits its risk bands. RevOps does not quietly correct someone else’s call.
The split with the specialists. SalesOps runs the new-business categories, pipeline inspection, the forecast call and its accuracy log by caller and method; customer success runs the renewal review (CustomerOps). RevOps owns the definition of the forecast of record, its snapshots and their retention, the roll-up, and the component scorecard reported to Finance and the board. The CRO is accountable for its committed value.
Playbook: CRM data quality
Link to section “Playbook: CRM data quality”- Decide fitness for use: which fields each decision needs (routing needs country and size; forecast needs amount, close date, stage; retention needs contract dates).
- Make required fields stage-dependent, so early records are light and late records are complete.
- Run a weekly scorecard: required-field completeness, duplicates, close dates in the past, opportunities without an owner or contact role, accounts without a segment.
- Fix at the source. Route defects to the record owner with a due date; repeated defects become a validation rule.
- Merge carefully. Merges are hard to undo; keep a merge log and run them in batches with a backup export. The export is a copy of personal data: store it with restricted access and delete it on a set date.
GitLab describes data governance as including “data definitions, policies, processes and procedures for our data”, with data stewardship formalising accountability for day-to-day procedures.[31]
Playbook: changing the GTM stack safely
Link to section “Playbook: changing the GTM stack safely”- Request through one intake form (Artefact 5); every change names the records, reports, automations and integrations it touches.
- Classify impact (high, medium, low) and scale testing and announcements to it, as GitLab does (see operating model).
- Test in a sandbox on synthetic or masked records that reproduce real routing and reporting cases, and compare before-and-after report totals. A full-copy sandbox holds personal data: limit access, record where it lives and delete it on a set date.
- Release on a cadence, with notes and enablement, and a rollback plan (old values mapped, automation versions kept).
- Watch for a week: SLA reports, routing exceptions, integration errors.
Methods, standards and frameworks
Link to section “Methods, standards and frameworks”There is no formal standard for revenue operations. What exists is a mix of analyst frameworks, consultancy models, vendor conventions, accounting and securities rules, and general forecasting science. Separate them by authority:
| Source | What it gives you | Status |
|---|---|---|
| Forrester’s definition and B2B Revenue Waterfall | A definition; an opportunity- and buying-group-based demand model with acquisition, renewal, upsell and cross-sell opportunity types[3][32] | Analyst framework (details for clients) |
| SiriusDecisions Demand Waterfall (earlier versions) | Lead-stage vocabulary such as sales-accepted and sales-qualified leads;[9] CRMs still ship lead stages, for example HubSpot’s default MQL and SQL lifecycle stages[19] | Historical analyst framework |
| Bow-tie models (for example Winning by Design) | A customer-journey and data model that includes the post-sale half[24] | Consultancy model, proprietary |
| SEC guidance on key performance indicators (US) | Define metrics clearly, explain them, disclose method changes, keep controls[33] | Regulatory guidance for US public companies |
| IFRS 15 / Topic 606 | When contract revenue is recognised[8] | Accounting standards |
| Forecasting: Principles and Practice | Error measures; principles for judgemental forecasts[34][22] | Textbook, general method |
| Practitioner metric guides (Skok; a16z) | Common formulas and rules of thumb for SaaS metrics[35][20] | Practitioner opinion |
The SEC guidance deserves attention even outside listed companies: alongside a key metric it expects “A clear definition of the metric and how it is calculated”, a statement of why management uses it, and, when the method changes, disclosure of the differences and effects and consideration of whether to recast prior periods.[33] A good discipline for any board deck.
Tooling landscape
Link to section “Tooling landscape”Tool categories matter more than brands; brands change. The examples are illustrative and were checked on 2026-10-18, not endorsed.
| Category | Job | Examples (as of October 2026) | Selection questions |
|---|---|---|---|
| CRM | System of record for people, accounts, opportunities | Salesforce, HubSpot, Microsoft Dynamics 365; open source SuiteCRM (AGPLv3)[36] and Twenty[37] | Data model fit, API limits, admin skills available, total seat cost |
| Marketing automation | Engagement, scoring, consent | Adobe Marketo Engage, HubSpot Marketing Hub, Salesforce Account Engagement | Sync behaviour with the CRM, consent model |
| Routing and orchestration | Matching, routing, scheduling | Native CRM rules; LeanData, which describes itself as routing buyer signals and enforcing business rules[38] | Rule transparency, audit log, fallback handling |
| Forecasting and revenue intelligence | Forecast roll-ups, call analysis, deal risk | Clari Forecast (sold by Salesloft since their merger in December 2025),[16] Gong, CRM-native forecasting | Snapshot history, explainability, data residency |
| Sales engagement and revenue action orchestration | Sequenced outreach, activity capture, buyer signals for sellers | Outreach,[14] Salesloft,[39] CRM-native sequences | Suppression synced with the consent record; activity logged to the CRM; who may edit sequences |
| CPQ and billing | Quotes, orders, subscriptions, invoices | CRM-native CPQ, dedicated CPQ, subscription billing platforms | Which system owns price and ARR |
| CS platform | Health, success plans, renewals | Gainsight and others (see CustomerOps) | Health score transparency |
| Warehouse and BI | Joined history, metric definitions | Cloud warehouses, BI tools, semantic layers (see AnalyticsOps) | Who owns definitions; write-back rules |
| Enrichment | Firmographics, contacts | Data vendors; check lawful basis | Accuracy, licence terms, privacy |
Lock-in and maintenance. The expensive lock-in is not the licence; it is years of custom fields, automations and reports that encode your process. Keep a field register and retire unused fields yearly. Vendor categories are also consolidating (see the 2025 row of the timeline); expect product names to move.
Automation and AI
Link to section “Automation and AI”Automation is mature for the deterministic parts — routing, field updates, stage validation, hand-off tasks, SLA alerts, renewal reminders. Write those rules down and test them like code. Machine-learning and generative features (predictive lead and deal scores, call summaries, next-step suggestions, forecast predictions) are now common in CRM and forecasting tools. Two governance points apply.
- A score you cannot inspect still needs a test. HubSpot’s predictive lead scoring, for example, estimates “the probability that your open contacts will close as customers within 90 days”, and its properties “cannot be edited”.[40] Test such scores the way you test stage probabilities: compare predictions with outcomes using a proper scoring rule such as the Brier score, which “measures the mean squared difference between the predicted probability and the actual outcome”.[41]
- Keep humans accountable for commitments. An AI forecast is an input to the submitted number, not the number. Record which source (rollup, model, manager) produced each figure so you can score each one.
Failure modes: scores trained on yesterday’s motion (a new segment or product breaks them); summaries that put words in a customer’s mouth (keep the recording or transcript as the record); and automated outreach that ignores objections recorded in another system (see privacy).
RevOps in practice
Link to section “RevOps in practice”Reference implementation: operating artefacts
Link to section “Reference implementation: operating artefacts”These artefacts belong to an invented company, ExampleCo, a B2B software firm selling annual subscriptions with an SDR team, account executives and customer success managers. Adapt names, numbers and stages; the structure is the point.
Artefact 1: stage dictionary (extract)
Link to section “Artefact 1: stage dictionary (extract)”| Stage | Entry criteria (observable) | Exit criteria | Owner | Required fields |
|---|---|---|---|---|
| MQL | Fit score ≥ threshold and a hand-raise or engagement threshold | Accepted, rejected with reason, or recycled within 2 working days | SDR team | Source, country, company size |
| 1. Discovery | Meeting held; a problem stated by the prospect | Problem, buying group and timeline confirmed | Account executive | Amount (estimate), close date |
| 2. Qualified | Economic buyer identified; problem has a cost; timeline under 9 months | Evaluation plan agreed with the buyer | Account executive | Contact roles, competitor |
| 3. Evaluation | Evaluation plan in writing | Technical and commercial fit confirmed | Account executive | Next step, next-step date |
| 4. Proposal | Proposal or quote sent | Verbal selection, procurement started | Account executive | Quote ID, discount approval |
| 5. Negotiation | Contract in legal or procurement review | Signed or lost | Account executive | Signature path, start date |
| Closed won | Signed order booked | Hand-off checklist complete | AE then CSM | Term, ARR, products, success plan |
| Closed lost | Lost or disqualified | None | Account executive | Loss reason, competitor |
Record types. Following the split Forrester’s Waterfall makes between acquisition, renewal, upsell and cross-sell opportunities,[32] ExampleCo uses three:
| Record type | Created when | Stages | Amount means | Owner |
|---|---|---|---|---|
| New business | First meeting held | Stages 1 to 5 above | New ARR | Account executive |
| Expansion | A customer’s sponsor confirms a new need | Stages 2 to 5 above | Added ARR | Account manager or CSM |
| Renewal | Automatically, 120 days before a contract’s term ends | Open, Risk assessed, Terms proposed; then Renewed, Contracted or Churned | ARR up for renewal; the outcome records ARR kept | CSM |
“Pipeline” in every ExampleCo report means new-business and expansion opportunities in stages 2 to 5; Discovery is tracked but not counted, and renewals are reported as the renewal base, never as pipeline. That sentence prevents most “two pipeline numbers” arguments.
Artefact 2: revenue metric definitions as code
Link to section “Artefact 2: revenue metric definitions as code”Example status: syntax-checked YAML, not executed (ExampleCo is fictional; a metrics tool or a review process would consume it).
# metrics.yaml: revenue metric definitions for ExampleCo (illustrative)
version: 3
effective_from: 2026-07-01
owners:
finance: fpa-lead@example.com # accountable for formulas shown to the board
revops: revops-lead@example.com # responsible for the definitions and data
metrics:
- id: arr
name: Annual recurring revenue
definition: >-
Annualised value of active subscription contracts at the snapshot date:
contract value / days in term * 365. Excludes one-off services and usage
above commitment. Constant currency at start-of-year rates.
system_of_record: billing
grain: [customer, snapshot_date]
changes:
- version: 3
date: 2026-07-01
note: Usage above commitment excluded; history recast back to 2024-07-01.
- id: grr
name: Gross revenue retention, 12 months
formula: (arr_start - contraction - churn) / arr_start
cohort: customers with arr > 0 at the start snapshot
excludes: [new customers, expansion]
- id: nrr
name: Net revenue retention, 12 months
formula: (arr_start + expansion - contraction - churn) / arr_start
cohort: customers with arr > 0 at the start snapshot
- id: pipeline_created
name: Qualified pipeline created
definition: >-
Sum of amount for new-business and expansion opportunities that entered
stage 2 (Qualified) in the period, at the amount recorded on entry.
- id: forecast_of_record
name: Forecast of record, net new ARR
definition: >-
New + expansion - renewal losses (churn and contraction), in contract ARR,
as submitted at the end of week 4; later versions are kept and scored.
components: [new, expansion, renewal_losses]
- id: mql_sla
name: MQL hand-off SLA attainment
formula: mqls_actioned_within_2_working_days / mqls_created
The changes list is the part most teams skip and most regret skipping: it lets anyone explain why last year’s NRR in this
year’s deck differs from last year’s deck.
Artefact 3: hand-off SLA between marketing, sales development and sales
Link to section “Artefact 3: hand-off SLA between marketing, sales development and sales”Example status: illustrative template.
SERVICE LEVEL AGREEMENT: MQL TO OPPORTUNITY (ExampleCo, version 2, from 2026-07-01)
Parties Marketing (MarketingOps lead), Sales development (SDR manager),
Sales (regional VPs). Steward: RevOps.
Marketing Delivers MQLs that meet the stage dictionary, with source, country
commits and company size filled. Forecasts MQL volume monthly by region.
SDRs commit First touch within 60 business minutes of routing.
Accept, reject (with reason code) or recycle within 2 working days.
AEs commit Accept or reject a qualified meeting within 1 working day;
create the opportunity in Discovery on the day of the first meeting.
Exceptions Unassigned > 30 min -> fallback queue owner. Out of office -> skipped
by round robin. Missing data -> ops-review queue (RevOps, 4 hours).
Reporting Weekly: SLA attainment, unactioned MQLs, rejection reasons by source.
Review Quarterly at the definitions council; changes need both VPs.
Artefact 4: sales-to-success hand-off checklist
Link to section “Artefact 4: sales-to-success hand-off checklist”- Signed order and start date in billing; ARR visible read-only in the CRM
- Buying group with roles: economic buyer, champion, technical owner, users
- The customer’s stated success criteria in their words, and the date they expect them
- Commitments made during the sale (integrations, roadmap items, discounts and their expiry)
- Known risks: competitor still in place, internal opponents, budget timing
- Kick-off scheduled within 5 working days; customer success manager introduced by the account executive
Artefact 5: GTM change request form
Link to section “Artefact 5: GTM change request form”Example status: illustrative template.
GTM CHANGE REQUEST
Title / requester / date:
Problem (what fails today, evidence):
Change type: [ ] stage or lifecycle [ ] field [ ] routing rule [ ] automation
[ ] integration [ ] new tool [ ] metric definition
Objects, reports, automations and integrations affected:
Teams affected (marketing / SDR / sales / CS / Finance / partners):
Impact class (high: revenue- or customer-impacting; medium: daily work; low: info):
History treatment (recast, map old values, leave):
Test plan (sandbox cases, report totals before/after):
Rollback plan:
Release date (next GTM release) and enablement owner:
Approvals: RevOps systems lead / definitions council (if a definition changes)
Hands-on labs
Link to section “Hands-on labs”Four labs on synthetic data only: bash, Python 3.8 or later, standard library only, no accounts and no cost. Each lab was run on 2026-10-18 exactly as printed (Python 3.8.10, Ubuntu Linux, isolated home directory); the expected outputs are copied from those runs.
Lab 1 (beginner): cohort funnel, hand-off SLA and leakage
Link to section “Lab 1 (beginner): cohort funnel, hand-off SLA and leakage”Objective. Measure an MQL cohort through acceptance, opportunity and win; find leads that were never actioned; see why a period-based conversion ratio misleads. Prerequisites. bash and Python 3.8+. Time. 20 minutes. Risk. None.
- Create the folder and the data.
Example status: verified by execution on 2026-10-18 (bash, Linux).
mkdir -p ~/revops-labs/lab1 && cd ~/revops-labs/lab1
cat > mqls.csv <<'CSV'
lead_id,source,mql_date,accepted_date,rejected_date,opp_date,close_date,outcome
L01,webinar,2026-01-05,2026-01-06,,2026-01-20,2026-03-10,won
L02,webinar,2026-01-06,2026-01-07,,2026-01-28,2026-04-02,lost
L03,paid_search,2026-01-08,,2026-01-09,,,
L04,paid_search,2026-01-09,2026-01-15,,,,
L05,content,2026-01-12,2026-01-13,,2026-02-03,,
L06,content,2026-01-14,,,,,
L07,partner,2026-01-15,2026-01-15,,2026-01-22,2026-03-30,won
L08,webinar,2026-01-19,2026-01-21,,,,
L09,paid_search,2026-01-20,,2026-01-21,,,
L10,content,2026-01-22,,,,,
L11,partner,2026-01-26,2026-01-27,,2026-02-16,,
L12,webinar,2026-01-28,2026-02-02,,2026-02-20,2026-04-15,lost
L13,webinar,2026-02-02,2026-02-03,,2026-02-24,,
L14,content,2026-02-04,2026-02-05,,,,
L15,paid_search,2026-02-09,,2026-02-10,,,
L16,partner,2026-02-11,2026-02-11,,2026-02-18,,
L17,content,2026-02-16,,,,,
L18,webinar,2026-02-18,2026-02-19,,,,
L19,paid_search,2026-02-23,2026-02-24,,,,
L20,partner,2026-02-25,2026-02-26,,,,
CSV
- Save the script as
funnel.py.
Example status: verified by execution on 2026-10-18 (Python 3.8.10, standard library).
"""Cohort funnel, hand-off SLA and leakage from MQL records (standard library)."""
import csv
from datetime import date, timedelta
from statistics import median
SNAPSHOT = date(2026, 4, 30) # data extracted on this date
SLA_DAYS = 2 # accept or reject within 2 working days (Mon-Fri)
def d(s):
return date.fromisoformat(s) if s else None
with open("mqls.csv", newline="") as f:
rows = [{k: d(v) if k.endswith("_date") else v for k, v in r.items()}
for r in csv.DictReader(f)]
def working_days(start, end):
"""Weekdays after start, up to and including end (no holiday calendar)."""
return sum((start + timedelta(n)).weekday() < 5
for n in range(1, (end - start).days + 1))
def pct(n, base):
return f"{100 * n / base:.1f}%" if base else "n/a"
def first_action(r):
return r["accepted_date"] or r["rejected_date"]
def cohort(month):
return [r for r in rows if r["mql_date"].month == month]
jan = cohort(1)
actioned = [r for r in jan if first_action(r)]
in_sla = [r for r in actioned
if working_days(r["mql_date"], first_action(r)) <= SLA_DAYS]
accepted = [r for r in jan if r["accepted_date"]]
leaked = [r["lead_id"] for r in jan if not first_action(r)]
opps = [r for r in jan if r["opp_date"]]
closed = [r for r in opps if r["close_date"] and r["close_date"] <= SNAPSHOT]
won = [r for r in closed if r["outcome"] == "won"]
days_to_accept = [working_days(r["mql_date"], r["accepted_date"]) for r in accepted]
print(f"January MQL cohort, snapshot {SNAPSHOT}")
print(f" MQLs {len(jan)} | actioned {len(actioned)} | "
f"never actioned {len(leaked)} {leaked}")
print(f" Hand-off SLA ({SLA_DAYS} working days) met: "
f"{len(in_sla)}/{len(jan)} = {pct(len(in_sla), len(jan))}")
print(f" Accepted {len(accepted)} ({pct(len(accepted), len(jan))} of MQLs), "
f"median working days to accept {median(days_to_accept)}")
print(f" Opportunities {len(opps)} ({pct(len(opps), len(accepted))} of accepted)")
print(f" Closed {len(closed)}, won {len(won)} "
f"(win rate {pct(len(won), len(closed))} of closed)")
feb = cohort(2)
opps_dated_feb = [r for r in rows if r["opp_date"] and r["opp_date"].month == 2]
feb_cohort_opps = [r for r in feb if r["opp_date"]]
print("February, two ways to say 'MQL to opportunity'")
print(f" Period ratio : {len(opps_dated_feb)} opps created in Feb / "
f"{len(feb)} Feb MQLs = {pct(len(opps_dated_feb), len(feb))}")
print(f" Cohort ratio : {len(feb_cohort_opps)} opps from Feb MQLs / "
f"{len(feb)} Feb MQLs = {pct(len(feb_cohort_opps), len(feb))} (still maturing)")
- Run
python3 funnel.py.
Expected output.
January MQL cohort, snapshot 2026-04-30
MQLs 12 | actioned 10 | never actioned 2 ['L06', 'L10']
Hand-off SLA (2 working days) met: 8/12 = 66.7%
Accepted 8 (66.7% of MQLs), median working days to accept 1.0
Opportunities 6 (75.0% of accepted)
Closed 4, won 2 (win rate 50.0% of closed)
February, two ways to say 'MQL to opportunity'
Period ratio : 5 opps created in Feb / 8 Feb MQLs = 62.5%
Cohort ratio : 2 opps from Feb MQLs / 8 Feb MQLs = 25.0% (still maturing)
Validation. By hand: L04 (4 working days) and L12 (3) were actioned late and L06 and L10 never, so 8 of 12 met the SLA. The clock counts weekdays, as Artefact 3’s SLA does; real reports also need a holiday calendar and time zones. The February period ratio divides opportunities that came mostly from January MQLs (L05, L11, L12) by February MQLs; it looks better than either cohort. Report cohort ratios with the cohort’s age, or the funnel will mislead you every time volume changes.
Troubleshooting. ValueError: Invalid isoformat string: a date has a space or a different format; dates must be
YYYY-MM-DD. AttributeError: 'NoneType' object has no attribute 'month': an MQL row lacks mql_date.
Teardown. rm -rf ~/revops-labs/lab1
Lab 2 (intermediate): lead routing rules and the speed-to-lead SLA
Link to section “Lab 2 (intermediate): lead routing rules and the speed-to-lead SLA”Objective. Route leads with ordered first-match rules (existing account owner first, an exception queue for incomplete data, round robin that skips absent people), then measure a 60-minute first-touch SLA. Prerequisites. Lab 1. Time. 30 minutes. Risk. None.
- Create the data.
Example status: verified by execution on 2026-10-18 (bash, Linux).
mkdir -p ~/revops-labs/lab2 && cd ~/revops-labs/lab2
cat > accounts.csv <<'CSV'
domain,account_owner
acme.example,ana
globex.example,ben
CSV
cat > leads.csv <<'CSV'
lead_id,email_domain,country,employees,created_at,first_touch_at
R01,acme.example,US,5000,2026-03-02T09:00,2026-03-02T09:20
R02,initech.example,DE,2500,2026-03-02T09:05,2026-03-02T10:40
R03,umbrella.example,US,1200,2026-03-02T09:10,2026-03-02T09:35
R04,hooli.example,FR,80,2026-03-02T09:30,2026-03-02T09:50
R05,globex.example,NL,300,2026-03-02T10:00,
R06,vandelay.example,US,40,2026-03-02T10:15,2026-03-02T12:30
R07,stark.example,DE,4000,2026-03-02T11:00,2026-03-02T11:30
R08,wayne.example,US,15,2026-03-02T11:20,2026-03-02T11:45
R09,tyrell.example,BR,,2026-03-02T11:40,
CSV
- Save the rules as
rules.json. Order matters: the first matching rule wins, and the last rule matches everything.
Example status: verified by execution on 2026-10-18 (JSON, loaded by the script below).
{
"sla_minutes": 60,
"snapshot": "2026-03-02T17:00",
"rules": [
{"name": "existing-account",
"match": {"has_account_owner": true}, "assign": "account_owner"},
{"name": "incomplete-data",
"match": {"missing_any": ["country", "employees"]}, "assign": "queue:ops-review"},
{"name": "emea-enterprise",
"match": {"country_in": ["DE", "FR", "NL", "GB"], "min_employees": 1000},
"assign": "team:emea-ent"},
{"name": "enterprise",
"match": {"min_employees": 1000}, "assign": "team:na-ent"},
{"name": "default", "match": {}, "assign": "team:smb"}
],
"teams": {
"emea-ent": ["carla", "dev"],
"na-ent": ["erin"],
"smb": ["finn", "gita", "hal"]
},
"unavailable": ["gita"]
}
- Save the router as
route.py.
Example status: verified by execution on 2026-10-18 (Python 3.8.10, standard library).
"""First-match lead routing with round robin, then a speed-to-lead SLA check."""
import csv
import json
from datetime import datetime
from statistics import median
cfg = json.load(open("rules.json"))
with open("accounts.csv", newline="") as f:
owners = {r["domain"]: r["account_owner"] for r in csv.DictReader(f)}
with open("leads.csv", newline="") as f:
leads = list(csv.DictReader(f))
cursor = {team: 0 for team in cfg["teams"]} # round-robin position per team
def matches(lead, m):
size = int(lead["employees"]) if lead["employees"] else None
if m.get("has_account_owner") and lead["email_domain"] not in owners:
return False
if "missing_any" in m and not any(lead[k] == "" for k in m["missing_any"]):
return False
if "country_in" in m and lead["country"] not in m["country_in"]:
return False
if "min_employees" in m and (size is None or size < m["min_employees"]):
return False
return True
def next_member(team):
members = cfg["teams"][team]
for _ in members: # at most one lap round the team
person = members[cursor[team] % len(members)]
cursor[team] += 1
if person not in cfg["unavailable"]:
return person
return "queue:" + team # nobody available: team queue
def route(lead):
for rule in cfg["rules"]:
if matches(lead, rule["match"]):
target = rule["assign"]
if target == "account_owner":
return rule["name"], owners[lead["email_domain"]]
if target.startswith("team:"):
return rule["name"], next_member(target[5:])
return rule["name"], target
raise ValueError("no rule matched: add a default rule")
ts = datetime.fromisoformat
snapshot = ts(cfg["snapshot"])
met, waits = 0, []
print(f"{'lead':5} {'rule':17} {'owner':17} {'minutes':>7} SLA")
for lead in leads:
rule, owner = route(lead)
touched = bool(lead["first_touch_at"])
end = ts(lead["first_touch_at"]) if touched else snapshot
minutes = int((end - ts(lead["created_at"])).total_seconds() // 60)
ok = touched and minutes <= cfg["sla_minutes"]
met += ok
if touched:
waits.append(minutes)
status = "met" if ok else ("BREACH" if touched else "BREACH (no touch yet)")
print(f"{lead['lead_id']:5} {rule:17} {owner:17} {minutes:>7} {status}")
print(f"SLA {cfg['sla_minutes']} min met: {met}/{len(leads)} = "
f"{100 * met / len(leads):.1f}%; median minutes to first touch "
f"(touched leads) = {median(waits)}")
- Run
python3 route.py.
Expected output.
lead rule owner minutes SLA
R01 existing-account ana 20 met
R02 emea-enterprise carla 95 BREACH
R03 enterprise erin 25 met
R04 default finn 20 met
R05 existing-account ben 420 BREACH (no touch yet)
R06 default hal 135 BREACH
R07 emea-enterprise dev 30 met
R08 default finn 25 met
R09 incomplete-data queue:ops-review 320 BREACH (no touch yet)
SLA 60 min met: 5/9 = 55.6%; median minutes to first touch (touched leads) = 25
Validation. R06 went to hal because round robin skipped the unavailable gita; R05 matched its account owner ben
although it is a small Dutch company, because the account rule comes first; R09 landed in the exception queue because company
size is missing. Note the median (25 minutes) looks healthy while the SLA attainment (55.6%) does not: untouched leads never
enter a “time to first touch” average, which is why you must report attainment and open breaches, not only the average.
Troubleshooting. KeyError: 'email_domain': the CSV header was changed. ValueError: no rule matched: you removed the
default rule; keep a catch-all last. Real systems also need business-hour calendars and time zones; this lab uses clock minutes.
Teardown. rm -rf ~/revops-labs/lab2
Lab 3 (intermediate): ARR bridge, GRR and NRR under two definitions
Link to section “Lab 3 (intermediate): ARR bridge, GRR and NRR under two definitions”Objective. Build an ARR bridge (start + new + expansion − contraction − churn = end) from two snapshots, compute GRR and NRR, and see how the ARR definition changes them. Prerequisites. Lab 1. Time. 25 minutes. Risk. None.
- Create the data: committed contract value and monthly usage revenue at 2025-09-30 and 2026-09-30.
Example status: verified by execution on 2026-10-18 (bash, Linux).
mkdir -p ~/revops-labs/lab3 && cd ~/revops-labs/lab3
cat > customers.csv <<'CSV'
customer,committed_arr_start,committed_arr_end,usage_mrr_start,usage_mrr_end
C1,100000,120000,0,0
C2,80000,80000,2000,6000
C3,60000,0,0,0
C4,50000,40000,1000,500
C5,120000,120000,0,0
C6,0,90000,0,1000
C7,40000,40000,3000,0
C8,0,30000,0,0
CSV
- Save the script as
arr.py.
Example status: verified by execution on 2026-10-18 (Python 3.8.10, standard library).
"""ARR bridge, GRR and NRR under two ARR definitions (standard library only).
Snapshots: start = 2025-09-30, end = 2026-09-30 (a 12-month window).
Definition A (contract ARR): committed annual value only.
Definition B (run-rate ARR): committed value plus 12 x the month's usage revenue.
"""
import csv
with open("customers.csv", newline="") as f:
rows = [{k: (v if k == "customer" else float(v)) for k, v in r.items()}
for r in csv.DictReader(f)]
def arr(r, when, definition):
usage = r[f"usage_mrr_{when}"] * 12 if definition == "B" else 0.0
return r[f"committed_arr_{when}"] + usage
def bridge(definition):
keys = ("start", "new", "expansion", "contraction", "churn", "end")
b = dict.fromkeys(keys, 0.0)
for r in rows:
s, e = arr(r, "start", definition), arr(r, "end", definition)
b["start"] += s
b["end"] += e
if s == 0 and e > 0:
b["new"] += e
elif s > 0 and e == 0:
b["churn"] += s
elif e > s:
b["expansion"] += e - s
else:
b["contraction"] += s - e
check = b["start"] + b["new"] + b["expansion"] - b["contraction"] - b["churn"]
assert abs(check - b["end"]) < 0.01, "bridge does not reconcile"
kept = b["start"] - b["contraction"] - b["churn"]
b["grr"] = kept / b["start"]
b["nrr"] = (kept + b["expansion"]) / b["start"]
return b
for definition, label in (("A", "contract ARR"), ("B", "run-rate ARR incl. usage")):
b = bridge(definition)
k = {key: round(val / 1000, 1) for key, val in b.items()}
print(f"Definition {definition} ({label}), in thousands")
print(f" start {k['start']} + new {k['new']} + expansion {k['expansion']}"
f" - contraction {k['contraction']} - churn {k['churn']} = end {k['end']}")
print(f" GRR {b['grr']:.1%} NRR {b['nrr']:.1%}")
- Run
python3 arr.py.
Expected output.
Definition A (contract ARR), in thousands
start 450.0 + new 120.0 + expansion 20.0 - contraction 10.0 - churn 60.0 = end 520.0
GRR 84.4% NRR 88.9%
Definition B (run-rate ARR incl. usage), in thousands
start 522.0 + new 132.0 + expansion 68.0 - contraction 52.0 - churn 60.0 = end 610.0
GRR 78.5% NRR 91.6%
Validation. Definition A by hand: GRR = (450 − 10 − 60) ÷ 450 = 84.4%; NRR = (450 + 20 − 10 − 60) ÷ 450 = 88.9%. Under B, customer C2’s usage growth counts as expansion and C7’s usage drop as contraction, so NRR rises and GRR falls. Neither is wrong; they are different metrics with the same name, and listed companies choose differently (see metrics).
Troubleshooting. AssertionError: bridge does not reconcile: a row has a negative or non-numeric value. Customers that
churn and return within the window need a rule (new or reactivation); this lab has none.
Teardown. rm -rf ~/revops-labs/lab3
Lab 4 (advanced): score the forecast of record by component
Link to section “Lab 4 (advanced): score the forecast of record by component”Objective. Score six quarters of a forecast of record for net new ARR by component (new business, expansion, renewal losses); see how two opposite biases can hide inside an accurate total; then roll the owners’ calls for the next quarter into one forecast of record. Prerequisites. Labs 1–3. Time. 30 minutes. Risk. None.
- Create the data: the week-4 forecast of record and the actuals for six quarters (ARR, in thousands), and the contracts that come up for renewal.
Example status: verified by execution on 2026-10-18 (bash, Linux).
mkdir -p ~/revops-labs/lab4 && cd ~/revops-labs/lab4
cat > history.csv <<'CSV'
quarter,new_fc,new_act,expansion_fc,expansion_act,losses_fc,losses_act
2025-Q2,900,820,300,320,400,330
2025-Q3,950,880,320,300,420,350
2025-Q4,1000,930,340,350,430,370
2026-Q1,1100,990,360,380,470,370
2026-Q2,1050,1000,380,360,450,400
2026-Q3,1150,1060,400,410,480,400
CSV
cat > renewals.csv <<'CSV'
contract,renewal_date,arr_k,risk
K01,2026-10-15,400,low
K02,2026-10-31,250,medium
K03,2026-11-14,300,low
K04,2026-11-30,180,high
K05,2026-12-05,500,medium
K06,2026-12-20,220,high
K07,2027-01-10,350,high
K08,2026-12-31,600,low
CSV
- Save the script as
forecast.py.
Example status: verified by execution on 2026-10-18 (Python 3.8.10, standard library).
"""Forecast of record: score each component, then build next quarter's (stdlib)."""
import csv
from datetime import date
def load(name):
with open(name, newline="") as f:
return list(csv.DictReader(f))
# 1. Score six quarters of the week-4 forecast of record (ARR, thousands).
# e = actual - forecast, so a negative mean error means the forecast was too high.
history = load("history.csv")
def value(q, part, kind):
if part == "net": # net new ARR = new + expansion - losses
return (value(q, "new", kind) + value(q, "expansion", kind)
- value(q, "losses", kind))
return float(q[f"{part}_{kind}"])
print("component mean error MAE MAPE")
for part in ("new", "expansion", "losses", "net"):
errs = [value(q, part, "act") - value(q, part, "fc") for q in history]
ape = [abs(e) / value(q, part, "act") for e, q in zip(errs, history)]
mae = sum(abs(e) for e in errs) / len(errs)
print(f"{part:10} {sum(errs) / len(errs):+9.1f}k {mae:6.1f}k "
f"{sum(ape) / len(ape):6.1%}")
# 2. Next quarter: roll up the owners' calls into one forecast of record.
START, END = date(2026, 10, 1), date(2026, 12, 31)
LOSS_RATE = {"low": 0.05, "medium": 0.25, "high": 0.60} # written risk bands
calls = {"new": 1200.0, "expansion": 420.0} # SalesOps call; account mgmt call
start_arr = 12000.0 # contract ARR on 2026-09-30
base = [r for r in load("renewals.csv")
if START <= date.fromisoformat(r["renewal_date"]) <= END]
due = sum(float(r["arr_k"]) for r in base)
losses = sum(float(r["arr_k"]) * LOSS_RATE[r["risk"]] for r in base)
end_arr = start_arr + calls["new"] + calls["expansion"] - losses
print(f"Renewal base {START} to {END}: {len(base)} contracts, {due:.0f}k due, "
f"expected losses {losses:.1f}k")
print(f"Forecast of record: {start_arr:.0f} + new {calls['new']:.0f}"
f" + expansion {calls['expansion']:.0f} - losses {losses:.1f}"
f" = end ARR {end_arr:.1f}k")
- Run
python3 forecast.py.
Expected output.
component mean error MAE MAPE
new -78.3k 78.3k 8.3%
expansion +3.3k 16.7k 4.8%
losses -71.7k 71.7k 19.5%
net -3.3k 10.0k 1.1%
Renewal base 2026-10-01 to 2026-12-31: 7 contracts, 2450k due, expected losses 492.5k
Forecast of record: 12000 + new 1200 + expansion 420 - losses 492.5 = end ARR 13127.5k
Validation. Errors follow the textbook convention e = actual − forecast,[34] so a negative mean error means the forecast was too high. The total looks excellent (MAPE 1.1%) only because two biases cancel: new business was over-forecast by 78.3k a quarter, and renewal losses by 71.7k (customer success expected more churn than happened, which adds back to net ARR). If customer success fixed its pessimism alone, the error on the total would grow to about −75k a quarter: one component would improve and the forecast of record would look worse. Score every component, show each owner its own bias, and fix the two together. In part 2, contract K07 renews in January and stays out of the quarter’s renewal base. The 492.5k of expected losses comes from risk bands that history suggests are pessimistic: raise that with customer success and record any adjustment with its reason, rather than editing the number quietly.
Troubleshooting. ZeroDivisionError: a component’s actual is 0 (possible for expansion in a small segment, or for net new
ARR in a flat quarter); percentage errors are undefined at zero, one of the limits Hyndman and Athanasopoulos list for
them,[34] so report the error in currency. KeyError in LOSS_RATE: a renewal row uses a risk band the table does not
define.
Teardown. rm -rf ~/revops-labs/lab4 (and rmdir ~/revops-labs when all labs are done).
Use cases and scenarios
Link to section “Use cases and scenarios”| Scenario | Context | Method | Trade-off | Success measure |
|---|---|---|---|---|
| Two pipeline numbers | Board sees marketing’s and sales’ pipeline differ | Stage dictionary, one pipeline definition, recast history | Short-term embarrassment of restating | One number in all decks; disputes fall |
| From MQL targets to opportunities | Marketing rewarded on MQL volume; sales ignores MQLs | Opportunity-based measurement; MQL kept as trigger | Marketing loses an easy number | Qualified pipeline created; acceptance rate |
| Self-serve meets sales | Product sign-ups and a sales team overlap | Usage signals routed to sales; rules of engagement | Sales may chase users who would self-convert | Expansion ARR; conversion of signalled accounts |
| Two CRMs after an acquisition | Different stages, fields and ARR rules | Map, merge, freeze definitions, then migrate | Months of dual reporting | Reconciled ARR; one forecast |
| Documented practice: GitLab | Public handbook of a listed software company | Field Operations structure, release cadence, change tiers | One company’s choices | Not measured here |
Documented practice: GitLab’s Field Operations. GitLab’s handbook shows one company’s version of this work — a vision to “Manage field business processes, systems, architecture, enablement, champion data integrity, provide insights and predictability through analytics”, and tenets of clarity (“for definitions, processes and events”), predictability and scalability; the team structure and release habits appear under roles and operating model.[23] The handbook documents choices, not results.
Measure, govern, pay
Link to section “Measure, govern, pay”Metrics and KPIs
Link to section “Metrics and KPIs”This page defines the cross-funnel metrics once for the Atlas. The formulas are this page’s definitions; companies, including listed ones, define the same names differently (see Lab 3). Function-specific measures live on the specialist pages: win rate, sales cycle and pipeline coverage in SalesOps; campaign metrics in MarketingOps; health and churn drivers in CustomerOps.
| Metric | Definition / formula | Data source | Pitfall | Cadence |
|---|---|---|---|---|
| Hand-off SLA attainment | MQLs accepted or rejected within the SLA ÷ MQLs created, by creation cohort | CRM timestamps | Averages hide never-actioned records | Weekly |
| Speed to lead | Median and 90th percentile minutes from creation to first touch; plus count of open breaches | CRM, sales engagement tool | Excludes untouched leads unless you count them | Weekly |
| Stage conversion (cohort) | Records entering stage n+1 ÷ records entering stage n, for one entry cohort, at a stated age | Stage history snapshots | Period ratios mix cohorts | Monthly |
| Qualified pipeline created | Sum of amounts at entry to the qualified stage in the period | Opportunity history | Amount edits after entry; double counting | Monthly |
| Forecast error, APE, bias | e = actual − forecast; APE = |e| ÷ actual; bias = mean e; for each component and the total, at a fixed week | Forecast-of-record snapshots | Scoring only the total, or only the final week | Quarterly |
| Renewal records in place | Contracts ending within 120 days that have a renewal record ÷ all contracts ending within 120 days | Billing, CRM | Contracts missing from the billing export | Weekly |
| ARR bridge | start + new + expansion − contraction − churn = end | Billing snapshots | Reactivations and FX moves unclassified | Monthly |
| GRR | (start ARR − contraction − churn) ÷ start ARR, same customers, 12 months | Billing | Including expansion by mistake | Quarterly |
| NRR | (start ARR + expansion − contraction − churn) ÷ start ARR, same customers | Billing | Usage swings; method changes | Quarterly |
| CAC (fully loaded, blended) | Sales and marketing cost of acquiring new customers ÷ all new customers won in the period; variants below | Finance ledger, CRM | Mixing expansion cost into acquisition; unlabelled variants | Quarterly |
| CAC payback (months) | CAC ÷ (new ARR per customer × gross margin ÷ 12) | Finance, billing | Ignoring gross margin | Quarterly |
| LTV (simple) | ARR per customer × gross margin × expected lifetime (1 ÷ annual churn rate; say which churn; capped or discounted) | Billing, finance | Uncapped lifetimes inflate it | Half-yearly |
| Data completeness | Records meeting required fields for their stage ÷ records in that stage | CRM | Default values that pass validation | Weekly |
Why these choices: listed companies define the same names differently. Datadog computes net retention on ARR that includes usage, Snowflake on two years of product revenue for a cohort, and Workday’s gross retention excludes add-ons;[42][43][44] hence the SEC’s expectation of a clear definition for every key metric (see methods).[33] The ARR bridge follows the split of net ARR into new, expansion and churned ARR that Skok describes.[45] Gross margin in payback, and capped or discounted lifetimes, are this page’s choices.
CAC variants. Skok computes CAC as total sales and marketing cost ÷ deals closed, and suggests a second version that counts only marketing programme costs.[35] a16z writes both of its versions with total acquisition cost on top and changes the customers counted: blended CAC divides by “total new customers acquired across all channels”, paid CAC by “new customers acquired through paid marketing”.[20] Paid CAC therefore needs a channel-attribution rule that says which customers came through paid marketing. This page’s default is the fully loaded, blended version; show any variant beside it, labelled.
LTV caveats. a16z defines LTV as “the present value of the future net profit from the customer over the duration of the relationship” and calls an estimate based on revenue or gross margin a common mistake.[20] The simple LTV here follows Skok’s form (lifetime = 1 ÷ churn rate)[35] with gross margin and no discount, so read it as an upper bound.
A worked calculation
Link to section “A worked calculation”Leading and lagging. Speed to lead, SLA attainment, buying-group coverage and qualified pipeline created lead; bookings, ARR, NRR and GRR lag by months. Steer weekly on the leading ones, judge quarterly on the rest.
Vanity traps. MQL volume as a goal (see Scenario 2); “pipeline influenced” without a sourcing rule; average response time that ignores untouched leads; NRR that quietly switches definition; forecast accuracy measured only on the total, or only in the last week of the quarter.
Dashboards and data limits. One page per audience: a weekly operational view (SLAs, stuck records, forecast changes), a monthly funnel view (cohorts), a quarterly board view (ARR bridge, retention, efficiency). CRM history is incomplete unless you snapshot it; amounts and close dates are opinions until the contract is signed.
Quality, security, privacy and compliance
Link to section “Quality, security, privacy and compliance”Nothing here is legal advice; it orients RevOps teams so they know when to involve PrivacyOps and counsel. Statements are dated October 2026.
Business contacts are personal data. Under the EU GDPR, personal data is “any information relating to an identified or identifiable natural person”;[46] a named buyer’s work email and call notes qualify. Direct marketing “may be regarded as carried out for a legitimate interest” (recital 47),[47] a possibility to assess, not a blanket permission, and it does not settle email. The ePrivacy Directive allows email for direct marketing only to subscribers who have given prior consent (Art. 13(1)); a company that obtained a customer’s email address in a sale may market its own similar products to it, if the customer could object easily and free of charge when the address was collected and can do so in every message (Art. 13(2)); protection of legal persons, and so of many company addresses, is left to national law (Art. 13(5)).[48] Member states implement these rules differently. The UK ICO says you “can email or text any corporate body”, but sole traders and some partnerships are treated as individuals (guidance under review after the Data (Use and Access) Act).[49] The US FTC says CAN-SPAM “makes no exception for business-to-business email” and opt-outs must be honoured within 10 business days;[50] California’s CCPA exemptions for business-to-business and employment information expired on 31 December 2022.[51] MarketingOps covers consent capture under these rules in more depth.
For RevOps the duty is architectural. A person may object at any time to direct marketing, and their data “shall no longer be processed for such purposes”.[52] An objection recorded in one system must therefore suppress outreach in every system (marketing automation, CRM sequences, enrichment, sales engagement tools), and an objection that a seller or support agent hears must reach the consent record through one write path within a set time. This page proposes one business day; CAN-SPAM’s 10 business days is a legal limit for US email, not a design target.
Security of the revenue record. The CRM holds the customer list, pricing and pipeline: treat it as sensitive. Give access by role and territory where practical; restrict bulk export and API tokens to named integration users with the minimum scopes; remove access for departing sellers on their last day (see IdentityOps); keep field history on amount, stage, close date and owner. Only billing (or order management) should write ARR and subscription terms.
Financial control. If you are a US public company, the SEC reminds companies of the requirement to maintain effective disclosure controls when key metrics come from their own information;[33] in practice, reconcile CRM bookings with billing monthly, keep an audit trail for metric definitions and changes, and review commission inputs before payroll.
Cost, capacity and sustainability
Link to section “Cost, capacity and sustainability”The visible cost of RevOps is people and licences; the hidden cost is complexity. Licences for CRM, marketing automation, forecasting and engagement tools are commonly priced per user, per contact or per record tier (price lists change often). Integrations need maintenance every time a vendor changes an API or a team adds a field. Data vendors charge for records whose accuracy decays.
Track cost per unit of the system rather than chasing benchmarks: GTM tool spend per seller, change requests delivered per month, share of fields unused for a year, and admin hours spent on fixes versus improvements. Capacity is a queue: limit work in progress, release on a cadence, and say no to changes that add a field without retiring one.
Environmental impact is small next to other Ops domains. The material lever is data minimisation: deleting stale contacts and unused data reduces storage, privacy risk and enrichment spend together.
Assurance of the operating model
Link to section “Assurance of the operating model”How do you know the system works, not just the dashboard? Five recurring checks (the weekly data-quality scorecard is in the CRM data-quality playbook):
| Check | How | Signal of trouble |
|---|---|---|
| Definition drift audit (quarterly) | Compare report filters and automation conditions with the stage dictionary | Reports that count stages the dictionary excludes |
| Routing audit (monthly) | Trace a random sample of 20 leads through the rules | Hits on the default rule above an agreed share |
| ARR reconciliation (monthly) | CRM ARR versus billing ARR by customer | Differences above a tolerance (for example 0.5%) |
| Forecast retrospective (quarterly) | Error and bias by component and week; adjustment log | Persistent bias in one component, even when the total looks right |
| Renewal-base check (monthly) | Compare billing term-end dates with renewal records | Contracts ending soon without a renewal record |
Leading risk indicators: rising unassigned leads, rising rejection rates from one source, more manual forecast adjustments, deals whose close date moved two or more times, and change requests waiting longer than one release.
When things go wrong
Link to section “When things go wrong”Common failures and troubleshooting
Link to section “Common failures and troubleshooting”| Symptom | Likely cause | Diagnosis | Fix | Prevention |
|---|---|---|---|---|
| Leads sit unworked | Routing rule gap, owner left, round robin includes absent people | Unassigned and breach reports; rule-hit log | Fallback queue with owner; re-route | Default rule; availability sync; weekly audit |
| Sales rejects most MQLs | MQL criteria not agreed or scoring drifted | Rejection reasons by source and score band | Re-agree criteria; change scoring | Definitions council; quarterly calibration |
| Two numbers for pipeline or ARR | Different filters, snapshots or definitions | Compare the definitions, then the snapshots, then the code | Pick the canonical definition; recast | Versioned definitions; one source per metric |
| Forecast surprises | Optimistic probabilities, slipped close dates, sandbagging | Error and bias by week; slippage report | Recalibrate; enforce exit criteria | Snapshots, scoring, documented adjustments |
| Churn surprises at quarter end | Renewals outside the forecast; untested risk bands | Contracts that ended without a renewal record; loss error by band | Renewal records from billing; score the loss component | Monthly renewal-base check |
| Duplicate accounts and contacts | Imports, API-created records, no matching | Duplicate rate by source | Merge with a log | Match before create; unique keys |
| Integration silently stops | Expired token, API limit, schema change | Sync error logs; record counts per day | Restore; replay missed changes | Monitoring on record counts; named integration users |
| Hand-off to success loses context | No checklist, optional fields | Kick-off delays; first-90-day churn reasons | Required hand-off fields at closed won | Checklist as a stage gate |
| Commission disputes | Credit and booking rules unclear | Disputes by rule type | Publish rules; one dispute process | Definitions owned with Finance and SalesOps |
Worked runbook: a forecast miss found in week 9 (illustrative)
Link to section “Worked runbook: a forecast miss found in week 9 (illustrative)”Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 130, "nodeSpacing": 16, "rankSpacing": 30}}}%%
flowchart TB
A["Forecast moved sharply"] --> Q1{"Definitions, snapshot, rates unchanged?"}
Q1 -- "No" --> D1["Measurement change: recast, compare"]
Q1 -- "Yes" --> Q2{"Which component, which deals?"}
Q2 --> D2["Slipped: exit criteria, activity"]
Q2 --> D3["Lost: reasons, competitor"]
Q2 --> D4["Never in pipeline: creation shortfall"]
Q2 --> D5["Renewal loss: risk missed, no record"]
D2 --> F["Re-submit with reasons and a range"]
D3 --> F
D4 --> F
D5 --> F
D1 --> F
F --> R["Retrospective: recalibrate, fix rules, coach"]
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
class A,F,R core
class Q1,Q2 decision
class D1,D2,D3,D4,D5 risk
Text equivalent: When the forecast moves sharply, first ask whether definitions, the snapshot and exchange rates are unchanged. If not, it is a measurement change: recast and compare again. If they are unchanged, locate the component and the deals: slipped deals (check exit criteria and activity), lost deals (loss reasons, competitor), deals that were never in the pipeline (a creation shortfall weeks earlier), or renewal losses the risk bands missed or that had no renewal record. Every branch ends in a re-submission with written reasons and a range, followed by a retrospective that recalibrates probabilities, fixes rules and coaches. Red: the five diagnoses.
Anti-patterns and myths
Link to section “Anti-patterns and myths”- “Rename sales ops and call it done.” Scope, not title, makes RevOps. If marketing-to-sales and sales-to-success hand-offs are not measured, nothing changed.
- “Centralise everyone on day one.” Forrester’s analysts warn that combining all ops functions without creating new capabilities “loses the big picture”.[4]
- “The tool will align us.” A new CRM or forecasting product moves the argument into a new system. Agree definitions first.
- “MQL volume proves marketing works.” See Scenario 2.
- “The forecast is the target with a haircut.” Targets are decisions; forecasts are measurements.[22]
- “The forecast is the sales commit.” Where revenue recurs, renewal losses can move the number as much as new business does; forecast and score both.
- “We will fix the data later.” Without snapshots and required fields now, you cannot measure accuracy or conversion later.
- “RevOps owns revenue.” It owns the system. When RevOps owns the number, it stops being a neutral referee.
- “Our NRR is 120%, theirs is 110%, so we are better.” Not if the definitions differ (see Lab 3).
- Myth: “RevOps is only for SaaS.” The definitions, hand-offs and forecast discipline apply to any B2B business with a sales team; recurring-revenue metrics (ARR, NRR) apply only where revenue recurs.
Deciding and adopting
Link to section “Deciding and adopting”When to use RevOps and when not to
Link to section “When to use RevOps and when not to”Use it when two or more teams hand the same customer to each other (marketing to sales, sales to success, partners to sales), when leaders argue about which number is right, when the forecast regularly surprises, or when revenue recurs and retention matters as much as new business.
Do not build a RevOps function (yet) in these situations:
- Founder-led or single-team selling. With one or two sellers and no separate marketing or success team there are few hand-offs to govern; one part-time, accountable owner of the CRM and the definitions is enough.
- Pure self-serve with no sales team. The questions are product analytics and pricing; see AnalyticsOps and BizOps.
- Transactional or retail selling without pipelines or opportunities. Funnel definitions still help, but the forecast is a demand forecast, not a pipeline roll-up.
- When the real problem is strategy. If the company has not chosen its target customers or pricing, better hand-offs only move the wrong customers faster.
Hidden responsibilities come with adoption: leaders must give time to a definitions council; Finance must co-own metric formulas; somebody must say no to unplanned changes; history must be snapshotted and stored. Without these, a RevOps team becomes a CRM help desk with a grander title.
Exit conditions. If a centralised team has become a bottleneck (requests wait longer than a release cycle for months), move specialist work back to functional ops and keep the centre for definitions, data and systems: the hybrid model.
Decision framework
Link to section “Decision framework”The tree below helps decide whether you need a RevOps capability and which structure to start with. Thresholds are editorial heuristics of this Atlas, not research findings.
Diagram source (Mermaid)
flowchart TB
S["Revenue problems to solve"] --> Q1{"Two or more teams hand customers on?"}
Q1 -- "No" --> N1["No RevOps team: one owner of CRM and definitions"]
Q1 -- "Yes" --> Q2{"Agreed definitions and one forecast today?"}
Q2 -- "Yes" --> N2["Keep functional ops; add a definitions council"]
Q2 -- "No" --> Q3{"Strong functional ops teams already?"}
Q3 -- "Yes" --> H["Hybrid: shared centre for data, systems, analytics"]
Q3 -- "No" --> Q4{"One GTM motion and a clear executive sponsor?"}
Q4 -- "Yes" --> C["Centralised RevOps team"]
Q4 -- "No" --> H
H --> G["Then: dictionary, SLAs, snapshots, forecast scoring"]
C --> G
N2 --> G
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
class S,H,C,G core
class Q1,Q2,Q3,Q4 decision
class N1,N2 neutral
Text equivalent: With fewer than two teams handing customers on, do not create a RevOps team; one person owns the CRM and the definitions. With agreed definitions and one forecast already in place, keep functional ops and add a definitions council. Otherwise start hybrid — a shared centre for data, systems and analytics — unless there is one go-to-market motion and a clear executive sponsor, in which case start centralised. Every route then builds the stage dictionary, SLAs, snapshots and forecast scoring.
For a structured comparison, score each option from 1 to 5 against weighted criteria. The weights and scores below are an illustration for a 300-person company with three ops teams and two GTM motions:
| Criterion (weight) | Decentralised + council | Hybrid CoE | Centralised |
|---|---|---|---|
| Speed to one set of definitions (30%) | 2 | 4 | 5 |
| Keeps specialist depth (25%) | 5 | 4 | 2 |
| Change capacity and focus (20%) | 2 | 4 | 4 |
| Political cost of the change (15%) | 5 | 3 | 1 |
| Clear accountability for data (10%) | 2 | 4 | 5 |
| Weighted score | 3.20 | 3.85 | 3.45 |
The arithmetic for the hybrid option: 0.30×4 + 0.25×4 + 0.20×4 + 0.15×3 + 0.10×4 = 3.85. Change the weights and the answer can change; that is the point of writing them down.
Maturity model
Link to section “Maturity model”This five-level model is this Atlas’s proposal, not an industry standard. Levels describe observable behaviour.
| Level | Observable behaviour | Evidence to look for | Exit criterion (to move up) |
|---|---|---|---|
| 1. Fragmented | Each team has its own definitions, reports and tools | Different “pipeline” numbers in different decks | A written stage dictionary adopted by all teams |
| 2. Defined | Shared dictionary and SLAs exist; data quality is uneven | SLA reports exist but are not acted on | SLA attainment reviewed weekly with actions |
| 3. Managed | Routing, SLAs and data quality are run weekly; pipeline snapshots stored | Fewer stuck records; snapshot history | Forecast error and bias scored for two quarters |
| 4. Measured | Forecast of record scored by component; ARR bridge reconciled to billing; definitions versioned | Bias trending to zero; recasts documented | Changes tested and released on a cadence; metrics feed planning |
| 5. Adaptive | Experiments on routing, signals and hand-offs with hold-out groups; capacity planned from funnel data | Decisions cite experiment results | Sustain; revisit definitions when the GTM motion changes |
Typical constraints: level 2 stalls without an executive sponsor; level 3 without snapshots; level 4 needs Finance as a co-owner; level 5 needs volumes large enough to experiment.
Adoption roadmap: 30/60/90 days
Link to section “Adoption roadmap: 30/60/90 days”| Window | Actions | Owner | Output | Measure |
|---|---|---|---|---|
| Days 1–30 | Inventory definitions and systems; interview each team; start weekly pipeline snapshots; publish a draft stage dictionary; add a fallback queue, a default routing rule, an unassigned-lead alert; remove obviously dead fields | RevOps lead and admin | Inventory, draft dictionary, snapshot job, rules in production | Snapshots stored weekly; unassigned leads over 30 minutes |
| Days 31–60 | Adopt the dictionary at a definitions council; write the MQL SLA; required fields by stage; first SLA and data-quality scorecards; agree ARR, GRR, NRR formulas with Finance; reconcile CRM with billing | RevOps with functional leaders and Finance | Signed dictionary and SLA; scorecards; metric definitions v1 | SLA attainment baseline; completeness; reconciliation difference |
| Days 61–90 | Forecast-of-record calendar, components and adjustment log; renewal records from billing; first component score; GTM release cadence and change form; sales-to-success hand-off checklist as a stage gate; retention bridge monthly | RevOps with sales and CS leadership | Forecast process; release notes; gate live; bridge | Error and bias baseline; hand-off completeness |
Dependencies: an executive sponsor (often the CEO, COO or CRO and CFO together), admin rights to the systems, and Finance time. Milestone at day 90: one pipeline definition in every deck, an SLA report reviewed weekly, and a scored forecast.
Toolkit
Link to section “Toolkit”Checklists
Link to section “Checklists”Quick start (first week)
- Name one accountable owner for definitions and one for the CRM
- List every system that stores customers, leads, deals or subscriptions
- Start a weekly snapshot of open pipeline and forecast submissions
- Add a default routing rule and a fallback queue with an owner
Before changing a definition
- Change request filed; reports, automations and integrations affected listed
- History treatment decided (recast, map, or leave) and written in the version note
- Compensation owner and Finance consulted
- Sandbox test with before-and-after report totals
- Announcement and enablement scheduled with the release
Weekly operating review
- SLA attainment, open breaches and unassigned leads
- Forecast-of-record changes since last week, by component, with reasons
- Contracts ending within 120 days without a renewal record
- Deals with close dates moved twice or more; stale committed deals
- Data-quality scorecard trend
Quarterly governance audit
- Assurance checks done; each forecast bias returned to its component owner
- Access review of CRM admins, export rights and integration users
- Objection and unsubscribe suppression tested across all outreach tools
After a forecast miss follow the worked runbook.
Templates
Link to section “Templates”One-page RevOps charter
REVOPS CHARTER (<company>, version <n>, <date>)
Mission One revenue process, measured end to end, that teams trust.
Scope Definitions; routing and hand-off SLAs; forecast process; revenue
metric formulas (with Finance); system-of-record decisions.
Not scope Quotas and territories; campaign content; CS playbooks; accounting.
Sponsor <executive> Accountable lead: <RevOps lead>
Forums Weekly hand-off check; monthly funnel review; quarterly definitions
council and forecast retrospective; GTM release every two weeks.
Measures SLA attainment; speed to lead; qualified pipeline created; forecast
error and bias by component; GRR; NRR; data completeness.
Decision Definition changes need the council; metric formulas need Finance.
rights System-of-record changes need the RevOps systems lead.
Review Charter reviewed yearly or when the go-to-market motion changes.
Metric definition card
METRIC: <name> ID: <id> VERSION: <n> from <date>
Question it answers:
Formula (in words and symbols):
Population / cohort, and exclusions:
Grain and time window:
System of record and snapshot rule:
Owner (accountable) / steward (responsible):
Known limits and common misreadings:
Change history (version, date, what changed, history recast?):
Forecast-of-record review agenda (30 minutes)
1. Forecast of record vs last week, by component (5 min) - RevOps prepares, CRO chairs
2. New-business deals that moved category or close date, with reasons (10 min)
3. Renewals: risk changes; contracts without a renewal record (5 min)
4. Risks and upside not in the CRM (5 min) - recorded as adjustments
5. Submission and range; actions with owners (5 min)
Definitions council decision record
DECISION <id>: <title> Date: <date> Status: approved
Context: what is inconsistent today, with evidence
Options considered: A / B / C with consequences
Decision and effective date:
History treatment: recast from <date> / map old values / no change
Who must act: report owners, automation owners, compensation, Finance
Review date:
Deep comparisons
Link to section “Deep comparisons”The boundaries table says who owns what; this one says where a problem does not belong to RevOps.
| Situation | Take it to | Because |
|---|---|---|
| Sellers miss quota in one region | SalesOps | Territories, capacity and compensation are sales-side design |
| Campaigns convert poorly while leads are accepted on time | MarketingOps | Scoring and campaign execution sit inside marketing |
| Churn clusters in one segment | CustomerOps | Health scores and renewal plays are success-side work |
| Two systems disagree about the same field | MarTechOps | Integration architecture is the plumbing question |
| The company metric tree contradicts the funnel | BizOps | Planning spans more than revenue |
| Experience scores fall while retention holds | CXOps, SupportOps | Journey and service measurement are theirs |
Is RevOps a team or a way of working? Both, depending on the company (see what RevOps is not). Decide the capabilities first and the structure second.
Should RevOps report to the CRO, the CFO or the COO? No evidence-based answer exists. Reporting to the CRO keeps it close to sales but risks becoming sales operations; the CFO or COO helps neutrality but can feel remote. Whatever the line, give RevOps decision rights over definitions and the stack, and keep the committed forecast with the CRO.
Do we still need MQLs? As an operational trigger, often yes: something must start routing. As a target, no (see Scenario 2). Keep MQL-to-acceptance as a hand-off metric.
Who forecasts renewals? Customer success makes the renewal call, contract by contract, in a renewal review. RevOps supplies the renewal base from billing, agrees with customer success what each risk band means, rolls the call into the forecast of record and scores it.
Who owns the CRM? The business owns its data; RevOps owns the configuration, definitions and change process; IT or security often owns access standards and the platform contract. Write the split down.
Can AI replace the forecast call? It can add a model-based estimate and spot risky deals. Score it like any other forecaster (error, bias, Brier score for deal probabilities)[41] and keep a person accountable for the committed number.
How big should a RevOps team be? No credible public ratio fits your motion; ignore benchmarks quoted without definitions. Size it from the work — systems administration, analytics, the change queue, the governance calendar — and check the queue length every quarter.
What is the difference between bookings, ARR and revenue? Bookings are signed contract value in a period; ARR is an annualised run-rate of active recurring contracts; revenue is recognised under accounting standards as performance obligations are satisfied.[20][8] They move at different times.
Going further
Link to section “Going further”Advanced topics and emerging direction
Link to section “Advanced topics and emerging direction”- Usage-based revenue (active practice, definitions unsettled). When usage dominates, ARR, NRR and forecasting change shape; public companies already use different bases (Lab 3).
- AI in forecasting and seller workflows (fast-moving vendor area). The vendor market is still forming (2025 row of the timeline); treat feature claims as claims until tested on your data.
- Warehouse-centred GTM data (established pattern, varied maturity). Joined history in a warehouse, metrics defined once in a semantic layer, derived fields written back to the CRM; see AnalyticsOps and DataOps.
Learning path
Link to section “Learning path”- Prerequisites: spreadsheets; the basic B2B sales process; a profit-and-loss statement.
- One-day primer: read What RevOps is, the stage dictionary and the metrics table; run Lab 1.
- One week: run Labs 2–4; map your company’s systems of record; draft a stage dictionary for your team.
- Thirty days: follow the first 30 days of the roadmap; score one quarter of your forecast of record by component; reconcile CRM and billing ARR for twenty customers.
- Specialisations: GTM systems administration (with MarTechOps and IntegrationOps); revenue analytics and forecasting; deal desk and quote-to-cash (with SalesOps); retention analytics (with CustomerOps).
- Portfolio projects: a versioned metric dictionary with a history recast; a routing rule engine with audit logs; a forecast scoring report covering four quarters; a CRM-to-billing reconciliation.
Wrap-up
Link to section “Wrap-up”Executive recap and cheat sheet
Link to section “Executive recap and cheat sheet”| Topic | Remember |
|---|---|
| What it is | One revenue process across marketing, sales and success: shared definitions, governed hand-offs, one forecast, metrics defined once |
| First decisions | Unit of the funnel (leads or opportunities); system of record per object; who chairs the definitions council |
| Essential practices | Stage dictionary; routing with a default rule; hand-off SLAs; weekly snapshots; a forecast of record scored by component; change releases |
| Core metrics | SLA attainment, speed to lead, qualified pipeline created, forecast error and bias by component, ARR bridge, GRR, NRR, CAC payback |
| Tool classes | CRM, marketing automation, routing, forecasting, CPQ and billing, CS platform, warehouse and BI |
| Watch-outs | Silent definition changes; period ratios; uncapped LTV; MQL targets; a forecast without renewals; RevOps owning the number |
| Next actions | The quick-start checklist, then a draft dictionary and an ARR definition agreed with Finance |
A judgement call: centralise now, or build a centre of excellence first?
Link to section “A judgement call: centralise now, or build a centre of excellence first?”Assumptions. Both options cost about the same; the ops staff are competent; the CFO will co-own metric definitions under either option; the company has one main sales motion and a growing self-serve tier.
Option A, centralise now. For: one leader can impose definitions quickly; clear accountability. Against: Forrester’s analysts count required centralisation among RevOps myths;[4] marketing and success lose specialists just when self-serve needs them; and reporting to the CRO, the team may score its own leader’s forecast.
Option B, centre of excellence first. For: keeps specialist depth; the shared centre owns exactly what is broken (definitions, data, systems, forecast scoring); lower political cost. Against: slower; a centre without decision rights becomes a ticket queue.
How to decide. The problems on the table (two numbers, a biased forecast) are definition and measurement problems, which a centre with decision rights can fix within a quarter. Centralisation solves a different problem (fragmented capacity and priorities), which nobody has shown exists here.
Recommendation (reasoned, not proven). Option B with teeth: a centre that owns the stage dictionary, metric definitions with Finance, the GTM release and forecast scoring, reporting jointly to the CRO and CFO; review in two quarters against explicit criteria (one pipeline number, forecast bias near zero, change queue under one release). If capacity conflicts dominate by then, centralise. Why the attractive option can be wrong: centralisation feels decisive but moves boxes before fixing the definitions that caused the pain, and removes the neutrality the forecast needs. Uncertainty: no study tests these two options for a company like ExampleCo; a strong leader can make either work.
Learning objectives and mastery check
Link to section “Learning objectives and mastery check”After this page you should be able to:
- Explain what RevOps is and is not, and how it differs from SalesOps and the CRO’s job.
- Write stage entry and exit criteria and a hand-off SLA.
- Design ordered routing rules with fallbacks and measure speed to lead correctly.
- Calculate an ARR bridge, GRR, NRR, CAC payback and a capped LTV, and explain how definitions change them.
- Run a forecast of record that combines new business, expansion and renewals, stays separate from the target, and is scored by component.
- Choose a structure (decentralised, hybrid, centralised) with stated assumptions.
Self-check questions
- Marketing reports 62.5% MQL-to-opportunity conversion for February; the cohort figure is 25%. Which do you publish, and why?
Answer
Publish the cohort figure with its age (“25% at 9 to 12 weeks, still maturing”: the February MQLs are 9 to 12 weeks old at the lab’s 30 April snapshot), or wait until the cohort matures. The period ratio divides opportunities created in February, mostly from January MQLs, by February MQLs: it mixes cohorts and moves with volume, not quality. Lab 1 reproduces this.
- Your median time to first touch is 25 minutes against a 60-minute SLA. Is the SLA being met?
Answer
Not necessarily. The median includes only touched leads; never-touched and slow leads are hidden. Report attainment (the share of all leads touched within the SLA) and the count of open breaches. In Lab 2 the median is 25 minutes but attainment is 55.6%.
- Start ARR 5.0 m; expansion 0.6 m; contraction 0.2 m; churn 0.3 m; new 0.9 m. Compute GRR and NRR.
Answer
GRR = (5.0 − 0.2 − 0.3) ÷ 5.0 = 90.0%. NRR = (5.0 + 0.6 − 0.2 − 0.3) ÷ 5.0 = 102.0%. New ARR (0.9 m) appears in neither: both measure only customers present at the start.
- A competitor publishes NRR of 120%; yours is 108%. Your CEO asks why you are worse. What do you check first?
Answer
The definitions: ARR or revenue base, whether usage counts, cohort and window, averaging method, currency, treatment of acquisitions; listed companies differ on each (see metrics). Compare trends in your own consistent series before comparing levels.
- Sales leadership wants the forecast set equal to the quarterly target minus 5% “to stay ambitious”. What is wrong?
Answer
It confuses a target (a decision) with a forecast (a measurement). The forecasting literature recommends keeping them separate and forecasters distinct from the users of forecasts: a forecast tied to the target cannot warn you of a miss. Submit a forecast from the pipeline with documented adjustments; keep the target separate.
- For six quarters your forecast of record has been within about 1% of actual net new ARR. The CFO proposes to stop scoring the components. What do you advise?
Answer
Keep scoring them. An accurate total can hide offsetting biases: in Lab 4, new business is over-forecast by 78.3k a quarter and renewal losses by 71.7k, so the total’s mean error is only −3.3k. When one owner fixes their bias alone, the total gets worse. Report each component’s error and bias to its owner.
- A prospect in Germany objected to direct marketing in your marketing automation platform. A seller’s sequencing tool emails them a week later. Which design failure is this, and how do you fix it?
Answer
The objection did not propagate across systems. Under the GDPR, after an objection to direct marketing the data must no longer be processed for that purpose. Make the marketing platform the system of record for consent and objections, give sellers and support one way to record an objection in it, sync suppression to every outreach tool, test it in the quarterly audit.
- Your company has eight sellers, no separate marketing team and one customer success manager. The board asks you to hire a head of RevOps. What do you advise?
Answer
Probably not yet. With few hand-offs, assign one accountable owner for the CRM and definitions, start pipeline snapshots and forecast scoring, and write the stage dictionary. Revisit when separate marketing and success teams exist or numbers conflict.
Conclusion
Link to section “Conclusion”RevOps is less a department than a promise: that the people who find, win and keep customers work from the same definitions, hand customers to each other on time, and see the same numbers. Three ideas carry most of the value. Write the definitions down and version them, because every argument about pipeline, ARR or retention is first an argument about meaning. Put a clock on every hand-off, because revenue leaks in the gaps between teams, not inside them. Score the forecast, because a system you cannot predict is a system you do not understand.
The label is recent; the work is old. A company with a careful operations lead, a one-page stage dictionary and a weekly snapshot is doing RevOps; a company with a new title, a new tool and three definitions of pipeline is not. One test: ask marketing, sales and Finance for last quarter’s qualified pipeline and net revenue retention, separately. If you get one answer each, the system works.
Sources and further reading
Link to section “Sources and further reading”All sources were opened on 2026-10-18 unless marked otherwise; the sources added or re-checked during the review round were opened on 2026-10-19; the three merger and Magic Quadrant sources were re-opened on 2026-10-23. Vendor and product statements are as of October 2026. Legal sources are for orientation only; for EU law, check the official text on EUR-Lex.
Further reading.
- Forrester’s paid reports on revenue operations organisational design and the full B2B Revenue Waterfall stage definitions (not read for this page; client access required).
- Adobe Marketo Engage documentation and Dynamics 365 Sales: product documentation for two systems named in the tooling table.
Changelog. Vendor rows (HubSpot, Salesforce, tool categories) and the legal rows are due for re-verification by 2027-01-18.
- 2026-10-23, post-score polish (
reviews/revops-polish.md): exact lab and artefact links; forward pointers from the playbooks; opening verification date fixed; vendor market sources re-opened (unchanged); repeated passages cut. - 2026-10-19, revision after independent review (
reviews/revops-r1.md, response inreviews/revops-r1-response.md): forecast boundary with SalesOps restated (RevOps owns the forecast-of-record definition, snapshots, roll-up and component scorecard; SalesOps runs the categories, inspection, call and accuracy log; both pages now use e = actual − forecast); post-sale half completed in the lifecycle, workflow, artefacts and forecast components (renewal base, renewal records, expansion, roll-up); ePrivacy Directive Article 13 added beside GDPR/PECR/CAN-SPAM with the existing-customer exception and the legal-persons limit; paid/blended CAC per a16z corrected (the denominator varies, not the numerator); Forrester definition title and the Gartner MQ report name fixed; Clari–Salesloft completion cited to the companies’ announcements; LTV churn type and discounting stated; worked LTV added; consent write-path, sandbox and backup-export privacy handling added; glossary abbreviations (SDR, AE, CSM, CoE, FP&A, CPQ) added; sales-engagement tooling row added; duplicated passages cut (MQL myth quoted once, GitLab practice stated once, comparison table merged into a compact decision aid; ~750–800 words of restatement removed, review additions absorbed); sources re-verified 2026-10-19. - 2026-10-18, first version: research, ledger, four labs executed on synthetic data, seven diagrams; not yet independently fact-checked.
Why Revenue Operations (RevOps) Should Be On Your Radar — Forrester blog, Jerry Zhao, 2024-08-20. Checked 2026-10-18. ↩︎
Gartner Predicts 75% of the Highest Growth Companies in the World Will Deploy a RevOps Model by 2025 — Gartner press release, 2021-05-17 (read via the Internet Archive; gartner.com blocked automated access). Checked 2026-10-18. ↩︎ ↩︎ ↩︎
Revenue Operations: Driving Better Customer Experiences And Growth — Forrester blog, Cristina De Martini, 2023-06-04. Checked 2026-10-19. ↩︎ ↩︎ ↩︎ ↩︎
Revenue Operations: Nine Myths And Two Realities — Forrester blog, Laura Cross with Christian Jibilian, 2023-09-15. Checked 2026-10-18. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
The 10 fastest-growing jobs in the U.S. right now — CNBC, 2023-01-18 (report on LinkedIn’s Jobs on the Rise 2023). Checked 2026-10-18. ↩︎ ↩︎ ↩︎
About us — INFORMS Revenue Management and Pricing Section. Checked 2026-10-18. ↩︎
Revenue Cycle Management — Healthcare Financial Management Association. Checked 2026-10-18. ↩︎
IFRS 15 Revenue from Contracts with Customers — IFRS Foundation. Checked 2026-10-18. ↩︎ ↩︎ ↩︎
The new Demand Waterfall from SiriusDecisions; An Introduction — CustomerThink, Paul Mosenson, 2012-05-24 (practitioner summary). Checked 2026-10-18. ↩︎ ↩︎
Forrester Completes Acquisition Of SiriusDecisions (Exhibit 99.1 to Form 8-K) — Forrester Research via SEC EDGAR, 2019-01-03. Checked 2026-10-18. ↩︎
Forrester Debuts Next-Generation B2B Revenue Waterfall To Help Firms Accelerate Revenue Growth — Forrester press release, 2021-05-04. Checked 2026-10-18. ↩︎ ↩︎ ↩︎ ↩︎
New Forrester Decisions Research Services To Help B2B Leaders Drive Scalable And Sustained Business Growth — Forrester press release, 2023-06-05. Checked 2026-10-18. ↩︎ ↩︎
Saying Goodbye To MQLs: Six MQL Myths Squashed To Shift Your Leads-Based Culture — Forrester blog, Amy Hawthorne, Terry Flaherty, Maria Alexandrou, 2023-10-30. Checked 2026-10-18. ↩︎ ↩︎
Outreach named a Leader in the 2025 Gartner Magic Quadrant for Revenue Action Orchestration Platforms — Outreach blog (vendor), 2025-12-18; the post names the report “Magic Quadrant for Revenue Action Orchestration Platforms”, 15 December 2025 (Rietberg, Gottlieb). Checked 2026-10-23. ↩︎ ↩︎
Clari-Salesloft Merger: A Bold, High-Stakes Bid For Market Dominance — Forrester blog, Anthony McPartlin, 2025-08-14 (written when the merger was announced; the post says the deal was expected to close in early Q4). Checked 2026-10-23. ↩︎
Clari and Salesloft Complete Merger and Appoint Steve Cox as CEO to Build the First Predictive Revenue System — Salesloft newsroom (vendor statement about its own merger), 2025-12-03. Completion terms were not verified beyond this announcement. Checked 2026-10-23. ↩︎ ↩︎
RevOps Co-op — community home page (member count is the community’s own claim). Checked 2026-10-18. ↩︎
Track Prospects with Salesforce Leads — Salesforce Trailhead. Checked 2026-10-18. ↩︎
Use lifecycle stages — HubSpot Knowledge Base, updated 2026-07-17. Checked 2026-10-18. ↩︎ ↩︎ ↩︎
16 Startup Metrics — Jeff Jordan, Anu Hariharan, Frank Chen and Preethi Kasireddy, Andreessen Horowitz, 2015-08-21. Checked 2026-10-18. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Set up the forecast tool — HubSpot Knowledge Base, updated 2026-09-09. Checked 2026-10-18. ↩︎
Forecasting: Principles and Practice (3rd ed.), Judgmental forecasts — Rob J Hyndman and George Athanasopoulos, OTexts, 2021 (sections 6.2 and 6.7). Checked 2026-10-18. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Field Operations — GitLab Handbook, last modified 2025-04-30. Checked 2026-10-18. ↩︎ ↩︎ ↩︎
Winning by Design Releases Updated Bowtie Model and Benchmarks — Winning by Design press release, 2023-10-11. Checked 2026-10-18. ↩︎ ↩︎
Spekit for Operations/Process/Tools Updates — GitLab Handbook, last modified 2026-07-28. Checked 2026-10-18. ↩︎
Saying Goodbye To MQLs: A Parting That Is All Sweet And No Sorrow — Forrester blog, Simon Daniels, 2023-11-21. Checked 2026-10-18. ↩︎ ↩︎
Drive Revenue Engine Performance (B2B Revenue Waterfall guide) — Forrester, undated. Checked 2026-10-18. ↩︎
The Short Life of Online Sales Leads — James B. Oldroyd, Kristina McElheran and David Elkington, Harvard Business Review, March 2011 (only the free introduction was read). Checked 2026-10-18. ↩︎
Deduplication of records — HubSpot Knowledge Base, updated 2026-09-08. Checked 2026-10-18. ↩︎
Assign and rotate record owners using workflows — HubSpot Knowledge Base, updated 2026-09-23. Checked 2026-10-18. ↩︎
Data Governance — GitLab Handbook, last modified 2024-06-27. Checked 2026-10-18. ↩︎
Putting Forrester’s B2B Revenue Waterfall Into Action: Six Tips For Laser-Focused Targeting — Forrester blog, Alisa Groocock and Robert Muñoz, 2021-07-22. Checked 2026-10-18. ↩︎ ↩︎
Commission Guidance on Management’s Discussion and Analysis of Financial Condition and Results of Operations, Release No. 33-10751 — US Securities and Exchange Commission, 2020-01-30. Checked 2026-10-18. ↩︎ ↩︎ ↩︎ ↩︎
Forecasting: Principles and Practice (3rd ed.), Evaluating point forecast accuracy — Rob J Hyndman and George Athanasopoulos, OTexts, 2021. Checked 2026-10-18. ↩︎ ↩︎ ↩︎
SaaS Metrics – A Guide to Measuring and Improving What Matters — David Skok, For Entrepreneurs, c. 2010. Checked 2026-10-18. ↩︎ ↩︎ ↩︎ ↩︎
salesagility/SuiteCRM — GitHub, AGPLv3. Checked 2026-10-18. ↩︎
twentyhq/twenty — GitHub (open-source CRM project). Checked 2026-10-18. ↩︎
LeanData home page — LeanData (vendor self-description). Checked 2026-10-18. ↩︎
Salesloft home page — Salesloft (clari.com returned HTTP 301 to this page on 2026-10-18; the page lists Clari Forecast). Checked 2026-10-18. ↩︎
Determine likelihood to close with predictive lead scoring — HubSpot Knowledge Base, updated 2026-01-11. Checked 2026-10-18. ↩︎
sklearn.metrics.brier_score_loss — scikit-learn 1.9.1 documentation. Checked 2026-10-18. ↩︎ ↩︎
Datadog, Inc. Form 10-K for the year ended 31 December 2025 — SEC EDGAR, 2026 (sections on ARR and dollar-based net retention rate). Checked 2026-10-18. ↩︎
Snowflake Inc. Form 10-K for the year ended 31 January 2026 — SEC EDGAR, 2026 (section “Net Revenue Retention Rate”). Checked 2026-10-18. ↩︎
Workday, Inc. Form 10-K for the year ended 31 January 2026 — SEC EDGAR, 2026 (section “Gross Revenue Retention Rate”). Checked 2026-10-18. ↩︎
SaaS Metrics 2.0 – A Guide to Measuring and Improving What Matters — David Skok, For Entrepreneurs, undated. Checked 2026-10-18. ↩︎
Art. 4 GDPR: Definitions — gdpr-info.eu (unofficial text). Checked 2026-10-18. ↩︎
Recital 47 GDPR: Overriding legitimate interest — gdpr-info.eu (unofficial text). Checked 2026-10-18. ↩︎
Directive 2002/58/EC concerning the processing of personal data and the protection of privacy in the electronic communications sector (Directive on privacy and electronic communications), consolidated text of 19.12.2009, Article 13 — EUR-Lex (official consolidated text). Checked 2026-10-19. ↩︎
Electronic mail marketing (guide to PECR) — UK Information Commissioner’s Office (under review). Checked 2026-10-18. ↩︎
CAN-SPAM Act: A Compliance Guide for Business — US Federal Trade Commission, August 2023 (edited January 2024). Checked 2026-10-18. ↩︎
California Consumer Privacy Act (CCPA) — California Department of Justice, updated 2026-08-28 (FAQ A.11). Checked 2026-10-18. ↩︎
Art. 21 GDPR: Right to object — gdpr-info.eu (unofficial text). Checked 2026-10-18. ↩︎