Quickstart — your first pitch in 15 minutes
From a fresh install to a real Gmail draft addressed to a real prospect.
Quickstart
This walkthrough takes you from a fresh install to a draft pitch in your Gmail in about 15 minutes.
Step 1 — Write your ICP
Copy the example and fill in the blanks:
cp cold_pitch_agent/icp_example.yaml my_icp.yaml
$EDITOR my_icp.yaml
The most important fields:
operator_*— info about you (the person whose name will be on the pitch)operator_address— physical mailing address, required by CAN-SPAMvertical— the 2–4 industries you focus onkind_of_content— what you actually want to writeroot_problem— one sentence describing the problem you solve
If you can’t articulate root_problem yet, write something rough. You’ll refine it after your first 30 pitches.
Step 2 — Build a seed prospect list
Create a JSON file with the prospects you want to pitch. Three is plenty for the first run:
[
{
"company": "Acme SaaS",
"website": "https://acme.example",
"contact_name": "Sarah Chen",
"contact_email": "sarah.chen@acme.example",
"contact_role": "Head of Marketing",
"linkedin_url": "https://www.linkedin.com/in/sarah-chen-example/",
"timezone": "America/New_York",
"industry": "SaaS",
"maturity": "Series B",
"content_focus": "long-form blog",
"temperament_personal": "direct",
"temperament_process": "founder-led",
"location": "US",
"contract_length": "retainer",
"has_budget_signal": true,
"root_problem_match": true,
"revenue_est": 15000000
}
]
Save it as my_prospects.json.
Step 3 — Dry-run the agent (draft mode)
python -m cold_pitch_agent.agent \
--icp my_icp.yaml \
--prospects my_prospects.json \
--max 3
What happens:
- The agent opens a Chromium browser and researches each prospect (Google, their site, their blog, LinkedIn).
- It scores each prospect against your ICP. Skips anyone below 7/10.
- It checks for a trigger event in the last 90 days. Skips if none found.
- For prospects that pass, it composes a pitch and lints it. Auto-rewrites up to twice if the linter fails.
- It saves each pitch as a Gmail draft in your account.
- It schedules follow-up pitches #2 and #3 (in SQLite — see step 5).
- It prints a summary of what happened.
This first run will probably take 1–2 minutes per prospect (mostly browser research). Be patient.
Step 4 — Review the drafts
Open mail.google.com → Drafts. You should see a draft for each prospect that passed. Read every one. Cold Pitch Boss is good but not magical; the first pass on a new ICP will have rough edges.
If a draft is wrong:
- Sounds generic? Your ICP
root_problemis probably too vague. Tighten it. - Missing a specific detail? The agent didn’t find what it needed during research. You can paste a specific note from your own research and the agent will use it next time.
- Tone off? Edit the system prompt at
cold_pitch_agent/prompts/system_prompt.md.
When a draft is good, click Send. (Or wait until Tuesday 10am their time, which is when the agent scheduled it for.)
Step 5 — See what the agent recorded
Everything goes into a local SQLite database at cold_pitch_agent/data/cold_pitch.db. Open it with the command-line sqlite3 tool or any DB browser:
sqlite3 cold_pitch_agent/data/cold_pitch.db
sqlite> .tables
campaigns events prospects
campaign_prospects pitches
sqlite> SELECT company, icp_match, status FROM prospects;
You can also see the scheduled follow-ups:
SELECT p.pitch_number, pr.company, p.send_at
FROM pitches p JOIN prospects pr ON pr.id = p.prospect_id
WHERE p.sent_at IS NULL
ORDER BY p.send_at;
Step 6 — Switch to send-mode (when you trust the output)
After the first 30–50 drafts feel right, you can let the agent send pitch #1 automatically. Pass --send:
python -m cold_pitch_agent.agent \
--icp my_icp.yaml \
--prospects my_prospects.json \
--max 15 \
--send
It still drafts pitches #2 and #3 (the follow-ups) for your review. Most people keep follow-ups in draft mode permanently and only auto-send the initial pitch.
That’s it. You’re cold-pitching on autopilot.