Back to The Vault
Pillar · Lead Gen
07

Google Maps Lead Gen Agent

Scrape, enrich, and contact 50 qualified leads in 20 minutes for under $1.

Published July 21, 2026 · 12 min read

A man named Darren runs a two-person digital marketing agency in Fort Wayne, Indiana. His clients are local service businesses: HVAC contractors, plumbers, roofers, dentists. The kind of companies that spend money on ads but have never heard of a CRM.

Darren’s old prospecting method: drive around a neighborhood, write down the names on vans and storefronts, go home, google each one, find a phone number, call it, leave a voicemail, never hear back. On a good day, he’d identify 15 prospects and reach 3.

Last month Darren built an n8n workflow that scrapes Google Maps for every HVAC contractor within 30 miles of Fort Wayne, pulls their website, reads it with AI, writes a personalized outreach email for each one mentioning something specific from their site, and drops the whole list into a Google Sheet. Fifty qualified leads. Twenty minutes. While he’s eating breakfast.

He sent 50 emails on a Tuesday. Eight replied by Thursday. Two became clients within the month. Each client is worth $2,500/month to his agency.

This is the playbook for building that system.


Why Google Maps Is the Best Free Lead Source for Local Businesses

There are dozens of lead databases: ZoomInfo, Apollo, Lusha, UpLead. They all cost $50-200/month and their data goes stale fast. Phone numbers change. Emails bounce. Contacts leave companies.

Google Maps is different because the data is maintained by the businesses themselves. When a plumber updates their phone number, they update it on Google. When a dentist moves offices, they update their listing. The data is as fresh as the business owner keeps it.

Google Maps also tells you things a lead database doesn’t: their rating (a 3.2-star HVAC company has different needs than a 4.8-star one), their review count (a company with 12 reviews is earlier-stage than one with 340), whether their website is good or terrible (a website that looks like it was built in 2009 is a warm lead for a marketing agency), and their hours and photos (which tell you about the size and professionalism of the operation).

All of this is public, free, and structured. You just need a system to extract it at scale.


The Two Paths

Like most guides in this Vault, there are two routes depending on your comfort level:

Path A: n8n workflow (visual, no code, recommended for most people). You’ll import a pre-built workflow template, connect your API keys, and customize the search parameters. Takes about 60-90 minutes to set up the first time, then runs in minutes on demand.

Path B: Claude Code agent (more flexible, more technical). You’ll build a Claude Code skill that calls the Serper Maps API, scrapes each lead’s website via Firecrawl, and generates personalized outreach. Better for people already deep in Claude Code from Pillars 1-6.

Both produce the same output: a spreadsheet of qualified leads with personalized outreach messages.


Path A: The n8n Workflow

What You Need

  1. n8n installed locally or running on n8n Cloud ($24/mo starter). To install locally for free: install Node.js from nodejs.org, then run npm install n8n -g and n8n start. Open http://localhost:5678 in your browser.
  2. Serper API key (serper.dev, $0.20 per 1,000 search results. $2 gets you 10,000 leads.)
  3. Firecrawl API key (firecrawl.dev, free tier available for website scraping)
  4. Google account (for Google Sheets output)
  5. An AI API key for outreach generation (OpenAI, Anthropic, or Google Gemini, any will work through n8n’s built-in AI nodes)

Step 1: Import the Workflow Template

n8n has a pre-built template for exactly this use case. Go to n8n.io/workflows and search for “Google Maps lead scraper.” The template titled “Google Maps lead scraper & enrichment with AI-powered personalized outreach” (workflow #6091) is the starting point.

Import it into your n8n instance:

  1. Download the workflow JSON from the template page
  2. In your n8n dashboard, click “Add Workflow” then “Import from File”
  3. Select the JSON file
  4. The workflow appears in your editor

You’ll see a visual flow of connected nodes. Each node is one step in the pipeline. Don’t be intimidated by the number of nodes. You only need to configure a few of them.

Step 2: Configure Your API Credentials

Click on each node that needs credentials and add your keys:

Serper node: Paste your Serper API key. This is the node that queries Google Maps.

Firecrawl node: Paste your Firecrawl API key. This node scrapes each lead’s website to get context for personalization. (If the template uses a different scraping node like Bright Data or Apify, the concept is the same: connect the node that reads websites.)

Google Sheets node: Connect your Google account. Create a new spreadsheet called “Lead Pipeline” with two sheets: “Companies” and “Outreach.” Map the output fields to columns.

AI node (Claude, GPT, or Gemini): Connect your preferred AI provider. This node takes the scraped website data and generates the personalized outreach email.

Step 3: Set Your Search Parameters

This is where you define what kind of leads you want. Find the Serper node (usually the first node in the workflow) and set:

Search query: The business type you’re targeting.

HVAC contractor

Location: The geographic area.

Fort Wayne, Indiana

Radius: How far from the center point to search. Start with 30 miles for a mid-size city, 10 miles for a dense urban area.

Number of results: Start with 50. You can scale up once you’ve validated the workflow works.

Step 4: Customize the AI Outreach Prompt

Find the AI node in the workflow. This is where you tell the AI how to write the outreach email. Replace the default prompt with something specific to your service:

You are a friendly, professional outreach specialist for a digital 
marketing agency that helps local service businesses get more 
customers through Google Ads and SEO.

For each lead, you'll receive:
- Business name
- Business type/category
- Website URL
- A summary of their website content
- Their Google rating and review count
- Their phone number and address

Write a short, personalized cold email (3-4 sentences max) that:
1. Mentions something specific from their website or Google listing 
   (e.g., a service they offer, their rating, a specific page you 
   noticed)
2. Identifies one specific problem they likely have based on what 
   you see (e.g., "I noticed your site doesn't show up when I 
   search for [service] in [city]")
3. Offers a specific, low-commitment next step (e.g., "I put 
   together a free 5-minute audit of your Google presence. Want 
   me to send it over?")
4. Sounds like a human, not a template. No "I hope this email 
   finds you well."

Output format:
Subject: [personalized subject line, 5-8 words]
Body: [the email]

The personalization is the whole game. A generic “we help businesses grow” email gets deleted. An email that says “I noticed your Fort Wayne location has 47 reviews but your Decatur location only has 8, and your Decatur page isn’t ranking for ‘HVAC repair Decatur’” gets read. The AI can only personalize if it has context from the website scrape. That’s why the Firecrawl step matters.

Step 5: Run the Workflow

Click “Execute Workflow” in n8n. Watch the nodes light up in sequence:

  1. Serper queries Google Maps and returns 50 business listings
  2. For each listing, Firecrawl scrapes the business website
  3. The AI node reads the website content and generates a personalized email
  4. Google Sheets stores everything: business name, phone, email, website, rating, review count, address, the AI-generated outreach email, and a “Status” column (default: “Not Contacted”)

Expected runtime: 10-20 minutes for 50 leads, depending on how fast the website scrapes complete.

Expected cost per run:

  • Serper: 50 results = $0.01
  • Firecrawl: 50 scrapes = free tier covers this
  • AI: 50 email generations = ~$0.10-0.50 depending on model
  • Total: Under $1 for 50 fully qualified, personalized leads

Step 6: Review and Send

Open your Google Sheet. You’ll see 50 rows, each with a business and a pre-written outreach email. Read through them. The AI will occasionally get something wrong (misread a website, suggest a service you don’t offer). Fix those. Delete leads that aren’t a fit (too small, wrong category, already has a sophisticated marketing setup).

For the remaining leads (typically 30-40 out of 50), copy the emails into your outreach tool of choice. You can send directly from Gmail, use a cold email tool like Instantly or Smartlead, or even just call them using the phone number in the sheet and reference the email you “were about to send.”

Update the Status column as you go: “Emailed,” “Called,” “Replied,” “Meeting Booked,” “Client.”


Path B: The Claude Code Agent

If you’re already running Claude Code from the Meta Ads pillars, you can build this as a skill instead of an n8n workflow.

Step 1: Connect Serper and Firecrawl MCPs

claude mcp add serper -- npx -y serper-mcp
claude mcp add firecrawl -- npx -y firecrawl-mcp

Set your API keys as environment variables:

export SERPER_API_KEY=your_key_here
export FIRECRAWL_API_KEY=your_key_here

Restart Claude Code.

Step 2: Create the Lead Gen Skill

Create a Claude Code skill called "lead-gen-agent" with these 
instructions:

PURPOSE:
Scrape Google Maps for local business leads, enrich each lead by 
reading their website, and generate personalized outreach emails.

INPUTS (provided when the skill is run):
- business_type: the type of business to search for
- location: city and state
- radius: search radius in miles
- count: number of leads to find (default 50)
- service_offered: what we're selling to these leads (1 sentence)

WORKFLOW:
1. Use Serper Maps API to search for [business_type] near [location] 
   within [radius] miles. Return [count] results.
2. For each result, extract: name, address, phone, website, rating, 
   review count, category.
3. For each result with a website, use Firecrawl to scrape the 
   homepage. Extract: services offered, about page summary, any 
   obvious gaps (no SSL, old design, missing services pages).
4. For each lead, generate a personalized cold email (3-4 sentences) 
   that references something specific from their website and offers 
   a low-commitment next step related to [service_offered].
5. Output everything as a CSV saved to ./output/leads-[date].csv 
   with columns: name, address, phone, website, email_if_found, 
   rating, reviews, category, website_summary, outreach_subject, 
   outreach_body, status

Save to .claude/skills/lead-gen-agent.md

Step 3: Run It

/lead-gen-agent business_type="HVAC contractor" location="Fort Wayne, Indiana" radius=30 count=50 service_offered="Google Ads management and SEO for local service businesses"

Claude scrapes, enriches, writes outreach, and drops a CSV. Open it in Google Sheets or Excel.


Picking Your Niche Vertical (This Is the Strategy Part)

The leads are easy. The system works for any business type on Google Maps. The hard part is picking the right vertical to target. Here’s a framework:

Best verticals for this workflow:

Local service businesses that spend money on marketing but don’t have sophisticated marketing operations. They rely on word of mouth and Google. They’ve probably tried Facebook ads once and it didn’t work because nobody set up the pixel. They answer the phone when you call.

Specific examples that work well:

HVAC contractors. High customer lifetime value ($5K-15K per install), seasonal urgency (summer and winter spikes), and most of them have terrible websites. If you can show an HVAC company how to rank for “AC repair [city],” you’re worth $2K/month to them.

Plumbers. Similar profile to HVAC but with more emergency intent searches (“burst pipe plumber near me”). They value leads immediately.

Roofing companies. High ticket ($8K-25K per roof), insurance-driven demand, and most roofing companies are scaling fast and need help managing growth.

Dentists. Competitive local market, high patient lifetime value ($3K-5K over 3 years), and they understand marketing budgets because they’re used to paying for patient acquisition.

Chiropractors, med spas, veterinarians. Health and wellness professionals with recurring revenue models and local search intent.

What to avoid:

Restaurants (low margins, high churn), retail stores (too many variables), and any business that doesn’t make money from individual customers finding them online (e.g., wholesale distributors, manufacturers). The workflow works best when the lead’s revenue model is “someone searches Google, finds me, and becomes a customer.”


The Outreach Cadence That Works

Finding leads is step one. Converting them is step two. Here’s the cadence that works for local service businesses:

Day 1: Personalized email. The AI-generated email from the workflow. Short, specific, low-commitment CTA.

Day 3: Follow-up email. Even shorter. “Just bumping this up. I put together a quick audit of your Google presence. Takes 2 minutes to look at. Want me to send it?”

Day 5: Phone call. Reference the emails. “Hi, this is Darren from [agency]. I sent you a quick email earlier this week about your Google listings. Did you get a chance to see it?” Most local business owners prefer phone calls over email. The email warms them up. The call closes.

Day 10: Final email. “Last note from me. If timing’s not right, no worries. I’ll leave the audit here in case it’s useful down the road: [link].” Always leave value, not pressure.

Do not automate the sending. Write the emails with AI. Send them yourself (or through a controlled cold email tool with proper warm-up). Mass-blasting AI-generated emails from an unwarmed domain will get you flagged as spam and kill your deliverability.


Scaling: From 50 Leads to a Pipeline

Once you’ve validated the workflow in one city and one vertical, scale by:

Adding cities. Run the same search for neighboring cities. “HVAC contractor Decatur, Indiana.” “HVAC contractor Muncie, Indiana.” Each run takes 20 minutes and costs under $1.

Adding verticals. Run the same city with different business types. “Plumber Fort Wayne.” “Dentist Fort Wayne.” Same workflow, different search query.

Building a recurring pipeline. Run the workflow monthly for each city/vertical combination. Google Maps listings change: new businesses open, old ones close, ratings shift. A monthly refresh keeps your pipeline fresh.

Tracking conversions. Add columns to your Google Sheet: “First Contact Date,” “Response Date,” “Meeting Date,” “Close Date,” “Monthly Revenue.” After three months, you’ll know your exact conversion rate per vertical, your average time-to-close, and your cost per acquisition. Those numbers tell you where to focus.


The Downloadable Artifacts

This pillar comes with three files:

  1. n8n-lead-gen-workflow.json: The complete n8n workflow, pre-configured for Google Maps scraping, website enrichment, and AI outreach generation. Import directly into n8n.
  2. lead-gen-agent.md: The Claude Code skill file for Path B users. Drop into .claude/skills/ and run /lead-gen-agent.
  3. outreach-templates.md: Five tested cold email templates for different verticals (HVAC, plumbing, dental, roofing, med spa), each with a personalization prompt that works with the AI outreach node.

All three are in the Vault downloads section.


What This System Will Not Do

It will not find email addresses for every lead. Google Maps listings often don’t include email. The website scrape will find contact emails on about 60-70% of sites. For the rest, you’ll have phone numbers (which Google Maps almost always has). Phone calls work better than email for local businesses anyway.

It will not guarantee replies. Cold outreach to local businesses converts at roughly 5-15% reply rate when personalized well. That means 50 emails produces 3-8 replies. Of those, 1-3 will become meetings. The math works because the cost per lead is almost zero and each client is worth thousands per month.

It will not replace relationship building. The system gets you in the door. What keeps clients is the work you do after they sign. No amount of AI outreach compensates for bad service delivery.


What’s Next

This pillar covers outbound lead gen for B2B service providers. The final pillar in the Vault takes on the other side: inbound.

Pillar 8: SEO/GEO Agency In A Box builds a complete AI-powered content pipeline for organic traffic. Traditional SEO plus the new GEO and AEO disciplines that determine whether your content shows up in ChatGPT, Perplexity, and Google’s AI Overviews. If outbound gets you clients today, inbound gets them to come to you tomorrow.

[CTA: Read Pillar 8: SEO/GEO Agency In A Box] | [CTA: Browse the Vault]


Continue building the system.

← Back to The Vault