Yelp Business Reviews Scraper
Pricing
Pay per event
Yelp Business Reviews Scraper
Extract public Yelp review text, ratings, dates, reviewer details, photos, and owner responses from supplied business URLs.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Extract public Yelp business reviews from supplied business URLs into a clean dataset for reputation monitoring, customer-feedback analysis, spreadsheets, and data pipelines.
Each review record includes the review text, star rating, publication date, reviewer profile metadata, attached photo URLs, the business context, and a displayed owner response when available.
The Actor accepts real yelp.com/biz/... pages. It does not require a Yelp login, Yelp API key, or user-provided proxy configuration.
What does Yelp Business Reviews Scraper do?
The Actor turns public Yelp review pages into structured records.
It can:
- process one or many Yelp business URLs;
- return newest reviews for recurring monitoring;
- use Yelp's relevance ordering for one-time analysis;
- paginate beyond the first review page;
- filter reviews by publication date;
- filter reviews by star rating;
- capture reviewer name, location, avatar, public ID, and Elite badges;
- capture attached public photo or video-thumbnail URLs;
- capture owner-response text when Yelp displays it;
- deduplicate records by Yelp's stable review identifier;
- stop at per-business and overall limits.
Results go to the run's default dataset, ready for JSON, CSV, Excel, XML, RSS, API, or webhook integrations.
Who is it for?
Reputation teams can schedule newest-first runs and compare stable reviewId values with an earlier export.
Restaurant and local-business operators can isolate low-star reviews and investigate repeated service or product complaints.
Agencies can process several client business pages in one run while keeping each record tied to its canonical businessUrl.
Analysts and researchers can collect review text, ratings, dates, and reviewer context for a bounded public-data study.
Data engineers can feed normalized rows into a warehouse, spreadsheet, BI tool, or sentiment-analysis pipeline.
Why use this Actor?
Yelp pages are designed for interactive browsing rather than repeatable exports.
This Actor provides:
- URL-first input with strict validation;
- typed, stable field names;
- pagination and filtering in one run;
- useful failure messages instead of silently returning an empty dataset;
- no automatic residential proxy cost;
- resource-blocked browser loading to avoid downloading review media;
- pay-per-event billing only for the run start and useful saved reviews.
It intentionally focuses on reviews from supplied business pages. It does not claim to search Yelp for businesses or scrape private Yelp account data.
What data can you extract?
| Field | Meaning |
|---|---|
reviewId | Stable public Yelp review identifier |
reviewUrl | Canonical URL targeting the review |
businessName | Business name displayed on Yelp |
businessAlias | Alias from the Yelp /biz/ URL |
businessUrl | Canonical Yelp business URL |
businessRating | Current aggregate business rating |
businessReviewCount | Current displayed business review count |
rating | Review's one-to-five-star rating |
text | Public review text |
publishedDate | Date normalized to YYYY-MM-DD |
publishedDateRaw | Date as Yelp displayed it |
reviewerId | Public Yelp reviewer identifier |
reviewerName | Public reviewer display name |
reviewerUrl | Public Yelp profile URL |
reviewerLocation | Displayed reviewer location |
reviewerAvatarUrl | Public avatar image URL |
reviewerEliteStatus | Displayed Yelp Elite badges |
photoUrls | Attached public photo or video-thumbnail URLs |
ownerResponse | Displayed business-owner response, or null |
ownerResponseDateRaw | Displayed response date, or null |
sourceUrl | Normalized source URL |
scrapedAt | Extraction timestamp |
Nullable fields remain null when Yelp does not display that information.
How to scrape Yelp business reviews
- Open the Actor input page.
- Add one or more public Yelp URLs containing
/biz/<business-alias>. - Choose
Newest firstfor monitoring orYelp relevancefor representative reviews. - Set overall and per-business limits.
- Optionally set date and star-rating filters.
- Click Start.
- Open the Yelp reviews dataset view.
- Export the data or connect the dataset API to your workflow.
Start with a small limit to confirm the target pages and output before scheduling a larger recurring run.
Input parameters
startUrls
Required array of Yelp business URLs.
Accepted shape:
[{ "url": "https://www.yelp.com/biz/gary-danko-san-francisco" }]
Other Yelp pages, non-Yelp hosts, and malformed URLs fail closed.
maxItems
Maximum matching reviews saved across all businesses. Default: 100; maximum: 10000.
maxReviewsPerBusiness
Maximum matching reviews saved for each business. Default: 100; maximum: 5000.
sortBy
date: newest reviews first; recommended for monitoring.relevance: Yelp relevance order; useful for one-time analysis.
dateFrom and dateTo
Optional inclusive YYYY-MM-DD boundaries.
When sortBy is date, the Actor stops paging after it passes dateFrom.
minRating and maxRating
Inclusive integer star boundaries from 1 to 5.
For complaint triage, set minRating: 1 and maxRating: 3.
Example input
{"startUrls": [{ "url": "https://www.yelp.com/biz/gary-danko-san-francisco" }],"maxItems": 10,"maxReviewsPerBusiness": 10,"sortBy": "date","dateFrom": "2026-07-01","minRating": 1,"maxRating": 5}
This input is suitable for a scheduled newest-review monitoring task.
Example output
{"reviewId": "sampleReviewId123","reviewUrl": "https://www.yelp.com/biz/sample-cafe?hrid=sampleReviewId123","businessName": "Sample Cafe","businessAlias": "sample-cafe","businessUrl": "https://www.yelp.com/biz/sample-cafe","businessRating": 4.5,"businessReviewCount": 248,"rating": 5,"text": "Friendly service and a thoughtful menu.","publishedDate": "2026-07-15","publishedDateRaw": "Jul 15, 2026","reviewerId": "sampleReviewerId","reviewerName": "Sample R.","reviewerUrl": "https://www.yelp.com/user_details?userid=sampleReviewerId","reviewerLocation": "San Francisco, CA","reviewerAvatarUrl": "https://s3-media0.fl.yelpcdn.com/photo/sample/60s.jpg","reviewerEliteStatus": ["Elite 26"],"photoUrls": ["https://s3-media0.fl.yelpcdn.com/bphoto/sample/348s.jpg"],"ownerResponse": "Thank you for visiting us.","ownerResponseDateRaw": "Jul 16, 2026","sourceUrl": "https://www.yelp.com/biz/sample-cafe","scrapedAt": "2026-08-08T06:30:00.000Z"}
The example is anonymized. Actual runs contain public source values.
How much does it cost to extract Yelp business reviews?
The Actor uses pay-per-event pricing:
- one
startevent per run; - one
itemevent for each useful review saved.
The start price is $0.001 per run. The BRONZE item price is $0.00078431 per saved review, with lower per-review rates on higher pricing tiers.
At the BRONZE rate:
- 10 reviews cost about $0.0088 including the start event;
- 100 reviews cost about $0.0804 including the start event;
- 1,000 reviews cost about $0.7853 including the start event.
Filtered-out, duplicate, empty, or failed records do not emit an item charge. Apify shows the active tier and maximum charge before a run starts.
Recurring reputation monitoring workflow
- Set
sortBytodate. - Set
dateFromto the beginning of the monitoring window. - Schedule the Actor daily or weekly.
- Store
reviewIdin your destination system. - Upsert on
reviewIdto avoid duplicate alerts. - Route one-to-three-star rows to a support or operations queue.
- Track
businessRatingandbusinessReviewCountas contextual snapshots.
The Actor extracts current public data. It does not maintain historical state or send alerts by itself.
Spreadsheet, webhook, and data-pipeline integrations
Use an Apify integration to send the dataset to Google Sheets, Make, Zapier, Slack, a webhook, or cloud storage.
For a warehouse pipeline:
- use
reviewIdas the source key; - parse
publishedDateas a date; - parse
scrapedAtas the observation timestamp; - retain
businessUrlfor entity grouping; - treat reviewer and response fields as nullable;
- avoid downloading media unless your use case requires it.
For sentiment analysis, analyze text while preserving rating as a source-provided label.
Use the Yelp reviews API
Replace YOUR_TOKEN with an Apify API token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~yelp-business-reviews-scraper/runs?token=YOUR_TOKEN&waitForFinish=120" \-H "Content-Type: application/json" \-d '{"startUrls":[{"url":"https://www.yelp.com/biz/gary-danko-san-francisco"}],"maxItems":10,"sortBy":"date"}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/yelp-business-reviews-scraper').call({startUrls: [{ url: 'https://www.yelp.com/biz/gary-danko-san-francisco' }],maxItems: 10,sortBy: 'date',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("automation-lab/yelp-business-reviews-scraper").call(run_input={"startUrls": [{"url": "https://www.yelp.com/biz/gary-danko-san-francisco"}],"maxItems": 10,"sortBy": "date",})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use with Apify MCP
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/yelp-business-reviews-scraper"
Claude Desktop
Add this server to Claude Desktop's MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/yelp-business-reviews-scraper"}}}
Cursor
Use the same mcpServers.apify.url value in Cursor's MCP settings.
VS Code
Add the same HTTP MCP URL to your VS Code MCP server configuration, then select the Yelp Business Reviews Scraper tool.
Example prompts:
- "Extract the five newest reviews from this Yelp business URL."
- "Collect recent one-to-three-star reviews and summarize recurring complaints."
- "Run the Yelp review monitor input and return only review IDs not in this list."
Limits and reliability
Yelp is a dynamic third-party source and can change markup, availability, or anti-automation behavior without notice.
The Actor uses a public translated Yelp surface because direct Yelp delivery is frequently challenged. A source change may temporarily cause retries or a non-zero failure.
Other limitations:
- only public
/biz/URLs are supported; - no Yelp business search is provided;
- no login-only or private account data is accessed;
- Yelp may display different review order or counts by locale and time;
- photo arrays can be empty when a review has no displayed photos;
- owner-response fields are
nullwhen no response is displayed; - deleted or hidden reviews cannot be recovered;
- very large businesses require more pages and runtime.
The Actor retries failed pages three times with fresh browser pages, then fails visibly rather than returning a misleading empty success.
Responsible use and legality
This Actor extracts publicly displayed information. You are responsible for ensuring that your use complies with applicable law, Yelp's terms, privacy obligations, and your organization's policies.
Use only the data you need. Avoid using reviewer data for harassment, discrimination, identity resolution, or unsolicited contact. Apply appropriate retention, access-control, and deletion policies to exported personal data.
This Actor is not affiliated with or endorsed by Yelp.
Troubleshooting
Why does the run reject my URL?
Use a full public Yelp business URL containing /biz/<alias>. Search pages, user pages, shortened links, and non-Yelp hosts are intentionally rejected.
Why are there no matching rows?
Check the date and rating boundaries. A valid business may have no reviews matching a narrow filter. Increase maxReviewsPerBusiness so the Actor can page far enough to find matches.
Why did the run fail after retries?
Open the run log and check the upstream status. Retry later if Yelp's public surface is temporarily unavailable. Do not add a proxy: this Actor owns its delivery strategy and does not expose an unmeasured residential fallback.
Why is ownerResponse null?
Yelp does not display an owner response for every review. Null means no response was found on the rendered card.
How do I avoid duplicate alerts?
Use reviewId as the stable source key and upsert or compare against prior IDs in your destination.
FAQ
Can I scrape multiple Yelp businesses?
Yes. Add multiple business URLs to startUrls; the Actor deduplicates identical canonical URLs.
Can I get only the newest reviews?
Yes. Use sortBy: "date", a recent dateFrom, and an appropriate limit.
Can I get only negative reviews?
Yes. Set minRating: 1 and maxRating: 3.
Does it download review photos?
No. It returns displayed public media URLs while blocking image downloads during extraction to reduce transfer and runtime cost.
Does it use the official Yelp API?
No. The official API does not provide the complete supplied-business review workflow implemented here.
Does it require a Yelp login or API key?
No.
Is every Yelp review guaranteed?
No. Output reflects reviews Yelp publicly displays through the source surface at run time. Yelp can reorder, hide, translate, or remove content.
Related Automation Lab Actors
Use Google Maps Reviews Scraper when your workflow starts from Google Maps rather than Yelp.
Use Trustpilot Reviews Scraper for public Trustpilot company-review monitoring.
Use Social Media Sentiment as a downstream text-analysis step when its supported input contract matches your workflow.
These are separate sources and products; their records should not be treated as equivalent Yelp reviews.