playbook-first-name-cleaning

Cleans raw lead first-name fields into greeting-ready names using a locked LLM prompt and six deterministic guards.

678|243|Updated Mar 10, 2026
One-click install
npx skills add https://github.com/growthenginenowoslawski/coldoutboundskills --skill playbook-first-name-cleaning
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: playbook-first-name-cleaning
Source: https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/playbooks/playbook-first-name-cleaning
Command: npx skills add https://github.com/growthenginenowoslawski/coldoutboundskills --skill playbook-first-name-cleaning

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Lead databases store first names exactly as scrapers found them — honorifics, emoji, ALL-CAPS shouting, appended job titles, possessive artifacts, and company names sitting in the person column. Pasting those strings into Hi {{first_name}}, produces visibly broken mail-merge greetings that sink cold email campaigns.

Core Features & Use Cases

  • Locked LLM prompt with 30 few-shot examples: Strips honorifics, credential suffixes, emoji, and hiring notices; fixes casing; picks parenthetical nicknames; preserves hyphenated, apostrophe, and non-Latin names exactly as written.
  • Six deterministic guards (G1-G6): Catch placeholders, company-name overlap, vowel-less ALL-CAPS acronyms, run-together shouts, non-Latin scripts, and invented letters — routing rows to review with zero silent failures.
  • Strict output contract: Returns first_name_clean, changed, confidence, and needs_review; abstains with an empty string (never N/A or a generic greeting) and excludes unusable rows downstream.
  • Use Case: Before launching a campaign, run a 10,000-row lead list through the playbook so Dr Ruba becomes Ruba, Kathryn (Katie) becomes Katie, and AAA Upholstery is excluded — at roughly $0.21 per 1,000 rows on gpt-4o-mini.

Quick Start

Ask the AI to clean the first-name column of your lead CSV using this playbook so every row produces a greeting-ready first_name_clean value or is flagged for review.

Frequently Asked Questions about playbook-first-name-cleaning

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I clean first names in a lead list for cold email?

Run each row's raw first name, last name, and company through the locked gpt-4o-mini prompt, which returns a greeting-ready first_name_clean value in JSON. Then apply the six deterministic guards to abstain on placeholders and flag ambiguous rows for review before sending.

What model and settings work best for name cleaning?

The playbook was benchmarked on gpt-4o-mini with JSON response format and max_completion_tokens of 200, scoring 96/100 on an adversarial 100-row benchmark at about $0.21 per 1,000 rows. A nano-class reasoning model needs a 2000-token cap or it returns empty content on every row.

Can I shorten the prompt to save tokens?

No. A measured head-to-head showed a 435-token short prompt saved only $0.0145 per 1,000 rows but produced 3 broken greetings in 30 rows that none of the guards caught. Cutting the example block also drops the prompt under the 1,024-token cache floor, raising cost.

Why do non-Latin names like Chinese or Arabic come back blank?

That happens when the guard's normalize function, which strips everything outside [0-9a-z], is used as an emptiness test — it reduces non-Latin names to empty strings. The fix is a Unicode-aware has_letters check alongside normalize, which affected 4 of 100 benchmark rows.

What happens to rows where the first name cannot be cleaned?

Unusable rows return an empty first_name_clean string and are excluded from the campaign and routed to review. The playbook never falls back to generic greetings like 'there' or 'friend', and never outputs 'N/A', which would render into a live email.

Does this playbook work inside Clay tables?

Yes, clay-table.md and clay-workflow.md specify a Clay AI column plus a JavaScript formula version of the six guards. However, only the script path is verified at 96/100; the Clay column and JavaScript guards are marked as unexecuted specifications requiring a smoke test.