Scrape Google Maps Leads (Email, Phone, Website) Using Apify + Google Places + Airtable - n8n Workflow | Neura Market
Scrape Google Maps Leads (Email, Phone, Website) Using Apify + Google Places + Airtable
### Who is it for?
This workflow is for **marketers, sales teams, and local businesses** who want to quickly collect leads (business name, phone, website, and email) from Google Maps and store them in Airtable.
You can use it for **real estate agents, restaurants, therapists, or any local niche**.
---
## How it works
1. **Scrape Google Maps** with [Apify Google Maps Extractor](https://apify.com/compass/google-maps-extractor).
2. **Clean and structure the data** (name, address, phone, website).
3. **Visit each website** and retrieve the raw HTML.
4. **Use GPT** to extract the most relevant email from the site content.
5. **Save everything to Airtable** for easy filtering and future outreach.
It works for **any location or keyword** - just adapt the input in Apify.
---
## Requirements
Before running this workflow, you'll need:
- An **Apify account** (to use the Google Maps Extractor)
- An **OpenAI API key** (for GPT email extraction)
- An **Airtable account & base** with the following fields:
- `Business Name`
- `Address`
- `Website`
- `Phone Number`
- `Email`
- `Google Maps URL`
---
## Airtable Structure
Your Airtable base should contain these columns:
| Title | Street | Website | Phone Number | Email | URL |
|--------------------------|--------------------------|---------------------|-----------------|-------------------|--------------------|
| Paris Real Estate Agency | 10 Rue de Rivoli, Paris | https://agency.fr | +33 1 23 45 67 | contact@agency.fr | maps.google.com/...|
| Example Business 2 | 25 Avenue de l'Opéra | https://example.fr | +33 1 98 76 54 | info@example.fr | maps.google.com/...|
| Example Business 3 | 8 Boulevard Haussmann | https://demo.fr | +33 1 11 22 33 | contact@demo.fr | maps.google.com/...|
---
## Error Handling
- **Missing websites:** If a business has no website, the flow skips the scraping step.
- **No email found:** GPT returns `Null` if no email is detected.
- **API rate limits:** Add a `Wait` node between requests to avoid Apify/OpenAI throttling.

Now let's take a detailed look at how to set up this automation, using real estate agencies in Paris as an example.
## Step 1 - Launch the Google Maps Scraper
Start with a When clicking Execute workflow trigger to launch the flow manually.
Then, **add an HTTP Request** node with the method set to POST.
Head over to Apify: Google Maps Extractor

On the page: [https://apify.com/compass/google-maps-extractor](https://apify.com/compass/google-maps-extractor)
Enter your business keyword (e.g., real estate agency, hairdresser, restaurant)
Set the location you want to target (e.g., Paris, France)
Choose how many results to fetch (e.g., 50)
Optionally, use filters (only places with a website, by category, etc.) No matter your industry, this works - just adapt the keyword and location.
Once everything is filled in:
Click Run to test.
Then, go to the top right and click on API.
Select the API endpoints tab.
Choose Run Actor synchronously and get dataset items.

Copy the URL and paste it into your HTTP Request (in the URL field).
Then enable:
- Body Content Type → JSON
- Specify Body Using JSON
Go back to Apify, click on the JSON tab, copy the entire code, and paste it into the JSON body field of your HTTP Request.

At this point, if you run your workflow, you should see a structured output similar to this:
title subtitle price categoryName address neighborhood street city postalCode
........
## Step 2 - Clean and structure the data

Once the raw data is fetched from Apify, we clean it up using the Edit Fields node.
In this step, we manually select and rename the fields we want to keep:
- Title → {{ $json.title }}
- Address → {{ $json.address }}
- Website → {{ $json.website }}
- Phone → {{ $json.phone }}
- URL → {{ $json.url }}*
This node lets us keep only the essentials in a clean format, ready for the next steps. On the right: a clear and usable table, easy to work with.
## Step 3 - Loop Over Items

Now that our data is clean (see step 2), we'll go through it item by item to handle each contact individually.
The Loop Over Items node does exactly that:
It takes each row from the table (each contact pulled from Apify) and runs the next steps on them, one by one.
Just set a Batch Size of 20 (or more, depending on your needs).
Nothing tricky here, but this step is essential to keep the flow dynamic and scalable.
## Step 4 - Edit Field (again)

Platform
n8n
Category
Marketing
Price
Free
Creator
Baptiste Fort
set
airtable
stickyNote
httpRequest
manualTrigger
splitInBatches
openAi
How to import this workflow into n8n
1Purchase or download the workflow to get the n8n workflow JSON file.
2In your n8n instance, open Workflows and choose "Import from File" (or paste the JSON with Ctrl+V on the canvas).
3Open each node marked with a credential warning and connect your own accounts and API keys.
4Run the workflow once manually to verify the data flow, then toggle it to Active.