Drop your URL and a CSV of prospects. Get a research brief + 2 personalized cold emails for each. BYOL — bring your own list. Free CLI from BuzzLead.
The same engine that powers the free web tool — but you can throw an unlimited prospect list at it from your terminal.
npx @buzzlead/campaign-builder \
--my-site mycompany.com \
--input prospects.csv \
--out campaign.csvFor each row in your CSV, you get back:
- A short research brief (what they do, growth signal, main challenge, best angle)
- Email 1 — 4T framework, under 70 words
- Email 2 — tight problem-frame follow-up, under 90 words
No DiscoLike, no AI Ark, no contact lookup. You already have the list. This is the tool that turns your list into copy.
For each prospect in your input list:
- Crawl their website via Jina Reader
- Build a research brief — Claude extracts what they do, their growth signals, their likely main challenge, and the best cold-outreach angle
- Write Email 1 — 4T framework (Trigger / Think / Bridge / Talk), peer-to-peer voice, under 70 words
- Write Email 2 — problem-frame + mechanism + soft CTA, under 90 words, different angle from Email 1
Combined with a one-time analysis of your own site (the sender context), every email is personalized to the prospect's actual business.
Prospect list as CSV or JSON. Required columns/keys:
| Column | Required | Notes |
|---|---|---|
first_name |
✓ | |
last_name |
Optional but recommended | |
email |
Carried through to output unchanged | |
job_title |
✓ | E.g. "VP Sales", "Head of Operations" |
company |
✓ | Display name |
website_url |
✓ | The site we crawl for research |
linkedin_url |
Carried through |
CSV example:
first_name,last_name,email,job_title,company,website_url,linkedin_url
Jane,Smith,jane@initech.com,VP Sales,Initech,https://initech.com,https://linkedin.com/in/jane
John,Doe,john@umbrella.io,Head of Growth,Umbrella Corp,https://umbrella.io,JSON example:
[
{ "firstName": "Jane", "lastName": "Smith", "jobTitle": "VP Sales", "company": "Initech", "websiteUrl": "https://initech.com" }
]Header aliases are accepted: firstname / first_name / First Name, title / role / job_title, website / url / domain / website_url, etc.
# One-shot via npx
npx @buzzlead/campaign-builder --my-site mycompany.com --input prospects.csv
# Or install globally
npm install -g @buzzlead/campaign-builder
campaign --my-site mycompany.com --input prospects.csv
# Or as a library
import { runCampaign } from "@buzzlead/campaign-builder";
const result = await runCampaign({
mySiteUrl: "mycompany.com",
prospects: [/* ProspectInput[] */],
});Just one required.
| Key | Why | Where |
|---|---|---|
ANTHROPIC_API_KEY |
Site analysis + research + email generation | https://console.anthropic.com |
Optional:
JINA_API_KEY— faster site scraping (anonymous works)
Approximate, at 10 prospects:
| Provider | Calls | ~Cost |
|---|---|---|
| Anthropic | 1 (your site) + 3 × 10 (per prospect) = 31 calls | $0.20–0.50 |
| Jina | 11 scrapes | ~$0.01 |
| Total | ~$0.20–0.50 |
Scales linearly. For 100 prospects: ~$2–5.
Usage: campaign [options]
Required:
-m, --my-site <url> Your company URL (sender context)
-i, --input <path> Path to prospect CSV or JSON
Optional:
-o, --out <path> Output CSV path. Default: ./campaign.csv
--silent Suppress progress output
--json Print full result as JSON to stdout
Standard run from CSV:
campaign --my-site mycompany.com --input prospects.csvFrom JSON, pipe to JSON output:
campaign --my-site mycompany.com --input prospects.json --json > result.jsonColumns:
first_name, last_name, email, job_title, company, website_url, linkedin_url,
research_summary, email_1, email_2, skipped, skip_reason
Every text field is double-quoted. Newlines inside cells are escaped as \n. Skipped rows include the reason so you can audit.
| Web tool | CLI | |
|---|---|---|
| Prospect cap | 10 | Unlimited (your wallet's the limit) |
| Lead gate | Required | None |
| Auth | Shared keys | Your keys |
| Input | Manual table entry | CSV or JSON file |
| Library API | No | Yes |
import {
runCampaign, // end-to-end pipeline
scrapeWebsite, // step 1 helper
consolidateCompanyProfile, // your-site analysis
consolidateProspectProfile, // per-prospect research brief
generateEmail1, // 4T framework
generateEmail2, // problem-frame follow-up
buildCsv, // CSV output
parseProspectsCsv, // input parsers
parseProspectsJson,
} from "@buzzlead/campaign-builder";Campaign Builder turns your existing list into copy. BuzzLead the agency runs the whole motion: sourcing new lists, sending the campaigns, handling replies, booking meetings. 10M+ cold emails sent. $8M+ in client revenue.
If you want the version with humans behind it, talk to us at buzzlead.io.
MIT. Use it however you want.