---
name: outbound_personalization
description: "Personalizing outbound at scale honestly: assign each lead a personalization tier, research one real verified fact per lead at the higher tiers, leave the field empty when no honest fact exists, and run QA that catches fake, stale, creepy, and broken lines before they send. Use when writing or reviewing personalized cold email or LinkedIn openers, building personalization for a campaign, checking AI drafted openers, or deciding how much research a segment earns. For drafting the email itself use cold-email-drafting, for campaign operations use outbound-campaign-ops, for signal timing use buying-signal-prospecting."
metadata: { "version": "1.0.0" }
---

# Outbound Personalization

## Purpose

Make personalization mean something again. A personalized line earns its place only when it rests on a real, dated, public professional fact that connects to the recipient's problem. Everything else, the swapped company name, the empty compliment, the fact a model invented, is fake personalization, and recipients can tell.

Two findings frame the work. Hunter's outreach guide reports its State of Email Outreach data at a 3.6 percent reply rate with no personalization and 5.6 percent with two custom attributes, and it sorts personalization into custom attributes, AI assisted lines, and research based lines. The lift is real and modest, which is why honesty matters more than volume of decoration. McKinsey's 2021 consumer research found most consumers expect personalized interactions and get frustrated when they do not happen. That is consumer marketing evidence, not a cold email promise, and this skill treats it only as a sign that relevance is now the default expectation.

This skill owns the personalization layer only: tiering, research, the line, and its QA. It does not draft the whole email, run the campaign, or pick who to contact.

## Workflow

1. Tier every lead before writing anything. Follow references/research-and-tiers.md.
   - Tier 0: leave the field empty. No verified fact, a stale fact, a personal fact, or no bridge to the problem.
   - Tier 1: segment. One line true for the whole segment, with the segment source on file.
   - Tier 2: account. One verified company fact with a source and a date, plus the bridge to the problem.
   - Tier 3: person. Public professional work by this person, human written or human reviewed, line by line.
   - Tier by evidence and value, not by hope. A lead with no find after a real check is tier 0, however good the account looks.

2. Research one fact per lead at tier 2 and 3, using the checklist in references/research-and-tiers.md.
   - Confirm identity first: right person, right role, right company, today.
   - Open the source. Grades: A is a primary public source, B is reputable dated reporting that names its source, C is an aggregator or inference and never sends as a fact.
   - Write the fact note in plain words with its date and grade. Then write the bridge clause. No bridge, no line.
   - Run the creepy check: professional context only, said comfortably in the first 30 seconds of a cold call. Personal detail fails even when it is public and true.

3. Write the line from the fact note, and nothing else.
   - Shape: fact in one sentence, bridge in the next. Two sentences is the usual ceiling.
   - No compliment with no object. If praise appears, it names the specific work and what was good about it.
   - A model may draft from the fact note, the source URL, and the tier. It may not add nouns, numbers, names, or dates that are not in the note. Thin notes produce smooth generic drafts, so expect to downgrade those leads.
   - Spelling of the person's name and company comes from the source, never from the enrichment field alone.

4. Leave the field empty when the honest answer is empty.
   - Leaving it empty means the email, if it sends at all, sends on segment relevance and a plain offer, with no fake opener.
   - Record the tier 0 reason (no-source, stale, personal, uncertain, no-bridge) so the next researcher does not redo the same dead end or, worse, fill the gap from the weak note that caused it.
   - Deleting a bad fact from the research file matters as much as deleting it from the draft. Bad facts get reused.

5. Run QA before any send. Follow references/qa-and-examples.md.
   - Run `python3 scripts/personalization_qa.py check --file leads.csv`. Any BLOCK stops the batch: raw merge tokens, missing sources at tier 2 and 3, stale triggers over 90 days, creepy detail, a tier 3 line that is not a person fact, the same line used for 5 or more high tier leads.
   - Read a sample out loud against its sources with `python3 scripts/personalization_qa.py sample --file leads.csv`: every tier 3 line, plus a random tenth of tier 2.
   - Render the real email from real records, including the messiest ones, and read what actually arrives.
   - Re-run suppression and consent checks after personalization. In the US, CAN-SPAM duties cover headers, subject lines, ad identification, a valid postal address, and honoring opt-outs within 10 business days. In the UK, the ICO treats legitimate interests as likely appropriate for email to business contacts, and an objection to direct marketing overrides it. When the basis for a segment is unclear, that segment does not send.

6. Measure by tier, honestly.
   - Report reply and positive reply rates per tier, with send counts. A tier that cannot beat tier 1 on positive replies after a fair sample does not earn its research hours.
   - Count the downgrade rate. A healthy batch has real tier 0s. A batch where every lead somehow got a tier 3 line is a batch where research was faked.
   - Feed failures back by pattern name from references/qa-and-examples.md (template in disguise, compliment with no object, hallucinated fact, stale trigger, creepy fact, broken render, bridge missing) so the same defect stops recurring.

## Output Contract

Every batch produces:
- A lead sheet (CSV) with columns email, first_name, company, tier, personalization_line, source_url, source_date, fact_type, ready for the QA script.
- A research file per campaign: segment sources with years, fact notes with grades and dates for tier 2 and 3 leads, and tier 0 reasons for the rest.
- A QA record: the script output with BLOCK and WARN counts, the sample that was read against sources, the render check result, and the name of the person who signed off.
- A tier report after sending: sends, replies, and positive replies per tier, plus the downgrade rate for the batch.

## Operating Rules

1. No source, no line. A fact you cannot point to in a source you opened does not go in an email, however plausible it sounds.
2. Empty beats fake. Leaving the field empty is a correct outcome. Inventing, stretching, or recycling a line to fill it is the one unforgivable defect in this skill.
3. Professional context only. Family, health, home, personal social posts, and beliefs are out at every tier, even when public and accurate.
4. One fact, well bridged, beats three facts listed. Relevance is the personalization, not the fact count.
5. Dates are part of the fact. An undated trigger is not a trigger, and a stale one gets re-verified or dropped.
6. AI drafts, humans verify. Every AI drafted line is checked against its fact note for names, numbers, and dates before it can send.
7. Tier 3 stays small. If everything is tier 3, nothing is. Research hours follow account value and evidence, not enthusiasm.
8. Consent and suppression outrank craft. A beautifully personalized email to someone who opted out, or on a basis the jurisdiction does not support, is a failure, not a near miss. Gmail bulk rules add their own floor: keep the spam rate below 0.3 percent, with 0.1 percent as the warning line.
9. Never copy source text into the line. Write the fact in your own plain words. Quoting their post back at them word for word reads as surveillance, not attention.
10. Name failures by pattern and fix the system. A hallucinated fact means the grade rules or the review step failed, not just that one line was unlucky.
