Bright Data to Google Sheets, clean Maps leads fast
You finally sit down to do outreach, and the first hour disappears into a spreadsheet you don’t trust. Google Maps tabs everywhere. Copy, paste, fix formatting, hunt for missing phone numbers. It’s the kind of work that makes you lose momentum fast.
Marketing managers feel it when campaigns need fresh prospects weekly. Agency owners feel it when every client asks for “just 200 more leads.” And if you run a small local business, you’re probably doing competitor research the same clunky way. This Bright Data Sheets automation turns a location + keyword into a clean Google Sheet you can actually use.
Below you’ll see how the workflow runs, what it replaces, what you need to connect, and the small gotchas that usually trip people up the first time.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Bright Data to Google Sheets, clean Maps leads fast
flowchart LR
subgraph sg0["📝 Form Trigger - Start Property Search Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>📝 Form Trigger - Start Prope.."]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>📤 Trigger Bright Data Scrapi.."]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>⏳ Check Scraping Job Status"]
n3@{ icon: "mdi:cog", form: "rounded", label: "⏱️ Wait Before Retry", pos: "b", h: 48 }
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>📥 Fetch Property Listing Data"]
n5@{ icon: "mdi:database", form: "rounded", label: "📄 Save Property Data to Goog..", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "✅ Check If Scraping Complete", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "📊 Validate Property Data Exi..", pos: "b", h: 48 }
n3 --> n2
n2 --> n6
n6 --> n7
n6 --> n3
n4 --> n5
n7 --> n4
n1 --> n2
n0 --> n1
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n6,n7 decision
class n5 database
class n1,n2,n4 api
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n4 customIcon
The Challenge: Turning Google Maps results into usable leads
Google Maps is great for finding businesses. It’s terrible for building a repeatable lead list. You search “dentists in Austin,” click around, open profiles, grab a phone number (if it’s there), and paste it into a sheet that slowly turns into a mess. Then you realize half your entries are missing URLs, some addresses are incomplete, and you’re not even sure which listings you already captured last week. Honestly, the worst part is the mental load. You spend more effort managing the process than doing the outreach that actually drives revenue.
It adds up fast. Here’s where it usually breaks down in real teams.
- Every manual copy-paste run produces slightly different columns, which means sorting and filtering becomes a chore later.
- Phone numbers and URLs are easy to miss because you’re jumping between tabs and profiles all day.
- When someone asks for “the same list, but for three more cities,” you’re basically starting over.
- Errors creep in quietly, so your outreach fails for reasons that look like “bad leads” but are really “bad data entry.”
The Fix: Bright Data pulls listings, n8n writes them to Sheets
This workflow replaces the messy “search, click, copy, paste” routine with one simple input: a web form where you enter a location and keywords. Once you submit, n8n sends a request to Bright Data’s Google Maps dataset, then keeps checking the job status until the scrape is complete. When the results are ready, it retrieves the business records and appends them to your Google Sheet in tidy columns. Names, addresses, ratings, phone numbers, and Google Maps URLs show up without you touching a tab. If the scrape isn’t ready yet, the workflow waits and retries, so you’re not babysitting it.
The workflow starts with a form submission in n8n. Bright Data handles the heavy lifting of collecting Google Maps listings, and n8n’s “ready” checks keep things reliable. Finally, Google Sheets becomes your clean system of record, ready for outreach or analysis.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you pull leads for 3 niches each week (like “roofers,” “plumbers,” and “HVAC”) across 2 cities. Manually, if you spend maybe 2 minutes per listing to open the profile, copy the phone number, paste the address, grab the URL, and clean the row, 100 listings is about 3 hours. With this workflow, you submit 6 form entries in under 10 minutes, then wait for Bright Data to return results (usually a few minutes). You still review the sheet, but you’re reviewing data, not creating it.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Bright Data for Google Maps dataset access.
- Google Sheets to store and share the leads.
- Bright Data API key (get it from your Bright Data dashboard).
Skill level: Intermediate. You’ll connect credentials, paste a Sheet ID, and test a form submission.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A form submission kicks everything off. You enter a location (city/state/country) and a keyword (industry or business type). That single input becomes the search spec for your scrape.
The workflow launches a Bright Data scraping job. n8n sends an HTTP request to Bright Data’s Google Maps dataset and receives a job reference back, which it uses to track progress.
Status checks keep it dependable. n8n polls Bright Data to see if the results are ready, and if not, it waits briefly and checks again. There are also “gate” checks to confirm the scrape returned data before moving on.
Results land in Google Sheets. Once the listings are available, the workflow retrieves the records and appends them to your sheet with consistent columns (name, address, rating, phone number, URL).
You can easily modify the output columns to include things like review count or website URL based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Form Trigger
This workflow starts when a user submits the intake form for a Zillow property search.
- Add and open 📝 Intake Form Start.
- Set Form Title to
Zillow Property Search. - Create form fields: Location (required) and a dropdown Listing Category with options
House for rentandHouse for sale. - Confirm 📝 Intake Form Start connects to 🚀 Launch Scraping Request.
Step 2: Connect Google Sheets
Listing records are appended to a Google Sheet after the scrape finishes.
- Open 📄 Append Listings to Sheet.
- Credential Required: Connect your googleSheetsOAuth2Api credentials.
- Set Operation to
append. - Set Document to
[YOUR_ID]and Sheet Name toZillow. - Map the columns using expressions like URL →
{{ $json.hdpUrl }}, City →{{ $json.city }}, and Street Address →{{ $json.address }}.
Step 3: Set Up Scrape Launch and Monitoring
This section triggers the Bright Data scrape and polls until the snapshot is ready.
- Open 🚀 Launch Scraping Request and set URL to
https://api.brightdata.com/datasets/v3/trigger. - Set Method to
POSTand JSON Body to={ "input": [ { "location": "{{ $json.Location }}", "listingCategory": "{{ $json['Listing Category'] }}", "HomeType": "", "days_on_zillow": "" } ]}. - Configure query parameters:
dataset_id=gd_lfqkr8wm13ixtbd8f5,include_errors=true,type=discover_new,discover_by=input_filters,limit_per_input=2. - Set the header Authorization to
Bearer [CONFIGURE_YOUR_TOKEN]in 🚀 Launch Scraping Request, ⏳ Monitor Scrape Progress, and 📥 Retrieve Listing Records. - In ⏳ Monitor Scrape Progress, set URL to
=https://api.brightdata.com/datasets/v3/progress/{{ $json.snapshot_id }}and add query parameterformat=json. - In ✅ Scrape Ready Gate, set the condition to
{{ $json.status }}equalsready. - Configure ⏱️ Pause Before Next Check with Unit
minutesand Amount1, then confirm it loops back to ⏳ Monitor Scrape Progress.
⚠️ Common Pitfall: The Bright Data token is a placeholder. Replace [CONFIGURE_YOUR_TOKEN] in every HTTP header before testing, or the requests will fail with authorization errors.
Step 4: Configure Data Retrieval and Validation
Once the scrape is ready, the workflow checks for records and retrieves the snapshot data.
- In 📊 Confirm Data Presence, set the condition to
{{ $json.records }}not equals{{ 0 }}. - Open 📥 Retrieve Listing Records and set URL to
=https://api.brightdata.com/datasets/v3/snapshot/{{ $json.snapshot_id }}. - Ensure 📊 Confirm Data Presence outputs to 📥 Retrieve Listing Records when data exists.
- Confirm 📥 Retrieve Listing Records outputs to 📄 Append Listings to Sheet for storage.
Tip: The polling loop is driven by ✅ Scrape Ready Gate → ⏱️ Pause Before Next Check → ⏳ Monitor Scrape Progress. Keep the wait time at 1 minute unless your Bright Data dataset requires longer processing.
Step 5: Test and Activate Your Workflow
Run a manual test to validate the end-to-end scrape and sheet append before activating.
- Click Execute Workflow and submit the 📝 Intake Form Start with a valid Location and Listing Category.
- Confirm 🚀 Launch Scraping Request returns a
snapshot_id, and ⏳ Monitor Scrape Progress returnsstatusupdates. - Verify 📥 Retrieve Listing Records returns listings and 📄 Append Listings to Sheet writes rows to the
Zillowsheet. - When results look correct, toggle the workflow to Active for production use.
Watch Out For
- Bright Data credentials can expire or your dataset access may not be enabled. If things break, check your Bright Data dashboard permissions for the Google Maps dataset first.
- If you’re using Wait nodes or external processing, run times vary. Bump up the wait duration if the status check sometimes flips to “ready” but the next request returns empty data.
- Google Sheets permission errors are usually an OAuth issue, not the workflow itself. Reconnect your Google Sheets credential in n8n and confirm the target spreadsheet is accessible to that Google account.
Common Questions
Usually about 30 minutes once you have your Bright Data API key and a Google Sheet ready.
Yes, but you will want someone comfortable connecting OAuth credentials. No coding is required, just careful setup and a test run.
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 API usage based on your plan.
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.
You can expand what gets saved by adjusting the “Retrieve Listing Records” HTTP request to include extra fields Bright Data provides (like review count or website URL), then mapping those into new columns in “Append Listings to Sheet.” Common tweaks include changing the result limit, running multiple keywords per location, and adding a “source” column so you can track which search produced each row.
Most of the time it’s an invalid API key or missing access to the Google Maps dataset in your Bright Data account.
It depends more on your Bright Data plan than n8n. On n8n Cloud Starter, you’re working within your monthly execution quota, and each search can take several executions because the workflow polls for status before pulling results. If you self-host, there’s no execution cap from n8n, so throughput mostly comes down to server resources and Bright Data rate limits. Practically, many teams run a handful of searches per day without thinking about it, then batch bigger pulls when they need a new list.
For this workflow, n8n has a few advantages: more complex logic with unlimited branching at no extra cost, a self-hosting option for unlimited executions, and native HTTP + waiting/polling patterns that are awkward and expensive in many no-code tools. Zapier and Make can still do it, but the “check status, wait, retry, then fetch” loop is where costs and complexity creep in. If you only run occasional tiny pulls, you might not care. If this becomes a weekly process, you probably will. Talk to an automation expert if you’re not sure which fits.
Once this is running, lead list building becomes a repeatable input, not a weekly ordeal. The workflow handles the tedious parts, and your sheet stays clean enough to trust.
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.