# Playbook: Lead Scoring & Routing

**School:** Marketo dual-axis lead-scoring model + SiriusDecisions Demand Waterfall, with weight-fitting borrowed from Mark Roberge (HubSpot, *The Sales Acceleration Formula*, 2015). The MQL/SAL/SQO vocabulary is SiriusDecisions'; the explicit/implicit split is Marketo's productized contribution to the category (mid-2000s).

**Deliverable type:** `lead-scoring-model` (see MANUAL §8.2 rubric — this is the exact spec that gate enforces).

---

## When to use this

- You have both firmographic/demographic data (fit) AND behavioral data (engagement) on contacts.
- You need one number (or two numbers) that a routing rule can threshold on, rather than a human reading every lead.
- You have — or can approximate — a closed-won history to eventually fit weights against (Roberge's v2).

## When NOT to use this

- No behavioral data exists yet and no closed-won history exists either → start with RFM (see `rfm-winback-engine`) instead; it needs no training data.
- The lead volume is low enough that every lead gets human eyes anyway (score becomes theater — build it later once volume justifies automation).
- You cannot commit to a decay rule or negative signals. A model that only ever adds points is explicitly banned by the verify gate (MANUAL §8.1) — don't half-build this.

---

## Step-by-step build

1. **Build the explicit/fit table.** List firmographic or demographic attributes that correlate with "worth talking to" (title, company size, budget signal, geography, list source). Assign point values. Keep the table short — 5–8 rows, not 40.
2. **Build the implicit/behavior table.** List trackable engagement events (email open, email click, page visit, pricing-page visit, webinar attendance, download). Assign point values weighted toward high-intent actions (pricing page > blog visit).
3. **Write the DECAY rule.** State a concrete half-life or decrement schedule — e.g., "implicit score decays 10% every 7 days with no new event; explicit score does not decay." A model with no decay rule fails the gate outright.
4. **Write at least 2 negative-scoring entries.** E.g., "unsubscribed: -50," "bounced email: -20," "competitor domain: -100." A model with fewer than 2 negatives fails the gate.
5. **Set the MQL threshold and pair it with the exact routing action it fires.** Not "MQL = 50 points" alone — state what happens: "score ≥ 50 AND fit ≥ 20 → `lifecycle_stage` set to MQL → routing rule assigns to outreach-operator queue with a 1-hour SLA task."
6. **State the review cadence.** Quarterly re-review of point values and threshold, minimum. Put a date or trigger for the next review.
7. **Write the Goodhart note.** Name one concrete way the score could be gamed (e.g., "reps repeatedly opening their own test emails to inflate a contact's behavior score") and its counter-metric (MQL→SQO conversion rate — if it drops while MQL volume rises, the score is being gamed or the definition loosened).
8. **Wire the write side.** Every scoring event must write the running score back onto the customer-master record (§3.1) so scoring and routing both read the same row.

## Worked mini-example

Fit table: Title = Decision-maker (+20) / Influencer (+10); Company size >50 (+15); List source = referral (+15) vs. cold list (+0).
Behavior table: Pricing-page visit (+15, decays 15%/week); Email open (+3, decays 25%/week); Webinar attended (+25, no decay for 30 days then standard decay); 2+ site visits in 24h (+10).
Negatives: Unsubscribed (-50); Invalid/bounced email (-30).
Threshold: fit ≥ 25 AND behavior ≥ 30 → `lifecycle_stage = MQL` → routed to outreach-operator, 1-hour SLA task created.
Review cadence: first Monday of each quarter.
Goodhart note: "Marketing team could loosen webinar-attendance points to hit an MQL quota." Counter-metric: MQL→SQO conversion tracked monthly; if it drops >15% while MQL volume rises, the webinar weight gets audited.

## How the verify gate applies

The `lead-scoring-model` linter (MANUAL §8.2) fails this doc if: the decay rule is missing, negative entries number fewer than 2, the threshold is stated without the routing action it fires, or the Goodhart note is absent. Every point value must be a stated number, not prose ("high engagement = a lot of points" fails — it's not machine-evaluable).
