How to Generate 300 Leads in 20 Minutes with Google Maps API + n8n
By Grace Vaughn · June 1, 2026
When I started doing lead gen for agency clients, my process looked like this: open Google Maps, search for a niche, click on each business, copy the name and phone number into a spreadsheet, repeat 200 times.
It took hours. It was miserable. And it didn’t scale.
Now I run a single n8n workflow and have 300+ qualified leads in about 20 minutes — all without scraping or risking a ban.
Here’s exactly how it works.
Why the Google Maps API (and not scraping)
Every “Maps scraper” tool you’ll find either gets rate-limited fast or violates Google’s ToS in a way that can get your IP flagged. The official Google Places API avoids all of that:
- No bot detection
- Structured, clean data
- Free up to 28,500 requests/month on the basic tier
The tradeoff is a tiny bit of setup. It’s worth it.
What you’ll need
- A Google Cloud account (free)
- Google Places API key
- n8n (self-hosted or cloud)
- A Google Sheet for the queries and the output
Step 1: Prep your query sheet
Before touching n8n, set up two tabs in a Google Sheet:
- Queries tab — a list of business categories and locations to search (e.g.
landscaping company,Portland OR). ChatGPT is fast at generating the full combination list for you. - Results tab — columns for
placeId,name,formattedAddress, andgoogleMapsUrl. This is where qualified leads land.
Step 2: Get your Google Places API key
- Go to console.cloud.google.com
- Create a new project (or use an existing one)
- Enable the Places API
- Under Credentials, create an API key
- Restrict it to the Places API to keep it secure
Step 3: Build the n8n workflow
The workflow has six nodes:
[Manual Trigger] → [Google Sheets: Get Queries] → [HTTP Request: Places Search]
→ [Split Out] → [Filter: No Website] → [Google Sheets: Append]
Node 1: Manual Trigger
Kicks off the run on demand.
Node 2: Google Sheets — Get Queries
Pulls each category + location combination from your Queries tab so the workflow can loop through them.
Node 3: HTTP Request — Places Text Search
This uses the newer Places API searchText endpoint instead of the legacy textsearch one:
POST https://places.googleapis.com/v1/places:searchText
In n8n, configure the HTTP Request node:
- Method: POST
- URL:
https://places.googleapis.com/v1/places:searchText - Headers:
Content-Type: application/jsonX-Goog-Api-Key: YOUR_API_KEYX-Goog-FieldMask: places.displayName,places.formattedAddress,places.priceLevel,places.websiteUri,places.id
- Body:
{ "textQuery": "{{ $json.query }}" }
The field mask is what keeps the response lean — you’re only paying for and receiving the fields you actually need.
Node 4: Split Out
Each API call returns an array of places in a single item. The Split Out node converts that array into one item per business so the rest of the workflow can process them individually.
Node 5: Filter — No Website
This is the secret to high-quality leads.
Add a Filter node that keeps only results where:
{{ $json.websiteUri }} is empty
Businesses without a website are the best leads for web design, SEO, and digital marketing agencies. They know they need help. They’re not locked into a contract with a competitor.
Node 6: Google Sheets — Append Row
Map the fields from the Places response to your Results tab columns:
| Column | Value |
|---|---|
| placeId | {{ $json.id }} |
| name | {{ $json.displayName.text }} |
| formattedAddress | {{ $json.formattedAddress }} |
| googleMapsUrl | https://www.google.com/maps/place/?q=place_id:{{ $json.id }} |
Step 4: Scale it across niches and cities
Once the workflow is running, scaling is just changing the query string. Create a simple input list:
landscaping Portland OR
plumber Denver CO
HVAC contractor Nashville TN
roofing contractor Tampa FL
Pass each query through the workflow. You’ll have a spreadsheet of 300+ no-website businesses within 20 minutes.
What to do with the list
This is where most people drop the ball — they collect the leads and don’t follow up fast enough.
My recommended sequence:
- Day 1: Look up the business and reach out directly using the
googleMapsUrlin the sheet - Day 3: Send a loom video showing what their competitor’s site looks like vs. what theirs could be
- Day 7: Follow-up email
The hit rate on this approach is significantly higher than cold outreach to businesses that already have a website, because you’re solving an obvious problem they already know they have.
That’s the whole system. No complicated setup, no scraping risk, and the quality of leads is genuinely high. The same four-step structure — query prep, API setup, sheet design, workflow build — adapts to whatever data you need pulled from Google’s Places API.
Get the next playbook in your inbox
Practical automation systems for agency owners. No fluff.
No spam. Unsubscribe anytime.