Apify to Airtable, clean Google Maps leads ready
You finally scrape a fresh Google Maps list… and then lose the next few hours cleaning it, hunting for emails, and trying to remember who you already contacted.
This Apify Airtable leads automation hits marketers first, but sales reps and agency operators feel it too. You get a clean Airtable prospect table (name, address, website, phone, email) and a Gmail outreach email sent automatically.
Below you’ll see exactly what the workflow does, what you need to run it, and what kind of time you can realistically get back each week.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Apify to Airtable, clean Google Maps leads ready
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 .."]
n8@{ icon: "mdi:message-outline", form: "rounded", label: "Send a message", pos: "b", h: 48 }
n1 --> n3
n4 --> n5
n2 --> n0
n7 --> n8
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 messy (and slow to use)
Scraping Google Maps is the easy part. The annoying part is what happens after: half the rows are inconsistent, websites are missing or broken, and the one field you actually need (a usable email) is almost never cleanly available. So you open 30 tabs, click “Contact” pages, scroll footers, copy addresses, paste them into a sheet, and hope you didn’t grab a generic no-reply email. It’s repetitive work, but it still demands attention, which makes it feel even longer.
It adds up fast. Here’s where it breaks down in real life.
- You waste about 5 minutes per lead just turning raw output into something your team can use.
- Lists end up “almost done” and never get contacted because cleanup becomes a mini project.
- Email guessing (or skipping emails entirely) leads to low reply rates and more manual follow-up later.
- Without a structured database like Airtable, it’s hard to avoid duplicates or track who got contacted.
The Solution: Scrape, clean, enrich, store, then email (automatically)
This workflow takes you from “raw Google Maps scrape” to “ready-to-contact leads” without the usual spreadsheet chaos. You trigger it in n8n, it calls Apify’s Google Maps extractor via HTTP to pull business listings for your keyword and location, then normalizes the fields into a consistent format. Next, it processes each business in batches, visits the company website, and uses an OpenAI chat model to extract a relevant contact email from the HTML. Finally, it creates a clean record in Airtable with the key fields (title, address, website, phone, email, Maps URL) and sends a personalized Gmail outreach message using the data you just stored.
The workflow starts with an Apify scrape for a niche and location (for example, “real estate agency” in Paris). From there, n8n cleans the records, loops through websites safely in batches, and asks AI to return only the best email (or “Null” if none exists). Airtable becomes your source of truth, and Gmail handles the first touch automatically.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you scrape 50 “Paris real estate agencies.” Manually, if you spend about 3 minutes cleaning each row and another 5 minutes finding an email on the website, that’s roughly 6 to 7 hours of busywork before you can even send outreach. With this workflow, you trigger the run once, then let it batch through the 50 sites and store results in Airtable; you’ll mostly spend time reviewing the final table, maybe 20 minutes, and only spot-checking “Null” emails. That’s most of a workday back, on a small list.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Apify for scraping Google Maps listings.
- Airtable to store and manage leads.
- Gmail to send personalized outreach via OAuth.
- OpenAI API key (get it from the OpenAI dashboard API keys page).
Skill level: Intermediate. You’ll connect accounts, map a few fields, and test runs with small batches.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
You trigger a scrape run. In n8n, a manual start kicks things off and sends a request to Apify’s Google Maps extractor with your keyword, location, and result count.
The raw lead data gets cleaned. n8n normalizes the output so every lead has the same core fields (title, address, website, phone, URL), which keeps Airtable tidy and predictable.
Websites are processed in batches. The workflow loops through leads (batch size is configurable), loads each website’s HTML, then asks the OpenAI chat model to return only the best contact email or “Null”. Honestly, this is the piece that removes the most mental load.
Leads are stored and outreach is sent. Each enriched lead is saved into Airtable, then Gmail sends an email using fields from Airtable so the subject and body can include business name, website, phone, and the Maps link.
You can easily modify the Apify search (industry, city, filters) to match your niche. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
This workflow starts manually so you can test lead scraping on demand.
- Add the Manual Start Trigger node as the entry point.
- Keep default settings, since it does not require configuration.
- Confirm the connection flows from Manual Start Trigger to Retrieve Maps Leads via Apify.
Step 2: Connect Apify and Normalize Lead Data
Pull Google Maps leads and standardize fields for downstream processing.
- In Retrieve Maps Leads via Apify, set URL to
https://api.apify.com/v2/acts/compass~crawler-google-places/run-sync-get-dataset-items?token=[CONFIGURE_YOUR_TOKEN]. - Set Method to
POSTand Body to JSON with the existing payload (e.g.,"locationQuery": "Paris, France"and"searchStringsArray": ["centre de formation"]). - In Normalize Maps Records, map fields using the existing expressions, such as Nom du centre de formation →
{{ $json.title }}and Site internet →{{ $json.website }}. - Confirm the flow from Retrieve Maps Leads via Apify → Normalize Maps Records → Batch Process Contacts.
[CONFIGURE_YOUR_TOKEN] with your real token before testing.Step 3: Batch, Extract Websites, and Fetch HTML
Process leads in batches and fetch each website’s HTML for email discovery.
- In Batch Process Contacts, set Batch Size to
10. - In Isolate Website Links, set Site internet to
{{ $json['Site internet'] }}to isolate the URL. - In Grab Website HTML, set URL to
{{ $json['Site internet'] }}to request the website content. - Ensure the execution path Isolate Website Links → Grab Website HTML → Derive Contact Email AI is connected.
Step 4: Set Up AI Email Extraction
Use the AI model to extract the best contact email from the site HTML.
- Open Derive Contact Email AI and confirm the model is set to
gpt-4.1-mini. - Verify the prompt includes the HTML via
{{ $json.data }}and instructs the model to return only the email orNull. - Credential Required: Connect your openAiApi credentials.
Step 5: Configure Airtable Storage and Gmail Outreach
Store enriched leads in Airtable and send outreach emails via Gmail.
- In Store Leads in Airtable, select your Airtable Base and Table (currently placeholders
[YOUR_ID]). - Map fields using the existing expressions, for example Email →
{{ $json.message.content }}and URL →{{ $('Normalize Maps Records').item.json.URL }}. - Credential Required: Connect your airtableTokenApi credentials.
- In Dispatch Gmail Outreach, set To to
{{ $json.fields.Email }}and Subject to{{ $json.fields.Title }}. - Confirm the Message uses the template:
Company name: {{ $json.fields.Title }} Website URL: {{ $json.fields.Website }} Phone number: {{ $json.fields["Phone Number"] }} Google Maps: {{ $json.fields.URL }} vbnet email is now **fully personalized** and based on clear, structured information. - Credential Required: Connect your gmailOAuth2 credentials.
Step 6: Test and Activate Your Workflow
Run a manual test to verify each stage, then activate for production use.
- Click Execute Workflow on Manual Start Trigger to run a test.
- Confirm that Retrieve Maps Leads via Apify returns items and Normalize Maps Records outputs structured fields.
- Check that Derive Contact Email AI returns a single email or
Nulland that Store Leads in Airtable creates records. - Verify Dispatch Gmail Outreach sends emails to the extracted addresses.
- When satisfied, switch the workflow to Active for production use.
Common Gotchas
- Apify credentials can expire or you may be using the wrong API endpoint. If it fails, check your Apify actor run settings and the dataset endpoint URL you pasted into the HTTP Request node 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 45 minutes if your Apify, Airtable, and Gmail accounts are ready.
No coding required. You’ll mainly paste an Apify endpoint, connect accounts, and map Airtable fields once.
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 usage, which is usually a few dollars for typical lead batches.
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 main reason this workflow scales. Change the keyword, location, and result count in the “Retrieve Maps Leads via Apify” HTTP Request payload, then keep the rest the same. Common tweaks include filtering to only businesses with websites, lowering the batch size when sites are slow, and editing the Gmail message template to match your offer.
Most of the time it’s an invalid token or the wrong Apify endpoint. Re-copy the “run actor synchronously and get dataset items” URL from Apify, then confirm your HTTP Request node is sending JSON in the body. Also watch for rate limits or actor settings that return empty datasets when filters are too strict.
Practically speaking, hundreds per run is fine as long as you batch them. If you self-host n8n, execution volume depends on your server; on n8n Cloud, the cap depends on your plan. The limiting factor is usually website fetching and AI calls, so start with 50, then scale up once your prompt and batching behave.
Often, yes, because this flow needs batching, looping, and a bit of conditional thinking. Zapier and Make can do parts of it, but the “visit website HTML, extract an email, store it, then send outreach” chain gets expensive and fiddly as volume grows. n8n also gives you the self-host option, which matters when you want to run big scrapes without counting every task. If you only need “Apify results into a table,” simpler tools are fine. If you want the whole pipeline, n8n is the cleaner fit. Talk to an automation expert if you want a quick recommendation for your exact setup.
Once this is running, your “lead list” stops being a messy export and becomes a system you can rely on. Set it up, run it when you need fresh prospects, and get back to the work that actually closes deals.
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.