On this page
A playbook is a named, versioned rule that watches one thing about an organization's advertising and says something when a number crosses a line it declared in advance. The marketing catalogue ships 16 playbooks as part of the product; an organization can edit them and add its own.
Playbooks are not chosen by a person browsing a list, and not chosen by a language model. Every playbook declares numeric conditions over named signals, and the ones whose conditions hold are the ones that fire. That is the whole selection mechanism.
The grammar every playbook is written in#
A playbook has six parts, and each one exists to close a specific way a rule engine can mislead.
| Part | What it holds | Why |
|---|---|---|
| when | The condition tree: leaves comparing a signal to a threshold, joined by AND or OR | The threshold can be a literal, a quantile of the entity's own history, or a delta against a baseline (trailing mean, same period last year, year-to-date mean) - so a rule travels between clients without being retuned |
| eligibility | The evidence floor: which grain (brand, campaign class, campaign), which objectives, minimum spend, minimum days | Below the floor the answer is not enough data, never fine |
| action | What kind of action this is, and its parameters | Integer parameters only, so a rule cannot smuggle in an invented multiplier |
| measure | The conversion metric, the horizon in days, and what counts as success | Declared before the outcome exists, so success cannot be redefined afterwards |
| guardrails | Blocking checks with literal thresholds only | A guardrail that depended on history would quietly abstain at the exact moment it needed to block |
| display | The human wording, with every bullet bound to a specific condition leaf | A build audit fails on a bullet that claims something no leaf checks |
All money is integer VND; all ratios are basis points. Evaluation is three-valued: a missing signal or an unresolvable baseline yields unknown, and unknown never matches.
The catalogue#
The product groups rules by pillar. The four groups below are a reading aid - they describe what each rule watches, from the top of the funnel down.
Every rule in the catalogue measures itself in leads, and every one of them raises an audit alert. None of them changes a budget or touches an ad platform.
Delivery and creative
| Playbook | Fires when | Evidence floor |
|---|---|---|
| Delivery cost spike | Cost per thousand impressions is more than 40% above the account's year-to-date mean | 500,000 VND spent |
| Delivery cost in its worst quartile | Cost per thousand impressions is above the entity's own 75th percentile over 90 days | 500,000 VND spent |
| Click-through collapse | Click-through rate is more than 30% below its own 28-day mean | 500,000 VND spent |
| Ad fatigue | Frequency at or above 3.0 and click-through more than 20% below its 28-day mean | 500,000 VND spent |
| Impression saturation ceiling | Frequency at or above 4.5, on lead, traffic or content campaigns | 1,000,000 VND spent |
The two delivery-cost rules are alternatives, not companions: the year-to-date comparison suits a stable account, the quartile comparison suits a volatile one. Run one per organization.
Landing page
| Playbook | Fires when | Evidence floor |
|---|---|---|
| Landing page click loss | More than 30% of link clicks never became a page view | 1,000,000 VND spent |
| Critical landing page loss | 60% or more of link clicks never arrived | 1,000,000 VND spent |
Lead cost and results
| Playbook | Fires when | Evidence floor |
|---|---|---|
| Cost per lead outside the target band | Lead cost is outside the declared band, in either direction | 90,000 VND spent, on lead-objective campaigns |
| Solution-tier cost per lead outside band | Lead cost is above the higher declared band | 750,000 VND spent, on lead-objective campaigns |
| Lead cost drifting off baseline | Lead cost is more than 30% above its own 28-day mean | 1,000,000 VND spent |
| Result rate collapse | Result rate is more than 30% below its own 28-day mean | 1,000,000 VND spent |
| Spend with zero results | Material spend and results at or below zero | 1,000,000 VND spent, at least 2 days in the window |
| Efficient scale opportunity | Lead cost below the efficient ceiling, result rate at or above its own 90-day median, and material spend | 3,000,000 VND spent |
The last one is the only rule in the catalogue that reports good news. A catalogue that only ever reports problems is half a system: it tells an operator where to stop spending and never where to spend more.
Budget pacing
| Playbook | Fires when | Evidence floor |
|---|---|---|
| Spending ahead of plan | More than 20% over the pro-rated plan | 7 days in the window, at brand grain |
| Spending behind plan | More than 20% under the pro-rated plan | 7 days in the window, at brand grain |
| End-of-flight shortfall | More than 30% behind plan | 14 days in the window, at brand grain |
Autonomy: what the system may do on its own#
Autonomy is a separate ladder from evidence. A system can be very well evidenced and still be permitted to do almost nothing.
| Level | Capability | Status |
|---|---|---|
| A0 | Explain: read governed facts and explain a receipt | Present |
| A1 | Propose: assemble evidence and propose a typed draft | Partial, and the current target |
| A2 | Prepare: produce a bounded plan and an approval request | Not built |
| A3 | Execute an approved action through a durable worker | Closed |
| A4 | Bounded automatic execution inside policy limits | Closed |
The whole marketing catalogue is fixed at A1 by construction, not by promise. Every rule's action is an audit alert with no lever and no scan domain attached. There is nothing in the rule shape that can move money or send anything outside the platform, so the ceiling cannot be raised by editing a threshold; it would take an approvable action type, which is a separate decision. A few rules note that they would eventually justify A2 - the critical landing-page loss, the zero-result spend, and the end-of-flight shortfall - and that remains a note, not a capability.
This matches what the market actually does rather than what it advertises. Every rule engine that ships autonomy ships it graduated: Optmyzr's rule engine has exactly three modes - suggestion, notification, auto-apply. Google Ads automated rules default to a notification and offer an explicit preview run that changes nothing. PagerDuty grants full autonomy only to scenarios it calls well understood, and pages a human for the rest.
How a playbook is invoked#
There is one evaluation path, and four surfaces call it: the audit card on the marketing performance page, the chat assistant's audit tool, the 07:00 Morning Brief, and the rule editor's dry run. Adding a fifth caller that re-derives a finding a different way is what the single-source audits exist to prevent.
The scheduled run is 06:30 on Monday, Vietnam time, over the week that just closed - Monday to Sunday. A whole closed week rather than a rolling window, because a rule that fires on three days of spend and unfires on Friday fills an inbox with findings that retract themselves.
That job automates A1 and nothing above it. It writes proposals with no approver attached. Approving, rejecting or activating anything still runs through the owner-and-org-admin gate, with an audit-log entry, exactly as it does when a person presses the button.
A flagged finding only becomes a proposal when every one of these holds:
- The organization declared a conversion metric. Without one, no proposals are produced at all, and the reason is stated - never a proposal that could never be measured.
- The finding is action-bearing and actually flagged, and its guardrails passed. Anything blocked is counted with a typed reason, never silently dropped.
- The conversion feed returned something for the window. When it did not, the decision is recorded as learning, with an abstention reason on the record - so an empty inbox has a stated cause.
How it is measured#
Every playbook in the catalogue measures itself in leads.
That is a correction, and it is the difference between a loop that learns and one that never confirms anything. The catalogue previously measured itself in orders, on a horizon of 14 days. For a lead-generation organization, a lead campaign does not produce marketplace orders, so every outcome resolved to no signal, forever. The measurement axis has to be the axis the organization actually operates on.
A lead is resolved through one resolver, reading the CRM's marketing-qualified-lead definition. When no CRM feed is connected, the resolver returns nothing rather than zero. An absent feed is not a result of zero leads, and treating it as one would score every decision as a failure.
Horizons are set per rule, by what kind of thing is being watched:
| Horizon | Used for | Reasoning |
|---|---|---|
| 7 days | Incident-shaped findings - critical landing-page loss, spend with zero results | Money bought nothing; waiting two weeks to confirm that is not a measurement, it is a delay |
| 14 days | Operational rhythm - most of the catalogue | Long enough for a change to show, short enough to still be about this campaign |
| 28 days | Price and quality drift - lead cost baseline drift, efficient scale | A price change needs a month before the number means anything |
One deliberate inconsistency, documented on both sides so it reads as a decision rather than drift: the Morning Brief baselines on 7 periods, and the playbook catalogue on 28 days. The brief is the same-day operational catch; the catalogue is the weekly judgement, where day-of-week effects would otherwise dominate.
Counter-indications#
Suppression rules are part of the rule set, not tribal knowledge someone has to remember.
- Zero results suppresses result-rate collapse on the same entity. A fall to exactly zero is an outage, not a decay, and they need different responses.
- The two delivery-cost rules are mutually exclusive. Pick one.
- The cost-band rules outrank baseline drift. The band answers whether this price is acceptable; the drift answers whether it is getting worse. If the price is unacceptable, that is the finding.
- Efficient scale is suppressed by either fatigue rule. Extra budget on a saturated audience just re-buys the same people.
- Delivery-cost rules suppress the click-rate rule on the same entity. A cost spike mechanically depresses click-through when reach broadens, so the upstream cause is the finding, not the symptom.
- Efficient scale is also blocked by its own pacing guardrail. An organization with no measurable plan has no pacing variance, so the guardrail is unknown, so it is not cleared, so the finding is never promoted. No plan, no claim that budget exists.
Two rules gate on campaign objective - the frequency ceiling and the zero-result rule - because high frequency and zero leads are how awareness and brand campaigns are supposed to look. The accepted cost is that a campaign whose objective is not recorded is skipped rather than judged.
And one honesty rule about a null: a result rate is null when the platform's results column was never mapped, and zero when the platform reported and there was nothing. Only the second is a finding. Cannot measure is not nothing happened - which is also why the zero-result rule's remediation text begins with checking the measurement, never with pausing the campaign.
Adopting and tuning#
Reading the catalogue and its track record: the playbooks page under Marketing Systems, which shows each play alongside how it has actually performed.
Adopting the defaults: an org admin seeds the default library from the playbook admin page. Seeding branches on the planes the organization runs, so a marketing organization receives the marketing catalogue and not a commerce one.
Editing: the playbook rule editor, reachable by an owner or org admin, is where thresholds, evidence floors, baselines, quantile ranks, horizons and success rules are changed - with a dry run against the last 30 days of the organization's own data before saving. A reason for the number is a required field: every threshold carries a recorded rationale.
Versioning: an edit writes a new version rather than overwriting the old one, and the execution path reads the highest version. Re-seeding the defaults therefore never overwrites a tenant's edits, and the previous version stays readable for anything that was decided under it.
The on/off switch is real. Turning a playbook off removes it from evaluation, not just from the list.
What leading tools do, and what this product took from them#
| What the market does | Source | What this product adopted |
|---|---|---|
| Ad-platform rule engines are a hard threshold on a metric over a fixed lookback, with an action attached, and no explanation of why | Google Ads automated rules | The same shape, extended: thresholds can be a quantile of the entity's own history or a delta from a baseline, and every match emits a per-condition receipt |
| Autonomy ships graduated - suggestion, notification, auto-apply as distinct modes | Optmyzr | The A0-A4 ladder, with the catalogue pinned at A1 by the shape of the rule rather than by configuration |
| Full autonomy is granted only to well-understood scenarios; everything else pages a human | PagerDuty | A3 and A4 stay closed; a scheduled run produces proposals, and a person makes every state transition |
| Guardrails are bounds the system optimizes inside, not switches | Google Performance Max | Guardrails are literal-threshold blocking checks evaluated before a proposal is shown |
| An anomaly alert should require direction, significance and duration together | Anodot | Direction and duration are in the grammar (ratio bands, minimum days in window); a significance test is not, and is not claimed |
| Silencing an alert must suppress the notification, never the evaluation | Datadog downtimes | Mute and snooze are per person and suppress delivery only; the rule still evaluates and is still recorded |
| A rule library needs a hard ceiling on how many rules can exist, or it sprawls | GA4 custom insights, capped at 50 per property | Not adopted. There is no per-organization rule cap today; the catalogue is small by authorship, not by a limit |
| The strongest loops rank which dimension explains a move, not just that it moved | Power BI anomaly detection, ThoughtSpot SpotIQ | Not adopted yet. A finding names the entity, not the dimension that explains it. This is the largest open gap in the marketing plane |
| Only incrementality vendors validate against a counterfactual rather than a before-and-after delta | Measured, Haus | Not adopted. Outcome measurement here is a before-and-after readout against first-party data, and is labelled as confounded wherever it is shown |
What is not in the catalogue yet#
Eight further playbooks are designed but not shipped, because the signals they need are not written into the signal store: site engagement, search visibility, email bounce rate, email engagement, email spam complaints (which additionally needs a connector that does not exist), and brand mention and sentiment rules that belong to the social pack rather than the marketing one.
A rule referencing a signal that is not persisted does not error. It evaluates to unknown and never fires - honest, but silent, which is why those rules are held back rather than shipped as apparent coverage.
Statistical anomaly detection and a top-contributing-dimension explanation are both deliberately out of scope for this catalogue.
Sources#
docs/adr/0036-marketing-industrial-playbooks.md- the catalogue's design, suppression pairs and horizonspackages/metrics/src/marketing-playbook-rules.ts- the 16 rules and their named thresholdspackages/metrics/src/playbook-rules.ts- the rule grammar and three-valued evaluationpackages/metrics/src/marketing-audit.ts,marketing-audit-scan.ts- the single evaluation path and the evidence floorspackages/metrics/src/playbook-corpus.ts,playbook-corpus-db.ts- the shipped catalogue merged with an org's own rulesapps/worker/src/processors/mso-audit-weekly.ts,apps/worker/src/schedules.ts- the Monday scanpackages/metrics/src/conversion.ts,offtake-loop.ts- measuring in leads and the honest nullapps/web/src/app/admin/orgs/[slug]/mso-playbooks/- the rule editor and the dry rundocs/architecture/maturity.md- the A0-A4 autonomy ladder