Course content
Read the playbook
Module-by-module deep dive. Every prompt, template, and number is here.
1. Pick a winnable niche and a winnable city
The single biggest reason new agency owners fail at lead gen isn't the tools — it's spraying outreach across plumbers, dentists, lawyers, and roofers in twelve cities. You won't be credible to any of them.
Pick one niche and one geography for your first 90 days. The niche has to meet four criteria:
- High lifetime value of a customer. A $4,000 roofing job > a $40 nail salon appointment. Higher LTV means the business owner can afford a $500–$2,000/mo retainer without thinking twice.
- Visible online presence. If they don't have a website or GBP, they aren't ready to buy ongoing services. They're ready to buy a one-off site, then ghost.
- Geographic monopoly. Plumbers serve a city. Roofers serve a metro. Lawyers serve a county. They literally cannot ignore Google Maps. Avoid niches that sell nationally — those will always pick a national agency.
- You can talk to them without lying. If you couldn't sit through a 30-minute call about flat-roof TPO membranes, don't pick roofing.
Pick the city the same way: where you live, or a metro of 200k–2M where local agencies are still mediocre. New York and L.A. are saturated. Wichita is not.
2. Build the ideal customer profile (ICP)
Five filters separate a great prospect from a junk one:
| Filter | Why it matters | How to find it |
|---|---|---|
| Revenue $500k–$10M | Big enough to afford retainers, small enough to talk to the owner | Glassdoor headcount × industry $/employee, ZoomInfo, Apollo, ReverseContact |
| 1–25 employees | Owner is still the decision-maker | LinkedIn company page, Apollo, public records |
| GBP exists with reviews | They take Google seriously | Maps API or scrape, count reviews |
| Website < 5 years old or stale | Either ready to upgrade or ready to be replaced | Wayback Machine, Wappalyzer, BuiltWith |
| Running ads now | They already pay for marketing | Facebook Ads Library, Google Ads Transparency Center |
3. Lead sources that actually work
Don't buy a list. Build one. Sources, in order of quality:
3.1 Google Maps
The gold standard. Every local business with intent to be found is here. You can scrape (carefully) using the Places API or third-party tools like Outscraper, SerpApi, BrightData, Lead Scrape, or D7 Lead Finder. You'll get name, address, phone, website, GBP URL, category, rating, and review count.
3.2 Yelp / Apple Maps / Bing Places
Cross-reference. Businesses on Yelp but not on Google Maps are usually behind on the basics — easy "starter" pitch. Apple Maps via Apple Business Connect is increasingly important; many businesses haven't claimed.
3.3 Industry directories
Niche directories (Avvo for lawyers, RealSelf for med spas, HomeAdvisor / Angi for trades, Healthgrades for medical) often expose owner names and category data that GBP doesn't.
3.4 Facebook & Google Ads libraries
If a business is currently buying ads, they understand spending money on marketing. Filter your list to "currently running ads" and you'll close 2–3× faster.
3.5 OpenCorporates / Secretary of State
Free, machine-readable corporate registries with owner names, registered addresses, and incorporation dates. Brilliant for finding "businesses that registered in the last 6 months" — they need everything.
4. Scraping and harvesting (legally)
The non-lawyer summary: scraping public data is generally legal in the U.S. (see hiQ v. LinkedIn), but you must respect robots.txt, ToS where applicable, rate limits, and personal-data laws (GDPR/CCPA) if you collect emails or names.
4.1 Two valid patterns
- Use official APIs. Google Places API, Yelp Fusion, Bing Maps. Pay per call. Predictable, ToS-compliant, but expensive at scale (~$5–17 per 1k calls).
- Use a managed scraper. Outscraper, Apify, BrightData. They handle proxies, captchas, and rate limits. ~$0.001–0.01 per record. Much cheaper at scale and within most providers' ToS as long as the source is publicly accessible.
4.2 The "scrape once, enrich forever" pattern
Don't re-scrape the same city every week. Pull a complete list once (e.g., "all dentists in Phoenix, AZ"), store it in a database (Airtable / Postgres), and re-enrich on a 90-day cycle. Most local-business attributes don't change — owner names, websites, addresses, ad-running status do, slowly.
5. Enrichment with AI
The raw scrape gives you company data. To run real outreach, you need person data: owner name, decision-maker email, mobile, LinkedIn. Enrichment options:
- Apollo.io — best free tier, ~95% accuracy on B2B emails.
- Clay — best for AI-driven workflows; you can chain GPT-4 prompts inline ("read this site and extract the owner's name").
- Hunter.io — domain-pattern emails, cheap.
- Lemlist Lemwarm + Lemfinder — bundled with sequencing.
- ReverseContact — LinkedIn URL from email, useful for personalization.
- Snov.io / Skrapp — backups.
5.1 The four enrichment fields that matter most
- Decision-maker first name. Without this, every email starts "Hi there" and goes to spam.
- Verified email. Use NeverBounce or ZeroBounce. Anything that comes back "risky" gets deleted, not "tried anyway."
- Mobile or business phone. For SMS or Day-3 cold call.
- Personalization hook. One AI-generated sentence per lead about something on their website. Detail in Course 02.
5.2 The AI personalization prompt
You are a B2B research assistant.
Given a local business website, return one short, specific
observation (1 sentence, < 25 words) that a salesperson could
mention in cold outreach to make it feel personal.
Only output the sentence. No preamble.
Examples:
- "I noticed your homepage still has the 2022 'COVID safety'
banner up — easy quick fix."
- "Your latest blog post on flat-roof leaks is great —
you're not capturing emails on it though."
Website content:
{{ scraped_website_text }}
Run this once per lead (about $0.001 with GPT-4o-mini). The output goes into a custom field that drops into your email template. This is what separates a 0.5% reply rate from a 4% reply rate.
6. Lead scoring and prioritization
You'll never get to all of them. Score, then sort.
| Signal | Points |
|---|---|
| Currently running paid ads | +25 |
| 4.0+ rating with 50+ reviews | +20 |
| Website built before 2021 or no SSL | +15 |
| No mobile-friendly site | +15 |
| 5+ employees on LinkedIn | +10 |
| Owner identified by name | +10 |
| Verified email available | +5 |
| 0 reviews / closed / out-of-business signal | −40 |
Anything > 60 goes into the active outreach queue. 30–60 gets a single touch. < 30 is suppressed.
7. CRM setup that doesn't drown you
For your first 200 customers, you do not need Salesforce. You need a tool that does four things:
- Stores 10k+ rows of company + contact data with custom fields.
- Lets you filter, segment, and bulk-edit.
- Connects to your sequencer (more in Course 02).
- Shows pipeline stages: New → Contacted → Replied → Booked → Closed.
Three reasonable choices:
- Airtable — fastest to set up, native Zapier/Make support, $0–$20/mo.
- HubSpot Free CRM — proper pipeline, deals, contacts; great if you'll hire SDRs later.
- Notion + Buttondown / Loops — only if you live in Notion. Friction at scale.
7.1 Recommended Airtable schema
- Companies table: name, address, phone, website, niche, rating, review count, ad-running, score, status.
- Contacts table: linked Company, first name, last name, role, email, phone, LinkedIn, personalization hook.
- Touches table: linked Contact, channel, sequence step, sent at, replied at, outcome.
8. Weekly cadence and KPIs
Make this an operating rhythm, not a project.
8.1 Weekly inputs
- Scrape 200–500 net-new leads from Maps in your niche/city.
- Run enrichment + verification on yesterday's batch.
- Score everything; load top 100 into the sequencer.
8.2 KPIs to track on a single dashboard
| Metric | Healthy benchmark |
|---|---|
| Leads added per week | 200–500 |
| Email deliverability | > 95% to inbox |
| Reply rate (cold) | 2–6% |
| Positive reply rate | 0.8–2% |
| Calls booked / 100 contacted | 1–3 |
| Close rate / call | 15–35% |
What to do this week
- Pick one niche and one city. Write it down.
- Scrape 500 businesses in that niche/city via Outscraper or the Places API.
- Set up the Airtable schema above; load the data.
- Enrich the top 100 with Apollo + a verification tool.
- Run the personalization prompt on those 100.
- Hand off to Course 02 — the outreach engine.