Yelp to Google Sheets, lead lists without copy paste
Building a prospect list from Yelp sounds simple until you’re 40 tabs deep, copying names, fixing addresses, and realizing half your “leads” are missing phone numbers.
Growth marketers feel it when outbound has to ship now. A local agency owner feels it when a client asks for “200 leads by Friday.” And founders doing their own sales? They end up doing spreadsheet therapy. This Yelp Sheets leads automation gives you consistent columns in Google Sheets without the busywork.
You’ll see how the workflow validates your search inputs with AI, pulls businesses via Bright Data, waits for the scrape to finish, then appends clean rows to your sheet.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Yelp to Google Sheets, lead lists without copy paste
flowchart LR
subgraph sg0["On Form Submission 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Snapshot Results"]
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/form.svg' width='40' height='40' /></div><br/>On Form Submission"]
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 Delivery Status of Sna.."]
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Final Status", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Wait 1 Minute", pos: "b", h: 48 }
n5@{ icon: "mdi:database", form: "rounded", label: "Google Sheets - Save Busines..", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "AI Agent - Validate Input", pos: "b", h: 48 }
n7@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model", pos: "b", h: 48 }
n8["<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/code.svg' width='40' height='40' /></div><br/>Format AI Response for Scraper"]
n9["<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/>Yelp Data Scraper - Bright D.."]
n4 --> n3
n3 --> n0
n3 --> n2
n1 --> n6
n0 --> n5
n7 -.-> n6
n6 --> n8
n8 --> n9
n9 --> n2
n2 --> n4
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 n1 trigger
class n6 ai
class n7 aiModel
class n3 decision
class n5 database
class n0,n2,n9 api
class n8 code
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n8,n9 customIcon
The Problem: Yelp Lead Research Turns Into Spreadsheet Cleanup
Manual Yelp lead collection is the kind of work that looks harmless, then quietly eats your week. You find a business, copy the name, then hunt for the phone number, then try to standardize the address so it sorts correctly in your CRM later. After that you do it again. And again. The worst part is the inconsistency: one entry has a website, the next doesn’t, categories are messy, and review counts get typed wrong. By the time you’ve built a list you trust, you’re too drained to actually outreach.
The friction compounds. Here’s where it breaks down in real life:
- You lose about 5 minutes per business just switching tabs and formatting cells.
- Small input mistakes (like “Newyork” or the wrong category label) lead to empty results, so you start over.
- Columns drift over time, which makes deduping and filtering way harder later.
- Someone eventually asks “where did this lead come from?” and you don’t have a clean Yelp URL per row.
The Solution: AI-Validated Yelp Scraping That Logs to Sheets Automatically
This workflow turns Yelp prospecting into a simple request-and-receive process. You submit a form with the country, location, and the kind of businesses you want (like “restaurants” in “New York”). An AI validator cleans that input so the location formatting and category naming are aligned with what Yelp expects. Then n8n sends the request to Bright Data’s Yelp dataset API to collect the businesses for you. While Bright Data builds the snapshot, the workflow checks progress, waits briefly, and re-checks until the data is ready. Once it is, n8n retrieves the output and appends clean rows straight into Google Sheets, with consistent columns you can actually use.
The workflow starts with a form submission in n8n. From there, Gemini validates and normalizes your search parameters before Bright Data runs the scrape. Finally, the results get appended to your Google Sheet as a ready-to-filter lead list.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you’re building a list of 150 Yelp businesses for a new outreach campaign. Manually, if you spend about 5 minutes per business to copy details, find missing fields, and keep columns consistent, that’s roughly 12 hours of work. With this workflow, you submit the form in about 2 minutes, then wait around 10–15 minutes for scraping and logging. You still review the sheet, but it’s a quick scan, not a rebuild.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for storing your prospect list.
- Bright Data to access the Yelp dataset API.
- Google Gemini API key (get it from Google AI Studio/Google Cloud credentials).
Skill level: Beginner. You will connect accounts, paste a few IDs/keys, and run a test submission.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A form submission kicks things off. You enter the country, location, and business category you want to pull from Yelp. This is meant to be quick, not fiddly.
The workflow cleans your request with AI. Gemini reviews the inputs, fixes formatting issues, and normalizes what you typed into a structure the scraper can reliably use.
Bright Data runs the Yelp scrape and n8n keeps checking. n8n sends the dataset request, polls for snapshot progress, and uses a short wait period so it doesn’t hammer the API while the job is still running.
Results land in Google Sheets. When the snapshot is ready, n8n retrieves the output and appends rows to your sheet with the fields you care about (name, ratings, reviews, categories, website, phone, address, Yelp URL).
You can easily modify the output columns to match your CRM import format based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Form Submission Trigger
Set up the form that kicks off the Yelp data scrape workflow.
- Add and open Form Submission Trigger.
- Set Form Title to
YelpDataScraper. - Ensure the form fields include country, category, and location.
- Leave Flowpast Branding as-is (it’s a sticky note and doesn’t affect execution).
Step 2: Connect Google Sheets
Configure the destination spreadsheet for the scraped business data.
- Open Append to Spreadsheet and set Operation to
append. - Select the spreadsheet in Document using
[YOUR_ID]. - Set Sheet Name to the tab with
gid=0(Yelp scraper data by keyword). - Map columns to expressions: url →
{{ $json.url }}, name →{{ $json.name }}, address →{{ $json.address }}, website →{{ $json.website }}, categories →{{ $json.categories }}, phone_number →{{ $json.phone_number }}, reviews_count →{{ $json.reviews_count }}, overall_rating →{{ $json.overall_rating }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials.
Step 3: Set Up AI Input Validation
Validate and normalize form inputs using the AI agent and Gemini model.
- Open AI Input Validator and keep Prompt Type set to
define. - Confirm the prompt uses the input expressions like
{{ $json.country }},{{ $json.location }}, and{{ $json.category }}. - Open Gemini Chat Engine and set Model Name to
models/gemini-1.5-flash. - Credential Required: Connect your googlePalmApi credentials in Gemini Chat Engine (this model is attached to AI Input Validator).
Step 4: Configure Scraping and Normalization
Normalize the AI output and submit a Bright Data scrape request to Yelp.
- Open Normalize AI Payload and keep the JavaScript as provided to parse and validate the AI response.
- In Yelp Scrape Request, set URL to
https://api.brightdata.com/datasets/v3/triggerand Method toPOST. - Set JSON Body to the provided expression, including
{{ $json.country }},{{ $json.location }}, and{{ $json.category }}insideinput. - Set query parameters: dataset_id →
[YOUR_ID], include_errors →true, type →discover_new, discover_by →search_filters, limit_per_input →10. - Add header Authorization →
[CONFIGURE_YOUR_TOKEN].
[CONFIGURE_YOUR_TOKEN] in all three nodes.Step 5: Add Snapshot Polling and Status Gate
Poll Bright Data until the snapshot is ready, then retrieve results.
- In Verify Snapshot Progress, set URL to
https://api.brightdata.com/datasets/v3/progress/{{ $json.snapshot_id }}and keep the Authorization header. - Configure Pause One Minute with Unit set to
minutesand Amount set to1. - In Final Status Gate, set the condition to equals with Left Value
{{ $json.status }}and Right Valueready. - Ensure Final Status Gate routes true to Retrieve Snapshot Output and the false path back to Verify Snapshot Progress for continued polling.
- In Retrieve Snapshot Output, set URL to
https://api.brightdata.com/datasets/v3/snapshot/{{ $json.snapshot_id }}and add query parameter format →json.
ready.Step 6: Configure Output to Sheets
Finalize the data pipeline so that snapshot results append to your Google Sheet.
- Verify that Retrieve Snapshot Output connects directly to Append to Spreadsheet.
- Confirm the column mappings in Append to Spreadsheet match your sheet headers and use the existing expressions.
Step 7: Test and Activate Your Workflow
Run a live test and then enable the workflow for production.
- Click Execute Workflow and submit the form in Form Submission Trigger with sample values.
- Confirm Yelp Scrape Request returns a
snapshot_id, and Final Status Gate eventually routes to Retrieve Snapshot Output. - Check your Google Sheet to verify new rows are appended with URL, name, address, website, categories, phone number, review count, and rating.
- Once verified, toggle the workflow to Active for ongoing use.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials section and confirm the connected Google account still has edit access to the target spreadsheet.
- 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
About 10–15 minutes if your accounts are ready.
No. You’ll connect accounts, paste a few IDs/keys, and test a form submission.
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 costs and Gemini/OpenAI API costs (usually small for simple validation).
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.
Yes, but you’ll want to tweak the input and batching logic. Common customizations include turning the form into a list of locations, looping through each location with Split in Batches, and writing each run to a separate tab or adding a “Search Location” column. You can also swap the Gemini validation prompt so it enforces your exact naming rules for categories.
Usually it’s expired OAuth or the wrong Google account connected. Reconnect the Google Sheets credential in n8n, then confirm the sheet is shared with that same account and you’re using the correct spreadsheet ID in the Google Sheets node. If it still fails, check if your Google Workspace admin blocks third-party OAuth apps.
A lot, but it depends on your n8n plan, your server, and Bright Data limits.
Often, yes, because this isn’t a simple “send data from A to B” Zap. You’re doing input validation, polling a long-running scrape job, and mapping structured output into a sheet, which is exactly where n8n’s logic and retries help. Zapier can do parts of it, but the polling/waiting and branching tends to get awkward fast, and pricing climbs when you run bigger pulls. Make is more flexible, but you’ll still spend time building the same control flow. If you’re unsure, Talk to an automation expert and get a straight recommendation.
Once this is running, your prospecting stops being “copy, paste, clean” and becomes “request, review, outreach.” Honestly, that’s the only version that scales.
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.