🔓 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 + Supabase, enriched leads ready to call

Lisa Granqvist Partner Workflow Automation Expert

Copying businesses out of Google Maps is tedious. Then you still have to clean the list, dedupe it, figure out who to call first, and write something that doesn’t sound like a robot.

This Google Maps leads automation hits sales teams hardest, but marketers building local lists and agency owners doing outbound for clients feel it too. The outcome is simple: leads land in Supabase already enriched, with a call script you can actually use.

Below you’ll see how the workflow turns a single form submission into a ready-to-call database, what it removes from your process, and what to watch for when you run it at scale.

How This Automation Works

See how this solves the problem:

n8n Workflow Template: Google Maps + Supabase, enriched leads ready to call

The Challenge: Turning Google Maps results into outreach-ready leads

Google Maps is great for finding businesses. It’s awful for turning those finds into a clean, usable lead list. You end up doing a messy mix of scraping, manual copy-paste, “is this the right phone number?”, and rebuilding context you already saw on the listing. And if you want personalization, you’re stuck opening websites one-by-one just to write a decent opener. After a few dozen leads, the whole thing gets slow, error-prone, and frankly annoying.

It adds up fast. Here’s where it breaks down once you try to do it consistently.

  • Pulling businesses from Maps and formatting them for a CRM takes about 2 hours per batch if you care about quality.
  • Duplicates creep in because the same business shows up across slightly different searches, which means reps waste time calling twice.
  • You end up calling “cold” because there’s no quick summary of what the business does or what to mention on the first call.
  • When the list lives in spreadsheets and inboxes, tracking outreach or assigning leads becomes a weekly cleanup project.

The Fix: Google Maps scraping, AI enrichment, and Supabase upserts

This workflow starts with a simple form submission where you provide a Google Maps starting location, a keyword, and a country. From there, Bright Data kicks off a Maps scraping job and the workflow automatically monitors the extraction until the snapshot is ready. Once results come back, the automation structures each business record, applies a sensible item limit, and processes leads in batches so it doesn’t fall over when you pull a big list. For leads that have a website, it scrapes and summarizes the site content, then uses an LLM (via Bright Data MCP and LangChain nodes) to generate a personalized cold call script and talking points. Finally, everything is upserted into Supabase, so re-running a search updates existing leads instead of creating duplicates.

The workflow begins when your form is submitted. It then runs a scrape-and-wait loop until Bright Data’s snapshot is ready, enriches each lead (website summary when available), and generates the call script. Supabase becomes the single place where “found it on Maps” turns into “ready to call”.

What Changes: Before vs. After

Real-World Impact

Say you need 100 local leads for “roofing” in a metro area. Manually, even a quick process is maybe 2 minutes per lead to copy details, check the website, and write a basic opener, which is about 3 hours. With this workflow, you submit the form in about 2 minutes, then let Bright Data run and the AI generate scripts while you do other work. You’re usually back to a Supabase table full of enriched leads without spending your afternoon in tabs.

Requirements

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Bright Data for Google Maps scraping jobs
  • Supabase to store and upsert lead records
  • LLM API key (get it from OpenAI or Google Gemini)

Skill level: Intermediate. You’ll connect credentials and create a Supabase/Postgres table once.

Need help implementing this? Talk to an automation expert (free 15-minute consultation).

The Workflow Flow

Form submission kicks it off. You submit a starting location (often a Maps URL), a keyword, and a country, and the workflow parses coordinates so the search is consistent.

Bright Data runs the Maps extraction. n8n sends the request, then loops through a monitor-and-check cycle. If the snapshot isn’t ready yet, it waits and retries until it is (with a counter to avoid endless runs).

Lead records get cleaned and enriched. The workflow structures the business data, applies an item limit, and processes leads in batches. If a business has a website, it scrapes and summarizes it, then maps those insights into fields you can store.

AI generates the call script. Using an LLM (Gemini and/or OpenAI nodes appear in this workflow), it creates a personalized cold call script plus talking points, then merges everything into one record.

Supabase stays updated. Each lead is upserted to your database table, so reruns refresh details instead of multiplying rows. You can easily modify the keyword, the item limit, or the script prompt to match your niche and outreach style. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Manual Trigger

This workflow can be started manually for setup and also accepts user input through a form. Configure both entry points so you can create the database table and collect scraping parameters.

  1. Open Manual Start Trigger and confirm it’s enabled for testing (note: it’s disabled in the JSON).
  2. Open Form Submission Trigger and set Form Title to Maps Extractor.
  3. In Form Submission Trigger, verify the fields and placeholders for Location URL, Keyword Search, Country, and My company's segment.
  4. Set the Button Label to Scrape and the Form Submitted Text to Scraping started 🔎.

⚠️ Common Pitfall: The form instructions require a full Google Maps URL from the browser address bar, not a “Share” link. Using a share link can break the coordinate parsing.

Step 2: Connect PostgreSQL Storage

Set up the database table and upsert logic that stores enriched business records.

  1. Open Create Storage Table and set Operation to executeQuery.
  2. Paste the full SQL into Query exactly as shown, starting with CREATE TABLE business_scraping_result (...).
  3. Credential Required: Connect your postgres credentials in Create Storage Table.
  4. Open Upsert Database Row and ensure the Table is business_scraping_result in public schema.
  5. Credential Required: Connect your postgres credentials in Upsert Database Row.
  6. Confirm the mapped columns use expressions like {{ $('Combine Records').item.json.company.name }} and {{ $json.text }} for sales_helper.

Step 3: Connect Bright Data Extraction and Retry Loop

Configure the Bright Data request, monitoring, and retry loop that fetches Google Maps business records.

  1. Open Parse Coordinates from URL and confirm latitude is set to {{ $json['Location URL'].match(/@(-?\d+\.\d+),(-?\d+\.\d+)/)[1] }} and longitude to {{ $json['Location URL'].match(/@(-?\d+\.\d+),(-?\d+\.\d+)/)[2] }}.
  2. Open Bright Data Request and set URL to https://api.brightdata.com/datasets/v3/trigger with Method POST.
  3. Set JSON Body to the provided array expression, including {{ $json.Country }}, {{ $json['Keyword Search'] }}, and {{ $json.longitude.toNumber() }}.
  4. In Bright Data Request, update query parameters like dataset_id to your Bright Data dataset ID.
  5. Credential Required: Connect your brightdataApi credentials in Bright Data Request.
  6. Open Monitor Extraction Progress and Fetch Snapshot Data, and confirm snapshot_id is set to {{ $('Bright Data Request').item.json.snapshot_id }}.
  7. Credential Required: Connect your brightdataApi credentials in Monitor Extraction Progress and Fetch Snapshot Data.
  8. Check the retry loop: Pause Before Retry uses Amount 10, Delay Cycle uses 60, and Retry Limit Check compares {{ $('Pass Through Step').last().json.count }} to 10.

⚠️ Common Pitfall: If the Bright Data dataset is still “building,” the workflow will loop between Snapshot Ready Check and Pause Before Retry. Verify your dataset configuration and quota to avoid endless retries.

Step 4: Set Up Data Structuring and Batching

Normalize fields, limit the number of records, and process items in batches for downstream enrichment.

  1. Open Structure Business Data and confirm mapped fields like company.name{{ $json.name }} and company.open_website{{ $json.open_website }}.
  2. Set Apply Item Limit to Max Items 15 to cap the number of businesses processed.
  3. Use Batch Item Loop to iterate through each item after limiting.
  4. Verify Website Availability Check uses the expression {{ $json?.company?.open_website }} to route items with a website to enrichment.

Step 5: Set Up AI Enrichment and Call Script Generation

Configure the scraping agent and the call script generation chain with the connected AI models and tool.

  1. Open Scrape and Summarize and keep the Text prompt as Use the tool 'scrape_as_markdown' with the url: {{ $json.company.open_website }}.
  2. Open Markdown Scraper Tool and set Endpoint URL to https://mcp.brightdata.com/mcp?token=[CONFIGURE_YOUR_TOKEN], then replace [CONFIGURE_YOUR_TOKEN] with your Bright Data MCP token.
  3. Connect OpenAI Mini Chat as the language model for Scrape and Summarize and ensure credentials are added to OpenAI Mini Chat.
  4. Credential Required: Connect your openAiApi credentials in OpenAI Mini Chat.
  5. Open Generate Call Script and set Text to {{ JSON.stringify($json) }}.
  6. Connect Gemini Chat Model as the language model for Generate Call Script.
  7. Credential Required: Connect your googlePalmApi credentials in Gemini Chat Model.

⚠️ Common Pitfall: The Markdown Scraper Tool is a tool sub-node. Credentials and tokens should be configured at the tool and parent AI node level—ensure the token is valid and accessible when Scrape and Summarize runs.

Step 6: Configure Record Merging and Output Mapping

Combine the scraped summary with the original business data and route it into the database upsert.

  1. Open Map Summary Fields and confirm summary uses {{ $json.output }} and company uses {{ $('Apply Item Limit').item.json.company }}.
  2. Keep Combine Records as the merge point before Generate Call Script.
  3. Verify Website Availability Check routes the “false” path to Combine Records so items without websites still get processed.

Step 7: Test and Activate Your Workflow

Run a manual test, then enable the form trigger for production use.

  1. Click Manual Start Trigger to execute Create Storage Table and confirm the database table is created.
  2. Submit the Form Submission Trigger form with a valid Google Maps URL, keyword, country, and company segment.
  3. Watch the run: Bright Data Request should return a snapshot_id, and the loop should proceed to Fetch Snapshot Data after readiness checks.
  4. Confirm successful output: Upsert Database Row should insert/update records with page_summary and sales_helper populated.
  5. When validated, activate the workflow to allow Form Submission Trigger to run continuously in production.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Watch Out For

  • Bright Data credentials can expire or need specific permissions. If things break, check your Bright Data token and workspace access in the Bright Data dashboard 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.

Common Questions

How quickly can I implement this Google Maps leads automation?

Usually about an hour once your Bright Data and Supabase credentials are ready.

Can non-technical teams implement this Google Maps lead enrichment?

Yes, but someone has to set up the Supabase table the first time. After that, running it is just submitting the form and reviewing results.

Is n8n free to use for this Google Maps leads 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 plus your LLM API costs.

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.

How do I adapt this Google Maps leads automation solution to my specific challenges?

You can customize it in three practical places. Change the “Apply Item Limit” node to control lead volume, tweak “Scrape and Summarize” to capture the signals you care about (services, pricing, locations), and rewrite the “Generate Call Script” prompt so it matches your offer and tone. If you prefer one model, you can also swap between the Gemini and OpenAI chat model nodes without changing the overall flow. That’s usually the fastest way to go from generic scripts to “this sounds like us.”

Why is my Bright Data connection failing in this workflow?

Most of the time it’s an expired token or missing permissions on the Bright Data side. Regenerate the API key (or MCP credentials), update it in n8n, then rerun the request and watch the monitor step to confirm the job is actually created. If it starts and then stalls, you may be hitting account limits or the snapshot is taking longer than your current wait cycle, so the “Pause Before Retry” duration needs to be increased.

What’s the capacity of this Google Maps leads automation solution?

If you self-host n8n, there’s no hard execution cap (it depends on your server). On n8n Cloud, your plan sets monthly executions, and this workflow can consume a lot if you enrich big batches because it loops and processes items in chunks. Practically, most small teams run this weekly or daily for tens to a few hundred leads per run, then scale up once prompts and database fields are stable.

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

Often, yes, because this workflow needs looping, waiting, branching logic, and database upserts, and n8n handles those without turning your bill into a surprise. Zapier or Make can work for simple “capture a lead and add a row” automations, but the moment you add scraping progress checks and AI enrichment, things get messy. n8n is also easier to self-host, which matters if you plan to run high volume. The honest answer: if you’re only doing lightweight list building, you might prefer the simpler tools. Talk to an automation expert if you’re not sure which fits.

Once this is running, lead building stops being a half-day task and becomes a repeatable input to your outreach machine. Set it up, tune the prompts, and let Supabase stay ready for the next call block.

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