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.
Strong starter niches. Med spas, dental practices, plumbers, roofers, HVAC, real-estate teams, personal-injury law, chiropractors, pest control, garage-door companies, fence builders, small construction. Avoid: restaurants, retail, bars, salons (low LTV, high churn).

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:

FilterWhy it mattersHow to find it
Revenue $500k–$10MBig enough to afford retainers, small enough to talk to the ownerGlassdoor headcount × industry $/employee, ZoomInfo, Apollo, ReverseContact
1–25 employeesOwner is still the decision-makerLinkedIn company page, Apollo, public records
GBP exists with reviewsThey take Google seriouslyMaps API or scrape, count reviews
Website < 5 years old or staleEither ready to upgrade or ready to be replacedWayback Machine, Wappalyzer, BuiltWith
Running ads nowThey already pay for marketingFacebook 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

  1. 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).
  2. 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.

Three things to never do. (1) Send unsolicited commercial email to EU contacts without a documented basis (GDPR fines start at €10k). (2) Scrape behind logins (CFAA risk in the U.S.). (3) Buy bulk B2C lists from third-party brokers — they're stale and the deliverability is brutal.

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

  1. Decision-maker first name. Without this, every email starts "Hi there" and goes to spam.
  2. Verified email. Use NeverBounce or ZeroBounce. Anything that comes back "risky" gets deleted, not "tried anyway."
  3. Mobile or business phone. For SMS or Day-3 cold call.
  4. 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.

SignalPoints
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:

  1. Stores 10k+ rows of company + contact data with custom fields.
  2. Lets you filter, segment, and bulk-edit.
  3. Connects to your sequencer (more in Course 02).
  4. 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

MetricHealthy benchmark
Leads added per week200–500
Email deliverability> 95% to inbox
Reply rate (cold)2–6%
Positive reply rate0.8–2%
Calls booked / 100 contacted1–3
Close rate / call15–35%
The simplest stack to start. Outscraper for Google Maps → Apollo for emails → NeverBounce for verification → Clay for AI personalization → Airtable for storage → Smartlead.ai for sending. Total cost at 1k leads/mo: ~$200/mo.

What to do this week

  1. Pick one niche and one city. Write it down.
  2. Scrape 500 businesses in that niche/city via Outscraper or the Places API.
  3. Set up the Airtable schema above; load the data.
  4. Enrich the top 100 with Apollo + a verification tool.
  5. Run the personalization prompt on those 100.
  6. Hand off to Course 02 — the outreach engine.