---
title: "MarketingOps"
slug: marketingops
category: business
term_status: established
evidence_status: verified
summary: "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."
audience: [Beginners, Marketing ops practitioners, Campaign and marketing automation specialists, Demand generation and sales leaders, CMOs and finance partners]
last_verified: 2026-10-23
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."
related: [martechops, revops, salesops, contentops, adops, seo-operations, privacyops, analyticsops]
---

## What MarketingOps is

### In 30 seconds

**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.

::: note Scope of this page
The page follows one campaign from request to a measured contribution to pipeline, and covers the process, the people and the
decisions. The architecture of the marketing technology stack (integrations, customer data platforms, tags) belongs to
[MarTechOps](../martechops/). Funnel definitions shared with sales and customer success are governed in [RevOps](../revops/).
Nothing on this page is legal advice.
:::

### At a glance

| 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](../martechops/); shared funnel definitions and forecast → [RevOps](../revops/); sales stages → [SalesOps](../salesops/); content production → [ContentOps](../contentops/); ad trafficking → [AdOps](../adops/); search → [SEO Operations](../seo-operations/); consent policy → [PrivacyOps](../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 |

### The problem it solves

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](../revops/#playbook-lead-routing-and-the-speed-to-lead-sla) 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?"[^gartner-mo]

### 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".[^gartner-mo] A practitioner community,
MarketingOps.com, reports more than 3,500 members[^mo-about] and has surveyed the profession since 2021.[^mo-2025]
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".[^brinker] 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[^mo-about]), 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".[^brinker] Many companies run all three with one team.

::: decision Editorial distinction used in this Atlas
**This page** treats MarketingOps as the process, people and decision side: campaigns, the funnel contract with sales, consent
capture, data hygiene as a practice, and measurement. **[MarTechOps](../martechops/)** treats the systems side: stack
architecture, CRM–MAP synchronisation design, customer data platforms, tags, server-side tracking and consent-signal plumbing.
This split is the Atlas's choice, not an industry definition. If your company has one team for both, read both pages.
:::

**What it is not.**

- **Not RevOps.** [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.

## Where it comes from and where it sits

### Origins and evolution

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.[^marketo-wiki][^hubspot-wiki] 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.[^fr-cunningham] Forrester's B2B Revenue
  Waterfall (2021-05-04, "formerly known as the SiriusDecisions Demand Unit Waterfall®"; [RevOps](../revops/) retells this
  history from the revenue side) plans around buying groups and adds renewal, cross-sell and upsell as opportunity
  types.[^fr-waterfall]
- **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."[^fr-flaherty] That is an analyst's position, not a measured fact; the default
  lifecycle stages of tools such as HubSpot still include an MQL stage,[^hs-lifecycle] 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,[^apple-mpp] and the bulk-sender rules of Gmail and Yahoo (from February 2024) and Outlook.com (from May
  2025)[^gmail][^yahoo][^outlook] 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.[^mo-2025]

### Glossary and mental model

| 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"[^hs-lifecycle] |
| 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"[^fr-cunningham] |
| 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[^eloqua] |
| 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[^hs-scoring] |
| 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.

### How MarketingOps relates to other Ops

::: figure MarketingOps and its neighbours: what flows in and out
```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](../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](../salesops/) | The hand-off, the CRM | MQL creation and recycling rules | Sales stages and exit criteria, territories, sales capacity |
| [MarTechOps](../martechops/) | The MAP, CRM sync, tracking | Requirements, configuration of campaigns and scores | Architecture, integrations, CDPs, tags and consent-signal plumbing |
| [ContentOps](../contentops/) | Campaign assets | Briefs, deadlines, QA of the assets in campaigns | Content lifecycle, governance and reuse |
| [AdOps](../adops/) | Paid campaigns | Campaign taxonomy, budgets, landing pages, lead capture | Ad servers, trafficking, pacing, invalid traffic |
| [SEO Operations](../seo-operations/) | Organic traffic | Tracking organic leads into the funnel | Search optimisation |
| [PrivacyOps](../privacyops/) | Consent | Capturing and recording consent in forms and campaigns | Lawful basis, consent policy, rights requests |
| [AnalyticsOps](../analyticsops/) | Marketing metrics in BI | The business meaning of marketing metrics | Semantic layer, certification, BI content lifecycle |

After the sale, [CustomerOps](../customerops/) runs renewals and expansion and [CXOps](../cxops/) measures the experience
across the journey; MarketingOps supports them with campaigns to existing customers.

## Principles and operating model

### Charter and principles

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.

### Fundamentals and building blocks

| 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) |

### Roles, ownership and RACI

- **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](#origins-and-evolution), one person holds all three MarketingOps roles. Gartner
suggests centralising scarce, strategic skills such as marketing analytics, for example in a centre of excellence.[^gartner-mo]

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](../revops/#roles-ownership-and-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.

### Lifecycles: the campaign and the lead

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 Campaign lifecycle from request to retrospective
```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 Lead lifecycle: stages, hand-offs and the paths back
```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.[^hs-lifecycle] 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](#playbook-account-based-and-product-led-qualification)).

### Operating model and governance

| 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.[^gartner-mo] 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.

## Architecture and workflow

### 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](../martechops/)' subject.

::: figure Campaign-to-pipeline reference architecture
```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](../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

**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 Hand-offs for one webinar lead, with the two most common exceptions
```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 |

## Practices, frameworks and tools

### Core practices and playbooks

#### Playbook: campaign intake, build and QA

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

1. **Draft the MQL criteria first** (artefact 2) with sales, inside the stage dictionary that [RevOps](../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".[^eloqua] HubSpot's tool keeps separate engagement, fit and combined scores,
   with combined thresholds from A1 to C3.[^hs-scoring]
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;[^hs-scoring] 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);[^mkto-score]
in other platforms the names differ, but the governance above does not.

#### 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;[^hs-abm] Marketo Engage's
Target Account Management add-on aggregates lead scores into account scores, so lead scores must exist first.[^mkto-acct]

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.[^bombora] 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.[^fr-cunningham]

**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".[^pql] 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;[^hs-assoc] Marketo
lists lead-to-account matching as part of its account add-on.[^mkto-tam] 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

Routing policy and the SLA between marketing, sales development and sales are governed in
[RevOps](../revops/#playbook-lead-routing-and-the-speed-to-lead-sla), 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,[^hbr] which the RevOps page deliberately does not use.

#### Playbook: data hygiene

- **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.[^hs-dedupe]
- **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.[^gdpr14] 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",[^hs-mktcontacts] so pruning also controls cost.

#### Playbook: consent capture and email compliance

The legal basis and consent policy belong to [PrivacyOps](../privacyops/#playbook-lawful-basis-consent-records-and-notices);
consent-signal plumbing on websites belongs to [MarTechOps](../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",[^edpb] and the UK ICO says "You cannot rely on silence,
   inactivity, pre-ticked boxes, opt-out boxes".[^ico-consent]
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.[^ico-consent] 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](#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](#privacy-consent-and-compliance).
5. **Never import a list without its consent evidence.** Bought lists fail most of these tests.

#### Playbook: planning, budgets and capacity

- **Plan backwards from the pipeline target** using your own historical conversion rates by stage and channel (the worked
  example under [metrics](#metrics-and-kpis) 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).

### Methods, standards and frameworks

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[^rfc8058][^rfc9989] |
| 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[^fr-waterfall] |
| Gartner's marketing-operations KPIs | Analyst guidance | Six operational measures: alignment, timeliness, capacity, quality, progress, consistency[^gartner-mo] |
| 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 |

### Tooling landscape

| 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"[^sf-ae]); Oracle Eloqua; Mautic (open source, GPL-3.0[^mautic]) | 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"[^braze]) | 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;[^hs-abm] Marketo Target Account Management (add-on);[^mkto-tam] intent providers such as Bombora[^bombora] | Lead-to-account matching quality; intent is modelled; privacy review of the data source |
| Attribution | Credit allocation across touches | Google Analytics 4 attribution;[^ga-attr] Adobe Marketo Measure[^mm-models] | Which touches it can see; model transparency |
| Mix modelling | Aggregate effect of spend over time | Google Meridian (Apache-2.0);[^meridian] Meta Robyn (MIT)[^robyn] | 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](../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](../martechops/)' job.

### Automation and AI

**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[^hs-scoring]) and the same back-testing as a manual rule. Drafting copy and variants is content work for
[ContentOps](../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".[^gartner-cmo26]

**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

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

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[^mm-models] | 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[^mm-models] | Credit across three milestones | Milestone timing is noisy; weights are arbitrary |
| Data-driven (GA4) | Machine-learned credit from converting and non-converting paths[^ga-attr] | 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."[^ga-attr]
- **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".[^apple-mpp] 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)";[^ga-utm]
  people who decline analytics cookies may be invisible to web attribution. Tracking design belongs to
  [MarTechOps](../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.

### Experiments, mix models and triangulation

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."[^gordon]
- **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".[^lewis-rao] 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.[^geo]
- **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;[^meridian] Meta's
  Robyn is an open-source MMM package too.[^robyn] Both need long, clean histories of spend and outcomes and statistical skill
  to avoid confident nonsense.

::: figure Triangulating attribution, experiments and mix models
```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 measurement policy in one page

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.

## MarketingOps in practice

### 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.

#### Artefact 1: campaign intake form

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

```yaml
# 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)

| 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](../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.

#### Artefact 3: scoring model specification

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

```yaml
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.

#### Artefact 4: SLA attainment query

_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._

```sql
-- 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:

```text
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
```

#### Artefact 5: a consent record

_Example status: JSON syntax-checked, not executed. Fields follow the ICO's list of what consent records should show._[^ico-consent]

```json
{
  "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

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

```text
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.[^rfc8058] Which providers require it, and for whom, is in the
[compliance table](#privacy-consent-and-compliance). DMARC itself is now specified in RFC 9989 (May 2026),
which obsoletes RFC 7489.[^rfc9989] Setting up authentication is [MarTechOps](../martechops/)' job; checking that every
campaign template carries the headers and link is part of QA.

### Hands-on labs

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`).

::: warning Never practise on real contact data
Exports of real leads contain personal data. Use the synthetic files here, or an approved, minimised test dataset.
:::

#### 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.

```csv
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
```

2. 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)._

```python
"""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"))
```

3. Run `python3 check_links.py links.csv`.

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

```text
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,[^ga-utm] 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

**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)._

```python
"""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")
```

2. 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)._

```python
"""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:**

```text
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

**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`:

```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
```

2. 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".[^mm-models] 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)._

```python
"""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:**

```text
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.

3. 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._

```python
"""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:**

```text
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.[^lewis-rao] **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.

### Use cases and scenarios

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;[^gmail] 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.[^gmail-faq]
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, govern, pay

### Metrics and KPIs

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%)[^gmail] | 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".[^gartner-mo]

**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](#what-attribution-models-do-and-do-not-tell-you)); MQL counts without acceptance; influenced
pipeline as a target; "engagement" without outcomes; and any figure that rises when a definition changes.

**Worked calculation**

::: example Illustrative quarter for a fictional B2B company
Marketing spent €270,000 on programmes. 4,000 new leads became 900 MQLs; 720 were accepted; 650 of the 900 were touched within
the 4-hour SLA. By day 90 the MQL cohort had produced 180 opportunities worth €3.6 million, and the historical win rate for
marketing-sourced opportunities is 25%. Of 42 campaigns, 36 launched on the promised date and 33 needed no post-launch fix.
:::

- 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.

### Privacy, consent and compliance

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](../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;[^eprivacy] consent must be demonstrable and as easy to withdraw as to give (GDPR Art. 7);[^gdpr7] an objection to direct marketing ends it (Art. 21(2)–(3));[^gdpr21] Recital 47 says direct marketing "may" be a legitimate interest[^gdpr-r47] | 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[^planet49] | 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[^ico-pecr] | 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[^canspam] | 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[^casl] | 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[^tcpa] | 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[^gmail][^gmail-faq] | 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%[^yahoo] | 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[^outlook] | 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.

### Cost, capacity and sustainability

The main cost drivers are people, platform licences (HubSpot, for example, bills by marketing contacts[^hs-mktcontacts]),
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.

### Assurance of the operating model

| 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% |

## When things go wrong

### Common failures and troubleshooting

| 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

::: example Illustrative incident (fictional company, realistic pattern)
On a Tuesday at 11:00 the hourly check reports zero MQLs synced to the CRM since 08:00, against a typical eight an hour. A
webinar ended at 10:00 with 400 attendees.
:::

::: figure Runbook for a lead-flow outage
```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.

### Anti-patterns and myths

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;[^gordon] *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.

## Deciding and adopting

### When to use and when not to use

**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.

### Decision framework

::: figure Should you set up dedicated MarketingOps, and in what form?
```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).

### Maturity model

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.

### Adoption roadmap: 30/60/90 days

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.

## Toolkit

### Checklists

**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

### Templates

**Template 1: funnel contract one-pager**

_Example status: plain-text template, not executable._

```text
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._

```text
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._

```yaml
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"
```

### Deep comparisons

| 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](../revops/) | Shared definitions and governance across the revenue funnel | Forecast accuracy, conversion across functions, revenue metrics | Disputes are between functions, not inside marketing |
| [SalesOps](../salesops/) | Sales capacity, territories, stages, forecast call | Win rate, cycle length, pipeline coverage | The constraint is after acceptance |
| [MarTechOps](../martechops/) | Stack architecture and data plumbing | Integration health, data flow, tool utilisation | Systems, sync or tracking are the problem |

### FAQ

**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](#origins-and-evolution) and the
[account-based playbook](#playbook-account-based-and-product-led-qualification)). 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;[^canspam] in the UK, corporate subscribers may be emailed but sole traders
are treated as individuals;[^ico-pecr] EU member states set their own rules for legal persons.[^eprivacy] Ask counsel and
[PrivacyOps](../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](#when-to-use-and-when-not-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.

## Going further

### Advanced topics and emerging direction

- **Calibrated mix models.** Open-source MMMs such as Meridian can take experiment results as priors;[^meridian] 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](#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](../martechops/)' subject.

### Learning path

- **Prerequisites:** none; spreadsheets, then basic SQL and statistics (proportions and confidence intervals).
- **One-day primer:** read [What MarketingOps is](#what-marketingops-is), [Principles and operating
  model](#principles-and-operating-model) and the [workflow](#end-to-end-workflow-one-webinar-from-request-to-pipeline); 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](../revops/), [MarTechOps](../martechops/) and
  [PrivacyOps](../privacyops/).
- **Portfolio ideas:** a back-tested scoring proposal; a designed and sized holdout test; a consent-record audit with fixes.

## Wrap-up

### Executive recap and cheat sheet

| 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?

**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.[^gordon]
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,[^lewis-rao]
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.

### Learning objectives and mastery check

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.

::: answer 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).
:::

::: answer 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.
:::

::: answer 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).
:::

::: answer 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.
:::

::: answer 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.
:::

::: answer 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).
:::

::: answer 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.
:::

### Conclusion

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.

## Sources and further reading

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.

[^gartner-mo]: [Marketing Operations: The CMO's Essential Guide](https://web.archive.org/web/20260304070917/https://www.gartner.com/en/marketing/topics/marketing-operations) — 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.
[^gartner-cmo26]: [Gartner 2026 CMO Spend Survey Finds CMOs Allocate 15.3% of Marketing Budgets to AI, But Only 30% Are Ready to Scale AI Capabilities](https://www.gartner.com/en/newsroom/press-releases/2026-05-11-gartner-2026-cmo-spend-survey-finds-cmos-allocate-15-point-3-percent-of-marketing-budgets-to-ai-but-only-30-percent-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.
[^mo-about]: [About MarketingOps.com](https://marketingops.com/about/) — MarketingOps.com (community's own membership claim; the page also advertises its certification). Checked 2026-10-18.
[^mo-2025]: [State of the Marketing Ops Professional research 2025](https://marketingops.com/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.
[^brinker]: [The state of marketing operations professionals is OK, but it's going to get much, much better](https://chiefmartec.com/2024/11/the-state-of-marketing-operations-professionals-is-ok-but-its-going-to-get-much-much-better/) — Scott Brinker, chiefmartec, 2024-11-10. Checked 2026-10-18.
[^fr-waterfall]: [Forrester Debuts Next-Generation B2B Revenue Waterfall To Help Firms Accelerate Revenue Growth](https://www.forrester.com/press-newsroom/forrester-debuts-next-generation-b2b-revenue-waterfall-to-help-firms-accelerate-revenue-growth/) — Forrester press release, 2021-05-04. Checked 2026-10-18.
[^fr-cunningham]: [Why We Have A New Waterfall For 2021 (And Why You Should Care)](https://www.forrester.com/blogs/why-we-have-a-new-waterfall-for-2021-and-why-you-should-care/) — Kerry Cunningham, Forrester blog, 2021-04-27. Checked 2026-10-18.
[^fr-flaherty]: [The "Goodbye MQL" Transformation Accelerates — Moving From Wild Idea To Reality](https://www.forrester.com/blogs/the-goodbye-mql-transformation-accelerates-moving-from-wild-idea-to-reality/) — Terry Flaherty, Forrester blog, 2023-04-05 (analyst opinion). Checked 2026-10-18.
[^hs-lifecycle]: [Use lifecycle stages](https://knowledge.hubspot.com/records/use-lifecycle-stages) — HubSpot Knowledge Base, updated 2026-07-17. Checked 2026-10-18.
[^hs-scoring]: [Understand the lead scoring tool](https://knowledge.hubspot.com/scoring/understand-the-lead-scoring-tool) — HubSpot Knowledge Base, updated 2026-09-02. Checked 2026-10-18.
[^hs-dedupe]: [Deduplication of records](https://knowledge.hubspot.com/records/deduplication-of-records) — HubSpot Knowledge Base, updated 2026-10-02. Checked 2026-10-18.
[^hs-assoc]: [Automatically create and associate companies with contacts](https://knowledge.hubspot.com/object-settings/automatically-create-and-associate-companies-with-contacts) — HubSpot Knowledge Base, updated 2026-06-26. Checked 2026-10-18.
[^hs-abm]: [Set up account-based marketing in HubSpot](https://knowledge.hubspot.com/branding/get-started-with-account-based-marketing-in-hubspot) — HubSpot Knowledge Base, updated 2026-10-06. Checked 2026-10-18.
[^mkto-acct]: [Account Score](https://experienceleague.adobe.com/en/docs/marketo/using/product-docs/target-account-management/setup/account-score) — Adobe Experience League (Marketo Engage), updated 2026-10-07. Checked 2026-10-18.
[^mkto-tam]: [Target Account Management](https://experienceleague.adobe.com/en/docs/marketo/using/product-docs/target-account-management/setup/target-account-management-overview) — Adobe Experience League (Marketo Engage), updated 2026-10-07. Checked 2026-10-18.
[^bombora]: [Company Surge® Intent data](https://bombora.com/intent/) — Bombora (vendor product page; its own description of its method). Checked 2026-10-18.
[^pql]: [What is a product-qualified lead (PQL)?](https://www.techtarget.com/enterprise-software/definition/product-qualified-lead-PQL) — TechTarget definition (written 2019, revised 2023). Checked 2026-10-18.
[^hs-mktcontacts]: [Set contacts as marketing contacts](https://knowledge.hubspot.com/records/set-contacts-as-marketing) — HubSpot Knowledge Base, updated 2026-09-15. Checked 2026-10-18.
[^mkto-score]: [Change Score](https://experienceleague.adobe.com/en/docs/marketo/using/product-docs/core-marketo-concepts/smart-campaigns/flow-actions/change-score) — Adobe Experience League (Marketo Engage), updated 2026-05-13. Checked 2026-10-18.
[^eloqua]: [Lead scoring](https://docs.oracle.com/en/cloud/saas/marketing/eloqua-user/Help/LeadScoring/LeadScoring.htm) — Oracle Eloqua Help Center, © 2025. Checked 2026-10-18.
[^mm-models]: [Marketo Measure Attribution Models](https://experienceleague.adobe.com/en/docs/marketo-measure/using/introduction-to-marketo-measure/overview-resources/marketo-measure-attribution-models) — Adobe Experience League, updated 2026-10-07. Checked 2026-10-18.
[^ga-attr]: [Get started with attribution](https://support.google.com/analytics/answer/10596866) — Google Analytics Help. Checked 2026-10-18.
[^ga-utm]: [URL builders: Collect campaign data with custom URLs](https://support.google.com/analytics/answer/10917952) — Google Analytics Help. Checked 2026-10-18.
[^gordon]: [A Comparison of Approaches to Advertising Measurement: Evidence from Big Field Experiments at Facebook](https://www.kellogg.northwestern.edu/faculty/gordon_b/files/fb_comparison.pdf) — 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.
[^lewis-rao]: [The Unfavorable Economics of Measuring the Returns to Advertising](https://doi.org/10.1093/qje/qjv023) — 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.
[^geo]: [Measuring Ad Effectiveness Using Geo Experiments](https://research.google/pubs/measuring-ad-effectiveness-using-geo-experiments/) — J. Vaver and J. Koehler, Google, 2011. Checked 2026-10-18.
[^meridian]: [Meridian](https://developers.google.com/meridian) — Google for Developers (repository google/meridian, Apache-2.0). Checked 2026-10-18.
[^robyn]: [Robyn](https://github.com/facebookexperimental/Robyn) — Meta Marketing Science, GitHub (MIT licence; latest release v3.12.0, 2024-12-19). Checked 2026-10-18.
[^apple-mpp]: [Use Mail Privacy Protection on iPhone](https://support.apple.com/guide/iphone/use-mail-privacy-protection-iphf084865c7/ios) — Apple Support. Checked 2026-10-18.
[^gmail]: [Email sender guidelines](https://support.google.com/a/answer/81126) — Google Workspace Admin Help (requirements from 2024-02-01). Checked 2026-10-18.
[^gmail-faq]: [Email sender guidelines FAQ](https://support.google.com/a/answer/14229414) — Google Workspace Admin Help. Checked 2026-10-18.
[^yahoo]: [Sender Best Practices](https://senders.yahooinc.com/best-practices/) — Yahoo Senders Hub. Checked 2026-10-18.
[^outlook]: [Policies, Practices, and Guidelines](https://substrate.office.com/ip-domain-management-snds/Postmaster/Policies) — Microsoft Outlook Postmaster (high-volume sender rules effective 2025-05-05). Checked 2026-10-18.
[^rfc8058]: [RFC 8058: Signaling One-Click Functionality for List Email Headers](https://www.rfc-editor.org/rfc/rfc8058.html) — J. Levine and T. Herkula, IETF, January 2017. Checked 2026-10-18.
[^rfc9989]: [RFC 9989: Domain-Based Message Authentication, Reporting, and Conformance (DMARC)](https://www.rfc-editor.org/rfc/rfc9989.html) — IETF, May 2026 (obsoletes RFC 7489 and RFC 9091). Checked 2026-10-18.
[^canspam]: [CAN-SPAM Act: A Compliance Guide for Business](https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business) — US Federal Trade Commission, August 2023, edited January 2024. Checked 2026-10-18.
[^gdpr7]: [Art. 7 GDPR: Conditions for consent](https://gdpr-info.eu/art-7-gdpr/) — gdpr-info.eu (unofficial text of Regulation (EU) 2016/679). Checked 2026-10-18.
[^gdpr14]: [Art. 14 GDPR: Information to be provided where personal data have not been obtained from the data subject](https://gdpr-info.eu/art-14-gdpr/) — gdpr-info.eu (unofficial text; paragraphs 2(f) and 3). Checked 2026-10-18.
[^gdpr21]: [Art. 21 GDPR: Right to object](https://gdpr-info.eu/art-21-gdpr/) — gdpr-info.eu (unofficial text). Checked 2026-10-18.
[^gdpr-r47]: [Recital 47 GDPR: Overriding legitimate interest](https://gdpr-info.eu/recitals/no-47/) — gdpr-info.eu (unofficial text). Checked 2026-10-18.
[^eprivacy]: [Directive 2002/58/EC (consolidated text of 2009-12-19), Article 13](https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:02002L0058-20091219) — EUR-Lex. Checked 2026-10-18.
[^edpb]: [Guidelines 05/2020 on consent under Regulation 2016/679, version 1.1](https://www.edpb.europa.eu/system/files/documents/files/file1/edpb_guidelines_202005_consent_en.pdf) — European Data Protection Board, adopted 2020-05-04 (paragraphs 42–43 and 79). Checked 2026-10-18.
[^planet49]: [Storing cookies requires internet users' active consent (Case C-673/17, Planet49)](https://curia.europa.eu/jcms/upload/docs/application/pdf/2019-10/cp190125en.pdf) — Court of Justice of the EU, Press Release No 125/19, 2019-10-01. Checked 2026-10-18.
[^ico-consent]: [How should we obtain, record and manage consent?](https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/lawful-basis/consent/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.
[^ico-pecr]: [Electronic mail marketing (Guide to PECR)](https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/guide-to-pecr/electronic-and-telephone-marketing/electronic-mail-marketing/) — UK ICO (marked under review). Checked 2026-10-18.
[^tcpa]: [47 CFR 64.1200 Delivery restrictions](https://www.ecfr.gov/current/title-47/chapter-I/subchapter-B/part-64/subpart-L/section-64.1200) — Electronic Code of Federal Regulations (paragraphs (a)(2), (a)(10) and (f)(9); text current to 2026-10-15). Checked 2026-10-18.
[^casl]: [Canada's Anti-Spam Legislation, S.C. 2010, c. 23 (sections 6, 10 and 11)](https://laws-lois.justice.gc.ca/eng/acts/E-1.6/) — Justice Laws Website, Government of Canada, current to 2026-09-30. Checked 2026-10-18.
[^hbr]: [The Short Life of Online Sales Leads](https://hbr.org/2011/03/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.
[^sf-ae]: [B2B marketing automation](https://www.salesforce.com/marketing/b2b-automation/) — Salesforce product page (product naming inconsistent on the page as of October 2026). Checked 2026-10-18.
[^braze]: [Braze Docs: introduction](https://www.braze.com/docs/user_guide/introduction/) — Braze. Checked 2026-10-18.
[^mautic]: [mautic/mautic](https://github.com/mautic/mautic) — Mautic, GitHub (GPL-3.0-or-later; release 7.2.1, 2026-09-23). Checked 2026-10-18.
[^marketo-wiki]: [Marketo](https://en.wikipedia.org/wiki/Marketo) — Wikipedia (tertiary; used for the founding year only). Checked 2026-10-18.
[^hubspot-wiki]: [HubSpot](https://en.wikipedia.org/wiki/HubSpot) — Wikipedia (tertiary; used for the founding date only). Checked 2026-10-18.

**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`).
