auto-research-public
Autonomous cold email campaign launcher. Takes one target company domain, scrapes their…
Turns the raw company-name string on a lead row into the short human form a person would say out loud, so it can be dropped into email copy. Triggers on "clean these company names", "company name variable", "strip the LLC and Inc", "the company names look robotic", "normalize
$ npx -y skills add growthenginenowoslawski/coldoutboundskills --skill playbook-company-name-cleaning --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/playbook-company-name-cleaningContext preview
The summary Claude sees to decide when to auto-load this skill.
Turns the raw company-name string on a lead row into the short human form a person would say out loud, so it can be dropped into email copy. Triggers on "clean these company names", "company name variable", "strip the LLC and Inc", "the company names look robotic", "normalize
name: playbook-company-name-cleaning description: Turns the raw company-name string on a lead row into the short human form a person would say out loud, so it can be dropped into email copy. Triggers on "clean these company names", "company name variable", "strip the LLC and Inc", "the company names look robotic", "normalize company names for the campaign". Outputs company_clean, one short string per row.
> All rules here are best practice, not law. Override any of them when the campaign calls for it; note the best practice once and move on.
Clay ships a free, deterministic `Normalize Company Name` action (`titleCase: true`). **That is the default and it stays the default.** Do not replace it reflexively, and do not make AI the default.
Everything below — the locked prompt, the benchmark, the placeholder guard, the AI column — is the **toggle**: what you switch on for one client, when the copy leans hard on the company name **and** the raw strings are messy in ways a normalizer structurally cannot fix. Those are taglines after a pipe, dba entities, parenthetical descriptors, appended city names, second-language duplicates, and junk strings that need an abstain.
**Turn the toggle ON when all three are true:**
1. The copy names the company somewhere a reader will notice (a subject line, the first sentence, a possessive). 2. A 20-row read of the normalizer's output on the client's own list finds **more than about 2** values you would edit before sending. 3. Those failures are the model-shaped kind above, **not** simple suffix or casing problems. If they are suffix and casing problems, the free normalizer already handles them and the AI column buys you nothing.
**Otherwise leave it off.** Record which of the two this client is running, so QA reads the right column and nobody re-litigates it mid-campaign.
This deliberately mirrors the opposite decision on first names. First-name cleaning is a **standing** column, because a mangled first name breaks the greeting on every campaign that opens with one. A mangled company name only breaks the campaigns that name the company. See `playbook-first-name-cleaning`.
**Use when:** any campaign whose copy mentions the prospect's company by name, which is nearly all of them. **Do not use when:** you need a company *fact* — funding, hiring, tech, pricing. Those are separate playbooks. Also not for deciding whether the company is real or in-ICP. **One-line output:** `company_clean = "Hamiltons Bud and Bloom"` from the raw CRM string `"318, Inc dba Hamiltons Bud and Bloom"`.
Lead databases store company names the way a registrar or a scraper found them, not the way a human says them. Real strings from a live contacts table:
Pasted straight into an email, every one of those reads like a mail merge, and the prospect stops reading.
This playbook takes that string (plus the domain when you have it) and returns the short spoken form. It strips legal suffixes, trademark marks, taglines, service lists, parenthetical descriptors, appended city names and second-language duplicates. It fixes shouting and all-lowercase names. It keeps deliberate brand casing.
It explicitly does **not**: look the company up on the web, correct a name that is simply wrong in the CRM, translate anything, expand an acronym, or invent a word not already in the input. If the string is not a company name at all (`N/A`, `Self-employed`, `Retired`, `TBD`) it abstains so the row can be pulled out of the send.
| Field | Type | Required? | |---|---|---| | `company_name_raw` | string | yes | | `domain` (bare, lowercase, no `www`) | string | no, but it lifts accuracy on ambiguous strings and costs nothing |
| Field | Type | Example | Max | Null? | |---|---|---|---|---| | `company_clean` | string | `Ajax Turner` | 40 target, 60 hard | no, `""` instead | | `changed` | boolean | `true` | n/a | no | | `confidence` | enum | `high` / `low` | n/a | no |
**Abstain value:** `""`. Never `N/A`, never the text `null`, never a guess.
**98/100** rows usable on the graded test. A separate 10-row abstain probe of real junk values scored **10/10 on the nano-class model but only 7/10 on `gpt-4o-mini`**, the model a Clay AI column would use — which is why the deterministic placeholder guard in §6 is **mandatory, not a nicety**.
Treat `company_clean` as a **mandatory** variable that copy can rely on. Expect roughly 1 to 3 percent of a real list to be junk strings that correctly abstain.
possessives (`{{company_clean}}'s pricing page`).
**Exclude and review. A generic substitute is never the fallback.**
If `company_clean` is empty, or the cleaner abstained on a junk string (`Self-employed`, `N/A`, `Private Practice`, `Confidential Jobs`): **exclude the row from any campaign whose copy references the company**, and route it to a review list. An empty value means you do not know where this person works, which usually also means the row's title and domain are suspect.
**Do not substitute "your team", "your company", or anything generic, and do not spintax around it.** The surrounding sentence was written to name a company, and a generic substitute just sends a worse email to a worse address
Open-source Claude Code skills for cold email infrastructure, lead sourcing, copywriting, and operations. Built by GrowthEngineX from patterns across 1,000+ real B2B campaigns. 31 skills that work together.
Repo: growthenginenowoslawski/coldoutboundskills
Autonomous cold email campaign launcher. Takes one target company domain, scrapes their…
Use the Blitz API to find decision-makers at specific companies when you already have a list…
Creates cold email copy through a stepwise confirmation process. Use when writing email…
Generates 15-25+ cold outbound campaign ideas with targeting strategies, AI personalization…
Single "start here" orchestrator for new cold email operators. Asks infrastructure-status…
Complete beginner-friendly cold email toolkit. Walks from zero to launched campaign — domain…