Keencrest guides

n8n: Google Maps leads to Google Sheets with contact emails

By Keencrest · 2026-11-01

This guide builds a lead list in Google Sheets from a Google Maps search, for example "plumber in Austin, TX": one row per business with name, address, phone, website, email, LinkedIn and Facebook. It uses the free n8n-nodes-datagleaner community node, which runs two Data Gleaner Actors on Apify (Google Maps Leads, then Website Contact Details) and returns their rows as normal n8n items.

Use your own token. Create an API token in Apify under Settings, Integrations and save it in the node's credential. Never paste it into a shared workflow or sheet.

Install and import

  1. Self-hosted n8n: Settings, Community nodes, Install, enter n8n-nodes-datagleaner. (Community nodes are not available on every n8n Cloud plan.)
  2. Download one of the two templates below and use Workflows, Import from file.
  3. Open both Data Gleaner nodes and create the credential "Data Gleaner (Apify) API" with your Apify token.
  4. Create a Google Sheet with this header row: placeId, name, address, phone, website, emails, linkedin, facebook (the batch template also writes contactStatus). Connect your Google account in the Sheets node and pick the sheet.
  5. Edit the search text in Find Local Leads and run it.

Which template

TemplateHow it calls contact detailsUse it when
Per placeOne Get Contact Details run per placeSmall searches, simplest to read
Batch, one contact runA Code node gathers every website, one run covers the search, a second Code node matches the results back to places by website hostAnything over a handful of places

The batch template needs the matching step because the Actor returns sites in a different order than it received them, so rows must be joined on the website host, never on position.

Cap what a run can spend

Every Data Gleaner operation has a Max Charge (USD) setting under Run Settings. It is sent to Apify as maxTotalChargeUsd, a hard cap: the run stops when it is reached. Leave it empty and your Apify account default applies (on our account that default was $59, so set your own). Max Places Per Search in Find Local Leads is the other cost control.

Skip Facebook and Instagram "websites"

Some Google Maps listings give a Facebook or Instagram page as the business website. Those pages are not company sites and block crawlers, so a contact run on them returns nothing. Get Contact Details therefore has Skip Social-Network URLs, on by default: Facebook, Instagram, LinkedIn, X/Twitter, TikTok, YouTube and Linktree URLs are dropped before the run. The batch template's Collect Websites Code node applies the same filter. Switch the option off in the node's Options if you do want those URLs scanned.

What we tested (2026-11-01)

We installed n8n-nodes-datagleaner@0.2.1 into a local n8n 2.45 and ran the batch template on "plumber in Austin, TX" with 3 places and a $0.05 Max Charge on both nodes. Apify showed that cap on both runs. Results:

StepResult
Find Local Leads3 places, 4.3 s, charged 3 x $0.0015
Collect Websites3 places, 1 of them a Facebook page: 2 websites kept, 1 skipped
Get Contact Detailsone run for both sites, 9.6 s, 2 sites with an email, charged 2 x $0.002
Match Contacts to Places3 rows: two with office@reliantplumbing.com and a Facebook link, one skipped place with no email

Total charged $0.0085 for the three places. An earlier run of the per-place template cost the same $0.0085 but made three contact runs and took 17.9 s for the contact step, against 9.6 s for the batch. The two sites in the test were pages of one company, so the email count (2 of 3) is not a hit rate; expect an email on roughly half to two-thirds of small-business sites.

Not tested: the Google Sheets node itself (we had no Google account in the test n8n), so we checked the column mapping by swapping it for a Set node with the same fields, which gave the right values on the right rows. Connect your own Google credential and run a 3-place search first.

Install note for self-hosters

If a manual install into n8n's nodes folder fails on a native module build, use npm install --ignore-scripts --legacy-peer-deps there. Installing through Settings, Community nodes needs neither.

Try it: Website Contact Details Scraper on Apify. $0.002 per site with an email, nothing for sites without. The Apify free plan includes monthly credit, so a test run costs nothing out of pocket.

Related guides

All Keencrest guides