Product Block 08 · Sellable today
Cold Outreach Engine
UCC + Sunbiz + Apollo data → Claude writes the first message → sequence → calendar. We use this on the hot list.
Best fit: Brokers, agencies, B2B services, MCA shops. The product they need is the product you also need to find more clients — eat the dog food.
Cold Outreach Engine — build it without writing code
Drop the prompt below into Claude Code or Codex. The agent picks a vertical YOU need to sell into, pulls 50 hand-curated prospects from Sunbiz/UCC/Apollo, enriches each with site scrape + reviews + recent signal, generates 10 personalized first-touches with the human reviewing each, and ships them. Eat-your-own-dogfood: this same engine is what we use to find new clients.
You provide
You provide: (1) the vertical YOU want to sell into (e.g. "Miami HVAC", "single-loc Wynwood restaurants", "solo lawyers in Coral Gables"), (2) the offer (which Block from this catalog you're leading with), (3) which sender domain to use (mg.cafecito-ai.com or a dedicated outbound domain).
You get back
You get: 50 enriched prospects in D1, 10 reviewed-and-approved first-touch emails sent today, a 3-touch sequence cron firing Day 4 + Day 9 + archive, and a dashboard showing opens/clicks/replies/calls-booked.
Runtime & cost
Roughly 2 hours wall-clock (the enrichment pulls take longest). ~$15 in Apollo + Claude + Resend.
You are building a Cold Outreach Engine (Block 08 in the Cafecito AI new-hire playbook). Full reference at https://cafecito-ai.com/new-hire/blocks/08-cold-outreach-engine. Read it. Use plan mode. Stop at every [GATE].
INPUTS YOU NEED FROM THE HUMAN (ask before doing anything else):
1. Vertical you want to sell into (e.g. "Miami HVAC", "Wynwood single-loc restaurants", "solo Coral Gables lawyers")
2. Lead offer — pick one Block from this catalog (e.g. Block 01 voice receptionist, Block 04 review responses)
3. Sender domain — default mg.cafecito-ai.com (already SPF/DKIM configured); for new-vertical campaigns recommend a dedicated outbound subdomain
ENVIRONMENT (verify):
- Working dir: /home/eratner/cafecito-ai
- Cloudflare account: f7a9b24f679e1d3952921ee5e72e677e
- Wrangler authenticated via OAuth
- Reference: /home/eratner/efincap-platform/ (MCA broker stack — closest pattern)
SECRETS TO CONFIRM:
- ANTHROPIC_API_KEY (Claude)
- APOLLO_API_KEY (people enrichment)
- GOOGLE_PLACES_KEY (review pulls)
- RESEND_API_KEY (sending)
THE PLAN:
STEP 1 — DEFINE THE VERTICAL + 50 PROSPECTS (20 min)
- From the human's vertical input, pull a Sunbiz query (Florida active filings) for matching SIC/NAICS codes.
- Filter to the prospect's geographic + size criteria from /new-hire#hotlist hunting criteria ($5M-$50M, 10+ employees, owner reachable).
- Manually cherry-pick to 50 high-quality candidates. Score each on the 5-criteria rubric (pain, demo speed, buyer access, reuse, sandbox readiness).
- Save as CSV.
[GATE 1 — show 50-row CSV summary, ask "proceed to enrichment?"]
STEP 2 — SCAFFOLD THE WORKER (15 min)
- Create /home/eratner/cafecito-ai/outreach-<vertical-slug>/.
- Use Prompt #1 from the block page ("Enrichment pipeline scaffold") to generate worker.js + wrangler.jsonc + D1 migration.
- Bindings: D1 PROSPECTS_DB, KV ENRICHMENT_CACHE (24h TTL).
- Deploy scaffold. Run `POST /admin/ingest-csv` with the 50-row CSV from Step 1.
[GATE 2 — show ingestion results, ask "proceed to enrichment run?"]
STEP 3 — ENRICH ALL 50 (30-45 min, mostly waiting)
- Run `POST /admin/enrich-batch` — kicks off site scrape + reviews + signal + UCC + Apollo for all 50.
- Monitor: most should hit "high" enrichment_score within 30 min. Any that come back "low" — surface to the human as "needs more research before we touch them."
- Filter the queue to enrichment_score >= medium AND ready_for_outreach = true.
[GATE 3 — show how many of 50 made the cut + their decision-maker emails, ask "proceed to draft generation?"]
STEP 4 — GENERATE 10 FIRST-TOUCH DRAFTS (15 min)
- Use Prompt #2 from the block page ("First-touch email generator using prospect data") for each of the top 10 prospects (highest enrichment_score, sorted by data_completeness).
- For each prospect, output: email subject + body, WhatsApp version, the specific signal in sentence 1.
- Save all 10 to a single review document.
[GATE 4 — present all 10 to the human one at a time. They mark each: SEND / EDIT / SKIP. Loop until human approves at least 7 of 10.]
STEP 5 — SEND THE APPROVED 7-10 (10 min)
- For each approved draft: send via Resend from the configured sender domain. Log to D1 with timestamps.
- For each WhatsApp version: copy to clipboard for the human to paste manually (Twilio WhatsApp sender requires per-message review for new domains).
[GATE 5 — confirm sends went out, ask "wire the 3-touch sequence cron?"]
STEP 6 — WIRE THE 3-TOUCH SEQUENCE (10 min)
- Use Prompt #3 ("Three-touch follow-up sequence") for the Day 4 + Day 9 templates.
- Set CF Cron Trigger: 0 14 * * * (daily at 2pm ET) — pulls prospects whose Day 4 or Day 9 just hit, generates the next-touch draft, sends via Resend.
- Set archive logic: after Day 9, prospect_status moves to "archived"; if reply received, moves to "engaged" and pauses sequence.
[GATE 6 — confirm cron is registered + first dry-run shows next-day candidates, ask "wire reply classifier?"]
STEP 7 — REPLY CLASSIFIER + DOMAIN MONITORING (15 min)
- Use Prompt #4 ("Domain reputation + reply classifier") for the inbound classifier + weekly mail-tester check.
- Wire inbound replies (Resend webhook → POST /reply-webhook) → Claude classifies → routes (book / not_now / unsubscribe / hostile / not_dm) → auto-responds for clear bookings, pauses sequence on negative, escalates to human inbox on ambiguous.
- Set Monday 8am cron for domain reputation check.
[GATE 7 — confirm classifier handles 5 sample replies correctly, ask "ready to ship summary?"]
STEP 8 — DASHBOARD + SUMMARY
- Build the dashboard route /admin/dashboard with: this week sent, opens, clicks, replies-by-category, calls-booked.
- Single-line summary: "[VERTICAL] outreach engine live · 50 prospects enriched · [N] first-touches sent today · 3-touch sequence active · domain reputation OK."
- Append to /home/eratner/cafecito-ai/outreach-shipped.md.
DONE.
GUARDRAILS: NEVER auto-send the first-touches without human approval (gate 4). NEVER skip TCPA opt-out compliance for SMS variants. NEVER send from a domain without verified SPF/DKIM/DMARC (run pre-flight check). Cost ceiling: $25 in Apollo + Claude during testing.
META: this is the engine that finds your future Block 01-16 customers. Once it's live for one vertical, you can run the same plan for a different vertical in 2 hours. The output of this plan feeds the BUILDER agent (next plan in the series), which takes any (prospect, block) pair and runs the matching block's self-bootstrap unattended.
01Stack▾
- CF Worker
- D1
- Apollo / Sunbiz / UCC APIs
- Claude
- Resend
- Cal.com
02Live references▾
Working production examples. Read the code. Steal the pattern.
- eFin Capital pipeline MCA broker stack — outreach + intake + UW · same pattern
03Day-1 plan▾
A real prospect. A real demo. A real outbound message — all before 5pm.
-
09:00–09:30
Pick a vertical YOU need to sell into.
For Cafecito AI: Miami HVAC, dental, law firms. The principle: build the outreach engine for a vertical we've demonstrated we can serve. Eat your own dog food on Day 1, then sell the engine to others on Day 30.
-
09:30–10:30
Pull the data: UCC + Sunbiz + Apollo for 50 prospects.
Sunbiz active filings (free), UCC liens for filtering, Apollo for personnel + email enrichment. Manual cherry-pick to 50 high-quality. Quality > volume.
-
10:30–11:30
Build the enrichment pipeline.
For each prospect: scrape their site, pull last 5 Google reviews, check for recent funding, check for new hire signals. The richer the context, the more specific Claude can be.
-
11:30–12:30
Build the first-touch generator.
Claude reads enrichment + their typical service + a hand-picked observation → writes a 3-sentence cold email. Never templated. Each one references something only THEIR business has.
-
12:30–13:30
Send 10 first-touches, manually approve each.
Day 1 quality check: read every generated email before sending. Mark which are great, which need editing, which are template-tells. Update the prompt based on patterns.
-
13:30–14:30
Build the 3-touch sequence.
Day 0: cold pitch. Day 4: "still thinking?" with one new piece of value. Day 9: final no-pressure ask. After Day 9: archive. Three touches max. No "is this still a priority?" emails ever.
-
14:30–15:30
Wire reply detection + Cal.com.
Inbound reply → Worker classifies (interest / not now / unsubscribe / spam). Interest → reply with Cal.com link. Not now → schedule 90-day re-engagement. Unsubscribe → comply immediately.
-
15:30–16:30
Build the dashboard.
One screen: this week's sends, opens, clicks, replies, calls booked, by sequence step. Sortable. Export CSV. The dashboard is what you sell to the prospect once you've closed your own use case.
-
16:30–17:00
Send the first 10 first-touches for real.
After approving each, fire them. Set the sequence cron. Tomorrow you sell what worked.
04Best practices & gotchas▾
-
Data quality > volume. 50 hand-picked prospects beats 5,000 sprayed.
Why: A 50-prospect list with deep enrichment generates 5-10 replies and 1-3 calls. A 5,000-prospect spray generates 30 replies, 0 calls, and a domain-reputation problem. Quality compounds; volume burns.
-
Never use template language. "I noticed your website..." is a death sentence.
Why: Every prospect has received that exact opening 50 times. Pattern-matches as automated outreach in 2 seconds. Pull from REAL signal: a press release, a new hire, a specific Google review.
-
Three-touch sequence. Never seven. Never "is this still a priority?"
Why: Sequences past 3 are universally hated and produce diminishing returns. The "is this still a priority?" email is the most universally complained-about sales pattern.
-
Calendar link in the email signature only — never inline.
Why: An inline "book a call here" button reads as a sales sequence. The link tucked in the signature is professional. Customers who want to book find it.
-
Opt-out is one click, no form, immediate.
Why: A list-unsubscribe header + one-click footer link is required by Gmail/Outlook in 2026. Beyond compliance, the brand cost of a multi-step opt-out is permanent.
-
The first sentence cannot mention you, your company, or what you sell.
Why: The first sentence either earns the second sentence or doesn't. Mentioning yourself or your product in sentence one is the universal disqualifier. Lead with an observation about THEM.
-
Track domain reputation weekly. SPF/DKIM/DMARC all green or you're junk.
Why: A single misconfigured DKIM record drops your inbox rate from 90% to 30% overnight. Set up Postmark/Mail-tester monitoring before sending; check weekly.
05Prompts (copy-paste)▾
Drop these into Claude Code. Replace the [BRACKETED] fields with the prospect's details.
Generates the CF Worker that takes a Sunbiz/UCC list and enriches each prospect with site scrape + reviews + signals.
Build me a CF Worker enrichment pipeline for [VERTICAL] cold outreach.
Input: CSV of prospects (business_name, address, phone, owner_name, sunbiz_id).
For each row, enrich with:
1. **Site scrape**: hero text, service list, last blog post date, owner photo URL.
2. **Google reviews**: top 5 most recent + count + average rating + most common complaint.
3. **Recent signal**: scan for indicators — recent press release, "we're hiring," a LinkedIn post in last 90 days.
4. **UCC liens last 24 months**: filter list of recent secured debts.
5. **Personnel**: enrich via Apollo for the decision-maker — title, email pattern, LinkedIn.
Output JSON per prospect:
{
"business_name": "...",
"decision_maker": { "name": "...", "title": "...", "email": "...", "linkedin": "..." },
"site_summary": "...",
"services": [...],
"reviews_summary": "...",
"recent_signal": "...",
"ucc_status": "...",
"enrichment_score": "high|medium|low",
"ready_for_outreach": true|false,
"data_completeness": 0-100
}
Bindings: D1 PROSPECTS_DB, KV ENRICHMENT_CACHE (24h TTL on Apollo + Places), secrets APOLLO_KEY + GOOGLE_PLACES_KEY.
Output: complete worker.js, ready to run as one-shot CSV ingest or scheduled cron.
The Claude prompt that takes one enriched prospect + the offer and writes the cold email.
Write a 3-sentence cold email + 2-sentence WhatsApp follow-up to [DECISION MAKER NAME] at [BUSINESS NAME].
Enrichment:
- Decision maker title: [title]
- Industry: [industry]
- City: [city]
- Most recent specific signal: [e.g. "just hired a director of ops in March 2026"]
- Top services: [list]
- Reviews summary: [3 sentences]
- Owner persona inference: [warm / direct / busy / detail-oriented]
Our offer (one of):
- [Block 01: bilingual voice receptionist · $400/mo]
- [Block 02: smart intake form · $300/mo]
- [other Block]
Constraints:
- First sentence must NOT mention us or our product.
- First sentence must reference SPECIFIC signal from enrichment.
- Second sentence connects signal to a problem they likely have.
- Third sentence offers a tangible next step (Loom, sample, 5-min call).
- No emojis. No "circle back."
- 80 words max email; 30 words max WhatsApp.
- Sign with [SENDER FIRST NAME] from [SENDER COMPANY].
Output JSON:
{
"email_subject": "...",
"email_body": "...",
"whatsapp_body": "...",
"first_sentence_signal": "...",
"confidence": "high|medium|low"
}
Generates Day 4 and Day 9 follow-ups that add NEW value, not "just bumping this."
Generate Day 4 and Day 9 follow-up emails for cold outreach to [DECISION MAKER] at [BUSINESS NAME].
Original Day 0: [paste]
Reaction so far: [opened: yes/no, clicked: yes/no, replied: no]
Enrichment summary: [paste]
Day 4 (160 words max):
- Lead with NEW value. Options: a screenshot of competitor doing the thing; a 30-second Loom of our solution; a specific quote from one of their Google reviews + how the proposed solution would have prevented it; a one-paragraph case study.
- Connect to the original ask.
- Restate next step softly ("if useful, here's the 30-sec demo: [LOOM]").
- No "wanted to bump this up" language.
Day 9 (80 words max):
- Final touch. No-pressure energy.
- Open: "Last note from me on this — won't keep nudging."
- One-sentence value prop, in their language.
- One-sentence: "If you'd rather I check back in 90 days, just say '90.' If never, just say 'never.'"
- Sign + tiny calendar link.
Then archive after Day 9 unless they engage. Reply "90" → schedule re-engagement in D1. Reply "never" → opt-out permanently.
Output: subject line + body for each.
Generates the reply classifier AND the weekly domain-health check.
Build me two functions:
1. **Reply classifier**: takes inbound email reply and returns:
- category: book | not_now | unsubscribe | hostile | not_dm | other
- suggested_action: send_calendar | reschedule_90d | opt_out_immediate | escalate_to_human | archive_no_action
- one-sentence response if appropriate
- confidence: high|medium|low
Examples:
- "Sure, send me a time" → book
- "Not interested right now" → not_now
- "Stop emailing me" → unsubscribe
- "I'm not the right person — talk to [NAME]" → not_dm + extract referral
- "Maybe in Q3" → not_now + reschedule_90d
2. **Weekly domain reputation check** (cron Mondays 8am):
- Use mail-tester.com API to score sending domain.
- Check SPF / DKIM / DMARC valid.
- Pull last week's metrics from Resend: sent, delivered, bounced, complained.
- If complaint rate > 0.1% OR bounce rate > 5% OR domain score drops below 8/10: alert ops + auto-pause sends.
- Otherwise: send small "all good" digest.
Output: both functions as ESM JS, plus sample alert email + sample weekly digest email.
06Selling script▾
Discovery question (ask this first)
"How many qualified outbound prospects did your team touch last month? Of those, how many replied?"
The frame
Outbound is the most scalable lever for service businesses, and it's also the most botched. Most agencies spray 5,000 generic emails a month, get a 0.3% reply rate, and burn their domain reputation. The version that works is the inverse: 50 hand-enriched prospects a week, deep personalization, three touches max. The same engine you sell to clients is the one we use to generate THIS conversation.
The demo play
On the discovery call: open YOUR own outreach dashboard live. Show the prospects, the enrichment data, the sample first-touch emails. Show last week's sends + reply rate. Then say: "this is the system that surfaced you. The 3-sentence email I sent you on [date] was generated from your [enrichment signal]."
Objections
-
"Cold email is dead."
"Spray-and-pray cold email is dead. Hand-enriched 50-a-week cold email is more effective than ever — because everyone else gave up on quality. Reply rate on a properly personalized first touch in 2026 is 8-15%."
-
"My team already does outbound."
"How many touches per prospect? How long does enrichment take? How fast can your team write a personalized first sentence? The system writes 50 in an hour. Your SDR writes 5 in an hour at best."
-
"$1k/mo is steep."
"It's the engine + 1,000 enriched prospects/mo + the sequence + the dashboard + domain monitoring. Closest enterprise tool (Outreach, Apollo) is $1.2-2k/mo per seat AND you still need an SDR."
-
"Does this hurt our domain reputation?"
"Properly configured: SPF/DKIM/DMARC + sub-1% complaint rate + sub-3% bounce rate. We monitor weekly and auto-pause if any threshold trips. We also recommend sending from a separate outbound domain (mg.<yourbrand>.com)."
The close
"$4k now to ingest your verticals + stand up the enrichment + write your first 50 cold emails this week. $1k/mo + Apollo/Sunbiz pass-through (about $200/mo at 1k prospects) from then on. If your reply rate isn't 5%+ in 60 days, kill it — no contract."
07Pricing notes▾
Anchor on SDR economics. Junior SDR in Miami runs $60-80k all-in and produces ~150 personalized touches/month. The system produces 1,000+ at higher quality. Per-prospect cost: ~$0.30 (Apollo $0.10 + Claude $0.15 + Resend $0.001 + cron $0.001). At 1,000 prospects/mo marginal cost is $300 against $1k fee. Setup includes: vertical config, enrichment pipeline, prompt tuning per vertical, sequence design, dashboard, domain configuration. Does NOT include: dedicated outbound domain ($150 — client owns), CRM sync to HubSpot/Salesforce ($1.5k each), LinkedIn outreach integration ($2k). Eat-your-own-dogfood angle: ALWAYS lead with the version you used to find them.