The Ops Atlas xOps School

Business & Growth Established term Sources verified

MarketingOps

MarketingOps (marketing operations) runs marketing as a dependable system: campaigns built and checked to a standard, leads captured with consent, scored and followed up by sales under an agreed service level, and pipeline measurement people can trust.

Key takeaways

  • Marketing operations is an established function and career, but no standards body defines it. This page covers process, people and decisions; MarTechOps covers stack architecture (an editorial split).
  • The core asset is a written funnel contract agreed with sales and approved by RevOps: stage definitions, scoring, the hand-off and a follow-up service level in which untouched leads count as misses.
  • Score fit and engagement separately, back-test any MQL rule on later months, and size MQL volume to sales capacity: a more accurate rule still fails if nobody can work the leads.
  • Attribution models allocate credit; they do not measure what marketing caused. Use randomised holdouts, geo tests or mix models for large budget decisions, and expect wide uncertainty.
  • Consent and deliverability are operating constraints: pre-ticked boxes are invalid consent in the EU and UK; Gmail and Yahoo require authentication, one-click unsubscribe and a spam rate below 0.3% from bulk senders, and Outlook.com requires authentication (as of October 2026).
  • Measure the operation itself (on-time launches, rework, SLA attainment, data quality) as well as funnel outcomes, and never reward MQL volume alone.

MarketingOps (marketing operations, often shortened to MOps) is the function that makes marketing run as a dependable system. Campaigns are requested, built, checked and launched to a standard. Every lead is captured with a record of its consent, scored, routed to sales and followed up within an agreed time. The money marketing spends is connected to pipeline by measurement that marketing, sales and finance can all check.

When it works, nobody notices. When it fails, a webinar invitation reaches people who unsubscribed, two thousand trade-show leads wait unworked in a spreadsheet, sales calls the leads junk, and the board sees three different numbers for “marketing-sourced pipeline”. MarketingOps exists to prevent those failures and to make marketing’s contribution measurable.

Sources were verified on 2026-10-18; two were re-checked on 2026-10-23.

Question Short answer
Goal Reliable campaigns, clean and consented lead flow, and measurement of marketing’s contribution that survives scrutiny
Primary users Marketing ops managers, campaign and automation specialists, marketing analysts; internal customers are marketers, sales development and leadership
In scope Campaign intake, build and QA; MQL criteria and lead scoring; the hand-off to sales; data hygiene; consent capture; deliverability practice; attribution and experiments; planning and budgets; marketing KPIs
Handed off Stack architecture → MarTechOps; shared funnel definitions and forecast → RevOps; sales stages → SalesOps; content production → ContentOps; ad trafficking → AdOps; search → SEO Operations; consent policy → PrivacyOps
Prerequisites None. Spreadsheet skills help; SQL and basic statistics help with measurement
Key outputs Stage definitions and SLA, scoring model, campaign standards and QA checklist, naming taxonomy, consent records, measurement policy, monthly scorecard
Term status Established as a function and career; no standards body or official framework defines it (see the next section)
Evidence status Verified: every footnoted claim was checked against an opened source on 2026-10-18

A small marketing team can run without operations for a while: one tool, a few people, campaigns built by whoever is free. The approach breaks as volume grows, because campaigns, leads and money cross several teams and systems, and each crossing loses something. The “without” column below is a composite of common failure patterns, not a report about any company.

Area Without marketing operations With it
Campaign launch Built ad hoc; broken links and wrong lists found by customers Intake brief, standard build, QA checklist, second-person check before launch
Lead flow Leads sit in exports; sales picks which to call Every lead scored, routed to an owner and followed up within an agreed time; misses reported
Definitions “MQL” means whatever this quarter’s target needs Written stage definitions agreed with sales, changed through a controlled process
Data Duplicates, missing countries and job titles, lists bought years ago Validation at capture, deduplication rules, a monthly data-quality score
Consent Pre-ticked boxes; unsubscribes honoured “eventually” Consent recorded per purpose; unsubscribes honoured within legal and mailbox-provider limits
Measurement Every channel claims the same deal Shared attribution rules labelled as credit allocation, and experiments for large budget questions

The cost of not doing this work rarely appears on one report. It shows up as sales time spent on poor leads, revenue lost from leads nobody called (RevOps covers the speed-to-lead evidence and its caveats), regulatory and deliverability risk, and budget moved on the basis of credit that was never causal. Gartner’s guide for CMOs frames the first marketing-operations KPI as a question: “Did marketing’s work move the business forward?”[1]

What MarketingOps is not: naming and boundaries

Link to section “What MarketingOps is not: naming and boundaries”

The name. “Marketing operations” is the established name; “MarketingOps” (one word) and “MOps” are informal spellings of the same function. Gartner describes marketing operations as “the backbone of a marketing organization, focusing on optimizing processes, technology and data to enhance efficiency and effectiveness”.[1] A practitioner community, MarketingOps.com, reports more than 3,500 members[2] and has surveyed the profession since 2021.[3] Writing in November 2024 about that year’s report (more than 600 respondents), Scott Brinker concluded that “Marketing ops has become an established career”, while also calling it “a discipline that is still comparatively quite new and not fully understood across the broader marketing industry”.[4] Both statements are true: the function is established, its boundaries differ from company to company, and no standards body or official framework defines it. Certifications exist (the community offers its own[2]), but none comes from a neutral standards body.

The overlap with MarTechOps. In the same post, Brinker summarised the survey as showing that “marketing ops is clearly an entangled mix of process, technology, and data”.[4] Many companies run all three with one team.

What it is not.

  • Not RevOps. RevOps governs the definitions, hand-offs and forecast shared by marketing, sales and customer success; MarketingOps runs the marketing part inside that frame (an Atlas boundary shared with the RevOps page; see the RACI below).
  • Not marketing strategy or creative. MarketingOps does not choose the message or the audience strategy; it makes their delivery reliable and measurable.
  • Not just “the Marketo admin”. Administering a marketing automation platform (MAP) is one task among many.

B2B and B2C. Much of the published practice is business-to-business, where marketing hands leads to a sales team. In consumer and self-serve businesses there is often no hand-off; the same function then runs lifecycle messaging, consent, deliverability and experiments, and its pipeline is a purchase or subscription.

Marketing operations has no founding document. The milestones below are the ones that can be dated from sources.

  • Programmable marketing. Marketing automation platforms turned campaigns, scoring and hand-offs into configurable software; two of the best-known, Marketo and HubSpot, were both founded in 2006.[5][6] In this Atlas’s reading, the operations role grew around designing, running and governing that configuration; no source dates its start.
  • The funnel waterfall. Waterfall models, notably those of SiriusDecisions (a lineage Forrester now publishes), shaped how B2B teams name lead stages. Forrester’s Kerry Cunningham wrote in 2021 that before 2017 nearly every B2B funnel model tracked leads at the top and opportunities at the bottom.[7] Forrester’s B2B Revenue Waterfall (2021-05-04, “formerly known as the SiriusDecisions Demand Unit Waterfall®”; RevOps retells this history from the revenue side) plans around buying groups and adds renewal, cross-sell and upsell as opportunity types.[8]
  • The case against the MQL. In 2023 Forrester’s Terry Flaherty wrote: “For most companies, it’s no longer a question of IF they leave MQLs behind, but WHEN and HOW.”[9] That is an analyst’s position, not a measured fact; the default lifecycle stages of tools such as HubSpot still include an MQL stage,[10] and this page shows how to run it honestly.
  • Consent and the inbox. The EU’s GDPR (applicable since 2018), Apple’s Mail Privacy Protection, which hides email opens,[11] and the bulk-sender rules of Gmail and Yahoo (from February 2024) and Outlook.com (from May 2025)[12][13][14] moved consent and deliverability from legal footnotes into daily operations.
  • Professionalisation. The community’s summary of five years of its surveys (2021–2025) reports rising salaries, smaller teams after the 2022–2023 layoffs “leading to more ‘teams of one’”, and MarketingOps moving deeper into RevOps.[3]
Term Meaning Example
MAP Marketing automation platform: holds person records, forms, emails, programmes and scores Marketo Engage, HubSpot Marketing Hub
CRM Customer relationship management system: accounts, contacts, leads, opportunities, sales tasks The system sales works in
Lead / contact / account A person not yet linked to an account / a person linked to an account (prospect or customer) / the organisation Many CRMs convert leads into contacts
MQL Marketing-qualified lead: marketing judges it ready for sales HubSpot: “qualified as ready for the sales team”[10]
SAL Sales-accepted lead: sales has accepted the MQL and will work it A common intermediate stage; recommended on this page
SQL Sales-qualified lead: sales confirms a potential customer Discovery call confirms need and authority
SDR Sales development representative: follows up and qualifies leads before an account executive takes over Works the MQL queue under the SLA
Buying group The several people at one organisation involved in a purchase Forrester bundles their leads into “one selling opportunity”[7]
Fit / engagement score Fit = who they are (title, size, industry); engagement = what they did (visits, replies) Eloqua’s A–D profile × 1–4 engagement grid[15]
Score decay Engagement points that shrink or expire as they age HubSpot cuts each event’s points by a set percentage every 1, 3, 6 or 12 months[16]
Follow-up SLA The agreed time within which sales acts on a lead “First touch within 4 working hours”
UTM parameters URL tags that record source, medium and campaign utm_source=newsletter&utm_medium=email
Incrementality (lift) The outcome caused by marketing: treated minus a comparable untreated group A randomised holdout
Soft opt-in UK/EU exception for marketing the sender’s own similar products to existing customers Requires an opt-out at collection and in every message

Mental model: the funnel contract. MarketingOps keeps three written agreements and runs the machinery behind them:

  1. Definitions: what each stage means, with entry and exit criteria.
  2. Mechanics: the scores, routing rules and follow-up SLA that move people between stages.
  3. Measurement: how credit is allocated, how incrementality is tested, and who may change either.

Each agreement needs an owner, a version and a change process. Most failures on this page are a broken or unwritten clause.

Figure 1. MarketingOps and its neighbours: what flows in and out
definitionsassetsdelivery datatrafficaccepted leadsrequirements; platforms anddata flowsconsent records; policy andrights requestsmetric definitionsRevOps: shareddefinitions and SLAsContentOps: assetsAdOps: paid-mediadeliverySEO Operations:organic demandMarketingOps:campaigns, leads,consent capture,measurementSalesOps: salesstages and CRM forsalesMarTechOps: stackand data flowsPrivacyOps: consentpolicyAnalyticsOps: certifiedmetrics
Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 150, "nodeSpacing": 25, "rankSpacing": 45}}}%%
flowchart TB
  REV["RevOps: shared definitions and SLAs"]
  CON["ContentOps: assets"]
  AD["AdOps: paid-media delivery"]
  SEO["SEO Operations: organic demand"]
  MO["MarketingOps: campaigns, leads, consent capture, measurement"]
  SAL["SalesOps: sales stages and CRM for sales"]
  MT["MarTechOps: stack and data flows"]
  PR["PrivacyOps: consent policy"]
  AN["AnalyticsOps: certified metrics"]
  REV -->|"definitions"| MO
  CON -->|"assets"| MO
  AD -->|"delivery data"| MO
  SEO -->|"traffic"| MO
  MO -->|"accepted leads"| SAL
  MO <-->|"requirements; platforms and data flows"| MT
  MO <-->|"consent records; policy and rights requests"| PR
  MO -->|"metric definitions"| AN
  classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
  classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
  class MO core
  class REV,CON,AD,SEO,SAL,MT,PR,AN neutral

Text equivalent: RevOps supplies shared definitions and service levels, ContentOps assets, AdOps paid-media delivery data and SEO Operations organic traffic. MarketingOps sends accepted leads to SalesOps and metric definitions to AnalyticsOps. Two links run both ways: requirements go to MarTechOps and platforms and data flows come back; consent policy and rights requests come from PrivacyOps and consent records go back.

Neighbour Shared ground MarketingOps owns The neighbour owns
RevOps Funnel stages, SLAs, revenue metrics MQL criteria (drafted for approval), the scoring model, the MAP-side hand-off and marketing’s SLA clock Stage definitions, the MQL definition, routing policy and SLAs, the forecast, decision rights over the go-to-market stack
SalesOps The hand-off, the CRM MQL creation and recycling rules Sales stages and exit criteria, territories, sales capacity
MarTechOps The MAP, CRM sync, tracking Requirements, configuration of campaigns and scores Architecture, integrations, CDPs, tags and consent-signal plumbing
ContentOps Campaign assets Briefs, deadlines, QA of the assets in campaigns Content lifecycle, governance and reuse
AdOps Paid campaigns Campaign taxonomy, budgets, landing pages, lead capture Ad servers, trafficking, pacing, invalid traffic
SEO Operations Organic traffic Tracking organic leads into the funnel Search optimisation
PrivacyOps Consent Capturing and recording consent in forms and campaigns Lawful basis, consent policy, rights requests
AnalyticsOps Marketing metrics in BI The business meaning of marketing metrics Semantic layer, certification, BI content lifecycle

After the sale, CustomerOps runs renewals and expansion and CXOps measures the experience across the journey; MarketingOps supports them with campaigns to existing customers.

This charter is this Atlas’s proposal, not a published industry document.

Mission. Make marketing’s work reliable, its data trustworthy and its contribution measurable.

Principles.

  1. Definitions before dashboards. A stage, score or metric is written, owned and versioned before anyone reports on it.
  2. Every lead has an owner and a clock. A lead nobody owns, or that nobody touched within the SLA, is counted as a miss, not left out of the denominator.
  3. Consent is part of the build. Forms, imports and campaigns capture and honour consent by design; legal review is the check, not the mechanism.
  4. Quality before launch. Templates cover the common case; no campaign goes live without a checklist and a second person’s check.
  5. Allocation is not causation. Attribution reports are labelled as credit allocation; budget moves above an agreed size need causal evidence or an explicit, recorded judgement.
  6. Size the funnel to capacity. Leads that sales cannot work are waste, however well they are scored.
  7. Measure the operation as well as the outcome. On-time launches, rework and SLA attainment are leading indicators of pipeline.

Non-goals. Deciding brand or audience strategy; owning stack architecture; owning the sales process or the forecast.

Building block What it contains Typical owner
Standards Naming and UTM taxonomy, campaign templates, QA checklist, brand-safe email defaults MarketingOps
Funnel contract Stage definitions, scoring model, routing rules, follow-up SLA, recycle reasons RevOps (definitions, routing policy, SLA); MarketingOps (MQL criteria, scoring, MAP-side hand-off)
Data Person and account model, field dictionary, validation and deduplication rules MarketingOps with MarTechOps
Consent and suppression Consent records per purpose, suppression lists, preference centre MarketingOps, policy from PrivacyOps
Measurement Attribution rules, experiment register, mix model where justified, scorecard MarketingOps analysts
Work management Intake form, campaign calendar, capacity plan MarketingOps
Platforms MAP, CRM, data warehouse, BI MarTechOps (architecture), MarketingOps (configuration)
  • MarketingOps lead: owns standards, the marketing side of the funnel contract (MQL criteria, scoring, the MAP-side hand-off), the scorecard and the change process.
  • Campaign operations / automation specialist: builds programmes, forms, emails and lists; runs QA; administers the MAP.
  • Marketing analyst: owns measurement, data-quality reporting, scoring back-tests and experiment design.
  • Campaign owner (demand generation, field or product marketing): owns the goal, audience, message and budget.
  • Sales development manager (who leads the SDRs) and SalesOps: own acceptance, follow-up and sales stages.
  • RevOps, where it exists: accountable for the shared stage dictionary, the MQL definition, routing policy and SLAs.

In the “teams of one” described under origins, one person holds all three MarketingOps roles. Gartner suggests centralising scarce, strategic skills such as marketing analytics, for example in a centre of excellence.[1]

Work inside marketing:

Activity MarketingOps lead Campaign / automation specialist Marketing analyst Campaign owner Sales development and SalesOps
Campaign intake and priority A C I R I
Build and QA A R I C I
Data hygiene and deduplication in the MAP A R C I C
Consent capture in forms A R I C I
Attribution rules and experiments A C R C I
Monthly scorecard A C R I I

The funnel contract (the first four rows carry the same letters as the RevOps RACI):

Decision RevOps MarketingOps lead MarketingOps specialist or analyst Sales development and SalesOps
Stage dictionary and lifecycle rules A, R C I C
MQL definition (criteria and hand-raise rule) A R R (analyst back-tests) C
Lead scoring model and threshold C A R (specialist configures, analyst back-tests) C
Routing policy and SLA clocks A, R C I C
MAP-side hand-off: sync to the CRM, MQL alerts, recycling to nurture C A R (specialist) I
Follow-up within the SLA I I I A, R

R = responsible, A = accountable, C = consulted, I = informed; one A per row. Without a RevOps function, give the RevOps column’s accountability to one person (for example the executive both teams report to) rather than splitting it. PrivacyOps is consulted on every consent change.

MarketingOps runs two lifecycles at once. The campaign lifecycle turns a request into a launched, measured programme. The lead lifecycle moves each person from first contact to a sales outcome.

Figure 2. Campaign lifecycle from request to retrospective
noyesnoyesIntake: brief with goal,audience, offer, budget,datesFits priorities andcapacity?Defer or reshape with therequesterBuild: programme, forms,emails, lists, trackinglinksQA checklist andsecond-person checkpass?Launch and watch thefirst 48 hoursMeasure: stageconversion, cost peropportunity, lift if testedRetrospective: keep,change or stop
Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 170, "nodeSpacing": 25, "rankSpacing": 30}}}%%
flowchart TB
  A["Intake: brief with goal, audience, offer, budget, dates"] --> B{"Fits priorities and capacity?"}
  B -->|"no"| B2["Defer or reshape with the requester"]
  B -->|"yes"| C["Build: programme, forms, emails, lists, tracking links"]
  C --> D{"QA checklist and second-person check pass?"}
  D -->|"no"| C
  D -->|"yes"| E["Launch and watch the first 48 hours"]
  E --> F["Measure: stage conversion, cost per opportunity, lift if tested"]
  F --> G["Retrospective: keep, change or stop"]
  G --> A
  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 A,C,E,F,G core
  class B,D decision
  class B2 neutral

Text equivalent: A request arrives as a brief with goal, audience, offer, budget and dates. If it does not fit priorities and capacity it is deferred or reshaped. Otherwise the team builds the programme, forms, emails, lists and tracking links, and runs the QA checklist with a second person; failures go back to build. After launch the team watches the first 48 hours, measures stage conversion, cost per opportunity and lift where tested, and holds a retrospective that feeds the next intake.

Figure 3. Lead lifecycle: stages, hand-offs and the paths back
form, event scan or importrule not metfit and engagement rule metinvalid, competitor or nolawful basisnew engagementsales accepts within SLArejected with a reasondiscovery confirms needno response after cadencedeal createdclosed wonclosed lostKnownNurtureMQLDisqualifiedSALRecycledSQLOpportunityCustomer
Diagram source (Mermaid)
stateDiagram-v2
  direction TB
  [*] --> Known: form, event scan or import
  Known --> Nurture: rule not met
  Known --> MQL: fit and engagement rule met
  Known --> Disqualified: invalid, competitor or no lawful basis
  Nurture --> MQL: new engagement
  MQL --> SAL: sales accepts within SLA
  MQL --> Recycled: rejected with a reason
  SAL --> SQL: discovery confirms need
  SAL --> Recycled: no response after cadence
  SQL --> Opportunity: deal created
  Opportunity --> Customer: closed won
  Opportunity --> Recycled: closed lost
  Recycled --> Nurture

Text equivalent: A person becomes known through a form, an event scan or an import. Invalid records, competitors and people without a lawful basis for marketing are disqualified. Others go to nurture until the fit and engagement rule is met, which makes them MQLs. Sales accepts an MQL within the SLA (SAL) or rejects it with a reason, which recycles it to nurture. Accepted leads become SQLs when discovery confirms a need, then opportunities when a deal is created, and customers when it is won. Leads that go silent and lost deals are recycled to nurture.

Rules that keep the lead lifecycle honest:

  • Entry and exit criteria for every stage, written in the stage-definitions artefact and implemented once in the MAP or CRM. HubSpot, for example, defines its default MQL stage as “a contact or company that your marketing team has qualified as ready for the sales team”, and by default its automatic updates only move a stage forward.[10] Decide explicitly how records go backwards (recycling) and who may do it.
  • Rejection needs a reason code (wrong person, no need, already in a deal, bad data, no consent). Reason codes are the feedback loop that improves scoring.
  • Bundle by account where sales sells to organisations, so three SDRs do not call the same company (see the account-based playbook).
Mechanism Cadence Inputs Output and owner
Intake and prioritisation Weekly Briefs, capacity plan Ranked backlog; MarketingOps lead
Launch review Weekly QA results, calendar Go / no-go per campaign; campaign specialist
Funnel and SLA review with sales Weekly SLA report, rejection reasons Fixes to routing or follow-up; MarketingOps lead and SDR manager
Operations scorecard Monthly KPIs below Actions with owners; MarketingOps lead
Scoring and attribution review Quarterly Back-tests, experiment results Model changes via change request; analyst
Planning and budget Annual, re-forecast quarterly Targets, costs, conversion history Budget by programme; CMO with finance

Gartner recommends tiering work so that time goes to what matters most to the business, and measuring whether marketing “repeatedly” delivers high-quality work on time.[1] In practice that means one intake route (no side requests by chat), a tier for each request (for example strategic, standard, self-service), and capacity reserved for each tier.

Change control. Changes to stage definitions, scoring, routing or attribution rules go through a short change request: reason, back-test or evidence, effect on volumes, effective date and sign-off: RevOps approves stage definitions, the MQL definition, routing policy and SLAs; sales signs anything that changes its workload; PrivacyOps signs consent changes. Old and new definitions must not be mixed in one trend line without a note.

Escalation. SLA breaches go to the SDR manager the same day; lead-flow and deliverability incidents are MarketingOps incidents (with MarTechOps for system faults); consent failures go to PrivacyOps immediately.

Reference architecture: the campaign-to-pipeline system

Link to section “Reference architecture: the campaign-to-pipeline system”

The architecture below is a process-and-data view: where each record is created, which system holds the truth for it, and where it can go wrong. The technical design of each integration is MarTechOps’ subject.

Figure 4. Campaign-to-pipeline reference architecture
sync: MQL out, status backDemand sources: paidmedia, events, web andsearch, partners, emailCapture: forms, landingpages, event scans, listimports (with consentfields)Consent andsuppression recordsMarketing automationplatform: personrecords, programmes,scores, nurtureCRM: leads, contacts,accounts, routing,opportunitiesWarehouse and BI:cohorts, costs,attribution, experimentsPlanning: budget andprogramme decisions
Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 160, "nodeSpacing": 25, "rankSpacing": 40}}}%%
flowchart TB
  SRC["Demand sources: paid media, events, web and search, partners, email"]
  CAP["Capture: forms, landing pages, event scans, list imports (with consent fields)"]
  CONS["Consent and suppression records"]
  MAP["Marketing automation platform: person records, programmes, scores, nurture"]
  CRM["CRM: leads, contacts, accounts, routing, opportunities"]
  DWH["Warehouse and BI: cohorts, costs, attribution, experiments"]
  PLAN["Planning: budget and programme decisions"]
  SRC --> CAP
  CAP --> MAP
  CAP <--> CONS
  MAP <--> CONS
  MAP <-->|"sync: MQL out, status back"| CRM
  MAP --> DWH
  CRM --> DWH
  DWH --> PLAN
  PLAN --> SRC
  classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
  classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
  classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
  class CAP,MAP,CRM,DWH core
  class CONS risk
  class SRC,PLAN neutral

Text equivalent: Demand sources (paid media, events, web and search, partners, email) bring people to capture points: forms, landing pages, event scans and list imports, each with consent fields. Capture writes to the marketing automation platform and to the consent and suppression records, which the platform also reads. The platform syncs MQLs to the CRM and receives status back. Both systems feed the warehouse and BI layer, which supports planning decisions that shape the next demand sources.

Component Holds the truth for MarketingOps responsibility Typical failure
Capture What the person submitted and agreed to Field standards, validation, consent wording and versions, hidden UTM fields Missing source; consent box pre-ticked; spam submissions
Consent and suppression Who may receive what, and who must never Recording, honouring and auditing consent; suppression on unsubscribe or objection A re-import overwrites an unsubscribe
MAP Engagement history, scores, programme membership Programmes, scoring, nurture, email sends, list rules Scoring campaign switched off; lists built on stale criteria
CRM Ownership, sales activity, opportunities Status sync rules and recycle handling (routing policy: RevOps; CRM administration: SalesOps) Sync errors leave MQLs stranded
Warehouse and BI Cohorts, spend, experiment results Metric definitions and measurement methods (with AnalyticsOps) Two reports, two numbers

Two design choices matter more than any product choice. First, decide which system owns each field (for example, the CRM owns owner and status; the MAP owns scores and programme membership) so that synchronisation does not ping-pong values. Second, store the campaign identity on every record at capture (UTM values and a campaign ID), because it cannot be reconstructed reliably later.

End-to-end workflow: one webinar from request to pipeline

Link to section “End-to-end workflow: one webinar from request to pipeline”

Happy path. A product marketer requests a webinar for operations leaders in two regions. MarketingOps builds the registration page with explicit consent choices and hidden campaign fields, the MAP programme, emails and tracking links, and runs QA. A registrant with a high fit score becomes an MQL after attending; the MAP syncs the record to the CRM with its source campaign; the regional SDR accepts it within the SLA, and an opportunity follows three weeks later. The programme report shows registrations, attendance, MQLs, acceptance, opportunities and cost per opportunity for next quarter’s plan.

Figure 5. Hand-offs for one webinar lead, with the two most common exceptions
SDRCRMForm and MAPProspectalt[Touched within SLA][SLA expired]opt[Rejected]Registers, sets consentScored MQL, campaignRoute, SLA clock startsAccept, log touchReassign, alert managerReject with reasonStatus back to nurture
Diagram source (Mermaid)
%%{init: {"sequence": {"actorMargin": 40, "width": 130, "messageMargin": 30}}}%%
sequenceDiagram
  participant P as Prospect
  participant M as Form and MAP
  participant C as CRM
  participant S as SDR
  P->>M: Registers, sets consent
  M->>C: Scored MQL, campaign
  C->>S: Route, SLA clock starts
  alt Touched within SLA
    S->>C: Accept, log touch
  else SLA expired
    C->>S: Reassign, alert manager
  end
  opt Rejected
    S->>C: Reject with reason
    C->>M: Status back to nurture
  end

Text equivalent: The prospect registers on the MAP’s form and chooses consent options; the MAP creates or updates the person and records consent. Once the person’s fit and engagement scores meet the rule, the MAP syncs the MQL to the CRM with its source campaign. The CRM routes it to an SDR and starts the SLA clock. If the SDR accepts within the SLA, the lead becomes a sales-accepted lead and the first touch is logged; if nobody touches it in time, the CRM reassigns it and alerts the SDR manager. Optionally, the SDR rejects it: the reason code is recorded and the status syncs back to the MAP, which returns the lead to nurture.

Exception paths and what the process does with them:

Exception Detection Handling
Spam or bot registrations Spike in submissions from one network; nonsense fields Bot protection on the form, quarantine list, exclude from MQL scoring
No marketing consent, or an unsubscribe after registration Consent field empty or “no”; preference change Send only the event’s service messages (joining link, recording); suppress marketing within legal and provider limits
Duplicate person Same email or matched name and company Merge by the deduplication rule; keep the earliest source and the latest consent record
SLA breach Untouched at expiry Reassign, alert the manager, count as a miss in the weekly report
Sync error Record created in the MAP but not in the CRM Alert, fix the field or permission error, resync; sales’ clock starts at resync, and the delay counts against marketing’s MQL-to-CRM clock
  1. One intake route. Every request uses the intake form (artefact 1 below): goal, audience and size, offer, channels, budget, dates, consent basis per region, success measure, owner.
  2. Triage weekly against priorities and capacity; agree a launch date only once assets have a date too.
  3. Build from templates: programme template, approved email modules, standard form, tracking links generated from the taxonomy (Lab 1 shows how to check them).
  4. QA before launch: links and tracking, personalisation fallbacks, list logic and exclusions (customers, competitors, suppression), consent text and version, rendering on common clients, a send to a seed list, routing of a test lead to a test owner. A second person signs off.
  5. Watch the first 48 hours: bounce and complaint rates, form completion, sync errors, first MQLs routed.
  6. Retrospective within two weeks of the end: what to keep, change or stop; update templates.

Acceptance criteria: zero critical QA defects at launch; tracking parameters present on every link; test lead routed correctly. Rollback: pause sends, take the page down or switch it to a holding page, correct, and send a correction only if the error harms recipients (wrong price, wrong date); otherwise fix silently.

Playbook: lifecycle stages and lead scoring

Link to section “Playbook: lifecycle stages and lead scoring”
  1. Draft the MQL criteria first (artefact 2) with sales, inside the stage dictionary that RevOps owns, and get RevOps’ approval.
  2. Score fit and engagement separately. Fit describes who the person and company are; engagement describes recent behaviour. Oracle’s Eloqua documentation shows the classic grid: profile grades A–D, engagement 1–4, “A1 is the most qualified lead and a D4 is the least qualified”.[15] HubSpot’s tool keeps separate engagement, fit and combined scores, with combined thresholds from A1 to C3.[16]
  3. Make engagement decay, so a download from last year does not keep a lead hot. HubSpot “automatically reduces an individual event’s score” by a chosen percentage every 1, 3, 6 or 12 months;[16] artefact 3 instead lets points expire after 90 days, a simpler design. Add negative points for signals such as job seekers, students or competitor domains.
  4. Back-test before launch: apply the proposed rule to past leads with known outcomes, choose the threshold on earlier months and check it on later ones (Lab 2).
  5. Size to capacity: estimate monthly MQL volume under the new rule and compare it with what sales can work. If volume is too high, route the next-best cells to a lower-touch path rather than letting them rot.
  6. Review quarterly with rejection reasons and conversion by cell; change through a change request.

In Marketo Engage the scoring mechanics are smart campaigns using the Change Score flow action (+5 adds, =5 sets);[17] in other platforms the names differ, but the governance above does not.

Playbook: account-based and product-led qualification

Link to section “Playbook: account-based and product-led qualification”

Two common motions change what “qualified” means, and the funnel contract has to say how.

Account-based marketing (ABM) treats a named target account and its buying group as the unit, not one person. Platforms model this directly. HubSpot’s ABM tools (Professional and Enterprise plans, as of October 2026) add a Target account checkbox and a three-tier Ideal customer profile tier to companies and a Buying role to contacts;[18] Marketo Engage’s Target Account Management add-on aggregates lead scores into account scores, so lead scores must exist first.[19]

  1. Score the account and the person separately: account fit (tier, target list), account engagement (how many people in the buying group engaged, how recently) and the person’s role.
  2. Treat third-party intent as a weak input. Intent vendors infer research activity from content consumption across other websites; Bombora, for example, says it compares an account’s last three weeks of activity on a topic with a 12-week baseline, collected through a tag on sites in its publisher co-op.[20] That is a modelled account-level signal: give it modest weight, back-test it like any input (Lab 2), and have PrivacyOps review the data source.
  3. Define the account-level stage. If sales works accounts, add an account-qualified stage (some teams call it a marketing-qualified account) with entry criteria, an owner and its own clock, and decide whether person-level MQLs at that account are still routed or only attached; Forrester bundles such leads into one opportunity.[7]

Product-led motions. In free-trial and freemium businesses the strongest signal is product use. TechTarget defines a product-qualified lead (PQL) as an individual or business “that experienced value from using a product as a result of a free trial, use of a limited feature model or other types of first-hand experience with a product”.[21] The product team owns the usage events; the funnel contract adds a PQL route with criteria agreed with sales and product (for example a key feature used by several people in one account), its own SLA and reason codes.

Rules for every extra route. One record has one first qualifying route: a person who is both MQL and PQL counts once, with the route stored. Each route is back-tested and sized to capacity like the MQL rule. And lead-to-account matching comes first: HubSpot associates contacts with companies by email domain (checking the website field for free-mail addresses), but creates one company per subdomain and links a contact to only one of several companies sharing a domain;[22] Marketo lists lead-to-account matching as part of its account add-on.[23] Report the share of MQLs matched to an account before reporting anything at account level.

Playbook: the MAP-side hand-off and the follow-up SLA

Link to section “Playbook: the MAP-side hand-off and the follow-up SLA”

Routing policy and the SLA between marketing, sales development and sales are governed in RevOps, which covers account matching, rule order and fair distribution. MarketingOps runs the marketing half:

  1. Meet marketing’s clock. An MQL reaches the CRM with its campaign, scores and consent status within minutes of qualifying (artefact 2 uses 15 minutes); an hourly synthetic test lead proves the path works.
  2. Send the context sales needs: why the lead qualified (hand-raise, score cell, account or product signal) and its recent activity, so the first touch is relevant.
  3. Measure with the right denominator: every MQL routed in the period, with untouched leads counted as misses (artefact 4).
  4. Close the loop in the MAP: rejected and recycled leads return to nurture with their reason code, and reasons by source and score cell feed the quarterly scoring review.
  5. Review weekly with the SDR manager; persistent misses are a capacity or routing problem, not only a discipline problem.

Speed matters, but measure your own response curve (conversion by time to first touch) rather than quoting HBR’s 2011 lead-response multipliers,[24] which the RevOps page deliberately does not use.

  • Validate at capture: required fields only where they are used; picklists for country, industry and job function; email syntax and domain checks; bot protection.
  • Deduplicate by rule. Know your platform’s behaviour: HubSpot deduplicates contacts by email address and companies by their primary domain, but companies created through the API are not deduplicated by domain.[25]
  • Normalise job titles into functions and seniority, and countries into one standard list.
  • Govern imports and enrichment. Every list import and enrichment feed has an approver, a recorded source and a lawful basis per jurisdiction, and never overwrites consent or unsubscribe fields. When personal data come from someone other than the person (a list vendor, an enrichment service, an event partner), the GDPR requires telling the person, among other things, the source, within a reasonable period and at the latest within one month, or at the first communication if the data are used to contact them.[26] Store the source and date on each record so notices and objections can be traced.
  • Prune: archive records with no consent, no engagement in an agreed period and no open opportunity. In HubSpot’s model, marketing contacts count toward the billable tier, and its documentation says you “only pay for the contacts you want to market to”,[27] so pruning also controls cost.
Link to section “Playbook: consent capture and email compliance”

The legal basis and consent policy belong to PrivacyOps; consent-signal plumbing on websites belongs to MarTechOps. MarketingOps owns the operational part:

  1. One consent statement per purpose, unticked by default, with the version stored. The European Data Protection Board says “The use of pre-ticked opt-in boxes is invalid under the GDPR”,[28] and the UK ICO says “You cannot rely on silence, inactivity, pre-ticked boxes, opt-out boxes”.[29]
  2. Record consent with who, when, what they were told (statement and notice versions), how, and any withdrawal: the ICO’s list of what consent records should show.[29] Artefact 5 is a record in that shape.
  3. Map rules by country of the recipient, not of the sender (see the compliance table under privacy, consent and compliance).
  4. Honour unsubscribes quickly everywhere: one-click unsubscribe headers, a visible link, and suppression synced to every sending tool, within the provider limits in the compliance table.
  5. Never import a list without its consent evidence. Bought lists fail most of these tests.
  • Plan backwards from the pipeline target using your own historical conversion rates by stage and channel (the worked example under metrics shows the arithmetic), then check it against sales capacity.
  • Track spend by programme with the same campaign IDs used in UTM tags and the MAP, so cost per opportunity can be computed without manual matching.
  • Reserve a test budget: a small share of spend held for experiments and holdouts.
  • Re-forecast quarterly with actual conversion rates; move money only on evidence (see the measurement part).

Separate what is mandatory from what is a recommendation:

Item Type What it gives MarketingOps
GDPR, ePrivacy rules, UK PECR, US CAN-SPAM and TCPA, Canada’s CASL Law (jurisdiction-specific) Consent, opt-out and identification duties for marketing messages
Gmail, Yahoo and Outlook.com bulk-sender requirements Mailbox-provider policy Authentication and unsubscribe rules (and, at Gmail and Yahoo, a spam-rate ceiling) that decide whether email arrives
RFC 8058 (one-click unsubscribe), RFC 9989 (DMARC) Internet standards The header and authentication mechanics behind those policies[30][31]
Forrester B2B Revenue Waterfall Proprietary analyst framework Stage vocabulary built on opportunities and buying groups; Forrester calls it “an industry standard”, which is its own description[8]
Gartner’s marketing-operations KPIs Analyst guidance Six operational measures: alignment, timeliness, capacity, quality, progress, consistency[1]
Randomised experiments, geo experiments, mix models Statistical methods Causal or model-based estimates of marketing’s effect (see the measurement part)
Vendor lifecycle stages (HubSpot), scoring grids (Eloqua) Product conventions Useful defaults, not standards
Category Job Examples (checked October 2026) Selection points and risks
B2B marketing automation Forms, email, programmes, scoring, CRM sync Adobe Marketo Engage; HubSpot Marketing Hub; Salesforce Marketing Cloud Account Engagement (Salesforce: “Pardot is the legacy name for Salesforce Account Engagement”[32]); Oracle Eloqua; Mautic (open source, GPL-3.0[33]) CRM integration depth, person versus account model, cost model, admin talent available
Consumer engagement platforms Lifecycle messaging across email, push, SMS, in-app Braze (“customer engagement platform”[34]) Event data volume, channel coverage, consent handling per channel
CRM Ownership, sales activity, opportunities Salesforce Sales Cloud, HubSpot CRM Who administers it (SalesOps); field ownership with the MAP
Account-based and intent data Target-account lists, account scores, third-party intent HubSpot ABM tools;[18] Marketo Target Account Management (add-on);[23] intent providers such as Bombora[20] Lead-to-account matching quality; intent is modelled; privacy review of the data source
Attribution Credit allocation across touches Google Analytics 4 attribution;[35] Adobe Marketo Measure[36] Which touches it can see; model transparency
Mix modelling Aggregate effect of spend over time Google Meridian (Apache-2.0);[37] Meta Robyn (MIT)[38] Needs years of clean spend and outcome data, and statistical skill
Warehouse and BI Cohorts, joins of cost and pipeline Your company’s standard (see AnalyticsOps) Metric definitions shared with finance

Choose platforms for how well they fit your CRM and data model before features; rationalising the stack is MarTechOps’ job.

Automate the repeatable checks: link and tracking validation, list-logic tests, scoring and routing, deduplication, SLA alerts and sync-error alerts. These are deterministic and testable.

Use AI where errors are cheap and reviewable. Predictive scoring is a long-standing use; it needs enough labelled history (HubSpot’s AI-built contact scores need at least 50 contacts, 25 converted and 25 not, and a Marketing Hub Enterprise subscription[16]) and the same back-testing as a manual rule. Drafting copy and variants is content work for ContentOps, with brand and legal review. Gartner’s 2026 survey reports that only 30% of CMOs report mature or fully developed AI readiness, and quotes its analyst warning against investing in AI tools “faster than they build the data foundations, processes, governance and talent”.[39]

Guardrails. A human approves every send and every change to scoring or routing; AI scores are explained (top factors) to sales; no special-category or sensitive data goes into prompts or features without a privacy review; and every AI-driven change is reversible.

Attribution and measurement people can believe

Link to section “Attribution and measurement people can believe”

This is the hardest part of the job, and the one where most published advice overstates what data can show. The goal is not one perfect number; it is a small set of methods whose limits everyone understands, used for the questions they can answer.

What attribution models do and do not tell you

Link to section “What attribution models do and do not tell you”

An attribution model is a rule for sharing credit for an outcome among the touches a system observed before it. Different rules give different answers from the same data, and none of them observes what would have happened without the marketing.

Model Rule Answers well Misleads when
First touch 100% to the first observed touch Which channels start relationships Long journeys; the first touch is often untracked
Last touch 100% to the last touch before the outcome What happened just before conversion It rewards channels that catch demand others created
Linear Equal shares to every touch A neutral description of the journey Many low-value touches inflate a channel
U-shaped Marketo Measure: first touch and lead creation 50% each[36] Who opens and converts leads The rest of the journey gets nothing
W-shaped Marketo Measure: first touch, lead creation and opportunity creation 30% each, 10% to the rest[36] Credit across three milestones Milestone timing is noisy; weights are arbitrary
Data-driven (GA4) Machine-learned credit from converting and non-converting paths[35] Relative contribution of Google-visible digital touches Offline touches, other walled gardens and sales activity are invisible to it

Facts to keep in view (as of October 2026):

  • Google Analytics 4 offers data-driven and two last-click models; “The first click, linear, time decay, and position-based attribution models are no longer available as of November 2023”, and “All attribution models exclude direct visits from receiving attribution credit, unless the path to key event consists entirely of direct visits.”[35]
  • Email opens are no longer a reliable signal. Apple’s Mail Privacy Protection “prevents senders from seeing if you’ve opened the email message they sent you”.[11] Score and attribute on clicks, replies, form submissions and meetings.
  • Tracking depends on tags and consent. UTM values are case-sensitive and missing ones show as “(not set)”;[40] people who decline analytics cookies may be invisible to web attribution. Tracking design belongs to MarTechOps; MarketingOps must know which touches each report can see.

The two credits. Many B2B teams report “marketing-sourced” pipeline (opportunities whose first or primary source is a marketing programme) and “marketing-influenced” pipeline (opportunities with any marketing touch before a set date). Sourced is a narrow, debatable allocation; influenced is so broad that it approaches total pipeline in a marketing-heavy company. Define both in writing, report both beside total pipeline, and never add channel credits together as if they were separate deals.

Causal questions (“would these opportunities have happened anyway?”) need a comparison group.

  • Randomised holdouts. Randomly withhold a programme from part of the eligible audience and compare outcomes. In 15 US advertising experiments at Facebook (500 million user-experiment observations), Gordon and colleagues found that “The observational methods often fail to produce the same effects as the randomized experiments, even after conditioning on extensive demographic and behavioral variables.”[41]
  • Expect wide uncertainty. Lewis and Rao analysed 25 large field experiments with US retailers and brokerages and found that “The median confidence interval on return on investment is over 100 percentage points wide”; informative experiments “can easily require more than 10 million person-weeks”.[42] Small B2B audiences rarely produce tight answers, which is why Lab 3’s interval includes zero.
  • Geo experiments. Where individuals cannot be randomised, regions can: non-overlapping geographic areas are randomly assigned to treatment or control.[43]
  • Marketing mix models (MMM). Regression models of outcomes on spend over time, which need no individual tracking. Google describes Meridian as “an open-source MMM built by Google” and supports using experiment results as priors;[37] Meta’s Robyn is an open-source MMM package too.[38] Both need long, clean histories of spend and outcomes and statistical skill to avoid confident nonsense.
Figure 6. Triangulating attribution, experiments and mix models
suggests where to testcalibrates priorschecks attribution creditproposes allocationdaily optimisation within achannelnew dataAttribution: fast,touch-level, describescredit, not causeExperiments: holdoutsand geo tests, causal butnarrow and slowMix model: aggregate,covers all channels,needs long historyBudget decisionrecorded with theevidence usedNext quarter's campaigns
Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 170, "nodeSpacing": 25, "rankSpacing": 40}}}%%
flowchart TB
  ATT["Attribution: fast, touch-level, describes credit, not cause"]
  EXP["Experiments: holdouts and geo tests, causal but narrow and slow"]
  MMM["Mix model: aggregate, covers all channels, needs long history"]
  DEC["Budget decision recorded with the evidence used"]
  RUN["Next quarter's campaigns"]
  ATT -->|"suggests where to test"| EXP
  EXP -->|"calibrates priors"| MMM
  EXP -->|"checks attribution credit"| ATT
  MMM -->|"proposes allocation"| DEC
  ATT -->|"daily optimisation within a channel"| DEC
  DEC --> RUN
  RUN -->|"new data"| ATT
  classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
  classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
  class ATT,EXP,MMM,RUN core
  class DEC decision

Text equivalent: Attribution is fast and touch-level but describes credit, not cause; it suggests where to run experiments and supports day-to-day optimisation within a channel. Experiments (holdouts and geo tests) are causal but narrow and slow; they check attribution credit and calibrate the mix model’s priors. The mix model covers all channels in aggregate and proposes a budget allocation. Budget decisions are recorded with the evidence used, shape the next quarter’s campaigns, and the new data flows back into attribution.

A starting point (this Atlas’s proposal; Template 2 is the fill-in form):

  1. Questions and methods. Within-channel optimisation may use attribution. Moving more than an agreed share of budget between channels or programmes needs an experiment, a mix-model estimate, or a recorded judgement that names the gap.
  2. Labels. Every attribution figure is labelled “credit allocation (model name)”. Experiment results show the interval, not only the point estimate.
  3. One definition each for sourced pipeline, influenced pipeline, cost per opportunity and the opportunity date used.
  4. An experiment register: hypothesis, audience, randomisation unit, holdout size, minimum detectable effect, dates, result and decision. Experiments with too little power are not run as if they could decide.
  5. Review of the attribution model and the register every quarter, with finance present.

Reference implementation: operating artefacts

Link to section “Reference implementation: operating artefacts”

The artefacts below make the funnel contract concrete for an illustrative B2B software company selling to operations teams in Europe and North America. Adapt the fields; keep the structure. All are syntax-checked by the Atlas validator unless stated.

Example status: YAML syntax-checked, not executed (a form definition for any work-management or form tool).

# Campaign intake form v3 - one per campaign; owner: MarketingOps lead
campaign:
  id: C-2026-041        # issued by MarketingOps; reused as utm_id and in the budget
  name: 2026-q4_emea_webinar_cost-review
  requester: product-marketing@example.com
  goal: "Create 25 sales-accepted leads from operations leaders in EMEA"
  success_measure: sales_accepted_leads   # one of: registrations, sales_accepted_leads,
                                          # opportunities, revenue, incremental_lift
  audience:
    segments: [ops-leaders-emea, existing-trial-users]
    estimated_reachable: 8000
    exclusions: [customers-in-renewal, competitors, global-suppression]
  offer: "Live webinar and recording: reviewing cloud operating costs"
  channels: [email, paid_social, partner_newsletter]
  dates:
    assets_ready: 2026-11-02
    launch: 2026-11-05
    event: 2026-11-26
  budget_eur: 12000
  consent:
    basis_by_region:
      EU: consent              # explicit opt-in captured on the registration form
      UK: consent
      US: opt_out              # CAN-SPAM rules; honour opt-outs within 10 business days
    service_messages_only_without_consent: true
  tier: standard               # strategic | standard | self-service
  follow_up: "Attendees scored; MQLs routed to EMEA SDR queue under the standard SLA"
  approvals:
    qa_second_person: required
    legal_review: not_required  # standard consent text v7 is used unchanged

Artefact 2: the funnel contract (stage definitions and SLA)

Link to section “Artefact 2: the funnel contract (stage definitions and SLA)”
Stage Entry criteria Exit / owner action Clock
Known Person record with email and lawful basis recorded Scored; nurture or MQL n/a
MQL Fit A with engagement E1–E3, or fit B with E1–E2 (or a hand-raise: demo or contact request) Synced to CRM and routed to a named owner Sync within 15 minutes
SAL Owner accepts and logs a first touch Discovery attempted First touch within 4 working hours; accept or reject within 2 working days
Recycled Rejected with a reason code, or no response after 6 attempts in 10 working days Returns to nurture; reason reported Reason required at rejection
SQL Discovery confirms need, role in the buying group and timing Opportunity created by sales Per SalesOps rules
Opportunity Deal record with amount and stage Sales process (SalesOps) Per SalesOps rules

Hand-raise rule. A direct request for a demo or contact skips scoring and goes straight to MQL; it also gets the fastest clock. Change control: definitions version 4, effective 2026-10-01, drafted by MarketingOps with the head of sales development and approved by RevOps, which owns the stage dictionary.

Example status: YAML syntax-checked, not executed (a specification to implement in your MAP; values are illustrative).

scoring_model:
  version: 4
  effective: 2026-10-01
  fit:                                  # who they are: grade A-D
    grade_thresholds: {A: 70, B: 45, C: 20}   # below 20 = D
    rules:
      - {field: job_function, in: [operations, it, engineering], points: 25}
      - {field: seniority, in: [director, vp, c_level], points: 20}
      - {field: company_employees, gte: 200, points: 20}
      - {field: country, in_list: served_countries, points: 10}
      - {field: email_domain, in_list: competitor_domains, points: -100}
      - {field: job_title, contains_any: [student, intern], points: -40}
  engagement:                           # what they did: band E1-E4
    band_thresholds: {E1: 60, E2: 40, E3: 20}  # below 20 = E4
    decay_days: 90                      # design choice: points expire after 90 days
    rules:
      - {event: webinar_attended, points: 20}
      - {event: pricing_page_visit, points: 15, max_per_30_days: 2}
      - {event: content_download, points: 10}
      - {event: email_click, points: 3, max_per_30_days: 5}
      - {event: email_open, points: 0}  # unreliable since Mail Privacy Protection
      - {event: careers_page_visit, points: -15}
  mql_rule: "(fit A and engagement E1-E3) or (fit B and engagement E1-E2) or hand_raise"
  validation:
    backtest_train_months: 8
    backtest_test_months: 4
    capacity_mqls_per_month: 80
    review: quarterly

The MQL rule is the one Lab 2’s back-test selects within a capacity of 80 MQLs a month. A cell is a fit grade plus an engagement band (AE1 = grade A, band E1); the rule takes cells AE1–AE3, BE1 and BE2; Template 4 is the change request that would add CE1.

Example status: verified by execution on 2026-10-18 with SQLite 3.31.1 on seven synthetic MQLs (plus one outside the period); adapt date functions for other databases. The 4-hour window is in calendar hours; a working-hours calendar is the next refinement.

-- MQL follow-up SLA per Monday-start week (SQLite syntax; adapt date functions).
-- Denominator = every MQL routed in the period: untouched MQLs count as misses.
-- week_starting is the Monday of each week (a date, not an ISO 8601 week number).
WITH routed AS (
  SELECT r.lead_id,
         r.routed_at,
         (SELECT MIN(t.touched_at)
            FROM sales_touches AS t
           WHERE t.lead_id = r.lead_id
             AND t.touched_at >= r.routed_at) AS first_touch_at
    FROM mql_routing AS r
   WHERE r.routed_at >= '2026-09-07' AND r.routed_at < '2026-09-21'
)
SELECT date(routed_at, '-6 days', 'weekday 1')                AS week_starting,
       COUNT(*)                                               AS mqls_routed,
       SUM(first_touch_at IS NOT NULL
           AND (julianday(first_touch_at) - julianday(routed_at)) * 24 <= 4)
                                                              AS touched_within_4h,
       SUM(first_touch_at IS NULL)                            AS never_touched,
       ROUND(100.0 * SUM(first_touch_at IS NOT NULL
           AND (julianday(first_touch_at) - julianday(routed_at)) * 24 <= 4)
             / COUNT(*), 1)                                   AS sla_attainment_pct
  FROM routed
 GROUP BY week_starting
 ORDER BY week_starting;

Result on the synthetic rows:

week_starting  mqls_routed  touched_within_4h  never_touched  sla_attainment_pct
2026-09-07     4            2                  0              50.0
2026-09-14     3            2                  1              66.7

Example status: JSON syntax-checked, not executed. Fields follow the ICO’s list of what consent records should show.[29]

{
  "person_id": "P-000184",
  "email": "a.person@example.com",
  "purpose": "marketing_email_product_updates",
  "status": "granted",
  "captured_at": "2026-11-05T09:14:22Z",
  "method": "web_form_checkbox_unticked_by_default",
  "form_id": "webinar-registration-v12",
  "consent_text_version": "consent-statement-v7",
  "privacy_notice_version": "privacy-notice-2026-09",
  "campaign_id": "C-2026-041",
  "jurisdiction_of_recipient": "DE",
  "withdrawn_at": null,
  "withdrawal_channel": null
}

Artefact 6: headers a bulk marketing email needs

Link to section “Artefact 6: headers a bulk marketing email needs”

Example status: illustrative message headers, not executed; domain names are placeholders.

From: Example Co <news@mail.example.com>
List-Unsubscribe: <https://mail.example.com/u/opaque-token>,
  <mailto:unsub@mail.example.com>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
DKIM-Signature: v=1; a=rsa-sha256; d=mail.example.com; s=s2026;
  h=from:to:subject:date:list-unsubscribe:list-unsubscribe-post; ...

RFC 8058 requires the List-Unsubscribe header to contain one HTTPS URI and a valid DKIM signature that covers both unsubscribe headers.[30] Which providers require it, and for whom, is in the compliance table. DMARC itself is now specified in RFC 9989 (May 2026), which obsoletes RFC 7489.[31] Setting up authentication is MarTechOps’ job; checking that every campaign template carries the headers and link is part of QA.

Three labs on synthetic data only, using Python 3.8 or later and its standard library: no accounts, no cost, no personal data. Each was run on 2026-10-18 exactly as printed (Python 3.8.10 on Ubuntu Linux); the expected outputs are copied from those runs. Teardown for all three: delete the working folder (rm -r ~/mops-labs).

Link to section “Lab 1 (beginner): check campaign links against the naming standard”

Objective. Catch broken tracking before launch. Prerequisites. Python 3.8+. Time. 15 minutes. Risk. None.

  1. Create a folder ~/mops-labs/lab1 and save this file as links.csv in it.
campaign_id,url
C-2026-041,https://www.example.com/webinar?utm_source=newsletter&utm_medium=email&utm_campaign=2026-q4_emea_webinar_cost-review&utm_id=C-2026-041
C-2026-041,https://www.example.com/webinar?utm_source=LinkedIn&utm_medium=paid_social&utm_campaign=2026-q4_emea_webinar_cost-review&utm_id=C-2026-041
C-2026-042,https://www.example.com/guide?utm_source=partner-x&utm_medium=Referral&utm_campaign=Q4+Guide&utm_id=C-2026-042
C-2026-043,http://www.example.com/demo?utm_source=google&utm_medium=cpc&utm_id=C-2026-043
C-2026-044,https://www.example.com/event?utm_source=event-list&utm_medium=email&utm_campaign=2026-q4_apac_event_summit&utm_id=C-2026-099
  1. Save the checker as check_links.py in the same folder.

Example status: verified by execution on 2026-10-18 (Python 3.8.10, standard library).

"""Check campaign links against a UTM naming standard (standard library only)."""
import csv
import re
import sys
from urllib.parse import urlsplit, parse_qs

REQUIRED = ["utm_source", "utm_medium", "utm_campaign", "utm_id"]
MEDIUMS = {"email", "cpc", "paid_social", "organic_social", "display", "referral",
           "event"}
CAMPAIGN = re.compile(r"^\d{4}-q[1-4]_(amer|emea|apac|global)_[a-z]+_[a-z0-9-]+$")


def problems(campaign_id, url):
    found = []
    parts = urlsplit(url)
    if parts.scheme != "https":
        found.append("not https")
    params = {k: v[0] for k, v in parse_qs(parts.query, keep_blank_values=True).items()}
    for name in REQUIRED:
        if not params.get(name):
            found.append(f"missing {name}")
    for name, value in params.items():
        if name.startswith("utm_") and name != "utm_id" and value != value.lower():
            found.append(f"{name} not lowercase ({value})")
        if " " in value:
            found.append(f"{name} contains a space")
    medium = params.get("utm_medium", "").lower()
    if medium and medium not in MEDIUMS:
        found.append(f"utm_medium '{medium}' not in the allowed list")
    name = params.get("utm_campaign", "")
    if name and not CAMPAIGN.match(name):
        found.append("utm_campaign does not match yyyy-qN_region_type_offer")
    if params.get("utm_id") and params["utm_id"] != campaign_id:
        found.append(f"utm_id {params['utm_id']} != campaign {campaign_id}")
    return found


def main(path):
    bad = 0
    with open(path, newline="") as f:
        for row_no, row in enumerate(csv.DictReader(f), start=2):
            issues = problems(row["campaign_id"], row["url"])
            bad += bool(issues)
            print(f"{'FAIL' if issues else 'OK  '} row {row_no} {row['campaign_id']}")
            for issue in issues:
                print(f"     - {issue}")
    print(f"{bad} of {row_no - 1} links need fixing")
    return 1 if bad else 0


if __name__ == "__main__":
    sys.exit(main(sys.argv[1] if len(sys.argv) > 1 else "links.csv"))
  1. Run python3 check_links.py links.csv.

Expected output (exit code 1, because links need fixing):

OK   row 2 C-2026-041
FAIL row 3 C-2026-041
     - utm_source not lowercase (LinkedIn)
FAIL row 4 C-2026-042
     - utm_medium not lowercase (Referral)
     - utm_campaign not lowercase (Q4 Guide)
     - utm_campaign contains a space
     - utm_campaign does not match yyyy-qN_region_type_offer
FAIL row 5 C-2026-043
     - not https
     - missing utm_campaign
FAIL row 6 C-2026-044
     - utm_id C-2026-099 != campaign C-2026-044
4 of 5 links need fixing

Validation. Fix row 3 (utm_source=linkedin) and re-run: the row turns OK and the count drops to 3. Google Analytics treats parameter values as case-sensitive,[40] so “LinkedIn” and “linkedin” would otherwise appear as two sources. Troubleshooting. KeyError: 'campaign_id' means the CSV header is missing or has a stray space; a + in a URL decodes to a space, which is why row 4 reports one. Extension. Run the script in the QA step of every launch, with a non-zero exit code blocking sign-off.

Lab 2 (intermediate): back-test an MQL rule against outcomes and capacity

Link to section “Lab 2 (intermediate): back-test an MQL rule against outcomes and capacity”

Objective. Choose an MQL rule from evidence, check it on months it was not tuned on, and size it to sales capacity. Prerequisites. Lab 1’s setup. Time. 40 minutes. Risk. None (synthetic data with known outcomes).

  1. In ~/mops-labs/lab2, save the generator as make_leads.py and run python3 make_leads.py. It writes 2,400 synthetic leads (200 a month) with a fit grade, engagement points and whether each became an opportunity.

Example status: verified by execution on 2026-10-18 (Python 3.8.10).

"""Generate 12 months of synthetic leads with known outcomes (deterministic)."""
import csv
import random

random.seed(20261018)
FIT = [("A", 0.15, 0.30), ("B", 0.30, 0.16), ("C", 0.35, 0.07), ("D", 0.20, 0.02)]
ENGAGEMENT_FACTOR = [(60, 1.6), (40, 1.1), (20, 0.7), (0, 0.35)]


def pick_fit(r):
    total = 0.0
    for grade, share, base in FIT:
        total += share
        if r < total:
            return grade, base
    return FIT[-1][0], FIT[-1][2]


with open("leads.csv", "w", newline="") as f:
    out = csv.writer(f)
    out.writerow(["lead_id", "month", "fit", "engagement", "became_opportunity"])
    for i in range(2400):
        grade, base = pick_fit(random.random())
        points = int(random.random() * 100)
        factor = next(fac for floor, fac in ENGAGEMENT_FACTOR if points >= floor)
        converted = random.random() < min(0.95, base * factor)
        out.writerow([f"L{i:05d}", i // 200 + 1, grade, points, int(converted)])
print("wrote leads.csv with 2400 rows")
  1. Save the back-test as backtest.py and run python3 backtest.py. It learns each cell’s opportunity rate on months 1–8 and evaluates three MQL rules on months 9–12.

Example status: verified by execution on 2026-10-18 (Python 3.8.10).

"""Back-test MQL rules: learn cell rates on months 1-8, evaluate on months 9-12."""
import csv
from collections import defaultdict

TARGET_RATE = 0.12        # minimum opportunity rate a cell needs to become an MQL
CAPACITY_PER_MONTH = 80   # MQLs the sales development team can work properly


def band(points):
    for floor, name in ((60, "E1"), (40, "E2"), (20, "E3")):
        if points >= floor:
            return name
    return "E4"


leads = []
with open("leads.csv", newline="") as f:
    for r in csv.DictReader(f):
        leads.append({"cell": r["fit"] + band(int(r["engagement"])),
                      "engagement": int(r["engagement"]), "month": int(r["month"]),
                      "won": int(r["became_opportunity"])})
train = [l for l in leads if l["month"] <= 8]
test = [l for l in leads if l["month"] > 8]

stats = defaultdict(lambda: [0, 0])
for lead in train:
    stats[lead["cell"]][0] += 1
    stats[lead["cell"]][1] += lead["won"]
rate = {cell: won / n for cell, (n, won) in stats.items()}

print("training months 1-8: leads and opportunity rate per cell")
print("     " + "".join(f"{e:>13}" for e in ("E1", "E2", "E3", "E4")))
for fit in "ABCD":
    row = "".join(f"{stats[fit + e][0]:6} {rate[fit + e]:6.1%}"
                  for e in ("E1", "E2", "E3", "E4"))
    print(f"{fit:5}{row}")

# Capacity-aware rule: best cells first, stop before monthly volume exceeds capacity.
chosen, volume = set(), 0.0
for cell in sorted(rate, key=rate.get, reverse=True):
    per_month = stats[cell][0] / 8
    if volume + per_month > CAPACITY_PER_MONTH:
        break
    chosen.add(cell)
    volume += per_month

rules = {
    "current: engagement >= 50": lambda l: l["engagement"] >= 50,
    "cells >= 12% in training": lambda l: rate[l["cell"]] >= TARGET_RATE,
    "best cells within capacity": lambda l: l["cell"] in chosen,
}
total = sum(l["won"] for l in test)
print(f"\ncapacity rule uses cells: {', '.join(sorted(chosen))}")
print(f"test months 9-12: {len(test)} leads, {total} opportunities")
print(f"{'rule':28}{'MQL/mo':>7}{'MQL->opp':>10}{'captured':>10}  fits capacity")
for name, rule in rules.items():
    mql = [l for l in test if rule(l)]
    hits = sum(l["won"] for l in mql)
    per_month = len(mql) / 4
    fits = "yes" if per_month <= CAPACITY_PER_MONTH else "no"
    print(f"{name:28}{per_month:7.1f}{hits / len(mql):10.1%}{hits / total:10.1%}  {fits}")

Expected output:

training months 1-8: leads and opportunity rate per cell
                E1           E2           E3           E4
A       100  57.0%    58  27.6%    35  14.3%    41   9.8%
B       180  26.7%   106  17.9%    78  10.3%    83   4.8%
C       241  13.7%   128   5.5%   102   5.9%   126   0.8%
D       140   5.0%    53   0.0%    59   1.7%    70   1.4%

capacity rule uses cells: AE1, AE2, AE3, BE1, BE2
test months 9-12: 800 leads, 111 opportunities
rule                         MQL/mo  MQL->opp  captured  fits capacity
current: engagement >= 50      97.5     19.0%     66.7%  no
cells >= 12% in training       90.2     22.4%     73.0%  no
best cells within capacity     62.0     26.6%     59.5%  yes

Reading the result. The behaviour-only rule (engagement ≥ 50) sends the most leads and converts worst, because it ignores fit. The cell rule is better on both precision (22.4% of MQLs become opportunities) and capture (73.0% of all opportunities), but its volume exceeds capacity. The capacity rule converts best but captures only 59.5% of opportunities: the C-grade, highly engaged cell (CE1, 13.7% in training, about 30 leads a month) is the decision. Either add capacity, or send CE1 to a lower-touch path such as a self-serve trial or a scheduled group demo. That is a business decision; the back-test only makes the trade-off visible.

Validation. The three rows should reproduce exactly (the generator is seeded). Change CAPACITY_PER_MONTH to 95: the capacity rule adds CE1 and matches the 12% rule. Troubleshooting. ZeroDivisionError means a rule selected no test leads; check thresholds. Caveats. Real outcomes take months to mature, so leave a lag between the last training month and the end of the outcome window, and expect cell rates to drift.

Lab 3 (advanced): attribution models versus a holdout experiment

Link to section “Lab 3 (advanced): attribution models versus a holdout experiment”

Objective. See how four attribution rules allocate the same six opportunities differently, then estimate a programme’s incremental effect from a randomised holdout and its uncertainty. Prerequisites. Lab 2. Time. 45 minutes. Risk. None.

  1. In ~/mops-labs/lab3, save touches.csv:
opportunity,step,channel,milestone
O1,1,paid_search,FT
O1,2,webinar,LC
O1,3,email,
O1,4,sales_meeting,OC
O2,1,webinar,FT+LC
O2,2,email,
O2,3,webinar,
O2,4,sales_meeting,OC
O3,1,organic_search,FT
O3,2,content_download,LC
O3,3,webinar,OC
O4,1,event,FT+LC
O4,2,sales_meeting,OC
O5,1,paid_social,FT
O5,2,webinar,LC
O5,3,email,
O5,4,email,
O5,5,content_download,OC
O6,1,partner_referral,FT+LC+OC
  1. Save attribute.py and run python3 attribute.py. The W-shaped rule follows the weights Adobe documents for Marketo Measure: 30% each to first touch, lead creation and opportunity creation, and the remaining 10% “attributed proportionally to any intermediary touchpoints”.[36] This script splits that 10% equally among the other touches and, when a journey has none, among the milestone touches: both are choices of this lab.

Example status: verified by execution on 2026-10-18 (Python 3.8.10).

"""Credit six opportunities to channels under four attribution rules."""
import csv
from collections import defaultdict

journeys = defaultdict(list)
with open("touches.csv", newline="") as f:
    for row in csv.DictReader(f):
        journeys[row["opportunity"]].append(row)


def first_touch(touches):
    return {0: 1.0}


def last_touch(touches):  # last touch up to and including opportunity creation
    oc = next(i for i, t in enumerate(touches) if "OC" in t["milestone"])
    return {oc: 1.0}


def linear(touches):
    return {i: 1 / len(touches) for i in range(len(touches))}


def w_shaped(touches):
    """30% each to first touch, lead creation, opportunity creation; 10% to the rest."""
    weights = defaultdict(float)
    for mark in ("FT", "LC", "OC"):
        i = next(i for i, t in enumerate(touches) if mark in t["milestone"])
        weights[i] += 0.30
    others = [i for i in range(len(touches)) if not touches[i]["milestone"]]
    targets = others or list(weights)   # no other touches: share 10% among milestones
    for i in targets:
        weights[i] += 0.10 / len(targets)
    return weights


models = {"first": first_touch, "last": last_touch, "linear": linear,
          "w-shaped": w_shaped}
credit = {name: defaultdict(float) for name in models}
for touches in journeys.values():
    for name, model in models.items():
        for i, share in model(touches).items():
            credit[name][touches[i]["channel"]] += share

channels = sorted({t["channel"] for ts in journeys.values() for t in ts})
print(f"{'channel':17}" + "".join(f"{m:>9}" for m in models))
for ch in channels:
    print(f"{ch:17}" + "".join(f"{credit[m][ch]:9.2f}" for m in models))
print(f"{'total':17}" + "".join(f"{sum(credit[m].values()):9.2f}" for m in models))

Expected output:

channel              first     last   linear w-shaped
content_download      0.00     1.00     0.53     0.63
email                 0.00     0.00     0.90     0.25
event                 1.00     0.00     0.50     0.65
organic_search        1.00     0.00     0.33     0.33
paid_search           1.00     0.00     0.25     0.30
paid_social           1.00     0.00     0.20     0.30
partner_referral      1.00     1.00     1.00     1.00
sales_meeting         0.00     3.00     1.00     0.95
webinar               1.00     1.00     1.28     1.58
total                 6.00     6.00     6.00     6.00

Every model distributes exactly six opportunities; none says how many would have happened without the webinars. Email goes from zero (first and last touch) to 0.90 (linear) on the same journeys.

  1. Now the causal question. The company randomly held out 500 of 2,000 eligible accounts from a quarter-long webinar series. Save lift.py and run python3 lift.py.

Example status: verified by execution on 2026-10-18 (Python 3.8.10); the counts are illustrative.

"""Incremental effect of a webinar programme from a randomised account holdout."""
from math import sqrt

# Counts are accounts with at least one opportunity: each account is one yes/no trial.
treated_accounts, treated_opps = 1500, 96     # invited to the webinar series
control_accounts, control_opps = 500, 26      # randomly held out, no invitations
programme_cost = 60000                        # all-in cost of the series, USD
attributed_opps = 30                          # opportunities the W-shaped report credits

p_t = treated_opps / treated_accounts
p_c = control_opps / control_accounts
diff = p_t - p_c
se = sqrt(p_t * (1 - p_t) / treated_accounts + p_c * (1 - p_c) / control_accounts)
low, high = diff - 1.96 * se, diff + 1.96 * se
incremental = diff * treated_accounts

print(f"opportunity rate: treated {p_t:.1%}, control {p_c:.1%}, "
      f"difference {diff * 100:+.1f} points")
print(f"95% interval for the difference: {low * 100:+.1f} to {high * 100:+.1f} points")
print(f"incremental opportunities (point estimate): {incremental:.0f} "
      f"(interval {low * treated_accounts:+.0f} to {high * treated_accounts:+.0f})")
print(f"cost per attributed opportunity:   ${programme_cost / attributed_opps:,.0f}")
print(f"cost per incremental opportunity:  ${programme_cost / incremental:,.0f}"
      " (point estimate)")

Expected output:

opportunity rate: treated 6.4%, control 5.2%, difference +1.2 points
95% interval for the difference: -1.1 to +3.5 points
incremental opportunities (point estimate): 18 (interval -17 to +53)
cost per attributed opportunity:   $2,000
cost per incremental opportunity:  $3,333 (point estimate)

Reading the result. Attribution credits the series with 30 opportunities; the experiment’s best estimate is 18 caused by it, and the interval runs from a loss of 17 to a gain of 53. The lift is +1.2 percentage points in absolute terms, or about 23% relative to the control rate (1.2 ÷ 5.2): say which one you report. The interval treats each account as one yes-or-no trial, so this lab assumes at most one opportunity per account; with more, count accounts with at least one opportunity. The point estimate suggests the programme costs about 1.7 times what attribution implies per opportunity, but the experiment is too small to say whether it works at all. This is Lewis and Rao’s point at small scale.[42] Validation. Double both groups’ sizes and opportunity counts: the interval narrows to roughly −0.4 to +2.8 points. Troubleshooting. If the control group’s rate is higher than the treated group’s, check that randomisation happened before any invitation and that held-out accounts were truly excluded from every send. Next step. Before running a real holdout, compute the sample needed for the smallest effect worth detecting.

All four scenarios are illustrative: composites of common situations, not reports about real companies.

Scenario Context Approach Trade-off Success measure
From MQL volume to opportunities B2B software, 30 marketers, sales rejects half the MQLs Rewrite stage definitions with sales; fit × engagement scoring with back-test; buying-group view; targets moved to SALs and opportunities Fewer, better MQLs look like a decline for two quarters; changing targets and definitions in the same quarter without a back-cast hides whether performance or only the ruler changed Acceptance rate up; opportunities per SDR up; cost per opportunity stable or down
Multi-country event programme Field events in the EU, UK, US and Canada; badge scans and paper lists Consent captured per jurisdiction at registration; scans matched to records within 24 hours; dedicated SLA for event leads Stricter capture lowers the number of marketable contacts Every scan routed within 2 working days; zero complaints about unwanted email
Consumer subscription brand 3 million subscribers, daily email, no sales team Authentication and one-click unsubscribe across all senders; sunset policy for inactive subscribers; holdout test for the daily send Smaller list, lower apparent reach Spam rate below 0.10% in Google Postmaster Tools;[12] revenue per send up; incremental revenue measured
One marketer at a start-up 20 people, HubSpot, founder-led sales Four artefacts only: intake checklist, stage definitions, consent text, UTM taxonomy; weekly 15-minute lead review with the founder No dedicated MarketingOps role Every inbound lead answered within one working day; source captured on 95% of leads

Scenario 3 in more detail. For consumer brands the funnel ends in a purchase, and email deliverability is the binding constraint. Gmail treats a sender that once sends close to 5,000 messages a day to personal Gmail accounts as a bulk sender permanently, and from November 2025 it is “ramping up its enforcement on non-compliant traffic”, including rejections.[44] A sunset policy (stop sending to people who have not clicked or bought in an agreed period, after a re-permission attempt) protects reputation; a randomised holdout of the daily send answers whether the extra sends create revenue or only take credit for purchases that would have happened anyway.

Measure the funnel, the operation (is the work reliable?) and the data and compliance base. Use cohorts, not same-period ratios: an MQL created in March that becomes an opportunity in May belongs to March’s cohort.

KPI Definition / formula Pitfall Review
MQL acceptance rate SALs ÷ MQLs routed, per MQL cohort Leads never reviewed left out of the denominator Weekly
Follow-up SLA attainment MQLs touched within the SLA ÷ all MQLs routed (artefact 4) Untouched leads silently excluded Weekly
MQL → opportunity rate Opportunities from the MQL cohort within 90 days ÷ MQLs in the cohort Cohort not yet mature Monthly
Cost per opportunity Programme cost ÷ opportunities from the programme’s cohort Allocation rule hidden; sales cost excluded without saying so Quarterly
Sourced and influenced pipeline Opportunity amount where marketing is the primary source / has any touch before creation Influenced counted as if caused Monthly, beside total pipeline
Incremental lift Absolute: rate treated − rate control (percentage points); relative: absolute lift ÷ rate control; both with an interval Underpowered tests read as proof; absolute and relative lift confused Per experiment
On-time launch rate Campaigns launched on the promised date ÷ campaigns launched Dates re-promised after slipping Monthly
First-time-right rate Launches with no post-launch fix ÷ launches Fixes not logged Monthly
Intake-to-launch cycle time Median working days from accepted brief to launch Mixing tiers Monthly
Data quality score Records passing completeness, validity and duplicate checks ÷ records checked Checking only easy fields Monthly
Spam complaint rate Complaints reported by Google Postmaster Tools (target below 0.10%, never 0.30%)[12] Watching only your platform’s figure Weekly
Consent coverage Marketable contacts with a valid basis recorded for their jurisdiction ÷ marketable contacts Legacy imports without evidence Quarterly

The operations KPIs follow Gartner’s six areas (alignment, timeliness, capacity, quality, progress and consistency). Gartner advises starting with alignment, timeliness and capacity because they “are all prerequisites to quality, consistency and progress”.[1]

Leading and lagging. SLA attainment, acceptance and on-time launch are leading indicators that can be fixed this week; opportunities, cost per opportunity and lift are lagging and need a quarter or more.

Vanity traps. Email opens (see attribution); MQL counts without acceptance; influenced pipeline as a target; “engagement” without outcomes; and any figure that rises when a definition changes.

Worked calculation

  • MQL acceptance = 720 ÷ 900 = 80.0%. SLA attainment = 650 ÷ 900 = 72.2%: 250 MQLs, including those never touched, missed.
  • MQL → opportunity = 180 ÷ 900 = 20.0%; per accepted lead, 180 ÷ 720 = 25.0%.
  • Cost per opportunity = €270,000 ÷ 180 = €1,500. Expected bookings at the historical win rate = €3.6 million × 25% = €900,000, so programme cost is 30% of expected bookings: an allocation, not a measured return.
  • On-time launch = 36 ÷ 42 = 85.7%; first-time-right = 33 ÷ 42 = 78.6%.
  • Planning backwards for next quarter’s target of 220 opportunities at the same rates: 220 ÷ 20% = 1,100 MQLs, which needs 1,100 ÷ (900 ÷ 4,000) ≈ 4,900 new leads, and roughly 1,100 ÷ 3 ≈ 370 MQLs a month for sales development. If they can work only 300 a month, raise conversion (scoring, SLA) before buying more leads.

The weakest number here is SLA attainment, and it is the cheapest to fix: one in four MQLs waited longer than agreed.

The table is orientation only, not legal advice, checked on 2026-10-18; laws and their interpretation change, and national rules differ inside the EU. Consent policy and lawful basis belong to PrivacyOps.

Jurisdiction or gatekeeper What it requires of marketing messages Operational consequence
EU: GDPR and national ePrivacy rules Email marketing to individuals needs prior consent, except the existing-customer exception for the sender’s own similar products with an opt-out at collection and in every message (ePrivacy Art. 13(1)–(2)); Art. 13(5) leaves protection of legal persons to national law;[45] consent must be demonstrable and as easy to withdraw as to give (GDPR Art. 7);[46] an objection to direct marketing ends it (Art. 21(2)–(3));[47] Recital 47 says direct marketing “may” be a legitimate interest[48] Consent per purpose, unticked boxes, versioned records; check national rules before emailing business addresses
EU case law Planet49: a pre-ticked box is not valid consent to cookies, and joining a promotional lottery is not specific consent[49] No bundling of consent into competition or event sign-ups
UK: PECR and UK GDPR Consent or the soft opt-in for individuals, for emails and texts alike; corporate subscribers may be emailed, but sole traders and some partnerships count as individuals, and data-protection law may still apply to employees’ personal corporate addresses (name.surname@company); ICO guidance is under review after the Data (Use and Access) Act[50] Track subscriber type; keep a do-not-email list of businesses that object, as the ICO advises; watch for revised guidance
US: CAN-SPAM Opt-out regime: no deceptive headers or subject lines, identify ads, postal address, opt-out honoured within 10 business days; “The law makes no exception for business-to-business email”; penalties up to $53,088 per violating email as shown by the FTC when checked[51] Global suppression list; postal address in every template
Canada: CASL Express or implied consent; implied consent from a purchase within two years or an enquiry within six months; unsubscribe effective within 10 business days[52] Store consent type and expiry date for implied consent
US text messages: TCPA and FCC rules Marketing calls and texts to mobile numbers sent with an autodialer or prerecorded voice need prior express written consent (a signed agreement naming the number; electronic signatures count); consent can be revoked by any reasonable means, including replying “stop”, and must be honoured within 10 business days[53] A separate SMS consent record; STOP replies synced to suppression; counsel decides whether your platform is an autodialer
Gmail (bulk: close to 5,000 or more messages a day to personal accounts) SPF, DKIM and DMARC (p=none allowed) with alignment; one-click unsubscribe and a visible link in marketing messages; spam rate below 0.3% in Postmaster Tools, ideally below 0.10%; unsubscribes honoured within 48 hours recommended[12][44] Watch Postmaster Tools; bulk status is permanent
Yahoo (bulk senders) SPF and DKIM; DMARC at least p=none and passing; one-click unsubscribe (RFC 8058 POST highly recommended) and a visible link; unsubscribes honoured within 2 days; spam rate below 0.3%[13] The same headers as Gmail; faster unsubscribe processing
Outlook.com (domains sending more than 5,000 emails a day) From 2025-05-05: SPF, DKIM and DMARC, or mail goes to junk and may be rejected; an unsubscribe mechanism “clearly documented and easy for recipients to find and use”; no complaint-rate threshold on the policy page[14] Consumer Outlook.com mailboxes, not Microsoft 365 business mail

Security and access. MAP and CRM exports are a common leak path: restrict export rights, prefer field-level access to role-wide access, remove access for agencies at contract end, and log list downloads.

The main cost drivers are people, platform licences (HubSpot, for example, bills by marketing contacts[27]), data vendors, agencies, and rework. Three levers are under MarketingOps’ control: pruning records that cannot be marketed to, templates that cut build time and defects, and capacity matching so that paid lead generation does not exceed what sales can follow up. Sending less to people who never engage cuts cost and complaints, and the energy those sends use.

Control Evidence Risk signal
Weekly SLA report with all MQLs in the denominator Report and actions Attainment below target for three weeks
Monthly data-quality score Sample checks, duplicate rate Duplicate rate rising after an import
Quarterly consent audit Sample of 50 marketable contacts traced to consent records Any contact without evidence
Change log for definitions, scoring and routing Change requests with sign-off A change without a back-test or effective date
Experiment register Hypothesis, power, result, decision Budget moved on an underpowered result
Deliverability monitoring Postmaster data, bounce and complaint rates Complaint rate above 0.10%
Symptom Likely cause Diagnosis Fix Prevention
MQLs fall to zero overnight Scoring or trigger campaign deactivated; form broken MAP campaign logs; test submission Re-enable; back-fill scores Alert on zero MQLs per business hour
MQLs in the MAP, not in the CRM Sync error: required field, validation rule, expired credential Sync error log Fix field mapping; resync Field-ownership matrix; credential expiry alert
Sales says “the leads are junk” Rule rewards activity, not fit; definitions not agreed Acceptance and rejection reasons by cell Re-score on fit and engagement; agree definitions Quarterly back-test with sales
Unsubscribed person emailed Re-import overwrote status; second sending tool not synced Trace the person’s record history Suppress; apologise; check other tools Global suppression shared by all senders
Emails land in spam Authentication failure, complaint spike, old list Postmaster tools, DMARC reports Stop the segment; fix authentication Sunset policy; list provenance rules
Each channel claims the same deal Different attribution rules per team Compare reports One written policy, one model per question Measurement policy
Pipeline report changes after the fact Opportunity dates or sources edited Field history Freeze reporting snapshots monthly Snapshot tables

Worked runbook: leads stopped reaching sales

Link to section “Worked runbook: leads stopped reaching sales”
Figure 7. Runbook for a lead-flow outage
nonoyesyesyesnoAlert: no MQLssynced for 3 businesshoursMQLs created in theMAP?Forms and scoringcampaigns active?Re-enable; back-fillscores for the gapTest submission; fixform or field errorSync errors in thelog?Fix mapping orcredential; resync thebacklogCheck routing: ownerinactive or rule gap;reassignTell sales; sales' clockstarts at resync; delaycounts on marketing'sclockReview: cause,missed leads, newalert or test
Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 150, "nodeSpacing": 20, "rankSpacing": 30}}}%%
flowchart TB
  A["Alert: no MQLs synced for 3 business hours"] --> B{"MQLs created in the MAP?"}
  B -->|"no"| C{"Forms and scoring campaigns active?"}
  C -->|"no"| C1["Re-enable; back-fill scores for the gap"]
  C -->|"yes"| C2["Test submission; fix form or field error"]
  B -->|"yes"| D{"Sync errors in the log?"}
  D -->|"yes"| D1["Fix mapping or credential; resync the backlog"]
  D -->|"no"| E["Check routing: owner inactive or rule gap; reassign"]
  C1 --> F["Tell sales; sales' clock starts at resync; delay counts on marketing's clock"]
  C2 --> F
  D1 --> F
  E --> F
  F --> G["Review: cause, missed leads, new alert or test"]
  classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
  classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
  classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
  class A risk
  class B,C,D decision
  class C1,C2,D1,E,F,G core

Text equivalent: After three business hours with no MQLs synced, check whether MQLs were created in the MAP. If not, check that forms and scoring campaigns are active (re-enable and back-fill scores) or test a submission and fix the form or field error. If MQLs exist, check the sync error log: fix the mapping or credential and resync; with no sync errors, check routing for inactive owners or rule gaps. In every case, tell sales, start sales’ clock at resync while counting the delay against marketing’s clock, and review the cause, the missed leads and a new alert or test.

Runbook steps, owners and timings.

  1. Triage (MarketingOps on call, 15 minutes): confirm the alert with a test submission; post in the sales-development channel that leads are delayed.
  2. Locate (automation specialist, 30 minutes): 61 MQLs exist in the MAP and the sync log shows 61 errors: a CRM field (“Region”) made required on Monday evening gets no value from the MAP.
  3. Fix (MarTechOps or the CRM administrator with MarketingOps, 1 hour): map the field with a default, resync the 61 records, and confirm routing to owners.
  4. Recover (SDR manager): start sales’ SLA clock at the resync time, so SDRs are not blamed for leads they never saw; the delay counts against marketing’s MQL-to-CRM clock, so the miss stays visible. Prioritise hand-raisers among the 61.
  5. Prevent (MarketingOps lead): add CRM field changes to the change-control list that needs MarketingOps review; add a synthetic test lead every hour that must reach the CRM; report the incident in the monthly scorecard.

Lesson. The failure was a change in another team’s system. Lead flow crosses team boundaries, so its monitoring and change control must too.

  1. MQL volume as the target. It rewards scoring generosity and list buying. Instead: target acceptance and opportunities, with MQL volume as a capacity check.
  2. “More data fixes attribution.” Observational data stays biased by targeting;[41] instead, test.
  3. The undocumented scoring model that one person built years ago. Instead: a written specification and a back-test.
  4. The tool as the strategy. Replacing the MAP to fix a process problem moves the problem. Instead: fix definitions and ownership first.
  5. Bought lists and pre-ticked boxes. Legal risk, complaints and deliverability damage. Instead: earn consent.
  6. Side-door requests by chat that bypass intake. Instead: one route, with a fast lane for genuine urgency.
  7. Myth: MarketingOps is back-office admin. The decisions it informs (where budget goes, which leads sales calls) are among the most consequential in marketing.

Invest in a dedicated MarketingOps role or team when several of these hold: campaigns run through a MAP every week; sales follows up marketing leads and disputes their quality; more than one team or agency builds campaigns; you market in several jurisdictions; or leadership moves budget on attribution reports.

Do not build a team (yet) when one or two marketers send a few campaigns a month, the founder sells, and there is no MAP beyond a CRM’s email tool. You still need the minimum: an intake checklist, written stage definitions, consent text, a UTM taxonomy and one person accountable for them. Hidden costs of a team: platform licences, the data work that scoring and measurement need, and the political cost of changing definitions that targets depend on.

Alternatives. An agency or contractor can build campaigns, but the funnel contract and consent records should stay with an employee. A combined RevOps team can run marketing operations if it gives marketing’s work enough capacity.

Figure 8. Should you set up dedicated MarketingOps, and in what form?
noyesnoyesnoyesyesnoDo you market toknown contacts througha MAP or CRM everyweek?No dedicated role: onemarketer owns trackingand consent basicsDoes a sales teamfollow up marketingleads?Lifecycle-messagingoperations:deliverability, consent,experimentsSeveral campaignbuilders, regions orrecurring disputesabout lead quality?Part-time owner withthe funnel contract andchecklistsIs there a RevOpsfunction that ownsshared definitions?MarketingOps teamaligned to RevOpsMarketingOps team;agree definitions withsales and proposeRevOps-levelgovernance
Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 160, "nodeSpacing": 20, "rankSpacing": 30}}}%%
flowchart TB
  A{"Do you market to known contacts through a MAP or CRM every week?"}
  A -->|"no"| A1["No dedicated role: one marketer owns tracking and consent basics"]
  A -->|"yes"| B{"Does a sales team follow up marketing leads?"}
  B -->|"no"| B1["Lifecycle-messaging operations: deliverability, consent, experiments"]
  B -->|"yes"| C{"Several campaign builders, regions or recurring disputes about lead quality?"}
  C -->|"no"| C1["Part-time owner with the funnel contract and checklists"]
  C -->|"yes"| D{"Is there a RevOps function that owns shared definitions?"}
  D -->|"yes"| D1["MarketingOps team aligned to RevOps"]
  D -->|"no"| D2["MarketingOps team; agree definitions with sales and propose RevOps-level governance"]
  classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
  classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
  classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
  class A,B,C,D decision
  class B1,C1,D1,D2 core
  class A1 neutral

Text equivalent: If you do not market to known contacts through a MAP or CRM every week, you need no dedicated role; one marketer owns tracking and consent basics. If you do but no sales team follows up leads, run lifecycle-messaging operations focused on deliverability, consent and experiments. If sales follows up but there is only one builder, one region and no dispute about lead quality, a part-time owner with the funnel contract and checklists is enough. Otherwise set up a MarketingOps team, aligned to RevOps if one owns shared definitions; if not, agree definitions with sales directly and propose RevOps-level governance.

The cut-offs below are editorial rules of thumb, not research findings. A weighted check helps when the answer is unclear:

Criterion Weight Score 1 (low need) Score 5 (high need)
Campaign volume 3 A few a month, one builder Weekly, several builders or agencies
Lead hand-off disputes 3 Rare Acceptance below 60% or no agreed definitions
Jurisdictions and consent complexity 2 One country, B2B only Several regions, consumers
Budget decided on attribution 2 Small, stable budget Large shifts between channels each quarter
Data quality pain 1 Small, clean database Duplicates and imports weekly

Weighted total from 11 to 55: below about 25, a part-time owner; 25–40, a first dedicated hire; above 40, a team with specialisms (an editorial rule of thumb).

This is this Atlas’s maturity model, not an official standard.

Level Observable behaviours Evidence Exit criteria
1. Ad hoc Campaigns built by whoever is free; stages undefined; leads exported to spreadsheets None Intake form, QA checklist and written stage definitions in use
2. Defined Templates, naming standard, agreed definitions, consent text versioned Standards documents Every MQL routed to an owner with an SLA; weekly SLA report
3. Managed Scoring back-tested; SLA attainment and acceptance reviewed weekly; data-quality score monthly Scorecard, change log Acceptance and SLA targets met two quarters running; consent audit clean
4. Measured Measurement policy; experiment register; cost per opportunity by programme; mix model where data allows Register, experiment reports At least one budget decision a year based on an experiment or calibrated model
5. Adaptive Definitions and models revised on evidence; capacity and budget planned together with sales and finance Planning records Sustain; improvement is routine

Most companies need Level 3 everywhere and Level 4 only where budgets are large enough for experiments to be affordable.

Assumes a B2B company with an existing MAP and CRM and a newly appointed MarketingOps lead. Regulated or multi-country organisations need longer for the consent work.

Phase Actions Metrics Milestone
Days 1–30: see the system Map the lead flow end to end; list every capture point and sending tool; inventory scoring and routing rules; baseline SLA attainment with all MQLs in the denominator; read 50 recent rejections Baselines: acceptance, SLA attainment, sync errors, duplicate rate Current-state map and baseline scorecard agreed with sales
Days 31–60: fix the contract Write stage definitions with sales; reason codes for rejection; routing that always ends in an owner; hourly lead-flow alert; intake form and QA checklist; consent text versioned SLA attainment rising; zero unrouted MQLs older than one working day Funnel contract v1 agreed with sales and approved by RevOps
Days 61–90: measure honestly Back-test and relaunch scoring; UTM taxonomy enforced (Lab 1); measurement policy; first holdout test designed and sized; monthly scorecard Acceptance rate; on-time launch; first-time-right Scorecard reviewed monthly; first experiment running

Quick wins: an alert on zero MQLs; one suppression list for all senders; one intake route. Dependencies: CRM administration time from SalesOps, MarTechOps for integrations, privacy review of consent text, and leadership willing to move targets from MQLs to accepted leads.

Quick start (first two weeks)

  • Every capture point (forms, event scans, imports, chat) listed with its owner and destination
  • Every sending tool listed and connected to one suppression list
  • Stage definitions written down, even if imperfect, and shown to sales
  • Hourly check that MQLs reach the CRM
  • SLA report with all routed MQLs in the denominator

Campaign preflight (every launch)

  • Brief approved; audience, exclusions and suppression applied
  • Consent wording is the current version; boxes unticked; service-only path for people without consent
  • Every link passes the taxonomy check (Lab 1); utm_id matches the campaign ID
  • Personalisation fallbacks tested; rendering checked on common mail clients
  • One-click unsubscribe header and visible unsubscribe link present; postal address in the footer where required
  • Test lead submitted, scored, synced and routed to a test owner
  • Second-person sign-off recorded

Quarterly review

  • Scoring back-tested on the last two quarters; acceptance and rejection reasons by cell reviewed with sales
  • Attribution policy and experiment register reviewed with finance
  • Consent audit of a random sample; data-quality trend
  • Unused programmes, lists and fields retired

Deliverability incident

  • Pause the affected sends; check authentication results and recent list sources
  • Compare complaint rates by segment; stop segments with no recent engagement
  • Record cause and fix; adjust the sunset policy

Template 1: funnel contract one-pager

Example status: plain-text template, not executable.

FUNNEL CONTRACT v__  effective ____-__-__   owners: MarketingOps ____ / Sales dev ____
Approved by RevOps (owner of the stage dictionary) on ____-__-__

1. Stages      MQL = ______________________  SAL = accepted + first touch logged
               SQL = ______________________  Opportunity = deal record created
2. Hand-off    routing policy: RevOps v__ ; MAP-to-CRM sync owner: ______
3. Clocks      MQL to CRM: __ min | first touch: __ working h | accept/reject: __ days
4. Recycling   reasons: wrong person / no need now / existing deal / bad data / no consent
5. Capacity    sales development can work __ MQLs per month; review if forecast exceeds it
6. Reporting   weekly: SLA attainment, acceptance, rejection reasons (all MQLs counted)
7. Changes     by change request with back-test; signed by both owners, approved by RevOps

Template 2: measurement policy

Example status: plain-text template, not executable.

MEASUREMENT POLICY v__   owner: marketing analyst ____   reviewed quarterly with finance
Optimising within a channel:      attribution model ______ (label: "credit allocation")
Moving > __% of budget:           experiment, calibrated mix model, or recorded judgement
Definitions:  sourced pipeline = ______ ; influenced pipeline = ______ ;
              cost per opportunity = programme cost / cohort opportunities (90 days)
Experiments:  registered before launch with a power estimate; results shown with intervals
Not allowed:  summed channel credits; opens as success; definition changes mid-quarter

Template 3: monthly operations scorecard

Measure Target This month Trend Action and owner
Follow-up SLA attainment ≥ 90%
MQL acceptance rate ≥ 70%
MQL → opportunity (90-day cohort) Set from history
On-time launch rate ≥ 90%
First-time-right launches ≥ 85%
Data quality score ≥ 95%
Spam complaint rate (Postmaster) < 0.10%
Open experiments and decisions taken n/a

The targets are starting points for discussion, not benchmarks.

Template 4: change request for definitions, scoring or routing

Example status: YAML syntax-checked, not executed.

change_request:
  id: CR-2026-017
  title: "Add CE1 cell to MQL rule via self-serve demo path"
  type: scoring              # definitions | scoring | routing | attribution
  reason: "CE1 converts at 13.7% in training months; sales capacity is 80 MQLs per month"
  evidence: "Lab-style back-test, months 1-8 train, 9-12 test"
  expected_effect:
    mqls_per_month: "+30 to self-serve path, +0 to SDR queue"
    opportunities_per_quarter: "+10 to +14 (estimate)"
  effective_date: 2027-01-04
  backcast_required: true    # restate the last two quarters under the new rule
  sign_off: [marketingops_lead, sdr_manager, revops]
  rollback: "Disable the CE1 branch; route CE1 to nurture as before"
Page Centre of gravity Primary measures Choose this lens when
MarketingOps (this page) Campaigns, the lead hand-off, consent capture, marketing measurement Acceptance, SLA, cost per opportunity, lift, on-time launch Marketing’s process or measurement is the bottleneck
RevOps Shared definitions and governance across the revenue funnel Forecast accuracy, conversion across functions, revenue metrics Disputes are between functions, not inside marketing
SalesOps Sales capacity, territories, stages, forecast call Win rate, cycle length, pipeline coverage The constraint is after acceptance
MarTechOps Stack architecture and data plumbing Integration health, data flow, tool utilisation Systems, sync or tracking are the problem

Is MarketingOps the same as administering the marketing automation platform? No. Administration is one task; the function also owns the funnel contract, consent capture, data quality, measurement and the campaign process.

Do we still need MQLs? Not necessarily (see the origins and the account-based playbook). If you keep them, report acceptance and opportunities beside them and size them to capacity.

Can we email business contacts without consent? It depends on the recipient’s country and status. In the US, CAN-SPAM is an opt-out regime with no B2B exception from its rules;[51] in the UK, corporate subscribers may be emailed but sole traders are treated as individuals;[50] EU member states set their own rules for legal persons.[45] Ask counsel and PrivacyOps.

How many MarketingOps people do we need? There is no reliable published ratio. Size the team from campaign volume, number of builders and regions, and the measurement ambition; at small scale one accountable owner can be enough (see when to use).

Should MarketingOps report to the CMO or to RevOps? Either works if the funnel contract is shared and marketing’s campaign work keeps protected capacity. Reporting to RevOps tightens alignment with sales; reporting to the CMO keeps campaign execution close to marketers.

  • Calibrated mix models. Open-source MMMs such as Meridian can take experiment results as priors;[37] the established part is the method, the emerging part is making it routine for mid-sized budgets.
  • AI in the MAP. Vendor “agents” that build and launch campaigns are new, and the readiness gap under automation and AI applies. Treat agent claims as vendor marketing until tested under change control.
  • Signal loss and consent. Fewer observable touches (consent choices, Mail Privacy Protection) push measurement towards aggregate and experimental methods; the plumbing is MarTechOps’ subject.
  • Prerequisites: none; spreadsheets, then basic SQL and statistics (proportions and confidence intervals).
  • One-day primer: read What MarketingOps is, Principles and operating model and the workflow; write your company’s stage definitions as they are today.
  • One week: do Labs 1–3; draft the funnel contract and the measurement policy from the templates.
  • Thirty days: run the 30-day phase of the roadmap; measure SLA attainment honestly; run a QA checklist on every launch.
  • Specialise: marketing automation (platform certifications), marketing analytics (experiments and mix models), or lifecycle messaging for consumer brands; then read RevOps, MarTechOps and PrivacyOps.
  • Portfolio ideas: a back-tested scoring proposal; a designed and sized holdout test; a consent-record audit with fixes.
Topic Remember
What it is Marketing run as a dependable system: campaigns, lead flow, consent, measurement
Core asset The funnel contract: definitions, mechanics (score, route, SLA), measurement rules
First fixes One intake route; QA before launch; every MQL owned and timed; untouched leads count as misses
Scoring Fit and engagement separately; decay; back-test; size to sales capacity
Measurement Attribution allocates credit; experiments and mix models estimate effect; report intervals
Compliance Unticked, versioned consent; one suppression list; bulk-sender rules (as of October 2026)
Metrics Acceptance, SLA attainment, cost per opportunity, on-time and first-time-right launches
Watch-outs MQL volume targets; email opens; summed channel credits; definition changes without back-casts

A judgement call: cut the events budget because attribution says so?

Link to section “A judgement call: cut the events budget because attribution says so?”

The situation. A CFO proposes cutting the field-events budget by 40%. The evidence is the sourced-pipeline report, which in this company gives each new opportunity’s source to the last marketing touch before the opportunity was created: events get 3% of sourced pipeline while taking 20% of programme spend, and paid search gets 35%. Option A: cut now and move the money to paid search. Option B: keep most of the budget for two quarters, run a regional holdout, and decide on its result.

Assumptions. Most event attendees work at accounts that already have an open opportunity (events meet them late in long cycles, after the opportunity was created); paid search captures people already searching for the product; the company runs events in six comparable regions; one quarter’s delay costs little.

Why the attractive option A may be wrong.

  1. The report cannot see what events are for. Sourced credit is assigned at opportunity creation, so a touch after creation earns nothing under any rule. If events mainly help open deals close (win rate, cycle length, deal size), the report shows them near zero by construction. Lab 3 shows how much the rule alone moves credit.
  2. Search may harvest rather than create. Under these assumptions its 35% includes demand other programmes created.
  3. Observational credit is not effect. Large field experiments found observational methods often fail to match randomised results.[41]
  4. The cut is hard to reverse. Venue contracts and audience relationships take time to rebuild.

What to look at first. Compare win rate, cycle length and deal size of opportunities whose buying group attended an event with those that did not, as a hypothesis only: sellers may invite their best deals, so attendees could look better even if events did nothing. The holdout separates the two.

Why option B is not free. Holdouts are noisy at B2B scale; Lewis and Rao show how wide the uncertainty can be,[42] so six regions may not give a decisive answer. Option B also delays savings.

Decision under these assumptions: a version of B. Cut the events with the weakest attendance and acceptance (the operational evidence) by about 15% now, run the regional holdout on the rest with win rate and cycle length (not sourced pipeline) as its outcomes, pre-register what result would justify the full 40% cut, and check the mix model if one exists. Record the decision and its evidence. If the company cannot run any test, say so and make an explicit judgement rather than pretending the attribution report answered the question.

You should now be able to explain what marketing operations owns and how it differs from RevOps and MarTechOps; write a funnel contract with entry and exit criteria and an SLA; design and back-test a fit-and-engagement scoring rule within sales capacity; calculate acceptance, SLA attainment, cost per opportunity and incremental lift with an interval; apply consent and bulk-sender rules to a campaign; and decide when attribution is enough and when an experiment is needed.

1. The SLA dashboard shows 96% attainment, yet the SDR manager admits many leads were never called. What is wrong?

The denominator probably counts only leads with a logged touch. Use every MQL routed in the period and count untouched ones as misses (artefact 4).

2. 1,000 MQLs, 650 accepted, 150 opportunities within 90 days, €240,000 programme cost. Compute acceptance, MQL → opportunity and cost per opportunity.

Acceptance 650 ÷ 1,000 = 65%; MQL → opportunity 150 ÷ 1,000 = 15%; cost per opportunity €240,000 ÷ 150 = €1,600. State the cohort window and what the cost includes.

3. A new scoring rule improves MQL → opportunity from 19% to 26% in the back-test. Why might you still not launch it as is?

It may capture fewer opportunities overall, and its volume must fit sales capacity. Decide first what happens to excluded but promising cells (Lab 2’s CE1).

4. A holdout shows 6.4% vs 5.2% opportunity rates with a 95% interval of −1.1 to +3.5 points. What do you tell the CMO?

The best estimate is a 1.2-point absolute lift (about 23% relative to the control rate), but the data are consistent with no effect or a negative one. Do not claim the programme works or fails; increase the sample, extend the test, or combine with other evidence before a large budget decision.

5. A German registration form has one pre-ticked box for “event updates and marketing”. What should change?

Untick it, separate purposes (event service messages versus marketing), record the consent text version, and make withdrawal easy: the EDPB says pre-ticked opt-in boxes are invalid and consent must be granular by purpose.

6. Your newsletter goes to 400,000 Gmail users weekly. Name three requirements you must meet (as of October 2026).

As a bulk sender: SPF, DKIM and DMARC (p=none is enough) with alignment; one-click unsubscribe per RFC 8058 plus a visible link; a spam rate below 0.3% (target below 0.1%). Honour unsubscribes quickly (Google recommends within 48 hours).

7. Sales and marketing each report different “marketing-sourced pipeline” numbers. Where do you start?

Write one definition (which source field, which date, which opportunity types), get it approved through RevOps, restate both reports, and freeze monthly snapshots so the number cannot drift after the fact.

MarketingOps is an established function with an unglamorous core: written agreements and the machinery that keeps them. None of this needs the newest platform. A team with a clear stage definition, an honest SLA report and one well-designed holdout test knows more about its marketing than a team with a large stack and three versions of “sourced pipeline”. One test of the operation: pick a lead created last Tuesday and ask who owns it, when they touched it, what the person consented to, and which campaign brought them in. If the answers take minutes, not days, MarketingOps is working.

Every source below was opened on 2026-10-18 or later (dated per entry). Product documentation changes often; dates shown are those on the page when checked. Legal sources are for orientation only; for EU law the official text on EUR-Lex prevails.

Further reading.

  • Not read for this page: the full State of the Marketing Operations Professional reports (gated) and Forrester’s client Waterfall materials.
  • The evidence ledger for this page, research/marketingops-ledger.md, lists every source, what it supports and what could not be verified.

Changelog.

  • 2026-10-18, first version (r0): researched and written; labs and the SLA query executed on synthetic data; awaiting independent fact check.
  • 2026-10-18, r1 revision after the independent fact check (reviews/marketingops-r1.md): RACI split and aligned with RevOps (one A per row); judgement call rebuilt around opportunity creation; mailbox-provider rules split by provider; new account-based and product-led qualification playbook, import and enrichment governance, and US text-message consent; Salesforce quotation made verbatim; HBR co-author’s affiliation disclosed and the speed-to-lead multipliers dropped; decay, lift, week label, SLA clock and MQL-rule inconsistencies fixed; repeated passages cut.
  • 2026-10-19, r1-response round: r1 fixes re-verified against primary sources; two sibling-page verbatim overlaps reworded; ledger extended with the r1 sources (details in reviews/marketingops-r1-response.md).
  • 2026-10-23, post-score polish: HBR quotation shared with RevOps replaced by a cross-link; score-cell notation defined next to Artefact 3; Gartner archive and HBR summary re-checked (reviews/marketingops-polish.md).

  1. Marketing Operations: The CMO’s Essential Guide — Gartner (Internet Archive snapshot of 2026-03-04, still the latest on 2026-10-23; the live page refuses automated access). Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  2. About MarketingOps.com — MarketingOps.com (community’s own membership claim; the page also advertises its certification). Checked 2026-10-18. ↩︎ ↩︎

  3. State of the Marketing Ops Professional research 2025 — MarketingOps.com, 2025 edition (community survey; sample size not stated on the page). Checked 2026-10-18. ↩︎ ↩︎

  4. The state of marketing operations professionals is OK, but it’s going to get much, much better — Scott Brinker, chiefmartec, 2024-11-10. Checked 2026-10-18. ↩︎ ↩︎

  5. Marketo — Wikipedia (tertiary; used for the founding year only). Checked 2026-10-18. ↩︎

  6. HubSpot — Wikipedia (tertiary; used for the founding date only). Checked 2026-10-18. ↩︎

  7. Why We Have A New Waterfall For 2021 (And Why You Should Care) — Kerry Cunningham, Forrester blog, 2021-04-27. Checked 2026-10-18. ↩︎ ↩︎ ↩︎

  8. Forrester Debuts Next-Generation B2B Revenue Waterfall To Help Firms Accelerate Revenue Growth — Forrester press release, 2021-05-04. Checked 2026-10-18. ↩︎ ↩︎

  9. The “Goodbye MQL” Transformation Accelerates — Moving From Wild Idea To Reality — Terry Flaherty, Forrester blog, 2023-04-05 (analyst opinion). Checked 2026-10-18. ↩︎

  10. Use lifecycle stages — HubSpot Knowledge Base, updated 2026-07-17. Checked 2026-10-18. ↩︎ ↩︎ ↩︎

  11. Use Mail Privacy Protection on iPhone — Apple Support. Checked 2026-10-18. ↩︎ ↩︎

  12. Email sender guidelines — Google Workspace Admin Help (requirements from 2024-02-01). Checked 2026-10-18. ↩︎ ↩︎ ↩︎ ↩︎

  13. Sender Best Practices — Yahoo Senders Hub. Checked 2026-10-18. ↩︎ ↩︎

  14. Policies, Practices, and Guidelines — Microsoft Outlook Postmaster (high-volume sender rules effective 2025-05-05). Checked 2026-10-18. ↩︎ ↩︎

  15. Lead scoring — Oracle Eloqua Help Center, © 2025. Checked 2026-10-18. ↩︎ ↩︎

  16. Understand the lead scoring tool — HubSpot Knowledge Base, updated 2026-09-02. Checked 2026-10-18. ↩︎ ↩︎ ↩︎ ↩︎

  17. Change Score — Adobe Experience League (Marketo Engage), updated 2026-05-13. Checked 2026-10-18. ↩︎

  18. Set up account-based marketing in HubSpot — HubSpot Knowledge Base, updated 2026-10-06. Checked 2026-10-18. ↩︎ ↩︎

  19. Account Score — Adobe Experience League (Marketo Engage), updated 2026-10-07. Checked 2026-10-18. ↩︎

  20. Company Surge® Intent data — Bombora (vendor product page; its own description of its method). Checked 2026-10-18. ↩︎ ↩︎

  21. What is a product-qualified lead (PQL)? — TechTarget definition (written 2019, revised 2023). Checked 2026-10-18. ↩︎

  22. Automatically create and associate companies with contacts — HubSpot Knowledge Base, updated 2026-06-26. Checked 2026-10-18. ↩︎

  23. Target Account Management — Adobe Experience League (Marketo Engage), updated 2026-10-07. Checked 2026-10-18. ↩︎ ↩︎

  24. The Short Life of Online Sales Leads — J. B. Oldroyd, K. McElheran and D. Elkington (the page lists Elkington as chairman and CEO of InsideSales.com), Harvard Business Review, March 2011 (paywalled; only the summary was read). Checked 2026-10-23. ↩︎

  25. Deduplication of records — HubSpot Knowledge Base, updated 2026-10-02. Checked 2026-10-18. ↩︎

  26. Art. 14 GDPR: Information to be provided where personal data have not been obtained from the data subject — gdpr-info.eu (unofficial text; paragraphs 2(f) and 3). Checked 2026-10-18. ↩︎

  27. Set contacts as marketing contacts — HubSpot Knowledge Base, updated 2026-09-15. Checked 2026-10-18. ↩︎ ↩︎

  28. Guidelines 05/2020 on consent under Regulation 2016/679, version 1.1 — European Data Protection Board, adopted 2020-05-04 (paragraphs 42–43 and 79). Checked 2026-10-18. ↩︎

  29. How should we obtain, record and manage consent? — UK Information Commissioner’s Office (marked under review after the Data (Use and Access) Act). Checked 2026-10-18. ↩︎ ↩︎ ↩︎

  30. RFC 8058: Signaling One-Click Functionality for List Email Headers — J. Levine and T. Herkula, IETF, January 2017. Checked 2026-10-18. ↩︎ ↩︎

  31. RFC 9989: Domain-Based Message Authentication, Reporting, and Conformance (DMARC) — IETF, May 2026 (obsoletes RFC 7489 and RFC 9091). Checked 2026-10-18. ↩︎ ↩︎

  32. B2B marketing automation — Salesforce product page (product naming inconsistent on the page as of October 2026). Checked 2026-10-18. ↩︎

  33. mautic/mautic — Mautic, GitHub (GPL-3.0-or-later; release 7.2.1, 2026-09-23). Checked 2026-10-18. ↩︎

  34. Braze Docs: introduction — Braze. Checked 2026-10-18. ↩︎

  35. Get started with attribution — Google Analytics Help. Checked 2026-10-18. ↩︎ ↩︎ ↩︎

  36. Marketo Measure Attribution Models — Adobe Experience League, updated 2026-10-07. Checked 2026-10-18. ↩︎ ↩︎ ↩︎ ↩︎

  37. Meridian — Google for Developers (repository google/meridian, Apache-2.0). Checked 2026-10-18. ↩︎ ↩︎ ↩︎

  38. Robyn — Meta Marketing Science, GitHub (MIT licence; latest release v3.12.0, 2024-12-19). Checked 2026-10-18. ↩︎ ↩︎

  39. Gartner 2026 CMO Spend Survey Finds CMOs Allocate 15.3% of Marketing Budgets to AI, But Only 30% Are Ready to Scale AI Capabilities — Gartner press release, 2026-05-11 (read on Gartner’s mirror host gcom.pdo.aws.gartner.com, same path). Checked 2026-10-18. ↩︎

  40. URL builders: Collect campaign data with custom URLs — Google Analytics Help. Checked 2026-10-18. ↩︎ ↩︎

  41. A Comparison of Approaches to Advertising Measurement: Evidence from Big Field Experiments at Facebook — B. R. Gordon, F. Zettelmeyer, N. Bhargava and D. Chapsky; published in Marketing Science 38(2):193–225, 2019 (authors’ version of 2018-04-12). Checked 2026-10-18. ↩︎ ↩︎ ↩︎

  42. The Unfavorable Economics of Measuring the Returns to Advertising — R. A. Lewis and J. M. Rao, Quarterly Journal of Economics 130(4):1941–1973, 2015 (DOI; text read in a copy of the journal PDF at gwern.net/doc/economics/advertising/2015-lewis.pdf). Checked 2026-10-18. ↩︎ ↩︎ ↩︎

  43. Measuring Ad Effectiveness Using Geo Experiments — J. Vaver and J. Koehler, Google, 2011. Checked 2026-10-18. ↩︎

  44. Email sender guidelines FAQ — Google Workspace Admin Help. Checked 2026-10-18. ↩︎ ↩︎

  45. Directive 2002/58/EC (consolidated text of 2009-12-19), Article 13 — EUR-Lex. Checked 2026-10-18. ↩︎ ↩︎

  46. Art. 7 GDPR: Conditions for consent — gdpr-info.eu (unofficial text of Regulation (EU) 2016/679). Checked 2026-10-18. ↩︎

  47. Art. 21 GDPR: Right to object — gdpr-info.eu (unofficial text). Checked 2026-10-18. ↩︎

  48. Recital 47 GDPR: Overriding legitimate interest — gdpr-info.eu (unofficial text). Checked 2026-10-18. ↩︎

  49. Storing cookies requires internet users’ active consent (Case C-673/17, Planet49) — Court of Justice of the EU, Press Release No 125/19, 2019-10-01. Checked 2026-10-18. ↩︎

  50. Electronic mail marketing (Guide to PECR) — UK ICO (marked under review). Checked 2026-10-18. ↩︎ ↩︎

  51. CAN-SPAM Act: A Compliance Guide for Business — US Federal Trade Commission, August 2023, edited January 2024. Checked 2026-10-18. ↩︎ ↩︎

  52. Canada’s Anti-Spam Legislation, S.C. 2010, c. 23 (sections 6, 10 and 11) — Justice Laws Website, Government of Canada, current to 2026-09-30. Checked 2026-10-18. ↩︎

  53. 47 CFR 64.1200 Delivery restrictions — Electronic Code of Federal Regulations (paragraphs (a)(2), (a)(10) and (f)(9); text current to 2026-10-15). Checked 2026-10-18. ↩︎

Related Ops

MarTechOps

MarTechOps (marketing technology operations) designs and runs the plumbing of the marketing stack: how tools connect, how customer data and consent signals flow between them, which tags fire, and which tools the company keeps.

RevOps

RevOps (revenue operations) aligns marketing, sales and customer success around one set of funnel definitions, one trusted customer record, governed hand-offs and one forecast, so the revenue process can be measured and improved end to end.

SalesOps

SalesOps (sales operations) designs and runs the machinery of a sales team: capacity plans, territories, quotas, the CRM, the pipeline and forecast process, commission plans and the deal desk, so sellers can sell and leaders can trust the number.

ContentOps

ContentOps (content operations) is the people, process and technology that turn a content plan into accurate, findable content at scale: modelled once, reviewed by named owners, published to every channel, measured, and retired when it goes stale.

AdOps

AdOps (advertising operations) turns sold or auctioned ad space into delivered, measured and billable impressions: it sets up and checks campaigns in the ad server, runs the auction plumbing, keeps fraud and unauthorised sellers out, and reconciles the numbers.

SEO Operations

SEO Operations runs search engine optimisation as a managed programme: one intake for work, priorities set against policy and real capacity, repeatable production, and measurement that is honest about what search data cannot show.

PrivacyOps

PrivacyOps is a vendor-coined name for running a privacy programme as an operation: knowing which personal data you hold and why, and meeting each person's rights, the impact assessments and breach duties on time, with evidence.

AnalyticsOps

AnalyticsOps has no standard definition. On this page it means operating the layer where people consume data: versioned metric definitions, a semantic layer that serves them, and BI content that is certified, monitored and retired, so each important metric has one trusted definition.

Practise and get certified

From xOps School

Practise MarketingOps and get certified

The MarketingOps track on xOps School (part of the Coffee Pass) has study notes, a 25-question practice quiz with explanations, and a verifiable certificate when you score 70% or more. Sign in with Google to start.

For teams

Instructor-led training

Live batches for your team, with completion certificates and reports for L&D/HR.

Source: master.md (the editorial source of this page) · built 2026-10-23 · diagrams rendered with @mermaid-js/mermaid-cli 11.17.0 (mermaid 11.17.2)