🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 21, 2026

Google Places to Google Sheets, enriched leads ready

Lisa Granqvist Partner Workflow Automation Expert

Lead research looks simple until you’re 30 tabs deep, copying phone numbers, hunting for emails, and still ending up with a spreadsheet full of “no website” and “contact us only.” It’s busywork. And it quietly kills your outreach momentum.

This Places lead enrichment setup hits sales teams first (because pipeline waits for nobody). But agency owners building prospect lists and marketers running local campaigns feel the same grind. You get a Google Sheet filled with scored, enriched prospects that are actually ready to contact.

Below, you’ll see exactly what this n8n workflow automates, what outcomes to expect, and how to customize it without turning it into a science project.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Google Places to Google Sheets, enriched leads ready

The Problem: Prospecting Turns Into Tab-Hopping

Pulling leads from Google Maps is easy. Turning them into outreach-ready prospects is the painful part. You grab a list, then you manually click into each business, open their website, scroll for a footer, look for an email, copy socials, and try to guess if the business is even worth your time. After about 20 leads, you’re already making shortcuts. That’s when errors creep in, duplicates sneak through, and your “lead list” becomes a pile of maybes instead of a pipeline you can work.

It adds up fast. Here’s where it breaks down in real life.

  • Google Places results are not the same as usable leads, because many listings don’t include direct contact details.
  • Manually checking 50 websites for emails and socials can burn an afternoon, and you still miss things hiding in footers.
  • Without scoring, your team wastes prime outreach time on closed locations, low-rated businesses, or listings with no website.
  • Copy-paste workflows invite messy Sheets data, which means follow-ups slip and reporting becomes guesswork.

The Solution: Google Places Leads, Scored and Enriched in Sheets

This workflow turns Google Places searches into a clean, enriched Google Sheet your team can act on. It starts with a trigger (manual launch, webhook, or schedule), then uses your chosen category and location to pull business listings from the Google Places API. Each business is scored for quality using factors like rating, operational status, and whether a website exists. Only the “good” leads move forward. Then Scrape.do fetches the lead’s website HTML reliably (the whole point is avoiding blocks), and an OpenAI-powered AI agent parses the site’s footer to extract contact details like emails, phone numbers, and social links. Finally, everything is appended into Google Sheets as structured rows, so outreach can start immediately.

The workflow begins with your search inputs (like “dentists” in “Istanbul”). It then scores and filters leads before enriching them one by one through website scraping and AI extraction. The end result is a living spreadsheet that keeps filling itself on your schedule.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you want 60 new prospects a week from Google Places. Manually, if you spend about 6 minutes per lead to open the listing, visit the site, hunt the footer, and paste details into Sheets, that’s roughly 6 hours. With this workflow, you set the search once and let it run on a schedule. Even if enrichment takes a couple minutes per business in the background, your hands-on time drops to about 10 minutes to review the sheet and start outreach.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Places API for pulling local business listings
  • Google Sheets to store and share enriched leads
  • Scrape.do API token (get it from your Scrape.do dashboard)
  • OpenAI API key (get it from the OpenAI platform dashboard)

Skill level: Intermediate. You’ll connect a few credentials, map Sheet columns, and adjust search inputs confidently.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

Trigger and search inputs. You launch it manually, via webhook, or on a schedule. A simple “Define Search Inputs” step sets the category and location you want to target.

Google Places pulls the raw leads. The workflow sends an HTTP request to the Google Places API and returns a list of nearby businesses that match your criteria. This is the same source your team is already using, just automated.

Scoring and filtering protect your time. A Function step calculates a leadScore using signals like rating, website presence, and operational status, then an IF filter keeps only the leads worth enriching. Frankly, this is where most “scraping” setups fail, because they try to process everything.

Website scraping and AI enrichment. Leads are processed in batches, Scrape.do fetches the website HTML, and an HTML extraction step isolates the footer area. Then an AI agent (OpenAI Chat Model + structured parsing) extracts emails, phone numbers, and social links and sends clean fields to Google Sheets.

You can easily modify the scoring rules to prioritize different lead types based on your needs. 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 and tune the lead search before automating.

  1. Add and open Manual Launch Trigger.
  2. Leave default settings as-is to run on demand.
  3. Connect Manual Launch Trigger to Define Search Inputs.

Use the manual trigger while building so you can inspect each node’s output after execution.

Step 2: Connect Google Places Search Inputs and API Request

Define the search location and query, then call the Google Places Nearby Search endpoint.

  1. Open Define Search Inputs and set values:
  2. Set searchCategory to dentist, locationName to Istanbul, Turkey, latitude to 41.0082, longitude to 28.9784, radius to 5000, and maxResults to 20.
  3. Open Retrieve Nearby Businesses and set URL to https://places.googleapis.com/v1/places:searchNearby.
  4. Set Method to POST and JSON Body to ={"includedTypes":["{{$json["searchCategory"]}}"],"maxResultCount":{{$json["maxResults"]}},"locationRestriction":{"circle":{"center":{"latitude":{{$json["latitude"]}},"longitude":{{$json["longitude"]}}},"radius":{{$json["radius"]}}}}}.
  5. Enable Send Headers and include header parameters: X-Goog-FieldMask places.id,places.displayName,places.formattedAddress,places.nationalPhoneNumber,places.websiteUri,places.rating,places.businessStatus,places.primaryType,places.location and Content-Type application/json.
  6. Credential Required: Connect your httpHeaderAuth credentials in Retrieve Nearby Businesses.

⚠️ Common Pitfall: If Retrieve Nearby Businesses returns empty data, verify your Google Places API key permissions and ensure radius and maxResults are numeric values.

Step 3: Set Up Lead Scoring and Routing

Score leads, filter premium entries, and route low-quality leads for logging.

  1. Open Parse and Rate Leads and keep the scoring logic that calculates leadScore based on rating, website, phone, and business status.
  2. In Filter Premium Leads, confirm conditions: leadScore larger than 50 and businessName notEqual to N/A using {{$json["leadScore"]}} and {{$json["businessName"]}}.
  3. Ensure the true output of Filter Premium Leads connects to Iterate Lead List.
  4. Ensure the false output of Filter Premium Leads connects to both Compile Lead Summary and Record Issue Log.
  5. Open Iterate Lead List to confirm batch processing is enabled (defaults are fine).

Use Compile Lead Summary and Record Issue Log outputs to audit how many leads fail the premium filter.

Step 4: Configure Site Scraping and HTML Extraction

Scrape each lead’s website and pull the footer HTML for contact extraction.

  1. Open Scrape Site HTML and set URL to http://api.scrape.do/ with Send Query enabled.
  2. Set query parameters: url to {{ $json.website }} and token to {{$env["SCRAPE_DO_API_KEY"]}}.
  3. In Validate Scrape Result, ensure the condition checks {{ $json.error.status }} is notEquals 400.
  4. In Extract Footer Section, set Operation to extractHtmlContent and CSS Selector to footer for the footer key.

⚠️ Common Pitfall: If Scrape Site HTML returns errors, ensure the environment variable SCRAPE_DO_API_KEY is defined in your n8n instance.

Step 5: Set Up AI Contact Extraction

Use the AI agent with a structured output parser to extract contact and social data from the footer HTML.

  1. Open AI Chat Engine and set the model to gpt-4.1-mini.
  2. Credential Required: Connect your openAiApi credentials in AI Chat Engine.
  3. Open Structured Data Parser and set Schema Type to manual with the provided JSON schema for contact, social, location, and other_contact_methods.
  4. Open AI Contact Extraction and confirm the prompt includes {{ $json.footer }} and Has Output Parser is enabled.

The Structured Data Parser is attached to AI Contact Extraction; add credentials to the parent AI Chat Engine, not the parser sub-node.

Step 6: Configure Output to Google Sheets

Append enriched lead data to your spreadsheet with fields mapped from the AI output and the original lead data.

  1. Open Append Leads to Sheets and set Operation to append.
  2. Set Document ID to [YOUR_ID] and Sheet Name to gid=0.
  3. Map key fields using expressions, for example: BusinessName{{ $('Iterate Lead List').item.json.businessName }}, emails{{ $json.output.contact.emails[0] }}, Facebook{{ $json.output.social.facebook }}, and Other{{ $json.output.other_contact_methods[0].url }}.
  4. Credential Required: Connect your googleSheetsOAuth2Api credentials in Append Leads to Sheets.
  5. Ensure Append Leads to Sheets routes back to Iterate Lead List to process the next lead in the batch.

Step 7: Test and Activate Your Workflow

Run the workflow end-to-end and verify data is appended to your sheet.

  1. Click Execute Workflow on Manual Launch Trigger to start a test run.
  2. Confirm that Retrieve Nearby Businesses returns place data and Parse and Rate Leads outputs items with leadScore.
  3. Check that Scrape Site HTML and Extract Footer Section produce footer content and that AI Contact Extraction outputs structured JSON.
  4. Verify a new row is added in your spreadsheet by Append Leads to Sheets.
  5. When satisfied, switch the workflow to Active for production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Places API credentials can expire or be restricted by project settings. If things break, check your Google Cloud Console API key restrictions and billing status first.
  • If you’re using Wait behavior indirectly (batch looping plus external scraping), processing times vary. Bump up the batch size downwards or increase any waits if downstream nodes fail on empty responses.
  • Default AI prompts are generic. Add your exact output rules early (what counts as “email,” which socials matter, how to handle missing data) or you’ll be cleaning rows forever.

Frequently Asked Questions

How long does it take to set up this Places lead enrichment automation?

About an hour if your API keys and Google Sheet are ready.

Do I need coding skills to automate lead enrichment from Google Places?

No. You’ll mostly connect accounts, paste API keys, and map your Google Sheets columns. The only “techy” part is adjusting the lead scoring rules, and even that is optional.

Is n8n free to use for this Places lead enrichment workflow?

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 Scrape.do and OpenAI API usage, plus Google Places API costs depending on volume.

Where can I host n8n to run this automation?

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.

Can I customize this Places lead enrichment workflow for multiple cities instead of one?

Yes, but you’ll want to change the “Define Search Inputs” node to accept a list of locations, then loop through them before calling “Retrieve Nearby Businesses.” Common customizations include running one category across five cities, running five categories in one city, or increasing the minimum leadScore so you only enrich top-tier listings.

Why is my Google Places connection failing in this workflow?

Usually it’s an API key restriction or billing issue in Google Cloud. Confirm the Places API is enabled, your key is active, and the key restrictions allow the request type you’re making. In n8n, also double-check the Header Auth credential is selected in the “Retrieve Nearby Businesses” HTTP Request node. If you’re testing heavily, rate limits can show up too.

How many leads can this Places lead enrichment automation handle?

A lot. On n8n Cloud, capacity depends on your plan’s monthly executions, because each lead can trigger multiple steps (Places lookup, scrape, AI extraction, Sheets write). If you self-host, there’s no execution cap, but your server resources and API rate limits become the bottleneck. Practically, most teams start with a few hundred leads per week, verify quality, then scale up.

Is this Places lead enrichment automation better than using Zapier or Make?

For this kind of workflow, n8n is usually the better fit because you can score and filter leads, loop through batches, and run an AI agent with structured output without fighting platform limits. Self-hosting is another big deal if you plan to scale. Zapier or Make can still work if you’re doing a simpler version (basic Places pull to Sheets, no scraping). If you’re unsure, Talk to an automation expert and get a recommendation based on your volume and goals.

Once this is running, your spreadsheet stops being a dumping ground and starts acting like a pipeline. Set it up once, then spend your time on outreach that actually moves deals forward.

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.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal