🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Google Maps to Google Sheets, lead emails captured

Lisa Granqvist Partner Workflow Automation Expert

Building a targeted outreach list sounds simple until you’re 40 tabs deep in Google Maps, copying names, hunting for emails, and realizing half your “leads” are duplicates or dead ends.

This Google Maps leads automation hits sales teams first, but solo founders and agency lead gen services feel it too. You get a clean Google Sheet of business listings with emails pulled from websites, ready for outreach without paying for yet another scraping tool.

Below, you’ll see how the workflow turns a list of search queries into deduplicated emails in Sheets, what it replaces in your day-to-day, and where to tweak it if you want more than emails.

How This Automation Works

See how this solves the problem:

n8n Workflow Template: Google Maps to Google Sheets, lead emails captured

The Challenge: Turning Google Maps Searches Into Outreach-Ready Emails

Lead gen from Google Maps is deceptively manual. You search “roofers in Austin” or “dentists in Brooklyn,” open listings, then you still have to find a real contact email (often not visible in the listing). So you click through to websites, scan for contact pages, copy-paste into a spreadsheet, and try to remember which listings you already checked. It’s slow, messy, and honestly exhausting. Worse, you end up with a sheet that looks full, but half the rows are duplicates, generic forms, or invalid emails that bounce.

It adds up fast. Here’s where it breaks down in real work, not theory.

  • Each query can turn into dozens of listings, and manually opening them steals about 1–2 hours per batch of searches.
  • You can’t reliably spot duplicates while you’re switching tabs, so the same business sneaks into your list multiple times.
  • Email collection is the real bottleneck because Google Maps often shows none, which forces you into website hunting.
  • Outreach performance suffers when your sheet includes invalid emails, role inboxes you don’t want, or junk captured from page footers.

The Fix: Scrape Google Maps, Extract Emails, Save to Sheets

This workflow takes your list of search queries (keyword + region) and runs them through a repeatable pipeline: find Google Maps listing links, fetch the public pages behind those listings, then scan the associated page content for email addresses. Instead of paying for a scraping API, it uses n8n core nodes plus a bit of JavaScript in Code nodes to extract links and harvest emails with regular expressions. Along the way, it filters out unwanted links, removes duplicates twice (once at the URL level and again at the email level), and drops invalid addresses before anything touches your spreadsheet. The end result is simple: a Google Sheet that fills up gradually with cleaner, usable outreach contacts while you do something else.

The workflow starts when you manually run it and provide search queries. It loops through those queries, calls a dedicated scraping sub-workflow for each one, then batches through listing URLs to fetch pages and extract emails. Finally, it appends deduplicated, filtered email records to Google Sheets.

What Changes: Before vs. After

Real-World Impact

Say you run 10 Google Maps queries for a niche campaign, and each query surfaces about 20 relevant listings. Manually, you might spend maybe 3 minutes per listing between opening the result, finding the site, looking for an email, then pasting into Sheets. That’s about 10 hours of tedious work. With this workflow, you spend about 10 minutes preparing the query list, then let n8n process pages in batches and write results to Google Sheets while you do other tasks.

Requirements

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets for storing and sharing the outreach list.
  • HTTP access from your n8n host to fetch Google Maps and website pages.
  • Google account access (connect it inside the Google Sheets node).

Skill level: Intermediate. You will paste queries, connect Google Sheets, and be comfortable adjusting a regex in a Code node if you want better email quality.

Need help implementing this? Talk to an automation expert (free 15-minute consultation).

The Workflow Flow

Manual run with a query list. You start the workflow and provide searches like “accountants in Miami” or “pilates studio in Manchester,” usually as a simple list the workflow can iterate through.

Google Maps lookup and link extraction. For each query, an HTTP request pulls the Google Maps results page, then a Code node parses it to extract listing links. Unwanted links get filtered, then URLs are deduplicated so you don’t process the same listing twice.

Batch page fetching and email harvesting. The workflow loops through listing links in batches, fetches page content, and runs a second Code node that uses regex to harvest emails from the HTML. It aggregates results so you get a usable list instead of scattered fragments.

Clean output to Google Sheets. Emails are expanded into individual records, deduplicated again, filtered for invalid formats, then appended to your chosen Google Sheet so you can sort, assign, and outreach immediately.

You can easily modify the query format to match how you prospect (city lists, neighborhoods, zip codes) based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Manual Trigger

This workflow is started manually and then iterates through search queries to run a sub-workflow and throttle each run.

  1. Add and open Manual Execution Start to confirm it is the entry point for the workflow.
  2. In Manual Execution Start, prepare test data like the pinned query values (e.g., hollywood+dentist) to simulate search terms.
  3. Open Iterate Search Queries and keep default batch behavior unless you want to limit the number of queries per run.
  4. Configure Run Sub-Workflow (Configure Required) with Mode set to each and set Workflow ID to the sub-workflow you want to execute.
  5. In Delay Between Runs, set Amount to 2 to throttle the loop between batches.

⚠️ Common Pitfall: Run Sub-Workflow (Configure Required) has an empty Workflow ID. You must select a target sub-workflow or this step will do nothing.

Step 2: Configure the Scraper Entry and Google Maps Lookup

The sub-workflow starts at a trigger and performs the Google Maps search before extracting website links.

  1. In the sub-workflow, set Scraper Workflow Trigger as the entry node for scraped queries passed from Run Sub-Workflow (Configure Required).
  2. Open Google Maps Lookup and set URL to =https://www.google.com/maps/search/{{ $json.query }} so it searches using the incoming query.
  3. Connect Google Maps Lookup to Extract Result Links to parse domain URLs from the response data.

Step 3: Filter and Deduplicate Website Links

Filter out unwanted domains and remove duplicate URLs before visiting each site.

  1. In Extract Result Links, keep the provided JavaScript that matches URLs and returns {json: {url: url}} items.
  2. In Exclude Unwanted Links, confirm the first condition uses ={{ $json.url }} with the notRegex filter and the right-side regex =(google|gstatic|ggpht|schema\.org|example\.com|sentry-next\.wixpress\.com|imli\.com|sentry\.wixpress\.com|ingest\.sentry\.io).
  3. Keep Deduplicate Web Links connected to remove duplicate domains before iteration.
  4. Use Cycle Through Links to batch through the cleaned list of URLs.

Step 4: Fetch Pages and Extract Emails

Each website is fetched, email addresses are extracted, and the results are aggregated.

  1. In Fetch Page Content, set URL to ={{ $json.url }} to retrieve each website’s HTML.
  2. Use Page Batch Iterator to loop through page results, then run Harvest Emails from Page with Mode set to runOnceForEachItem.
  3. Keep the regex in Harvest Emails from Page to exclude image files and capture only valid email addresses.
  4. Aggregate results in Combine Email Lists with Merge Lists enabled.
  5. Split the aggregated list in Expand Email Records using Field to Split Out set to emails.

Step 5: Clean and Deduplicate Emails

Remove duplicates and filter out unwanted domains before exporting the final list.

  1. In Deduplicate Emails, set Compare to selectedFields and Fields to Compare to emails.
  2. In Filter Invalid Emails, use ={{ $json.emails }} with the notRegex filter and the right-side regex =(google|gstatic|ggpht|schema\.org|example\.com|sentry\.wixpress\.com|sentry-next\.wixpress\.com|ingest\.sentry\.io|sentry\.io|imli\.com).

Step 6: Configure the Output Destination

Append the cleaned emails to Google Sheets.

  1. Open Append Emails to Sheet and set Operation to append.
  2. Map the Emails column to ={{ $json.emails }} under the column mapping.
  3. Credential Required: Connect your Google Sheets credentials.

⚠️ Common Pitfall: If the target spreadsheet or sheet is not selected in Append Emails to Sheet, the node will fail even if the mapping is correct.

Step 7: Test and Activate Your Workflow

Run a manual test to confirm the search, extraction, and export paths work end-to-end.

  1. Click Execute Workflow from Manual Execution Start and verify Google Maps Lookup receives a query value.
  2. Ensure Extract Result Links outputs url items and Harvest Emails from Page returns emails arrays.
  3. Confirm Append Emails to Sheet adds rows to your spreadsheet with extracted emails.
  4. Once validated, toggle the workflow Active to enable production runs.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Watch Out For

  • Google Sheets permissions can block writes. If rows aren’t appearing, check the connected Google account in n8n and confirm it can edit the target spreadsheet and sheet tab.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Common Questions

How quickly can I implement this Google Maps leads automation?

About 30 minutes if your Google Sheet is ready.

Can non-technical teams implement this Google Maps lead capture?

Yes, but you’ll want one person who’s comfortable copying queries and testing runs. No traditional coding is required unless you choose to tweak the email-matching regex.

Is n8n free to use for this Google Maps leads workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in $0 in API fees for this template since it relies on n8n core nodes.

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

How do I adapt this Google Maps leads solution to my specific challenges?

You can adjust what you search, what you keep, and what you store. Most people start by editing the query list that feeds the “Iterate Search Queries” loop, then tightening the “Exclude Unwanted Links” filter to avoid directories or irrelevant domains. If you want higher-quality emails, update the “Harvest Emails from Page” Code node regex and keep your “Filter Invalid Emails” rules strict. You can also add fields before “Append Emails to Sheet,” like the query that found the lead or the listing URL for quick verification.

Why is my Google Sheets connection failing in this workflow?

Usually it’s the connected Google account lacking edit access to the spreadsheet you selected. Reconnect the credential in n8n, then reselect the document and sheet in “Append Emails to Sheet.” If it still fails, check that the sheet name hasn’t changed and that you didn’t hit Google’s temporary quota limits from too many rapid test runs.

What’s the capacity of this Google Maps leads solution?

If you self-host, there’s no execution cap from n8n, so your server and Google’s responses are the practical limits.

Is this Google Maps leads automation better than using Zapier or Make?

For scraping-style lead capture, n8n is usually the better fit because you can control batching, deduplication, and custom parsing in one workflow without paying per step. Zapier and Make are great for simple integrations, but they’re not designed for iterating through lots of URLs and processing raw HTML at scale. n8n also gives you a self-hosted path, which keeps costs predictable when you run this weekly. The tradeoff is setup: you’ll spend a bit more time dialing in filters and extraction logic so your sheet stays clean. If you want someone to sanity-check your approach, Talk to an automation expert.

Once this is in place, your lead list stops being a project and becomes a routine. Let the workflow do the collecting and cleaning, then put your time into outreach that actually converts.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal