DEV Community

Perufitlife
Perufitlife

Posted on

How to Scrape Google Maps Leads in n8n Without Code (Emails + Phones)

Lead generation usually means one of two painful things: paying for an expensive SaaS seat, or hand-copying business names and phone numbers off Google Maps one card at a time. If you already run n8n for your automations, there is a third option that takes about ten minutes to set up and needs zero code.

n8n ships with a generic Apify node. That node can run any actor on the Apify Store and hand you back structured JSON you can pipe into Sheets, a CRM, or an email step. So instead of building a scraper, you point the node at a ready-made one. In this tutorial we will use a Google Maps scraper that pulls business names, phone numbers, websites, ratings, and emails, then drop the results into Google Sheets.

No browser automation to maintain, no proxies to rotate, no captcha headaches. Let's build it.

What you'll build

A 3-node n8n workflow:

  1. Manual / Schedule trigger - kick the run off on demand or nightly
  2. Apify node - run a Google Maps scraper actor with your search terms
  3. Google Sheets node - append every business as a new row

The output is a clean lead list: business name, address, phone, website, rating, review count, and (optionally) the email scraped from the business website.

Step 1 - Get an Apify token

You need a free Apify account. After signing up, go to Settings -> Integrations and copy your Personal API token. The free tier comes with monthly platform credit, which is plenty for testing and small lead lists.

Step 2 - Add the Apify credential in n8n

In n8n, open any workflow and add a new node. Search for Apify and pick the generic Apify node (it talks to the Apify API directly - no custom community node required).

When prompted for credentials, choose Apify API and paste the token from Step 1. Save it. That credential is now reusable across every Apify-powered workflow you build.

Step 3 - Point the node at the Google Maps actor

The Apify node asks for an Actor to run. We'll use the Google Maps Email Extractor actor (renzomacar/google-maps-businesses). It scrapes Google Maps search results and returns structured business data, and it can optionally visit each business website to grab an email - which is exactly what makes it useful for outreach.

In the node:

  • Operation: Run actor and get dataset
  • Actor: renzomacar/google-maps-businesses
  • Input (JSON): paste the config below
{
  "searchQueries": [
    "dentists in Miami FL",
    "coffee shops in Austin TX"
  ],
  "maxResultsPerQuery": 50,
  "language": "en",
  "includeWebsite": true
}
Enter fullscreen mode Exit fullscreen mode

A few notes on these fields:

  • searchQueries is an array, so you can batch several searches in one run. Use the same phrasing you would type into Google Maps: "<business type> in <city>".
  • maxResultsPerQuery caps how many businesses per query. Google Maps tops out around 120 per search, so anything up to that is realistic.
  • includeWebsite: true tells the actor to open each business website and extract emails and social links. This is the magic toggle for outreach - leave it off if you only need phone numbers and want a faster, cheaper run.

Run the node once. You should get an array of business objects back, each looking roughly like this:

{
  "name": "Bright Smile Dental",
  "address": "123 Biscayne Blvd, Miami, FL 33132",
  "phone": "+1 305-555-0199",
  "website": "https://brightsmilemiami.com",
  "email": "hello@brightsmilemiami.com",
  "rating": 4.7,
  "reviewsCount": 214,
  "category": "Dental clinic"
}
Enter fullscreen mode Exit fullscreen mode

Step 4 - Send the leads to Google Sheets

Add a Google Sheets node after the Apify node. Authenticate with your Google account, pick (or create) a spreadsheet, and set the operation to Append Row.

Map the columns to the fields coming out of the Apify node:

Sheet column n8n expression
Business {{ $json.name }}
Phone {{ $json.phone }}
Email {{ $json.email }}
Website {{ $json.website }}
Rating {{ $json.rating }}
Address {{ $json.address }}

Because the Apify node outputs one item per business, n8n loops automatically - every business becomes its own row. Run the workflow and watch the sheet fill up.

Step 5 (optional) - Email the list to yourself

Want the lead list in your inbox instead? Swap (or add) an email / Gmail node at the end. Pipe the dataset through a small Code or Set node to format it as an HTML table, then send. Now you have a nightly "fresh leads" email with zero manual work.

You can also flip the Apify actor's outputFormat to html-report and it returns a polished, scored lead-list report you can attach directly - handy if you're delivering these to a client.

Make it run on autopilot

Replace the manual trigger with a Schedule Trigger (say, every Monday at 8am) and rotate your searchQueries - different cities, different niches - so each run brings in net-new leads. That's a self-refilling pipeline without writing a single line of scraping code.

Why the node-based approach beats DIY scraping

If you tried to scrape Google Maps yourself inside n8n with an HTTP Request node, you'd immediately hit dynamic JS rendering, rate limits, and layout changes that break your selectors every few weeks. Offloading that to a maintained actor means the brittle part is someone else's problem - you just consume clean JSON. That's the whole point of the Apify node: scraping becomes a single configured step in your automation, not a project.

Wrap-up

In a handful of nodes you've got a no-code lead-gen pipeline: search Google Maps -> extract names, phones, websites and emails -> append to Sheets or email yourself -> schedule it. The same pattern works for any niche and any city.

If you want to go deeper on the contact-enrichment side, the Google Maps Email Extractor actor and its companion contact-finder are both on the Apify Store and run inside n8n exactly the way shown here.

Happy automating.

Top comments (0)