Google Maps to Airtable, leads captured with Apify
Copying Google Maps results into a spreadsheet feels fine for the first 10 leads. Then you hit 50. Suddenly you’re juggling tabs, losing track of which listings you already captured, and still missing the one field you actually need: a usable email.
This Apify Airtable leads setup hits marketers doing local campaigns first, but sales teams and owners at small local businesses feel it too. You end up spending about 2 hours on “research” that is really just data entry. And it’s honestly draining.
This workflow pulls Google Maps leads with Apify, cleans the fields, visits each website to find an email using GPT, and saves everything into Airtable so you can start outreach without the messy prep work.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Maps to Airtable, leads captured with Apify
flowchart LR
subgraph sg0["Manual Workflow Execution Flow"]
direction LR
n0["<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/>Fetch Business Data from Goo.."]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Clean Google Maps Data", pos: "b", h: 48 }
n2@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Workflow Execution", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Iterate Through Each Busines..", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Only Website URLs", pos: "b", h: 48 }
n5["<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/>Fetch Raw HTML Content from .."]
n6@{ icon: "mdi:robot", form: "rounded", label: "Extract Business Email from ..", 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/airtable.svg' width='40' height='40' /></div><br/>Save Cleaned Lead Data into .."]
n1 --> n3
n4 --> n5
n2 --> n0
n3 --> n4
n0 --> n1
n5 --> n6
n6 --> n7
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 n2 trigger
class n6 ai
class n7 database
class n0,n5 api
classDef customIcon fill:none,stroke:none
class n0,n5,n7 customIcon
The Problem: Google Maps Leads Are Easy to Find, Hard to Use
Google Maps is packed with prospects, but the data is awkward to operationalize. You collect a business name, grab a phone number, maybe copy the website, and then you still have to hunt for an email. One-by-one. Meanwhile your “lead list” ends up inconsistent: different address formats, missing websites, duplicate entries, and notes scattered across tabs. And the worst part is you can’t trust your list, so outreach slows down because you keep double-checking everything.
It adds up fast. Here’s where it breaks down.
- Manual copy-paste across Google Maps, websites, and Airtable eats an afternoon for a list of 50.
- Email hunting turns into a browser scavenger hunt, and you still end up with generic inboxes or nothing.
- Address and phone formatting changes from one listing to the next, which makes filtering and segmentation painful later.
- Without a repeatable process, you can’t refresh leads weekly, so your list goes stale.
The Solution: Scrape, Clean, Extract Emails, Then Save to Airtable
This workflow turns Google Maps into a steady pipeline of structured leads. You start by running Apify’s Google Maps Extractor with a keyword and location (like “real estate agency” in Paris) and a target count (like 50). n8n grabs the results via HTTP request, then immediately standardizes them into the exact fields you actually want to work with: business name, address, phone, website, and the Maps URL. Next, it loops through each lead and visits the website automatically, downloading the raw HTML content in the background. Finally, GPT scans that content and returns the most relevant contact email it can find, or “Null” if none exists. Everything lands in Airtable as clean rows you can sort, tag, and use for outreach.
The workflow starts with a manual trigger, so you can test safely and run it when you want. Apify returns the lead data, n8n cleans it, then it checks each website and asks GPT to extract one usable email. Airtable becomes your organized, ready-to-work list.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you need 50 leads for “therapists in Austin.” Manually, you might spend about 2 minutes per listing to copy name, phone, website, and URL (around 100 minutes), plus another minute or two per website hunting for an email (another 60 to 90 minutes). Call it roughly 3 hours. With this workflow, you run Apify once, let n8n loop through the sites, and your only “hands-on” time is the setup and a quick sanity check in Airtable. Most teams get the same list in well under an hour of total elapsed time, with maybe 10 minutes of actual effort.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Apify account to run the Google Maps Extractor actor.
- Airtable to store leads in a searchable base.
- OpenAI API key (get it from your OpenAI API dashboard)
Skill level: Intermediate. You will paste an API endpoint, map a few fields, and test runs with small batches first.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Manual launch trigger. You click “Execute workflow” in n8n when you want a fresh batch of Google Maps leads. This is useful early on because you can validate the output before you run it routinely.
Lead scraping through Apify. n8n sends a POST request to Apify’s Google Maps Extractor endpoint with your keyword, location, and result count. Apify returns structured listing data, which means you’re not scraping pages yourself.
Cleaning and batching. The workflow keeps only the fields you care about (name, address, website, phone, URL), then processes leads in batches (for example, 20 at a time) so you don’t slam APIs and get throttled.
Email extraction and storage. For each lead, n8n downloads the website HTML and asks the OpenAI model to output only the best email or “Null.” The final step creates a record in Airtable with every mapped field ready for filtering and outreach.
You can easily modify the Apify search inputs to target a new niche or city based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
Start the workflow manually so you can validate each stage before automating or scheduling it.
- Add and keep Manual Launch Trigger as the starting node.
- Connect Manual Launch Trigger to Retrieve Maps Leads via Apify to match the execution flow.
Step 2: Connect Apify and Standardize Lead Records
Pull Google Maps leads from Apify and normalize the response fields for downstream processing.
- Open Retrieve Maps Leads via Apify and set Method to
POST. - Set URL to
URL APIFYand Send Body totrue. - Set Specify Body to
jsonand paste the JSON payload exactly as shown in the node, including"locationQuery": "Paris, France"and"searchStringsArray": ["centre de formation"]. - In Standardize Map Records, map the fields using the existing expressions, for example Nom du centre de formation →
{{ $json.title }}and Site internet →{{ $json.website }}. - Connect Retrieve Maps Leads via Apify → Standardize Map Records → Batch Process Contacts to keep the execution order consistent.
Step 3: Batch, Isolate Websites, and Download HTML
Process leads in manageable batches, isolate website URLs, and fetch the site HTML for email extraction.
- In Batch Process Contacts, set Batch Size to
10to control load on downstream nodes. - Connect the second output of Batch Process Contacts to Isolate Website Links (as in the workflow).
- In Isolate Website Links, set Site internet to
{{ $json['Site internet'] }}. - In Download Site HTML, set URL to
{{ $json['Site internet'] }}to pull each site’s HTML. - Ensure the flow is Isolate Website Links → Download Site HTML → AI Email Extraction.
Step 4: Set Up AI Email Extraction
Use the OpenAI-powered node to extract a single authoritative email from the downloaded HTML.
- Open AI Email Extraction and confirm the model is set to
gpt-4.1-mini. - Keep the prompt content exactly as configured, including the appended HTML variable
{{ $json.data }}. - Credential Required: Connect your openAiApi credentials in AI Email Extraction.
Step 5: Configure Airtable Output
Store the standardized lead data and extracted email into Airtable.
- Open Store Leads in Airtable and set Operation to
create. - Select your Airtable Base and Table (currently configured placeholders:
[YOUR_ID]). - Map the columns using the provided expressions, including Email →
{{ $json.message.content }}and URL →{{ $('Standardize Map Records').item.json.URL }}. - Credential Required: Connect your airtableTokenApi credentials in Store Leads in Airtable.
Step 6: Test and Activate Your Workflow
Run a controlled test to verify each node’s output, then activate for production use.
- Click Execute Workflow from Manual Launch Trigger and watch data flow through Retrieve Maps Leads via Apify, Standardize Map Records, and Batch Process Contacts.
- Confirm Download Site HTML returns HTML content in
$json.dataand AI Email Extraction outputs a single email orNull. - Verify new records appear in Airtable with Title, Street, Website, Phone Number, Email, and URL populated as expected.
- Once validated, toggle the workflow to Active for production use.
Common Gotchas
- Apify credentials can expire or need specific permissions. If things break, check your Apify token and actor run permissions in the Apify console 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.
Frequently Asked Questions
About 30–60 minutes if your Apify, Airtable, and OpenAI accounts are ready.
No. You will mostly paste an Apify endpoint and map Airtable fields in n8n.
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 OpenAI API costs (usually a few cents per batch, depending on how much HTML you send).
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.
Yes, and it’s the whole point. You change the keyword and location you send to Apify in the “Retrieve Maps Leads via Apify” HTTP Request node, then keep the rest of the workflow the same. Common tweaks include fetching more than 50 results, filtering to only listings with websites, and adjusting the GPT prompt to prefer specific emails (like “owner@” or “contact@”).
Usually it’s an invalid or expired Apify token in your HTTP Request headers. It can also fail if you copied the wrong Apify endpoint (make sure you used the “Run Actor synchronously and get dataset items” API). If you’re pulling a lot of results at once, rate limits can show up as timeouts, so lowering batch sizes or adding a short wait between calls helps.
If you self-host n8n, there’s no hard execution cap (it mostly depends on your server and API limits). On n8n Cloud, your plan limits monthly executions, so a few thousand leads per month is realistic on paid tiers. In practice, batch sizes of 20 keep runs stable when you’re also downloading HTML and calling OpenAI.
Often, yes, because this flow isn’t just “send data from A to B.” You’re scraping, cleaning, looping, downloading HTML, and running AI extraction, which means you want control over batching and error handling. n8n is also easier to self-host, so costs don’t spike the moment you scale. Zapier or Make can still work for lightweight versions, but the moment you add website scraping plus AI, it gets fiddly and expensive. If you want help deciding, Talk to an automation expert.
Once this is in place, lead sourcing stops being a chore and starts being a repeatable input to your outreach engine. Set it up once, then spend your time on messaging and follow-up instead.
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.