Google Maps to Airtable, clean leads ready to use
You run a Google Maps search, open 20 tabs, copy names into a sheet, then realize half the entries are missing emails (and the other half are duplicates). It’s slow, messy, and honestly kind of draining.
Growth marketers feel it when pipeline goals are due. Agency owners hit it when a client wants “a list by Friday.” And solo operators doing outreach don’t have hours to babysit a spreadsheet. This Maps Airtable leads automation gives you a clean, usable lead table with emails and phones, without the copy-paste chaos.
Below you’ll see how the workflow pulls businesses city-by-city, deduplicates them, extracts contact details, and writes the results into Airtable so you can actually use them.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Google Maps to Airtable, clean leads ready to use
flowchart LR
subgraph sg0["When Executed by Another Workflow Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>search Place"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Place Details"]
n3@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields1", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items1", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/html.dark.svg' width='40' height='40' /></div><br/>HTML"]
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items3", pos: "b", h: 48 }
n9@{ icon: "mdi:cog", form: "rounded", label: "Wait2", pos: "b", h: 48 }
n10@{ icon: "mdi:play-circle", form: "rounded", label: "When Executed by Another Wor..", pos: "b", h: 48 }
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>already scraped"]
n18@{ icon: "mdi:cog", form: "rounded", label: "Array all Companies scraped", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Searchword", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Places already scraped", pos: "b", h: 48 }
n21@{ icon: "mdi:swap-vertical", form: "rounded", label: "Get Impressum-URL", pos: "b", h: 48 }
n22["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Impressum HTML"]
n23@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Successfully scraped Impress..", pos: "b", h: 48 }
n24@{ icon: "mdi:robot", form: "rounded", label: "Relevant Infos from Impressum", pos: "b", h: 48 }
n25@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Email not Empty", pos: "b", h: 48 }
n26["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Write in DB"]
n7 --> n9
n6 --> n5
n9 --> n8
n0 --> n2
n19 --> n1
n4 --> n26
n1 --> n0
n2 --> n20
n25 --> n4
n17 --> n18
n5 --> n25
n5 --> n24
n8 --> n23
n8 --> n22
n21 --> n8
n3 -.-> n24
n22 --> n7
n22 --> n9
n20 --> n21
n18 --> n19
n24 --> n6
n10 --> n17
n23 --> n5
end
subgraph sg1["When clicking ‘Execute workflow’ Flow"]
direction LR
n11@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n12@{ icon: "mdi:cog", form: "rounded", label: "Execute Workflow", pos: "b", h: 48 }
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Airtable1"]
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Airtable2"]
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items2", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter5", pos: "b", h: 48 }
n16 --> n15
n13 --> n15
n14 --> n16
n12 --> n13
n15 --> n12
n11 --> n14
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n10,n11 trigger
class n24 ai
class n3 aiModel
class n20,n23,n25,n16 decision
class n17,n26,n13,n14 database
class n1,n2,n22 api
classDef customIcon fill:none,stroke:none
class n1,n2,n7,n17,n22,n26,n13,n14 customIcon
The Challenge: Turning Google Maps searches into clean leads
Google Maps is great for discovery, but it’s not built for building a lead list you can trust. You search “SEO agency Berlin,” grab a few results, then you’re juggling tabs for websites, trying to find an email buried in a footer, and hoping the phone number is even real. Then you do the next city. And the next. The time loss isn’t just the scraping; it’s the context switching, the repeated checks, and the cleanup you always end up doing before you can send the first outreach message.
It adds up fast. Here’s where it usually breaks down.
- You end up copying the same company twice because Google shows it for multiple searches.
- Contact info is inconsistent, so you waste time chasing bad emails or missing phone numbers.
- Restarting the process after an interruption means redoing work, because there’s no “already processed” marker.
- Your final list lives in a messy spreadsheet that still needs formatting before it’s usable in a CRM or outreach tool.
The Fix: Google Maps to Airtable lead enrichment with dedupe
This n8n workflow turns location-based Google Maps searches into an organized Airtable database, enriched with real contact details. It starts by reading a city list from Airtable, then combines each city with your search term (like “SEO Agency”) and queries the Google Maps Places APIs to discover relevant businesses. For each business, it checks Airtable first so you don’t scrape the same company again, even if it shows up in multiple cities or runs. Next, it pulls Place Details for richer data and visits the company’s website to find an Impressum page (common on many EU business sites) where contact info is often listed. An AI extraction step pulls out decision-maker context when available, plus email and phone in a cleaner format, and the workflow filters out incomplete entries so junk doesn’t pollute your table. Finally, it writes everything back into Airtable, ready for outreach, CRM import, or follow-on automations.
The workflow begins with your Airtable “Cities” table and a scheduled (or manual) run. Then it discovers businesses via Google Maps, enriches them via Place Details and website parsing, and saves only valid leads into Airtable “Companies.” Cities are marked “checked,” so stopping and resuming is safe.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you want leads for 10 cities, and you’re aiming for about 20 companies per city. Manually, even a “fast” process is maybe 5 minutes per company (open listing, find site, locate contact page, copy details), which is roughly 15 hours of busywork. With this automation, you spend about 20 minutes setting the cities and search term, then let it run while you do other work. You still review the final Airtable list, but the heavy lifting is done.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Airtable for the Cities and Companies tables
- Google Maps Places API to search and fetch business details
- OpenAI API key (get it from your OpenAI dashboard)
Skill level: Intermediate. You’ll connect accounts, add API keys, and match a few Airtable fields.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
Airtable triggers the city queue. The workflow reads rows from your “Cities” table and only picks cities that aren’t marked as processed, so reruns don’t re-do old work.
Google Maps discovery happens city-by-city. For each city, n8n calls the Google Maps Text Search endpoint using your search term plus the location (for example, “SEO Agency, Berlin”). Results are split into batches so you don’t slam rate limits.
Deduplication and enrichment happen before saving. Each business is checked against Airtable to avoid duplicates, then Place Details pulls richer fields like address and website when available.
Website parsing finds emails and phones. The workflow builds an Impressum URL, fetches the HTML, cleans out noisy sections, then uses an AI extractor to pull decision-maker details, email, and phone. Incomplete leads (like no valid email) are filtered out.
You can easily modify the search term and the “valid lead” rules to match your niche and outreach style. See the full implementation guide below for customization options.
Watch Out For
- Google Maps API credentials can expire or be missing Places permissions. If things break, check your Google Cloud Console APIs and billing settings first.
- 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
About an hour if your API keys and Airtable base are ready.
Yes, but you will need someone comfortable with API keys and field mapping. No coding, though.
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 Google Maps Places API costs (billed after free quota) plus OpenAI API usage for extraction.
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.
You can change the search term in the workflow’s configuration (the node that sets what you’re searching for) to match your niche, like “dentist,” “accountant,” or “roofing company.” If you don’t need Impressum parsing, swap the website-fetch and AI extraction section for a simpler “contact page” scrape. Common customizations include filtering to only businesses with websites, tightening the “valid email” rule, and adding extra Airtable fields like lead status or owner.
Usually it’s an API key issue: the Places APIs aren’t enabled, billing isn’t turned on, or the key is restricted too aggressively. Check your Google Cloud Console settings, then update the key in the HTTP request authentication in n8n. If you’re running big batches, rate limits can also cause intermittent failures, so slowing batches or adding a longer wait helps.
If you self-host n8n, there’s no execution limit (your server and API quotas are the real limit). On n8n Cloud, capacity depends on your plan, and most small lead-gen runs fit fine on entry tiers. Practically, Google Places rate limits and cost controls are what shape scale, so teams usually run city batches and let it process steadily in the background.
Often, yes. This workflow has looping, deduping, batching, and conditional filtering, which gets expensive or awkward in Zapier. n8n also lets you self-host, which matters when you’re doing lots of executions. Make can handle some of this, but debugging multi-API scraping flows can get tedious. If you’re only doing a tiny list once a month, Zapier is fine. If you want repeatable lead capture you can restart safely, n8n is a better fit. Talk to an automation expert if you want help choosing.
Once this is running, your lead list stops being a fragile spreadsheet project and becomes a system. The workflow handles the repetitive parts, so you can focus on outreach that actually gets replies.
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.