Open-source operating playbooks for cold outbound, by Frontal.
Most outbound advice covers the exciting half: finding accounts, writing copy, launching. This kit covers the half that decides whether any of it compounds: measurement, quality gates, incident response, and cadence. The unglamorous ops layer that separates teams that learn from teams that churn domains.
Each playbook works standalone as a reference. The kit also ships Claude Code skills and hooks, so opening Claude Code in this folder turns the playbooks into a working loop: you ask for a list in plain English, and each finished step triggers the next on its own.
git clone https://github.com/Frontal-so/gtm-ops-kit.git
cd gtm-ops-kit
./install.shOpen .env and paste your Apify API token (free account at apify.com, Settings then API). Optional: a Slack webhook so your channel gets a ping when each step finishes.
Then start Claude Code in the folder and type what you want:
Build me a list of 100 VPs of Sales at US software companies, write the outreach copy, and get the campaign ready.
What happens, with no clicking between tools:
- build-list scrapes the leads through Apify into
data/(about $0.10 per 100 leads, verified emails). - A hook fires by itself and grades the list with the 9-dimension scorecard. Below a B, it tells you to fix the list before anything gets sent.
- write-copy drafts the first-touch email and checks itself against the spam-word playbook.
- export-campaign packages a sequencer-ready CSV (or pushes to Instantly if you add that key).
- Every finished step pings Slack, and every output is saved in
data/so you can review it.
The four skills are in skills/, the hook wiring is in .claude/settings.json, and both are small readable files: that is the point. Change the text, change the system.
No Apify key yet? Try the quality gate right now on the bundled fake list (it has planted flaws, watch them get caught):
python3 scripts/score-list.py --list examples/sample-leads.csv --titles "vp of sales,head of sales"| Playbook | What it gives you |
|---|---|
| positive-reply-scoring | The metric that matters. An 11-bucket reply classification schema and the rate to optimize: positive replies over total sent, not raw replies |
| list-quality-scorecard | A 9-dimension pre-send gate with a letter grade. Catch the bad list before it burns your domains. Ships with a runnable script |
| deliverability-incident-response | Decision trees for the five ways sending breaks: reply drop, bounce spike, blacklist, warmup block, promotions tab |
| weekly-rhythm | The operating calendar: Monday deliverability review, Wednesday reply sweep, Friday retros, biweekly rotation, quarterly review |
| experiment-design | Single-variable testing with honest sample-size math. Most published tables are 4 to 5x too optimistic; ours is computed and shown |
| spam-word-checker | The pre-send copy scan: spam triggers, AI tells, pressure CTAs, formatting risks |
Plus scripts/score-list.py: the list-quality scorecard as a runnable, stdlib-only Python script.
- Read weekly-rhythm first. It is the loop; everything else is a station on it.
- Before your next send: run your list through list-quality-scorecard.
- After your next campaign: score it with positive-reply-scoring before you decide anything.
- A 5% reply rate can be worse than a 1% reply rate. What matters is positive replies over total sent.
- "Significant at 500 sends per arm" is almost never true. Detecting a 1% to 2% lift takes ~2,300 sends per arm at 80% power.
- A verifier saying "valid" does not mean the email is reachable. Secure email gateways reject cold mail for sender-side reasons no verifier can see; check the bounce codes (5.7.x is policy, 5.1.1 is a dead mailbox).
- Below roughly 500 sends, your reply rate is noise. Decide nothing from it.
- Several playbooks began as adaptations of cold-outbound-skills by GrowthEngineX (MIT), then got corrected and extended: honest sample-size math, a fixed catch-all definition, secure-email-gateway handling, and field measurements from live B2B sends.
- The skills-plus-agents packaging approach tips its hat to go-to-market-orchestrator by Jan Skuba, a nice Claude Code hooks setup worth a look for the automation layer.
Frontal is a GTM agency. This kit is the generic ops layer we believe every outbound team should run; the client-specific engines we build on top of it are our day job. If you want the whole thing built for you, you know where to find us.
MIT licensed. Use it, fork it, ship it.