Why Most People Stall at "Get Clients"
Every AI agency course shows you the income screenshots. Almost none of them show you the system that fills the pipeline. So you sit there with a Stripe account, a Notion build doc, and zero leads.
I emailed over 10,000 local businesses with this exact stack. 50% open rates. 1 to 10K per close. And the whole thing runs on a $200/mo stack that any non-technical person can set up in an afternoon.
No Apollo. No Clay. No Smartlead. Just Apify, Instantly, and one prompt inside Claude.
$200/mo. Three Tools. That's It.
Apify scrapes the leads. Google Maps, reviews, websites, contact info, the whole picture. Pay-per-use. Roughly 50 to 100 bucks a month depending on volume.
Instantlysends and verifies the emails. Pre-warmed inboxes so you don't land in spam on day one. 97 bucks a month entry tier.
Claude is the brain. It runs the Apify actors, writes the custom opener for every single lead, and pushes the list straight into Instantly. 20 bucks a month for Claude Pro.
People will tell you that you need Apollo and Clay for B2B outreach. For local businesses you don't. Their info is on Google Maps and their own website. You're paying $300+/mo for data you can scrape for $15.
Connect Apify as a Custom Connector
Apify ships an official hosted MCP server. No CLI. No npm install. You paste one URL into Claude.
How to add it:
- Make a free account at apify.com.
- In Claude (web or desktop), go to Settings → Connectors → Add custom connector.
- Name it "Apify". Paste this URL:
Click Add. Claude opens an Apify OAuth window. Sign in, approve access, done. The Apify tools are now live in your session.
Prefer a token instead of OAuth? Same URL, just add a header: Authorization: Bearer YOUR_APIFY_TOKEN. Token lives at apify.com under Settings → Integrations.
Connect Instantly as a Custom Connector
Same drill. Instantly ships an official hosted MCP server. Paste one URL, paste your API key, done.
How to add it:
- Sign up at instantly.ai and grab your API key (Settings → Integrations → API Keys).
- In Claude, go to Settings → Connectors → Add custom connector.
- Name it "Instantly". Paste this URL and swap in your real API key at the end:
Replace YOUR_API_KEY with the key you just copied from Instantly. Click Add. Connected.
Now the part everyone skips. Inside Instantly, buy pre-warmed inboxes. Sending cold from one Gmail is suicide. You need 10 to 20 warmed-up domains rotating so you can push 400+ emails a day without hitting spam.
Pre-warmed accounts cost about $3 to $5 each. Worth every dollar.
Want the Output Pushed Straight to Google Sheets?
By default Claude will produce a downloadable CSV right inside the chat. That works fine. Open it in Numbers, Excel, or upload it to Google Sheets.
If you want the leads to land in a live Google Sheet automatically, add a Google Sheets MCP connector. Easiest option: use the hosted one from Composio.
- Sign up at composio.dev. Connect your Google account.
- Grab the Google Sheets MCP URL from your Composio dashboard.
- In Claude, Settings → Connectors → Add custom connector. Paste the URL.
That's it. Claude will now produce a real Sheet with every run instead of a CSV. The prompt handles both automatically.
Paste THIS Prompt Into Claude
Open a new chat in Claude (with the Apify and Instantly connectors enabled). Paste the prompt below. Claude will ask you three things. Niche. Location. Target count. Tell it "dental practices in Austin TX, 200 leads" or "law firms in Miami, 500 leads" or anything else. It does the rest.
The full prompt is at the bottom of this guide. Scroll to copy it. Or click the button right here.
Jump to the Full Prompt ↓The 4-Step Scrape Pipeline
Once you paste the prompt, here's what Claude runs for you in the background.
1. Google Maps Scraper. Pulls every business matching the niche in the city. Name, address, phone, website, rating, review count.
2. Reviews Scraper.Pulls the 15 most recent reviews per business. Keeps the bad ones. Those are gold. Slow callbacks, no-shows, missed appointments. That's your hook.
3. Website Crawler.Visits their site. Checks if they have online booking. Detects live chat. Names the booking system. Pulls the owner's name from the About page.
4. Contact Info Scraper. Pulls emails from the website. Prefers owner@firstname over info@. Falls back to info@ if needed.
The Custom Opener Layer
Most cold email guides tell you to "personalize" without telling you how. This is how.
For every single lead, Claude takes the scraped data and writes a 2-sentence opener that references ONE specific, verifiable fact about that business. Then connects it to a business pain.
Example for a dental practice in the spreadsheet:
That opener does 90% of the work. It proves you looked. It calls out a real pain. The rest of the email is templated. You only personalize the first 2 sentences. Scale plus authenticity, both at once.
Tell Claude to Push the List Into Instantly
Once the spreadsheet (CSV or Sheet) is ready, you go right back into the same Claude chat and say:
Claude pulls the rows, verifies the emails through Instantly, sets up the campaign, and pauses for your final sign-off. Hit go. The system runs.
Record a Short Video. Push the Booking.
When someone replies, you don't pitch in text. You record a quick Loom. 60 to 90 seconds. Walk them through what you can build for their specific business. Reference what you scraped. End with a Calendly link.
Why this works: video already separates you from 99% of cold outreach. And by the time they're on the call, they've already watched you for a minute. The trust gap is closed before you say hello.
The Loom is templated too. You record the front and back once. You only film the middle 30 seconds per lead, where you reference their specific pain.
The Math Nobody Shows You
Stack cost: $200/mo (Apify + Instantly + Claude).
Volume: 400 emails/day = 8,000/month with 20 warmed inboxes.
Open rate: 40-55% with custom openers + the right subject line.
Reply rate: 2-5% on cold to local businesses.
Calls booked: 30-50% of replies.
Close rate: 20-40% on calls when the offer is full-business automation, not a single feature.
Deal size: $1,000 to $10,000 setup plus monthly retainer.
The Pattern That's Beat Everything Else Over 10K Sends
Long subject lines lose. Salesy subject lines lose. Anything that smells like a pitch lands in spam or the trash. The pattern that wins is short, lowercase, and conversational. Like you're forwarding a message to a friend.
High-performing patterns:
- quick question, {{first_name}}
- {{business_name}} + 2 mins?
- noticed something about {{business_name}}
- this caught my eye on your site
- idea for {{business_name}}
All lowercase. No emojis. No exclamation marks. Under 6 words. The goal of a subject line is one thing: get the email opened. Once it's open, the custom opener does the rest.
The exact subject line I've sent over 10,000 times (the one that crushes everything else) is dropped inside the community. Link at the bottom.
Things That'll Tank Your Open Rate
One inbox.If you're sending from a single Gmail you're cooked in a week. Rotate 10 to 20 warmed inboxes minimum.
No warmup.New domains need 14 to 21 days of warmup before you send a single cold email. Instantly handles this automatically. Don't skip.
Links and images.First email should have zero links and zero images. Your CTA is a question, not a Calendly link. You get them to reply "yes", then you send the link.
Generic openers.If your opener doesn't prove you looked at them, your reply rate dies. The custom opener step is the whole game.
Pitching the whole offer in email 1.Cold email opens the door. The pitch happens on the call. Don't try to close in writing.
Copy + Paste This Into Claude
Drop this into any Claude chat that has the Apify and Instantly connectors enabled (Google Sheets connector is optional). Claude will ask for your niche, location, and target count. Then it runs the whole pipeline. Output is a CSV (or Google Sheet) with custom openers ready to push into Instantly.
# Local Business Lead Enrichment Pipeline
You are going to build me a fully enriched, personalized lead list for cold outreach. Use the Apify MCP for all scraping. Use the Instantly MCP later for sending. Output the enriched list as a CSV (always) plus a Google Sheet (if a Google Sheets MCP is connected).
## Inputs I'll Give You
- Niche: [e.g. dental practices, law firms, real estate agents]
- Location: [e.g. Austin, TX]
- Target count: [e.g. 200 leads]
Ask me for these three things before starting if I haven't provided them.
## What To Do
### Step 1. Source the list
Use Apify actor compass/crawler-google-places to scrape businesses matching the niche in the location.
Input:
{
"searchStringsArray": ["<niche>", "<niche synonym 1>", "<niche synonym 2>"],
"locationQuery": "<location>",
"maxCrawledPlacesPerSearch": <target_count>,
"language": "en",
"skipClosedPlaces": true,
"maxReviews": 0
}
Filter results:
- reviewsCount >= 15
- totalScore between 3.3 and 4.7
- Must have a website
### Step 2. Scrape recent reviews
For each placeId, use compass/google-maps-reviews-scraper:
{
"placeIds": [<placeIds from Step 1>],
"maxReviews": 15,
"reviewsSort": "newest",
"language": "en"
}
Keep the 2 most recent reviews with stars <= 3 per business.
### Step 3. Crawl their websites
For each business website, use apify/website-content-crawler:
{
"startUrls": [{"url": "<website>"}],
"maxCrawlPages": 4,
"saveMarkdown": true,
"crawlerType": "playwright:adaptive"
}
Detect:
- has_online_booking (search HTML for: book online, schedule, calendly, zocdoc, dentrix, nexhealth, jane app, acuity)
- has_live_chat (intercom, drift, tidio, tawk, podium)
- booking_system_detected (name it if found)
- owner_or_lead_name (from About / Meet the Team)
- services_or_specialties (top 3-5 H2/H3 items)
### Step 4. Pull emails
Use vdrmota/contact-info-scraper:
{
"startUrls": [{"url": "<website>"}],
"maxDepth": 2,
"maxRequestsPerStartUrl": 8,
"useBrowser": false,
"considerChildFrames": true
}
Prefer owner@/firstname@ over info@. Keep info@ as fallback.
### Step 5. Generate the custom opener (you do this inline)
For every row, write a 2-sentence opener using this rubric:
- Reference ONE specific, verifiable fact from the scraped data.
- Connect it to a business pain automation can fix.
- No compliments. No "I came across your business."
- Max 40 words. Don't quote reviews directly. Reference the pattern.
### Step 6. Output the spreadsheet
Always produce a downloadable CSV in chat titled "<niche>-<location>-leads-<today>.csv".
Columns in this order:
business_name | owner_name | address | phone | website | email |
rating | review_count | last_negative_review_1 | last_negative_review_2 |
has_online_booking | has_live_chat | booking_system | services |
custom_opener | place_id | google_maps_url
If a Google Sheets MCP is connected, also create a new Sheet with the same name and columns. Freeze the header row. Make custom_opener wider. Share the link with me.
Show me 3 sample rows at the end so I can spot-check opener quality.
## My Offer (so you know what the opener leads to)
I help [niche] owners automate the parts of their business that quietly lose them money. Intake, follow-up, no-shows, reviews, recall, scheduling. Not one tool. A full automation system, 5-6 workflows, set up in 2-3 weeks. The cold email opens with ONE proven pain from the scrape. The full offer reveals on the call.
## The Templated Body (use under every custom_opener inside Instantly)
Subject: quick thought on {{business_name}}
{{custom_opener}}
We help [niche] owners automate the boring stuff that quietly costs them clients. Online booking + reminders, missed-call text-back, recall outreach, review requests, intake. Usually 5-6 workflows. Set up in 2-3 weeks. Runs in the background forever.
Worth a 15-min look at where yours is leaking?
[Your name]
[Your agency]
## Things to watch for
- If most businesses have no website, tell me. The niche/location may not be a fit.
- If openers start sounding generic, stop and ask me for niche-specific pain angles before continuing.
- Never fabricate data. If a field is unknown, leave it blank.
Start by asking me for the niche, location, and target count.Tip: save this as a Project inside Claude (Projects → New Project → Custom instructions). Now you can start a new chat and just say "dental practices in Austin, 200 leads" and it runs.
All Resources
Prefer watching over reading?
Watch the Reel on Instagram →