Company Decision-Maker Finder

Blitz list builder

by growthenginenowoslawski · MIT license · ★ 736 on GitHub

Blitz list builder cover

Use the Blitz API to find decision-makers at specific companies when you already have a list of company domains. Best for SMB owner-finding, domain-to-people lookup, or supplementing Prospeo results.

---
name: blitz-list-builder
description: Use the Blitz API to find decision-makers at specific companies when you already have a list of company domains. Best for SMB owner-finding, domain-to-people lookup, or supplementing Prospeo results. Outputs a CSV you can feed to the email-waterfall or directly to /cold-email-starter-kit for Smartlead upload. Use when your targeting is company-first (not title-first).
---

# Blitz List Builder

Prospeo is title-first: "all VPs of Marketing in B2B SaaS." Blitz is domain-first: "for each of these 500 restaurant domains, find the owner."

If you already know the target companies (from Google Maps, a CSV of competitors, or a manually-curated list), Blitz finds the people for you.

## When to use Blitz vs Prospeo

| Your situation | Use |
|---|---|
| "I have 5,000 domains, find the owners" | Blitz |
| "Find all CFOs at US SaaS companies 100-500 employees" | Prospeo |
| "I need to supplement Prospeo results with additional contacts at the same companies" | Blitz |

Overview

Prospeo is title-first: "all VPs of Marketing in B2B SaaS." Blitz is domain-first: "for each of these 500 restaurant domains, find the owner."

What you get

  • Deduplicateremove duplicate emails, duplicate LinkedIn URLs
  • Filterdrop rows where job_title doesn't cleanly match your ICP
  • Fill missing emailsrun /email-waterfall on rows with empty email
  • Validaterun MillionVerifier on all emails (see /email-waterfall script)
  • Uploadpass to Smartlead via /cold-email-starter-kit script smartlead-add-leads.ts
Manual install (npx, ZIP)
Claude Codenpx skills add growthenginenowoslawski/coldoutboundskills --skill blitz-list-builder -g -a claude-code
Claude Code (degit)npx degit growthenginenowoslawski/coldoutboundskills/skills/blitz-list-builder#main ~/.claude/skills/blitz-list-builder
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md7.5 KB
Read SKILL.md here
growthenginenowoslawski/main1 file shown
SKILL.md
Show the full text171 lines

Blitz List Builder

Prospeo is title-first: "all VPs of Marketing in B2B SaaS." Blitz is domain-first: "for each of these 500 restaurant domains, find the owner."

If you already know the target companies (from Google Maps, a CSV of competitors, or a manually-curated list), Blitz finds the people for you.

When to use Blitz vs Prospeo

Your situation Use
"I have 5,000 domains, find the owners" Blitz
"Find all CFOs at US SaaS companies 100-500 employees" Prospeo
"I need to supplement Prospeo results with additional contacts at the same companies" Blitz
"I want the widest net possible in a vertical" Prospeo
"I'm targeting specific named accounts (ABM)" Blitz

Often: use Prospeo to build the initial list, then Blitz to add 1-2 more contacts per company.

Prerequisites

  • Blitz API key (env: BLITZ_API_KEY) — sign up at their website
  • List of target company domains (CSV with a company_domain column, or one domain per line)

Inputs

  • --domains-file=<path> — CSV or txt with company domains (one per line, or a column named company_domain)
  • --titles=<csv> — comma-separated title keywords to filter (default: owner,founder,ceo,president,cto,vp)
  • --out=<path> — CSV output path

Outputs

CSV with columns: company_domain, first_name, last_name, job_title, linkedin_url, email, email_source, company_name, company_industry, company_headcount, company_phone

Email will be populated when Blitz returns one. Use /email-waterfall skill on the output to fill in missing emails via Prospeo/ZenRows/etc.

Usage

export BLITZ_API_KEY=xxx

# Pull owner/founder/CEO contacts for 5000 SMB domains
npx tsx scripts/find-contacts.ts \
  --domains-file=restaurants.csv \
  --titles=owner,founder,ceo,general-manager \
  --out=restaurant-owners.csv

# Domain-first discovery with custom title match
npx tsx scripts/find-contacts.ts \
  --domains-file=saas-companies.txt \
  --titles=vp-marketing,head-of-growth,cmo,director-marketing \
  --out=saas-marketers.csv

API overview

Blitz has two main endpoints we use:

Company enrichment (find employees):

POST {BLITZ_BASE_URL}/api/enrichment/company
Body: { "domain": "acme.com" }
Response: { employees: [{ first_name, last_name, title, linkedin_url, email }], company: { name, industry, headcount, phone } }

Email enrichment (find email for a LinkedIn URL):

POST {BLITZ_BASE_URL}/api/enrichment/email
Body: { "linkedin_profile_url": "https://linkedin.com/in/..." }
Response: { email: "...", status: "verified" }

Rate limiting

The script throttles at 30 requests/second with concurrency 10. This matches Blitz's published limits. If you see 429s, lower the concurrency flag.

Hit rate expectations

Rough benchmarks (from real campaigns):

  • SMBs (restaurants, clinics, salons): 70-80% contact-found rate, 40-60% email-found
  • B2B tech (10-500 employees): 80-90% contact-found, 50-70% email-found
  • Enterprise (>1000 employees): 90%+ contact-found, but filtering for the RIGHT person matters more than the found-rate
  • Solo operators / micro-businesses: 30-50% — often no public LinkedIn

Title filtering — write specific keywords

Default keywords (owner, founder, ceo, president, cto, vp) are broad. Narrow them per campaign:

# Restaurants
--titles=owner,operator,general-manager

# SaaS RevOps
--titles=revops,revenue-operations,vp-sales,director-sales

# Dental practices
--titles=dentist,owner,practice-manager

# Law firms
--titles=partner,managing-partner,principal

The script does case-insensitive substring match. "vp" matches "VP Sales" but also "VP Product" — narrow further if that's too loose.

Common gotchas

  • Domain must be just the bare domain. Blitz wants acme.com, not https://acme.com/ or sub.acme.com.
  • Huge companies return truncated employee lists. Blitz caps at ~50-100 employees per domain. For enterprise-heavy lists, use Prospeo or LinkedIn search instead.
  • Stale LinkedIn data. Blitz's cache can be 3-12 months old. Job titles may have changed. Validate with the email waterfall.
  • No email returned ≠ person unreachable. 40% of hits have no email. Feed them to /email-waterfall — it'll try Prospeo + ZenRows.
  • Rate-limit errors. 429 = you hit the cap. Script retries with exponential backoff, but long bursts still fail.

Required step: Qualify with /icp-prompt-builder

This is a required step. Do not skip it.

Before pulling more than 500 companies' worth of contacts, sample ~50 and run /icp-prompt-builder on them:

  1. Evaluates the first 10 with an AI qualification prompt
  2. You give corrections ("this one should be NO because they're a competitor")
  3. Refines the prompt, runs next 10
  4. Stops after 2 rounds with zero corrections — prompt is tuned
  5. Apply the tuned prompt to the remaining leads to filter before paying for email enrichment

Why it's required: Blitz contact-finding is cheap, but email enrichment downstream is not. A typical 5,000-contact run costs $150+ in email-finding API calls. If 40% of your list is wrong-fit, you burn ~$60 finding emails at companies that will never convert. The ICP prompt builder takes 10-15 min and saves that.

How to skip safely: you can't. If you're sure your list is already perfectly qualified (e.g., it came from a curated seed list of named accounts you want to pitch), run /icp-prompt-builder anyway on 10 of them and confirm your existing qualification matches — the prompt builder becomes a sanity check instead of a filter.

Cost

Per Blitz pricing (check their current rates):

  • Company enrichment: ~$0.02-0.05 per domain
  • Email enrichment: ~$0.05-0.10 per email

5,000 domains = ~$150 for contacts alone. Plan your budget.

Output → next step

Once you have the CSV, the typical flow:

  1. Deduplicate — remove duplicate emails, duplicate LinkedIn URLs
  2. Filter — drop rows where job_title doesn't cleanly match your ICP
  3. Fill missing emails — run /email-waterfall on rows with empty email
  4. Validate — run MillionVerifier on all emails (see /email-waterfall script)
  5. Upload — pass to Smartlead via /cold-email-starter-kit script smartlead-add-leads.ts

Scripts

  • scripts/find-contacts.ts — main batch enrichment script

What to do next

Run /email-waterfall to fill in emails for rows Blitz didn't return. Then /list-quality-scorecard to grade the final list.

After the scorecard, proceed to /campaign-copywriting → /smartlead-campaign-upload-public.

Or wait: if the required /icp-prompt-builder step (above) showed <40% qualification rate, your source list of domains is off. Fix that before spending more Blitz credits.

  • /icp-prompt-builder — qualify the contacts this skill returns BEFORE running email waterfall
  • /prospeo-full-export — the title-first alternative
  • /google-maps-list-builder — for local-business domain lists
  • /disco-like — lookalike companies from seed domains
  • /email-waterfall — when Blitz doesn't return an email
  • /cold-email-starter-kit → 06-list-building-prospeo.md for broader list-building context
1---
2name: blitz-list-builder
3description: Use the Blitz API to find decision-makers at specific companies when you already have a list of company domains. Best for SMB owner-finding, domain-to-people lookup, or supplementing Prospeo results. Outputs a CSV you can feed to the email-waterfall or directly to /cold-email-starter-kit for Smartlead upload. Use when your targeting is company-first (not title-first).
4---
5 
6# Blitz List Builder
7 
8Prospeo is title-first: "all VPs of Marketing in B2B SaaS." Blitz is domain-first: "for each of these 500 restaurant domains, find the owner."
9 
10If you already know the target companies (from Google Maps, a CSV of competitors, or a manually-curated list), Blitz finds the people for you.
11 
12## When to use Blitz vs Prospeo
13 
14| Your situation | Use |
15|---|---|
16| "I have 5,000 domains, find the owners" | Blitz |
17| "Find all CFOs at US SaaS companies 100-500 employees" | Prospeo |
18| "I need to supplement Prospeo results with additional contacts at the same companies" | Blitz |
19| "I want the widest net possible in a vertical" | Prospeo |
20| "I'm targeting specific named accounts (ABM)" | Blitz |
21 
22Often: use Prospeo to build the initial list, then Blitz to add 1-2 more contacts per company.
23 
24## Prerequisites
25 
26- Blitz API key (env: `BLITZ_API_KEY`) — sign up at their website
27- List of target company domains (CSV with a `company_domain` column, or one domain per line)
28 
29## Inputs
30 
31- `--domains-file=<path>` — CSV or txt with company domains (one per line, or a column named `company_domain`)
32- `--titles=<csv>` — comma-separated title keywords to filter (default: `owner,founder,ceo,president,cto,vp`)
33- `--out=<path>` — CSV output path
34 
35## Outputs
36 
37CSV with columns: `company_domain, first_name, last_name, job_title, linkedin_url, email, email_source, company_name, company_industry, company_headcount, company_phone`
38 
39Email will be populated when Blitz returns one. Use `/email-waterfall` skill on the output to fill in missing emails via Prospeo/ZenRows/etc.
40 
41## Usage
42 
43```bash
44export BLITZ_API_KEY=xxx
45 
46# Pull owner/founder/CEO contacts for 5000 SMB domains
47npx tsx scripts/find-contacts.ts \
48 --domains-file=restaurants.csv \
49 --titles=owner,founder,ceo,general-manager \
50 --out=restaurant-owners.csv
51 
52# Domain-first discovery with custom title match
53npx tsx scripts/find-contacts.ts \
54 --domains-file=saas-companies.txt \
55 --titles=vp-marketing,head-of-growth,cmo,director-marketing \
56 --out=saas-marketers.csv
57```
58 
59## API overview
60 
61Blitz has two main endpoints we use:
62 
63**Company enrichment** (find employees):
64```
65POST {BLITZ_BASE_URL}/api/enrichment/company
66Body: { "domain": "acme.com" }
67Response: { employees: [{ first_name, last_name, title, linkedin_url, email }], company: { name, industry, headcount, phone } }
68```
69 
70**Email enrichment** (find email for a LinkedIn URL):
71```
72POST {BLITZ_BASE_URL}/api/enrichment/email
73Body: { "linkedin_profile_url": "https://linkedin.com/in/..." }
74Response: { email: "...", status: "verified" }
75```
76 
77## Rate limiting
78 
79The script throttles at **30 requests/second with concurrency 10**. This matches Blitz's published limits. If you see 429s, lower the concurrency flag.
80 
81## Hit rate expectations
82 
83Rough benchmarks (from real campaigns):
84- **SMBs (restaurants, clinics, salons):** 70-80% contact-found rate, 40-60% email-found
85- **B2B tech (10-500 employees):** 80-90% contact-found, 50-70% email-found
86- **Enterprise (>1000 employees):** 90%+ contact-found, but filtering for the RIGHT person matters more than the found-rate
87- **Solo operators / micro-businesses:** 30-50% — often no public LinkedIn
88 
89## Title filtering — write specific keywords
90 
91Default keywords (`owner, founder, ceo, president, cto, vp`) are broad. Narrow them per campaign:
92 
93```bash
94# Restaurants
95--titles=owner,operator,general-manager
96 
97# SaaS RevOps
98--titles=revops,revenue-operations,vp-sales,director-sales
99 
100# Dental practices
101--titles=dentist,owner,practice-manager
102 
103# Law firms
104--titles=partner,managing-partner,principal
105```
106 
107The script does case-insensitive substring match. "vp" matches "VP Sales" but also "VP Product" — narrow further if that's too loose.
108 
109## Common gotchas
110 
111- **Domain must be just the bare domain.** Blitz wants `acme.com`, not `https://acme.com/` or `sub.acme.com`.
112- **Huge companies return truncated employee lists.** Blitz caps at ~50-100 employees per domain. For enterprise-heavy lists, use Prospeo or LinkedIn search instead.
113- **Stale LinkedIn data.** Blitz's cache can be 3-12 months old. Job titles may have changed. Validate with the email waterfall.
114- **No email returned ≠ person unreachable.** 40% of hits have no email. Feed them to `/email-waterfall` — it'll try Prospeo + ZenRows.
115- **Rate-limit errors.** 429 = you hit the cap. Script retries with exponential backoff, but long bursts still fail.
116 
117## Required step: Qualify with /icp-prompt-builder
118 
119**This is a required step. Do not skip it.**
120 
121Before pulling more than 500 companies' worth of contacts, sample ~50 and run `/icp-prompt-builder` on them:
122 
1231. Evaluates the first 10 with an AI qualification prompt
1242. You give corrections ("this one should be NO because they're a competitor")
1253. Refines the prompt, runs next 10
1264. Stops after 2 rounds with zero corrections — prompt is tuned
1275. Apply the tuned prompt to the remaining leads to filter before paying for email enrichment
128 
129**Why it's required:** Blitz contact-finding is cheap, but email enrichment downstream is not. A typical 5,000-contact run costs $150+ in email-finding API calls. If 40% of your list is wrong-fit, you burn ~$60 finding emails at companies that will never convert. The ICP prompt builder takes 10-15 min and saves that.
130 
131**How to skip safely:** you can't. If you're sure your list is already perfectly qualified (e.g., it came from a curated seed list of named accounts you want to pitch), run `/icp-prompt-builder` anyway on 10 of them and confirm your existing qualification matches — the prompt builder becomes a sanity check instead of a filter.
132 
133## Cost
134 
135Per Blitz pricing (check their current rates):
136- Company enrichment: ~$0.02-0.05 per domain
137- Email enrichment: ~$0.05-0.10 per email
138 
1395,000 domains = ~$150 for contacts alone. Plan your budget.
140 
141## Output → next step
142 
143Once you have the CSV, the typical flow:
144 
1451. **Deduplicate** — remove duplicate emails, duplicate LinkedIn URLs
1462. **Filter** — drop rows where `job_title` doesn't cleanly match your ICP
1473. **Fill missing emails** — run `/email-waterfall` on rows with empty `email`
1484. **Validate** — run MillionVerifier on all emails (see `/email-waterfall` script)
1495. **Upload** — pass to Smartlead via `/cold-email-starter-kit` script `smartlead-add-leads.ts`
150 
151## Scripts
152 
153- `scripts/find-contacts.ts` — main batch enrichment script
154 
155## What to do next
156 
157**Run `/email-waterfall`** to fill in emails for rows Blitz didn't return. Then `/list-quality-scorecard` to grade the final list.
158 
159After the scorecard, proceed to `/campaign-copywriting` → `/smartlead-campaign-upload-public`.
160 
161**Or wait:** if the required `/icp-prompt-builder` step (above) showed <40% qualification rate, your source list of domains is off. Fix that before spending more Blitz credits.
162 
163## Related skills
164 
165- `/icp-prompt-builder` — qualify the contacts this skill returns BEFORE running email waterfall
166- `/prospeo-full-export` — the title-first alternative
167- `/google-maps-list-builder` — for local-business domain lists
168- `/disco-like` — lookalike companies from seed domains
169- `/email-waterfall` — when Blitz doesn't return an email
170- `/cold-email-starter-kit` → `06-list-building-prospeo.md` for broader list-building context
171 
View all files on GitHub →

Details

License
MIT
Stars on the repo
★ 736
Checked
Source
growthenginenowoslawski/coldoutboundskills ↗
Creator
growthenginenowoslawski · 52 listings
View creator

Similar skills

See all →

More from growthenginenowoslawski

SkillCold Email Automationgrowthenginenowoslawski/coldoutboundskills · by growthenginenowoslawskiAutonomous cold email campaign launcher. Takes one target company domain, scrapes their website, generates an ICP with Claude, pulls matching leads via Prospeo, enriches emails + company descriptions, personalizes each lead with parallel Claude Code Task sub-agents (A/B/C variants), and uploads as a live Smartlead campaign. Uses local JSON files for state (no database required). Use for automated daily campaign launches after you have an initial `client-profile.yaml` from /icp-onboarding. Triggers on "auto-research", "launch an automated campaign", "daily campaign", "run the research loop".★ 736 GitHub starsSkillCold Outreach Strategistgrowthenginenowoslawski/coldoutboundskills · by growthenginenowoslawskiGenerates 15-25+ cold outbound campaign ideas with targeting strategies, AI personalization approaches, and value propositions. Use when planning campaign experiments for a client, given their website or business context.★ 736 GitHub starsSkillClay Signal Playbooksgrowthenginenowoslawski/coldoutboundskills · by growthenginenowoslawskiIndex and shared harness for the 19 signal playbooks. Each playbook turns one buying signal (new in role, raised a round, hiring surge, pricing page, tech on website, ...) into one copy-ready sentence you can drop into a cold email. Every playbook ships three ways to run it: as a Claude skill, as a Clay table built through a browser harness, and as a Clay workflow built from the clay CLI. Use when someone says "personalize this list", "what signal should I use", "build the Clay column for X", or names any of the 19 signals.★ 736 GitHub starsSkillCompetitor Engager Findergrowthenginenowoslawski/coldoutboundskills · by growthenginenowoslawskiFind people actively engaging with competitor LinkedIn posts. Given a website URL, discovers competitors, fetches their company and employee posts, collects all commenters and reactors, and outputs a deduplicated CSV of engaged prospects. Use when someone wants to find leads from competitor engagement, build outreach lists from LinkedIn activity, or analyze who interacts with competitor content.★ 736 GitHub starsSkillEmail Deliverability Crisisgrowthenginenowoslawski/coldoutboundskills · by growthenginenowoslawskiTriage playbook for when cold email deliverability breaks. Decision-tree guidance for "I landed in spam", "bounce rate spiked", "domain blacklisted", "inbox blocked in warmup", "reply rate dropped". Tells you what to check first, what to fix, and how long the fix takes. Pair with /email-deliverability-audit for diagnosis.★ 736 GitHub starsSkillInbox Delivery Benchmarkinggrowthenginenowoslawski/coldoutboundskills · by growthenginenowoslawskiCompare reply rates, bounce rates, and positive reply rates broken down by inbox type (SMTP / Gmail / Outlook) for a Smartlead account. Use when you want to know "which inbox type delivers best" or when debugging unexplained deliverability differences across a mixed fleet. Operates via Smartlead API only (no database required).★ 736 GitHub stars