🔓 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 22, 2026

Google Maps to Google Sheets, scored leads ready

Lisa Granqvist Partner Workflow Automation Expert

Building a local lead list sounds easy until you’re knee-deep in Google Maps tabs, copying phone numbers, fixing addresses, and guessing who’s actually worth contacting. The worst part is the rework. You do it once, then you still don’t trust the data.

This hits agency owners trying to prospect for SEO or ads. sales reps feel it when a “lead list” turns into a week of cleanup. And marketing managers end up stuck in spreadsheets instead of running campaigns. With Maps leads scoring automation, you get a clean sheet, quick context, and a simple fit score so you can focus outreach on the right businesses.

Below you’ll see exactly what the workflow does, what you need to run it, and what kind of time savings you can realistically expect when you automate lead scraping and enrichment.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Google Maps to Google Sheets, scored leads ready

The Problem: Google Maps Leads Are Messy and Slow

Google Maps is great for searching, but terrible for building a usable lead list. You find a business, open the profile, copy the name, category, phone, address, and site, then paste it into a sheet. After that, you still need context: what they do, who they likely serve, and whether they’re even a fit for your offer. Miss one field, and your outreach falls apart later (“wrong number,” “no website,” “we don’t serve that area”). Do this for 50 businesses and it becomes a small project, not a task.

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

  • You lose about 5 minutes per lead just collecting fields, then another minute fixing formatting.
  • Listings often have missing websites or inconsistent categories, so you’re forced to “guess” the niche.
  • Researching context (what they sell, who they serve, how established they look) takes longer than the copying.
  • Once you scale past a small batch, mistakes sneak in and you stop trusting your own sheet.

The Solution: Scrape, Enrich, and Score Leads Into Google Sheets

This workflow pulls local business listings from Google Maps, enriches each record with AI context, and saves everything into Google Sheets in a consistent structure. You start by setting your input parameters (location, business category, how many results you want). n8n sends the request through Bright Data to scrape the listings at scale, including fields like business name, category, phone, address, and website. Then Google Gemini analyzes the raw listing data and generates a usable lead profile: a short company summary, inferred services, and a fit or engagement score so you can prioritize outreach. Finally, the workflow cleans the output, writes it to Google Sheets, and can alert you via webhook when a run completes.

The workflow starts with your search criteria. Bright Data returns the Maps results, then Gemini turns “raw fields” into something a human would actually want to read. At the end, your Google Sheet becomes a ready-to-use prospect list, not a messy dump.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you want 60 leads for “dentists in Austin.” Manually, you might spend about 5 minutes per business copying fields and checking the site, which is roughly 5 hours for the batch (and you’ll still need to judge fit). With this workflow, you spend about 10 minutes setting the query and sheet, then let the scrape and Gemini enrichment run in the background. Even if you wait another 20–30 minutes for processing, you’re not doing the busywork. You get a scored sheet you can start calling the same day.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Bright Data for scraping Google Maps reliably.
  • Google Gemini to enrich leads with summaries and scoring.
  • Google Sheets to store and share the lead list.
  • Bright Data credentials (get them from your Bright Data dashboard).
  • Gemini API key (get it from Google AI Studio / Gemini API settings).

Skill level: Intermediate. You’ll connect accounts, paste API keys, and adjust inputs like location, category, and batch size.

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

How It Works

You define the search. The workflow begins when you run it manually (or trigger it another way) and set parameters like the city, the business category, and how many listings to pull.

Bright Data collects the raw listings. n8n sends an HTTP request to Bright Data, which handles the heavy lifting of scraping Google Maps results, even when Google throws CAPTCHAs or rate limits.

Gemini turns fields into lead context. The listing data gets passed into Gemini, which produces a structured profile: a short summary, likely services, and a fit score you can use to rank outreach.

Your sheet gets updated, and batches keep it stable. n8n cleans the output, merges what needs merging, and updates Google Sheets. For larger runs, it loops through items in batches with a wait delay to avoid flaky results.

You can easily modify the scoring criteria to match your offer based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Manual Trigger

Start the workflow with the manual trigger so you can test the end-to-end data pull and enrichment flow.

  1. Add Manual Start Trigger as the entry point of the workflow.
  2. Connect Manual Start Trigger to Assign Input Parameters.
  3. Use the manual trigger while building and validating responses from the Bright Data and MCP steps before enabling scheduled or production triggers.

Step 2: Connect Bright Data and Set Input Parameters

Define the target search URL and request parameters for the Bright Data API call.

  1. In Assign Input Parameters, set url to https://www.google.com/maps/search/.
  2. Set webhook_notification_url to https://example.com/webhook.
  3. Set search to dentists+in+texas/?q=dentists+in+texas, zone to serp_api1, start to 0, and num to 20.
  4. Open Bright Data API Call and set URL to https://api.brightdata.com/request and Method to POST.
  5. Under body parameters in Bright Data API Call, set zone to {{ $json.zone }}, url to {{ $json.url }}/{{ $json.search }}, and format to raw.
  6. Credential Required: Connect your httpHeaderAuth credentials in Bright Data API Call.
  7. ⚠️ Common Pitfall: The Bright Data request requires the Content-Type header set to application/json as configured in Bright Data API Call.

    Step 3: Set Up Google Maps AI Extraction

    Use Gemini to parse the raw Google Maps data into structured JSON with a schema-aware output parser.

    1. Open Maps Data Extraction and set Text to =Extract Google Maps content {{ $json.data }} Make sure to return the data in JSON.
    2. Ensure Maps Data Extraction has hasOutputParser enabled and is connected to Structured Result Parser.
    3. In Structured Result Parser, keep the provided jsonSchemaExample to enforce output structure.
    4. Connect Gemini Chat Engine as the language model for Maps Data Extraction and set the model to models/gemini-2.0-flash-exp.
    5. Credential Required: Connect your googlePalmApi credentials in Gemini Chat Engine.
    6. The Structured Result Parser is an AI sub-node — add credentials to Gemini Chat Engine, not to the parser itself.

      Step 4: Configure Parallel Outputs from Maps Data Extraction

      The Maps extraction outputs to multiple nodes simultaneously for storage, webhook notification, and data transformation.

      1. Confirm that Maps Data Extraction outputs to Transform Output Script, Generate Binary Payload, and Dispatch Webhook Alert in parallel.
      2. In Transform Output Script, set JavaScript Code to return $input.first().json.output.
      3. In Generate Binary Payload, keep the function that base64-encodes the JSON output.
      4. In Save Structured File, set File Name to =d:\GoogleMaps_Response.json and Operation to write.
      5. In Dispatch Webhook Alert, set URL to {{ $('Assign Input Parameters').item.json.webhook_notification_url }} and include the body parameter {{ $json.output.toJsonString() }}.
      6. ⚠️ Common Pitfall: File paths in Save Structured File are Windows-style (e.g., d:\). Update to a valid path for your host environment.

        Step 5: Enrich Each Record with Yelp Data via MCP

        Split the records and enrich each lead by searching Yelp and scraping the resulting page.

        1. Ensure Transform Output Script outputs to both Update Sheet Records and Iterate Records in parallel.
        2. From Iterate Records, connect to Delay Step and then to MCP Query Client to rate-limit external calls.
        3. In MCP Query Client, set Tool Name to search_engine and Tool Parameters to { "query": "{{ $json.name }} in Yelp" } .
        4. Credential Required: Connect your mcpClientApi credentials in MCP Query Client and MCP Scrape Client.
        5. In Search Result Extractor, set Text to =Extract the Yelp URL and Desc {{ $json.result.content[0].text }} Make sure to return the data in JSON.
        6. Connect Gemini Search Model as the language model for Search Result Extractor and set the model to models/gemini-2.0-flash-exp.
        7. Credential Required: Connect your googlePalmApi credentials in Gemini Search Model.
        8. In MCP Scrape Client, set Tool Name to scrape_as_markdown and Tool Parameters to { "url": "{{ $json.output.url }}" } .
        9. In Generate Yelp Binary, keep the function that encodes JSON into binary.data, then write it using Save Yelp File with File Name set to =d:\Yelp_Response_{{ new Date().toISOString().replace(/[:.]/g, '-')}}.json.
        10. The Search Output Parser is an AI sub-node — add credentials to Gemini Search Model, not to the parser itself.

          Step 6: Configure Google Sheets Output

          Append or update each lead record in your Google Sheet with the structured data.

          1. Open Update Sheet Records and set Operation to appendOrUpdate.
          2. Set Document ID to your spreadsheet ID (replace [YOUR_ID]) and Sheet Name to the target sheet (replace gid=[YOUR_ID]).
          3. Map columns to values using expressions such as {{ $json.output[0].name }}, {{ $json.output[0].rating }}, {{ $json.output[0].address }}, and {{ $json.output[0].appointment_link }}.
          4. Set Matching Columns to name so records update correctly.
          5. Credential Required: Connect your googleSheetsOAuth2Api credentials in Update Sheet Records.
          6. Step 7: Test and Activate Your Workflow

            Run the workflow manually to validate the full data pipeline before activating it.

            1. Click Execute Workflow from Manual Start Trigger to run a test.
            2. Confirm that Bright Data API Call returns data and that Maps Data Extraction outputs structured JSON.
            3. Verify parallel outputs: Maps Data Extraction sends data to Transform Output Script, Generate Binary Payload, and Dispatch Webhook Alert in parallel.
            4. Check that Save Structured File and Save Yelp File create files at the specified paths, and that Update Sheet Records appends/updates rows.
            5. Once validated, toggle the workflow to Active for production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Sheets credentials can expire or need specific permissions. If things break, check the connected Google account and the n8n credential permissions screen 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

How long does it take to set up this Maps leads scoring automation?

About 30 minutes if your keys and accounts are ready.

Do I need coding skills to automate Maps lead scoring?

No. You will mostly paste API keys and tweak a few input fields. The only “technical” part is testing with a small batch first.

Is n8n free to use for this Maps leads scoring 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 Bright Data usage and Gemini API costs based on how many leads you enrich.

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 Maps leads scoring workflow for my ICP (like “only businesses with websites”)?

Yes, and you probably should. You can add an If condition after the Maps extraction to filter out rows with empty websites or missing phones, then adjust the Gemini prompt so the score reflects your ICP (for example, “has a website,” “looks like a multi-location brand,” or “offers high-margin services”). Common customizations include changing the scoring rubric, adding a “next step” field for reps, and writing to separate tabs per city.

Why is my Google Sheets connection failing in this workflow?

Usually it’s an expired Google credential or the wrong Google account connected. Reconnect the Google Sheets credential in n8n, then confirm the target spreadsheet is shared with that account. It can also fail if the sheet headers changed, because the workflow is expecting specific columns to exist.

How many leads can this Maps leads scoring automation handle?

Hundreds per run is normal, but start with 20–50 to verify quality and costs.

Is this Maps leads scoring automation better than using Zapier or Make?

It depends on how picky you are about data quality and control. Zapier and Make are fine for simple “new row to new row” tasks, but this workflow benefits from batching, conditional logic, and structured AI parsing, which n8n handles without turning every extra step into a pricing surprise. Self-hosting also matters if you plan to run large scrapes regularly. The honest catch: you’ll spend a little longer setting it up the first time. Talk to an automation expert if you want help choosing the simplest path.

Once this is running, your “lead list” stops being a project. It’s just a repeatable workflow that produces scored prospects you can actually act on.

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