How We Generated 6,000+ B2B Leads in 60 Minutes: The Ultimate No-Code System Using n8n, Google Maps, and SearchAPI

Business consultant explaining lead generation strategy to team

TLDR: This step-by-step guide shows how to build a no-code lead generation system that extracts thousands of business contacts from Google Maps using n8n, SearchAPI.io, and Google Sheets – completely free and in under 60 minutes.

Why This B2B Lead Generation System Is Game-Changing

Are you sick of digging for leads? Paying for gold in a dried upstream? Same here. That’s why we built an automation that does the heavy lifting – it’s been pumping out over $30,000 in recurring revenue every month for our agency.

This isn’t some theoretical framework or guru BS. This is the actual workflow that’s printing money for our agency right now. Today, I’m sharing our real automation built using tools any halfway competent marketer can access.

In this comprehensive guide (Part 1 of our lead generation series), I’ll show you exactly how to build the same system we use daily to extract thousands of targeted B2B leads without writing a single line of code.

Here’s what makes this system so powerful:

  • 100% No-Code Solution: Built using n8n, accessible to anyone with basic marketing skills
  • Completely Free to Start: Generate ~6,000 leads before needing paid options
  • Rapid Setup: Complete build time of just 60 minutes, even with zero tech experience
  • Rich Data Extraction: Business names, phone numbers, websites, addresses, and more
  • Fully Automated: Set it up once and let it run while you sleep (or binge-watch Netflix)

What Data You’ll Extract

This automation vacuums business data straight from Google Maps into a spreadsheet, including:

  • Business name and address (actual physical address)
  • Phone number (direct lines to call)
  • Website URL (if they have one)
  • Ratings and reviews
  • Business category
  • GPS coordinates
  • Place ID (critical for future automations)

In subsequent videos, I’ll show you how to auto-verify every contact, craft an outreach system that doesn’t scream “I copied this from a SaaS blog,” and do it all while staying compliant enough to sleep at night.

The Tools You’ll Need

  1. n8n – The no-code automation platform powering our workflow
  2. SearchAPI.io – For extracting data from Google Maps (comes with 100 free credits)
  3. Google Sheets – To store your extracted leads
  4. GS Location Changer – Chrome extension to set your Maps location
  5. Google Cloud – For API access

The only thing that might cost you money is your n8n Cloud subscription, unless you self-host it (which I’ll show you how to do for free if this post gets enough engagement).

n8n workflow automation interface for lead generation system
The n8n workflow interface showing the complete lead generation automation process

Step 1: Setting Up Your Google Sheet

First, create a new Google Sheet with two tabs:

Tab 1: “URLs” with these columns:

  • URL
  • Service
  • City
  • State
  • Completed

Tab 2: “Results” with these columns:

  • name
  • phone
  • website
  • rating
  • reviews
  • type
  • address
  • place_id
  • gps_coordinates
  • types

Step 2: Creating Your n8n Workflow

Initial Setup

  1. Create a new workflow in n8n
  2. Add a manual trigger as your first node (since we only want to trigger this when we want, not continuously)

Setting Up Google Sheets Integration

python1. Add a Google Sheets node
2. Connect to your Google account
3. Select "Read" operation
4. Choose your sheet and the "URLs" tab
5. Add a filter to only return rows where "Completed" is blank
6. Set "Return All Matches" to false to get one row at a time
7. Rename to "Get Pending Requests Queries"

If you need to create Google Cloud credentials for the first time:

  1. Go to Google Cloud Console
  2. Create a new project
  3. Navigate to “APIs & Services” > “Credentials”
  4. Create an OAuth 2.0 Client ID for a web application
  5. Add the n8n redirect URL provided in the credentials dialog
  6. Enable the Google Sheets API for your project
  7. Copy the client ID and secret back to n8n

Creating the Filter Top Results Node

Add a code node and paste this JavaScript code:

javascript// Filter Top Results
// Only take the first 3 unfinished searches
// This assumes items are already filtered for uncompleted searches
const top3 = items.slice(0, 3);

// Add batch information for tracking
const timestamp = new Date().toISOString();
const itemsWithInfo = top3.map((item, index) => {
  item.json.processingBatch = timestamp;
  item.json.batchPosition = index;
  return item;
});

return itemsWithInfo;

Rename this node to “Filter Top Results” for better organization.

Parsing Keywords and Location

Next, add a “Set” node to extract the service keyword and geo-coordinates from the Google Maps URL:

javascript// First field: keyword
// This will be the service we're searching for
{{ $json.Service }}

// Second field: geo
// This complex expression extracts coordinates from the Maps URL
{{ ($json.URL).match(/@([0-9.+-]+,[0-9.+-]+)/)[1] }}

Rename this node to “Parse Keywords and Location”.

Setting Up SearchAPI.io Integration

Now we need to set up three HTTP Request nodes to fetch the Google Maps search results:

  • Create an account at SearchAPI.io to get your API key
  • Add an HTTP Request node
  • Set Method to GET
  • Use URL: https://www.searchapi.io/api/v1/search
  • Set up Query Parameters:
    • engine: google_maps
    • q: {{ $json.keyword }}
    • ll: @{{ $json.geo }},10z
    • page: 1
    • api_key: YOUR_API_KEY
  • Add Authentication:
    • Type: Generic Credential Type
    • Auth Type: Query Auth
    • Add your SearchAPI.io API key
  • Duplicate this node twice more for pages 2 and 3, changing only the “page” parameter to 2 and 3 respectively
  • Rename these nodes to “Fetch Maps Page 1”, “Fetch Maps Page 2”, and “Fetch Maps Page 3”

Combining and Processing Results

  1. Add a Merge node to combine all three HTTP requests
    • Set Number of Inputs to 3
    • Connect all three “Fetch Maps” nodes to it
    • Rename to “Combine Results”
  2. Add a Split Out node
    • Set Field to Split Out: local_results
    • Set to Include: All Other Fields
    • Rename to “Extract Business Data”
  3. Add a Code node to deduplicate the results:
javascript// Deduplicate results based on place_id
const seen = new Set();
const uniqueResults = [];

for (const item of items) {
  const placeId = item.json.local_results?.place_id;
  
  if (placeId && !seen.has(placeId)) {
    seen.add(placeId);
    uniqueResults.push(item);
  }
}

// Ensure no more than 20 results per page (60 total across 3 pages)
return uniqueResults.slice(0, 60);

Rename this node to “Deduplicate Results”.

Saving Data to Google Sheets

  1. Add a Google Sheets node
    • Operation: Append
    • Document: Select your Google Sheet
    • Sheet: Results tab
    • Map the following fields:javascriptplace_id: {{ $json.local_results.place_id }} name: {{ $json.local_results.title }} address: {{ $json.local_results.address }} website: {{ $json.local_results.website }} phone: {{ $json.local_results.phone }} rating: {{ $json.local_results.rating }} reviews: {{ $json.local_results.reviews }} type: {{ $json.local_results.type }} gps_coordinates: {{ $json.local_results.gps_coordinates }} types: {{ $json.local_results.types }}
    • Rename to “Save Business Data”
  2. Add another Google Sheets node to mark the task as completed
    • Operation: Update
    • Document: Select your Google Sheet
    • Sheet: URLs tab
    • Select “URL” as the matching field
    • Key Value:javascriptURL: {{ $('Get Pending Requests Queries').item.json.URL }} Completed: done
    • Rename to “Mark As Done”

Creating the Loop

  1. Add a Split In Batches node
    • Batch Size: 3 (or however many URLs you’re processing)
    • Rename to “Loop Over Items”
    • Connect this back to your Google Sheets “Get Pending Requests” node
4

Step 3: Testing and Running the Workflow

To test our workflow, we need to add some URLs to our spreadsheet. Here’s how:

  1. Install the GS Location Changer Chrome extension
  2. Set your location to anywhere you want to search (e.g., Columbus, Ohio)
  3. Go to Google Maps and search for a business category (e.g., “barber”)
  4. Copy the URL from the search results
  5. Paste it into your Google Sheet under the “URL” column
  6. Add the search term under “Service” column
  7. Add the city and state
  8. Leave “Completed” blank
  9. Repeat for each business category you want to search

Now run your workflow by clicking “Test Workflow” in n8n. Watch as it:

  1. Fetches the first URL from your sheet
  2. Extracts the search term and coordinates
  3. Makes three API calls to Google Maps via SearchAPI
  4. Combines, extracts, and deduplicates the results
  5. Saves all the business data to your Results sheet
  6. Marks the URL as completed
  7. Moves on to the next URL

The Results: 6,000+ Leads Automatically

When I tested this workflow with just three search terms, it extracted 177 business leads in seconds. Scaling this up, you can easily generate 6,000+ leads with your free SearchAPI credits – all without writing a single line of code!

Each lead includes the business name, phone number, website, address, and more – everything you need to start your outreach campaign.

What’s Next in Our Lead Generation Series

This is just the beginning of our lead generation system. In the upcoming parts of this series, I’ll show you how to:

  1. Auto-verify every contact we’re gathering
  2. Craft an outreach system that doesn’t sound like a robot
  3. Stay compliant while scaling your lead generation
  4. Convert these leads into paying clients

Why This System Works So Well

This automation works because it leverages the power of Google Maps (which has verified business information) combined with the efficiency of n8n’s workflow automation. Unlike scraping random websites or buying outdated lead lists, you’re getting fresh, relevant business data specific to your target locations and industries.

The best part? This entire system can be built in under 60 minutes and run continuously to fill your pipeline with qualified leads while you focus on more important tasks – like actually closing deals!

The Full System That’s Making Us $30K/Month

This lead generation system is the actual workflow that’s generating over $30,000 in recurring monthly revenue for our agency. It’s part of a larger lead generation and customer acquisition system that we use to find, qualify, and convert B2B leads.

Remember, this is PART 1 of the series. In subsequent articles, we’ll dive deeper into the entire process, showing you how to transform these cold leads into paying clients.

Conclusion & Next Steps

Now you have a powerful, automated lead generation system that can extract thousands of targeted B2B leads without any coding skills. This is the exact foundation of what’s currently generating $30K+ monthly for our agency.

If you have any questions about this workflow or run into any issues, drop a comment below, and I’ll respond as soon as possible. Every tool and code snippet is available in this guide for easy implementation.

Ready to take your lead generation to the next level? Stay tuned for Part 2, where we’ll transform these prospects into qualified leads and potentially customers!


Want me to share how to self-host n8n for free? Let me know in the comments! // Deduplicate results based on place_id const seen = new Set(); const uniqueResults = [];

for (const item of items) { const placeId = item.json.local_results?.place_id;

if (placeId && !seen.has(placeId)) { seen.add(placeId); uniqueResults.push(item); } }


Rename this node to "Deduplicate Results".

### Saving Data to Google Sheets

1. Add a Google Sheets node
   - Operation: Append
   - Document: Select your Google Sheet
   - Sheet: Results tab
   - Map the following fields:
     - place_id: {{ $json.local_results.place_id }}
     - name: {{ $json.local_results.title }}
     - address: {{ $json.local_results.address }}
     - website: {{ $json.local_results.website }}
     - phone: {{ $json.local_results.phone }}
     - rating: {{ $json.local_results.rating }}
     - reviews: {{ $json.local_results.reviews }}
     - type: {{ $json.local_results.type }}
     - gps_coordinates: {{ $json.local_results.gps_coordinates }}
     - types: {{ $json.local_results.types }}
   - Rename to "Save Business Data"

2. Add another Google Sheets node to mark the task as completed
   - Operation: Update
   - Document: Select your Google Sheet
   - Sheet: URLs tab
   - Select "URL" as the matching field
   - Key Value:
     - URL: {{ $('Get Pending Requests Queries').item.json.URL }}
     - Completed: done
   - Rename to "Mark As Done"

### Creating the Loop

1. Add a Split In Batches node
   - Batch Size: 3 (or however many URLs you're processing)
   - Rename to "Loop Over Items"
   - Connect this back to your Google Sheets "Get Pending Requests" node

## Step 3: Testing and Running the Workflow

To test our workflow, we need to add some URLs to our spreadsheet. Here's how:

1. Install the GS Location Changer Chrome extension
2. Set your location to anywhere you want to search (e.g., Columbus, Ohio)
3. Go to Google Maps and search for a business category (e.g., "barber")
4. Copy the URL from the search results
5. Paste it into your Google Sheet under the "URL" column
6. Add the search term under "Service" column
7. Add the city and state
8. Leave "Completed" blank
9. Repeat for each business category you want to search

Now run your workflow by clicking "Test Workflow" in n8n. Watch as it:

1. Fetches the first URL from your sheet
2. Extracts the search term and coordinates
3. Makes three API calls to Google Maps via SearchAPI
4. Combines, extracts, and deduplicates the results
5. Saves all the business data to your Results sheet
6. Marks the URL as completed
7. Moves on to the next URL

## The Results: 6,000+ Leads Automatically

When I tested this workflow with just three search terms, it extracted 177 business leads in seconds. Scaling this up, you can easily generate 6,000+ leads with your free SearchAPI credits - all without writing a single line of code!

Each lead includes the business name, phone number, website, address, and more - everything you need to start your outreach campaign.

## What's Next in Our Lead Generation Series

This is just the beginning of our lead generation system. In the upcoming parts of this series, I'll show you how to:

1. Auto-verify every contact we're gathering
2. Craft an outreach system that doesn't sound like a robot
3. Stay compliant while scaling your lead generation
4. Convert these leads into paying clients

## Why This System Works So Well

This automation works because it leverages the power of Google Maps (which has verified business information) combined with the efficiency of n8n's workflow automation. Unlike scraping random websites or buying outdated lead lists, you're getting fresh, relevant business data specific to your target locations and industries.

The best part? This entire system can be built in under 60 minutes and run continuously to fill your pipeline with qualified leads while you focus on more important tasks - like actually closing deals!

## The Full System That's Making Us $30K/Month

This lead generation system is the actual workflow that's generating over $30,000 in recurring monthly revenue for our agency. It's part of a larger lead generation and customer acquisition system that we use to find, qualify, and convert B2B leads.

Remember, this is PART 1 of the series. In subsequent articles, we'll dive deeper into the entire process, showing you how to transform these cold leads into paying clients.

## Conclusion & Next Steps

Now you have a powerful, automated lead generation system that can extract thousands of targeted B2B leads without any coding skills. This is the exact foundation of what's currently generating $30K+ monthly for our agency.

If you have any questions about this workflow or run into any issues, drop a comment below, and I'll respond as soon as possible. Every tool and code snippet is available in this guide for easy implementation.

Ready to take your lead generation to the next level? Stay tuned for Part 2, where we'll transform these prospects into qualified leads and potentially customers!

---

*Want me to share how to self-host n8n for free? Let me know in the comments!*
// Filter Top Results
// Only take the first 3 unfinished searches
// This assumes items are already filtered for uncompleted searches
const top3 = items.slice(0, 3);

// Add batch information for tracking
const timestamp = new Date().toISOString();
const itemsWithInfo = top3.map((item, index) => {
  item.json.processingBatch = timestamp;
  item.json.batchPosition = index;
  return item;
});

return itemsWithInfo;

Rename this node to “Filter Top Results” for better organization.

Parsing Keywords and Location

Next, add a “Set” node to extract the service keyword and geo-coordinates from the Google Maps URL:

javascript// First field: keyword
// This will be the service we're searching for
{{ $json.Service }}

// Second field: geo
// This complex expression extracts coordinates from the Maps URL
{{ ($json.URL).match(/@([0-9.+-]+,[0-9.+-]+)/)[1] }}

Rename this node to “Parse Keywords and Location”.

Setting Up SearchAPI.io Integration

Now we need to set up three HTTP Request nodes to fetch the Google Maps search results:

  1. Create an account at SearchAPI.io to get your API key
  2. Add an HTTP Request node
  3. Set Method to GET
  4. Use URL: https://www.searchapi.io/api/v1/search
  5. Set up Query Parameters:
    • engine: google_maps
    • q: {{ $json.keyword }}
    • ll: @{{ $json.geo }},10z
    • page: 1
    • api_key: YOUR_API_KEY
  6. Add Authentication:
    • Type: Generic Credential Type
    • Auth Type: Query Auth
    • Add your SearchAPI.io API key
  7. Duplicate this node twice more for pages 2 and 3, changing only the “page” parameter to 2 and 3 respectively
  8. Rename these nodes to “Fetch Maps Page 1”, “Fetch Maps Page 2”, and “Fetch Maps Page 3”

Combining and Processing Results

  1. Add a Merge node to combine all three HTTP requests
    • Set Number of Inputs to 3
    • Connect all three “Fetch Maps” nodes to it
    • Rename to “Combine Results”
  2. Add a Split Out node
    • Set Field to Split Out: local_results
    • Set to Include: All Other Fields
    • Rename to “Extract Business Data”
  3. Add a Code node to deduplicate the results:
javascript
Facebook
Twitter
LinkedIn

Search

Search

Categories

Recent Blogs

n8n ai agent configurations
Build n8n AI Agents: AI Workflow Automations
LLM agent workflow unlocking business growth.
LLM Agents: Revolutionizing Complex Task Automation with AI Systems
The Ultimate Guide: Automating YouTube Video Transcription with RapidAPI & n8n (No Code Needed!)
Scroll to Top