Scrape Yelp Business Data with Scrape.do API & Google Sheets Storage

Go to Workflow
0 views
Built by Onur Onur
Created on June 05, 2026

Description

Yelp Business Scraper by URL via Scrape.do API with Google Sheets Storage

Overview

This n8n workflow automates the process of scraping comprehensive business information from Yelp using individual business URLs. It integrates with Scrape.do for professional web scraping with anti-bot bypass capabilities and Google Sheets for centralized data storage, providing detailed business intelligence for market research, competitor analysis, and lead generation.

Workflow Components

1. 📥 Form Trigger

| Property | Value |
|----------|-------|
| Type | Form Trigger |
| Purpose | Initiates the workflow with user-submitted Yelp business URL |
| Input Fields | Yelp Business URL |
| Function | Captures target business URL to start the scraping process |

2. 🔍 Create Scrape.do Job

| Property | Value |
|----------|-------|
| Type | HTTP Request (POST) |
| Purpose | Creates an async scraping job via Scrape.do API |
| Endpoint | https://q.scrape.do/api/v1/jobs |
| Authentication | X-Token header |

Request Parameters:
Targets**: Array containing the Yelp business URL
Super**: true (uses residential/mobile proxies for better success rate)
GeoCode**: us (targets US-based content)
Device**: desktop
Render**: JavaScript rendering enabled with networkidle2 wait condition

Function: Initiates comprehensive business data extraction from Yelp with headless browser rendering to handle dynamic content.

3. 🔧 Parse Yelp HTML

| Property | Value |
|----------|-------|
| Type | Code Node (JavaScript) |
| Purpose | Extracts structured business data from raw HTML |
| Mode | Run once for each item |

Function: Parses the scraped HTML content using regex patterns and JSON-LD extraction to retrieve:
Business name
Overall rating
Review count
Phone number
Full address
Price range
Categories
Website URL
Business hours
Image URLs

4. 📊 Store to Google Sheet

| Property | Value |
|----------|-------|
| Type | Google Sheets Node |
| Purpose | Stores scraped business data for analysis and storage |
| Operation | Append rows |
| Target | "Yelp Scraper Data - Scrape.do" sheet |

Data Mapping:
Business Name, Overall Rating, Reviews Count
Business URL, Phone, Address
Price Range, Categories, Website
Hours, Images/Videos URLs, Scraped Timestamp

Workflow Flow

Form Input → Create Scrape.do Job → Parse Yelp HTML → Store to Google Sheet
│ │ │ │
▼ ▼ ▼ ▼
User submits API creates job JavaScript code Data appended
Yelp URL with JS rendering extracts fields to spreadsheet

Configuration Requirements

API Keys & Credentials

| Credential | Purpose |
|------------|---------|
| Scrape.do API Token | Required for Yelp business scraping with anti-bot bypass |
| Google Sheets OAuth2 | For data storage and export access |
| n8n Form Webhook | For user input collection |

Setup Parameters

| Parameter | Description |
|-----------|-------------|
| YOUR_SCRAPEDO_TOKEN | Your Scrape.do API token (appears in 3 places) |
| YOUR_GOOGLE_SHEET_ID | Target spreadsheet identifier |
| YOUR_GOOGLE_SHEETS_CREDENTIAL_ID | OAuth2 authentication reference |

Key Features

🛡️ Anti-Bot Bypass Technology

Residential Proxy Rotation**: 110M+ proxies across 150 countries
WAF Bypass**: Handles Cloudflare, Akamai, DataDome, and PerimeterX
Dynamic TLS Fingerprinting**: Authentic browser signatures
CAPTCHA Handling**: Automatic bypass for uninterrupted scraping

🌐 JavaScript Rendering

Full headless browser support for dynamic Yelp content
networkidle2 wait condition ensures complete page load
Custom wait times for complex page elements
Real device fingerprints for detection avoidance

📊 Comprehensive Data Extraction

| Field | Description | Example |
|-------|-------------|---------|
| name | Business name | "Joe's Pizza Restaurant" |
| overall_rating | Average customer rating | "4.5" |
| reviews_count | Total number of reviews | "247" |
| url | Original Yelp business URL | "https://www.yelp.com/biz/..." |
| phone | Business phone number | "(555) 123-4567" |
| address | Full street address | "123 Main St, New York, NY 10001" |
| price_range | Price indicator | "$$" |
| categories | Business categories | "Pizza, Italian, Delivery" |
| website | Business website URL | "https://joespizza.com" |
| hours | Operating hours | "Mon-Fri 11:00-22:00" |
| images_videos_urls | Media content links | "https://s3-media1.fl.yelpcdn.com/..." |
| scraped_at | Extraction timestamp | "2025-01-15T10:30:00Z" |

🗂️ Centralized Data Storage

Automatic Google Sheets export
Organized business data format with 12 data fields
Historical scraping records with timestamps
Easy sharing and collaboration

Use Cases

📈 Market Research
Competitor business analysis
Local market intelligence gathering
Industry benchmark establishment
Service offering comparison

🎯 Lead Generation
Business contact information extraction
Potential client identification
Market opportunity assessment
Sales prospect development

📊 Business Intelligence
Customer sentiment analysis through ratings
Competitor performance monitoring
Market positioning research
Brand reputation tracking

📍 Location Analysis
Geographic business distribution
Local competition assessment
Market saturation evaluation
Expansion opportunity identification

Technical Notes

| Specification | Value |
|--------------|-------|
| Processing Time | 15-45 seconds per business URL |
| Data Accuracy | 95%+ for publicly available business information |
| Success Rate | 99.98% (Scrape.do guarantee) |
| Proxy Pool | 110M+ residential, mobile, and datacenter IPs |
| JS Rendering | Full headless browser with networkidle2 wait |
| Data Format | JSON with structured field mapping |
| Storage Format | Structured Google Sheets with 12 predefined columns |

Setup Instructions

Step 1: Import Workflow

Copy the JSON workflow configuration
Import into n8n: Workflows → Import from JSON
Paste configuration and save

Step 2: Configure Scrape.do

Get your API token:
Sign up at Scrape.do
Navigate to Dashboard → API Token
Copy your token

Update workflow references (3 places):
🔍 Create Scrape.do Job node → Headers → X-Token
📡 Check Job Status node → Headers → X-Token
📥 Fetch Task Results node → Headers → X-Token

Replace YOUR_SCRAPEDO_TOKEN with your actual API token.

Step 3: Configure Google Sheets

Create target spreadsheet:
Create new Google Sheet named "Yelp Business Data" or similar
Add header row with columns:
name | overall_rating | reviews_count | url | phone | address | price_range | categories | website | hours | images_videos_urls | scraped_at
Copy the Sheet ID from URL (the long string between /d/ and /edit)

Set up OAuth2 credentials:
In n8n: Credentials → Add Credential → Google Sheets OAuth2
Complete the Google authentication process
Grant access to Google Sheets

Update workflow references:
Replace YOUR_GOOGLE_SHEET_ID with your actual Sheet ID
Update YOUR_GOOGLE_SHEETS_CREDENTIAL_ID with credential reference

Step 4: Test and Activate

Test with sample URL:
Use a known Yelp business URL (e.g., https://www.yelp.com/biz/example-business-city)
Submit through the form trigger
Monitor execution progress in n8n
Verify data appears in Google Sheet

Activate workflow:
Toggle workflow to "Active"
Share form URL with users

Sample Business Data

The workflow captures comprehensive business information including:

| Category | Data Points |
|----------|-------------|
| Basic Information | Name, category, location |
| Performance Metrics | Ratings, review counts, popularity |
| Contact Details | Phone, website, address |
| Visual Content | Photos, videos, gallery URLs |
| Operational Data | Hours, services, price range |

Advanced Configuration

Batch Processing

Modify the input to accept multiple URLs by updating the job creation body:

{
"Targets": [
"https://www.yelp.com/biz/business-1",
"https://www.yelp.com/biz/business-2",
"https://www.yelp.com/biz/business-3"
],
"Super": true,
"GeoCode": "us",
"Render": {
"WaitUntil": "networkidle2",
"CustomWait": 3000
}
}

Enhanced Rendering Options

For complex Yelp pages, add browser interactions:

{
"Render": {
"BlockResources": false,
"WaitUntil": "networkidle2",
"CustomWait": 5000,
"WaitSelector": ".biz-page-header",
"PlayWithBrowser": [
{ "Action": "Scroll", "Direction": "down" },
{ "Action": "Wait", "Timeout": 2000 }
]
}
}

Notification Integration

Add alert mechanisms:
Email notifications for completed scrapes
Slack messages for team updates
Webhook triggers for external systems

Error Handling

Common Issues

| Issue | Cause | Solution |
|-------|-------|----------|
| Invalid URL | URL is not a valid Yelp business page | Ensure URL format: https://www.yelp.com/biz/... |
| 401 Unauthorized | Invalid or missing API token | Verify X-Token header value |
| Job Timeout | Page too complex or slow | Increase CustomWait value |
| Empty Data | HTML parsing failed | Check page structure, update regex patterns |
| Rate Limiting | Too many concurrent requests | Reduce request frequency or upgrade plan |

Troubleshooting Steps

Verify URLs: Ensure Yelp business URLs are correctly formatted
Check Credentials: Validate Scrape.do token and Google OAuth
Monitor Logs: Review n8n execution logs for detailed errors
Test Connectivity: Verify network access to all external services
Check Job Status: Use Scrape.do dashboard to monitor job progress

Performance Specifications

| Metric | Value |
|--------|-------|
| Processing Time | 15-45 seconds per business URL |
| Data Accuracy | 95%+ for publicly available information |
| Success Rate | 99.98% (with Scrape.do anti-bot bypass) |
| Concurrent Processing | Depends on Scrape.do plan limits |
| Storage Capacity | Unlimited (Google Sheets based) |
| Proxy Pool | 110M+ IPs across 150 countries |

Scrape.do API Reference

Async API Endpoints

| Endpoint | Method | Purpose |
|----------|--------|---------|
| /api/v1/jobs | POST | Create new scraping job |
| /api/v1/jobs/{jobID} | GET | Check job status |
| /api/v1/jobs/{jobID}/{taskID} | GET | Retrieve task results |
| /api/v1/me | GET | Get account information |

Job Status Values

| Status | Description |
|--------|-------------|
| queuing | Job is being prepared |
| queued | Job is in queue waiting to be processed |
| pending | Job is currently being processed |
| rotating | Job is retrying with different proxies |
| success | Job completed successfully |
| error | Job failed |
| canceled | Job was canceled by user |

For complete API documentation, visit: Scrape.do Documentation

Support & Resources

Scrape.do Documentation**: https://scrape.do/documentation/
Scrape.do Dashboard**: https://dashboard.scrape.do/
n8n Documentation**: https://docs.n8n.io/
Google Sheets API**: https://developers.google.com/sheets/api

This workflow is powered by Scrape.do - Reliable, Scalable, Unstoppable Web Scraping

Nodes Used (3)

Code
n8n-nodes-base.code
Google Sheets
n8n-nodes-base.googleSheets
HTTP Request
n8n-nodes-base.httpRequest