Yelp Reviews Scraper: Reviews, Ratings and Owner Replies
Pricing
from $0.90 / 1,000 reviews
Yelp Reviews Scraper: Reviews, Ratings and Owner Replies
Scrape Yelp reviews by business link, alias or name and city: text, stars, date, reviewer, photos and the owner reply, newest first, with star and date filters. Plus one row per business with rating, review count, stars breakdown, categories and address. No login, no browser.
Pricing
from $0.90 / 1,000 reviews
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
From The Mine Works, makers of Google Maps Email Scraper and B2B Leads Finder, with over 245,000 runs across 280+ public actors.
Yelp Reviews Scraper returns Yelp reviews with text, stars, date, reviewer, photos and the owner's reply, plus one profile row per business with its rating and star breakdown, for businesses, agencies and analysts who track reputation, complaints and competitors on Yelp.
Updated 27 Oct 2026: first release. Yelp business links, aliases, ids, or a business name with its city; one profile row per business with rating, review count and the count per star; its reviews newest first with text, stars, date, reviewer, photos, reactions and the owner's public reply. Bookmark this Actor on its Store page so it is one click away next time.
What it does not include: phone numbers, websites, opening hours and claimed status are not in the output, and it does not search Yelp by keyword or category. Bring the businesses you want to track, by link or by name and city.
Why choose this actor?
- Reviews and the business in one run. Every business gets a profile row with its rating, total reviews and the number of 5, 4, 3, 2 and 1 star reviews, then its reviews as rows you can sort and filter. Each review row repeats the business id, name and link, so the review rows work on their own in a sheet.
- The owner reply next to the review.
has_owner_reply, the reply text, its date and who replied (for exampleCUSTOMER_SERVICE). In our test of 500 reviews from 5 businesses, 107 had a public reply. Useful to see which complaints a business answers and how fast. - Pay per row, nothing for errors. Links that are not Yelp businesses, names Yelp does not know, duplicates and the summary row are never charged. No Yelp account, cookies, API key or browser.
Part of The Mine Works Marketing, SEO and reviews family: Facebook Ad Library Scraper, Google Ads Transparency Scraper, Similarweb Scraper, Google News Scraper, Trustpilot Reviews Scraper, Google Trends Scraper.
Guide and FAQs: Yelp Reviews Scraper on themineworks.com.
Try it in one minute
Paste this into the input (JSON view) and press Start. It returns the profile of Prince Street Pizza in New York and its 20 newest reviews. It took 5 seconds in our test run:
{"businessUrls": ["https://www.yelp.com/biz/prince-street-pizza-new-york-2"],"maxReviewsPerBusiness": 20}
Put several links on separate lines to read several businesses at once, or put "Name, City" lines in businessNames. A business you give twice is read and charged once.
Apify's free plan includes $5 of credit every month, which covers about 2,700 reviews at this actor's price.
Copy to your AI assistant
themineworks/yelp-reviews-scraper on Apify. Reads Yelp businesses you name and returns one profile row per business (rating, review count, count per star, categories, street, city, state, price range) and its reviews (text, stars, date, reviewer, photos, reactions, owner reply), with no login. It has no phone, website, opening hours or claimed status, and no keyword search. Call ApifyClient("TOKEN").actor("themineworks/yelp-reviews-scraper").call(run_input={"businessUrls": ["https://www.yelp.com/biz/prince-street-pizza-new-york-2"], "maxReviewsPerBusiness": 100}), then client.dataset(run["defaultDatasetId"]).list_items().items. Give businessUrls (Yelp business links, aliases such as prince-street-pizza-new-york-2, or 22 character business ids) and/or businessNames ("Business name, City, ST", the first comma splits name and place); up to 2000 businesses per run. Optional: maxReviewsPerBusiness (default 20, 0 to 10000, 0 = profile row only), sortBy (newest default, oldest, relevance, highest, lowest), reviewsNewerThan (date YYYY-MM-DD, reads newest first and stops at the first older review), starRatings (list of "1" to "5"), reviewLanguage (all default, or a two letter code). Every data row has record_type "business" or "review". Business rows carry business_id, alias, name, url, categories, address, city, state, price_range, rating, review_count, stars_5, stars_4, stars_3, stars_2, stars_1, reviews_by_language, photo_url, input, matched_by, name_match_score, scraped_at. Review rows carry review_id, business_id, business_alias, business_name, business_url, review_url, rating, text, language, date, local_date, reviewer_id, reviewer_name, reviewer_location, reviewer_review_count, reviewer_friend_count, reviewer_photo_count, reviewer_elite_year, reviewer_url, reviewer_photo_url, photos_count, photo_urls, videos_count, reactions_helpful, reactions_thanks, reactions_love_this, reactions_oh_no, check_in_count, is_first_review_of_business, is_review_of_the_day, previous_reviews_count, has_owner_reply, owner_reply_text, owner_reply_date, owner_reply_name, owner_reply_role, position, sort_by, scraped_at. Each run also writes one row with _type "summary", one with _type "info" when rows were delivered, and a row with _type "error" for each input that could not be read; none of these is charged. Full spec: GET https://api.apify.com/v2/acts/themineworks~yelp-reviews-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
Key features
- Links, aliases, ids or names. A Yelp business link from any Yelp country site, the mobile site, or a link to one review, photo page or menu of the business; the alias after
/biz/; the 22 character business id; or "Name, City". Up to 2,000 businesses per run. - Name and city lookups. Each "Name, City" line goes through Yelp's own business suggestions for that place and the closest name is taken.
name_match_scoresays how close (1 means every word you gave is in Yelp's name). When nothing is close, the error row lists the businesses Yelp offered, so you can pick the right one. - Newest first, or the order you choose. Newest, oldest, Yelp's own relevance order, highest or lowest rated first. Up to 10,000 reviews per business, read up to 49 at a time.
- Only new reviews on a schedule. Set
reviewsNewerThanand each business stops at its first older review, so a weekly run fetches and charges only that week's reviews. - Star filter on Yelp's side. Pick 1 and 2 stars to collect complaints only. The filter runs before the reviews are sent, so you pay only for matching reviews.
- Every language. By default English reviews come first, then each other language the business has, from most to fewest reviews;
reviews_by_languageon the profile row has the counts. Or pick one language. - Stops cleanly. 8 failed requests in a row end the run; the run stops before its time limit and keeps every row. The summary row says why it stopped.
How to use it
Reputation report for your locations
{"businessUrls": ["https://www.yelp.com/biz/katzs-delicatessen-new-york","https://www.yelp.com/biz/franklin-barbecue-austin"],"maxReviewsPerBusiness": 200}
The profile rows give rating and the star breakdown per location; the review rows give the text to read. Filter on has_owner_reply: false and rating 1 or 2 to find complaints nobody answered.
Find businesses from a list of names
{"businessNames": ["Katz's Delicatessen, New York, NY", "Franklin Barbecue, Austin, TX", "Roto-Rooter, Denver, CO"],"maxReviewsPerBusiness": 0}
Paste a column from your CRM or spreadsheet. With maxReviewsPerBusiness at 0 you get only the profile rows: Yelp link, rating, review count, stars breakdown, categories, street, city and price range. Each row keeps your original line in input and the match quality in name_match_score.
Weekly new reviews
{"businessUrls": ["https://www.yelp.com/biz/prince-street-pizza-new-york-2"],"maxReviewsPerBusiness": 500,"reviewsNewerThan": "2026-10-20"}
Run it on a schedule and move the date each week (or use a task per location). The business stops at the first review older than the date.
Complaints only, across competitors
{"businessUrls": ["prince-street-pizza-new-york-2", "katzs-delicatessen-new-york"],"starRatings": ["1", "2"],"maxReviewsPerBusiness": 100}
Up to 100 one and two star reviews per business, newest first, for complaint themes and service gaps.
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
businessUrls | array of strings | empty | Yelp business links, aliases or 22 character business ids. |
businessNames | array of strings | empty | "Business name, City, ST" lines, matched through Yelp's business suggestions. |
maxReviewsPerBusiness | integer | 20 | Most reviews per business, 0 to 10,000. 0 returns the profile row only. |
sortBy | string | newest | newest, oldest, relevance, highest or lowest. |
reviewsNewerThan | date | none | Only reviews on or after this date; reads newest first. |
starRatings | array | all | Star ratings to include, "1" to "5". |
reviewLanguage | string | all | all, or a two letter code such as en, es, fr. |
Give businessUrls, businessNames or both. Up to 2,000 businesses per run.
What data do you get?
Two kinds of data rows, told apart by record_type: one business row per business, then its review rows. Data rows have no _type field; the summary, info and error rows do, so a filter on _type separates them.
Not included: phone number, website, opening hours, claimed status, amenities, menus and business photos beyond the main one. Yelp shows those on its business pages, which this actor does not open. It also does not search Yelp by keyword, category or area. For phone numbers and websites of local businesses use Google Maps Email Scraper.
Business rows (record_type: "business"):
| Field | What it is |
|---|---|
business_id, alias, name, url | The business on Yelp |
categories | Yelp categories, e.g. Barbeque |
address, city, state | Street, city and state or province code (street is empty for service area businesses) |
price_range | e.g. $$$ |
rating, review_count | Rating out of 5 and total reviews |
stars_5, stars_4, stars_3, stars_2, stars_1 | Number of reviews per star |
reviews_by_language | Recommended reviews per language, e.g. {"en": 6480, "es": 8} |
photo_url | Main business photo |
input, matched_by, name_match_score | Your original value, how it was found (link, alias, business_id, name) and the name match score for name lookups |
Review rows (record_type: "review"):
| Field | What it is |
|---|---|
review_id, review_url | The review and a link that opens it on Yelp |
business_id, business_alias, business_name, business_url | The business it is about |
rating, text, language | Stars (1 to 5), the full text and its language |
date, local_date | When it was posted, in UTC and in the business time zone |
reviewer_id, reviewer_name, reviewer_location, reviewer_url, reviewer_photo_url | The reviewer as Yelp shows them, e.g. Mike S., Yucca Valley, CA |
reviewer_review_count, reviewer_friend_count, reviewer_photo_count, reviewer_elite_year | How active the reviewer is on Yelp, and their latest Elite year |
photos_count, photo_urls, videos_count | Photos and videos attached to the review |
reactions_helpful, reactions_thanks, reactions_love_this, reactions_oh_no | Reactions from other Yelp users |
check_in_count, is_first_review_of_business, is_review_of_the_day, previous_reviews_count | Review tags; previous_reviews_count above 0 means the reviewer updated an earlier review |
has_owner_reply, owner_reply_text, owner_reply_date, owner_reply_name, owner_reply_role | The business's public reply |
position, sort_by, scraped_at | Place in the order you chose, the order, when the row was written |
Summary row (_type: "summary", never charged): businesses_requested, businesses_found, businesses_not_found, duplicates_skipped, invalid_inputs, businesses_delivered, reviews_delivered, charged_businesses, charged_reviews, review_pages_read, http_requests, http_megabytes, stopped_by_max_cost, stopped_by_block_guard, shortfall_reason when the run stopped early, and per_business, one entry per business with reviews_available, reviews_delivered and why it stopped. The same summary is saved as the OUTPUT record of the run.
Error rows (_type: "error", never charged): one per input that could not be read, with error_type (invalid_input, not_found, no_close_match, blocked, fetch_error), identifier, reason, and candidates for a name with no close match.
Stable fields for automations
These were present in every row of their kind in our test runs (5 businesses, 500 reviews), and their names will not change:
| Field | What it is |
|---|---|
record_type | business or review |
business_id | The business key, on both row kinds |
name, url, rating, review_count | Business rows |
stars_5 to stars_1 | Business rows |
review_id | The review key |
rating, text, date | Review rows |
reviewer_name, reviewer_location | Review rows |
photos_count, has_owner_reply | Review rows |
scraped_at | When the row was written |
Optional, present only when Yelp has a value: address (empty for service area businesses), price_range, reviewer_elite_year (255 of 500 test reviews), reviewer_photo_url (400 of 500), the owner_reply_* fields (107 of 500), name_match_score (name lookups only).
Output examples
A business row (test run, 27 Oct 2026):
{"record_type": "business","business_id": "MGzro82Fi4LYvc86acoONQ","alias": "franklin-barbecue-austin","name": "Franklin Barbecue","url": "https://www.yelp.com/biz/franklin-barbecue-austin","categories": ["Barbeque"],"address": "900 E 11th St","city": "Austin","state": "TX","price_range": "$$$","rating": 4.5,"review_count": 6494,"stars_5": 4667,"stars_4": 1030,"stars_3": 391,"stars_2": 209,"stars_1": 199,"reviews_by_language": { "en": 6480, "es": 8, "de": 3, "ja": 2, "da": 2, "tr": 1 },"input": "https://www.yelp.com/biz/franklin-barbecue-austin","matched_by": "link"}
A review row with the owner's reply (same day, trimmed):
{"record_type": "review","review_id": "sWlBAGzmZVs5pskECtWLzQ","business_name": "Prince Street Pizza","review_url": "https://www.yelp.com/biz/prince-street-pizza-new-york-2?hrid=sWlBAGzmZVs5pskECtWLzQ","rating": 4,"text": "I was told to try this place out by a friend & I was not disappointed! ...","language": "en","date": "2026-09-24T10:40:48Z","reviewer_name": "Rebecca C.","reviewer_location": "San Antonio, TX","reviewer_review_count": 150,"reviewer_elite_year": 2026,"photos_count": 1,"has_owner_reply": true,"owner_reply_text": "Thank You Rebecca","owner_reply_date": "2026-10-04T02:10:04Z","owner_reply_name": "Edgar T.","owner_reply_role": "CUSTOMER_SERVICE","position": 10,"sort_by": "newest"}
The summary row of the 5 business test run, trimmed:
{"_type": "summary","businesses_requested": 5,"businesses_found": 5,"businesses_delivered": 5,"reviews_delivered": 500,"charged_businesses": 5,"charged_reviews": 500,"review_pages_read": 15,"http_requests": 25,"per_business": [{ "input": "https://www.yelp.com/biz/katzs-delicatessen-new-york", "name": "Katz's Delicatessen", "reviews_available": 16913, "reviews_delivered": 100, "stopped": "max_reviews_reached" }]}
An error row for a name Yelp does not know (nothing charged):
{ "_type": "error", "error_type": "not_found", "identifier": "Joes Plumbing Supreme, Austin, TX", "reason": "Yelp has no business called \"Joes Plumbing Supreme\" near \"Austin, TX\"." }
Pricing
Pay per event: you pay for the reviews and business rows you receive, plus a flat $0.001 per run, whatever memory you choose.
| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
review-scraped | Once per review row stored in your dataset | $1.80 per 1,000 | $1.35 per 1,000 | $1.13 per 1,000 | $0.90 per 1,000 |
business-scraped | Once per business profile row stored in your dataset | $1.80 per 1,000 | $1.35 per 1,000 | $1.13 per 1,000 | $0.90 per 1,000 |
run-start | Once per run, after the first row is stored | $0.001 | $0.001 | $0.001 | $0.001 |
The price of one row is the price per 1,000 divided by 1,000.
Never charged:
- inputs that are not Yelp businesses, and businesses or names Yelp does not know (each gets an error row);
- a business you give twice in the same run (two links, or a link and a name);
- reviews past your
maxReviewsPerBusiness, older thanreviewsNewerThan, or outside yourstarRatings; - the summary, info and error rows;
- a run that stores no row: the start fee is charged only after the first one;
- anything past your "Max cost per run". The actor checks the budget before each batch of rows and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.
Run it on a schedule
- Open the actor in Apify Console, set your input and click Save as a new task.
- In the task, open Schedules, click Add schedule and pick how often (every Monday at 08:00, every day and so on).
- Set
reviewsNewerThanto the date of the last run, or compare runs onreview_idto keep only new reviews; compareratingandreview_counton the business rows to track a location over time. - Optional: add an integration (Google Sheets, Slack, a webhook) so each run lands where your team works.
FAQ
What does this actor read?
Yelp's public review and rating data for the businesses you give, as anyone sees it without logging in. It does not log in, does not open Yelp's business pages and does not read anything behind a sign in.
Why are phone, website and opening hours missing?
Yelp shows them on its business pages, which this actor does not open, so they are not in the output. The profile row has what Yelp's review data carries: name, categories, street, city, state, price range, rating, review count and the star breakdown. For phones and websites of local businesses, run the business names through Google Maps Email Scraper.
Can I search Yelp for "plumbers in Austin"?
No. This actor reads the businesses you name, by link, alias, id or name and city. Build the list first (from your CRM, Google Maps, or Yelp in your browser), then paste it in.
How does the name and city lookup choose a business?
It asks Yelp for the businesses it suggests for that name near that place and takes the first one whose name contains your words; name_match_score is the share of your words found. A chain gives the location Yelp ranks first for that place (Roto-Rooter, Denver, CO returned the Lakewood branch in our test), so for a specific branch paste its link instead.
Which reviews are included?
The reviews Yelp recommends and shows on the business page, in every language unless you pick one. Reviews Yelp lists as "not currently recommended" are not included.
How many reviews can I get?
Up to 10,000 per business and 2,000 businesses per run. Yelp serves them 49 at a time; 100 reviews take 3 pages. In our test, 5 businesses with 100 reviews each took 28 seconds.
How long does a run take?
In our tests: 5 seconds for the "Try it" input (1 business, 20 reviews), 28 seconds for 5 businesses with 100 reviews each, and 11 seconds for 5 profile rows only. The default time limit is 3,600 seconds; the actor stops before it and keeps every row.
Do I need a Yelp account, cookies or an API key?
No. The actor reads public data over Apify Proxy, which is included.
Can I use it from Claude, ChatGPT or Cursor (MCP)?
Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/yelp-reviews-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code:
claude mcp add -t http yelp-reviews-scraper "https://mcp.apify.com/?tools=themineworks/yelp-reviews-scraper"
Which formats can I download?
JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. The dataset has three ready views: Reviews, Businesses, and Reviewers and replies. In CSV and Excel, categories, photo_urls and reviews_by_language are flattened into columns such as categories/0.
Is it legal to scrape Yelp reviews?
The actor reads only reviews and ratings that anyone can see on Yelp without logging in. Reviewer names are shown as Yelp shows them (first name and last initial) and are personal data under laws such as the GDPR and CCPA: keep only what you need and use it for a legitimate purpose. You are responsible for how you use the data and for Yelp's terms. This is general information, not legal advice. Yelp is a trademark of Yelp Inc.; this actor is independent and not affiliated with it.
Integrations
- Google Sheets: send each run's rows to a sheet with Apify's Google Sheets integration; filter on
record_typeto split businesses and reviews into two tabs. - Make, Zapier and n8n: start a run and read its dataset with the Apify apps and nodes, for example "new 1 and 2 star Yelp reviews every morning to Slack".
- Clay and AI agents: call it once per business with one link or one "Name, City" line; the profile row comes back first.
- Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
- API and SDKs: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- MCP clients: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.
More from The Mine Works
Marketing, SEO and reviews
- Facebook Ad Library Scraper
- Google Ads Transparency Scraper
- Similarweb Scraper
- Google News Scraper
- Trustpilot Reviews Scraper
- Google Trends Scraper
- Semrush Scraper
- App Reviews Scraper
- Trustpilot Business Search
- TripAdvisor Reviews Scraper
- Username Checker
- Backlink Building Agent
Social media and video
Leads and business directories
Real estate
Science, health and government data
Jobs and hiring
Company and business data
E-commerce and marketplaces
Food and local services
Developer and AI tools
More tools
Support
Found a business the actor could not read, or a review field that comes back empty? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For a field you need or a new source, email dmineworks@gmail.com.
Give Yelp business links or names and get each business back as one row with rating and star breakdown, then its reviews newest first with text, reviewer, photos and the owner's reply, no login.

