Yelp Reviews Scraper & Monitor: Owner Replies, All Languages
Pricing
$0.25 / 1,000 review saveds
Yelp Reviews Scraper & Monitor: Owner Replies, All Languages
Scrape Yelp reviews from business URLs, names or searches: full text, stars, date, owner replies, photos, Elite reviewer stats and the star breakdown. Get the full history in every language, or schedule it to get only new reviews. $0.25 per 1,000 reviews.
Pricing
$0.25 / 1,000 review saveds
Rating
0.0
(0)
Developer
Epic Scrapers
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
7 days ago
Last modified
Categories
Share
Yelp Reviews Scraper: full review history, owner replies, every language, and only new reviews on repeat runs
Yelp Reviews Scraper exports the reviews of any Yelp business to a spreadsheet: the full text, star rating, date, photos, the owner's public reply, the reviewer's profile and Elite status, and the business's star breakdown. Give it business URLs, business names or a Yelp search, and get one clean row per review.
- Only new reviews on repeat runs. Turn on Only new reviews, save the input as a task and schedule it. The first run collects the history; every later run returns only reviews posted or edited since the last one, and you pay only for those. Most Yelp review scrapers start from zero every time.
- The full history, in every language. The Yelp app shows one language at a time. This actor collects all of them and merges them into one list sorted by date, so a business with 13,000 reviews in 11 languages comes back complete.
- Owner replies and edits. Every row says whether the business replied, with the reply text and who wrote it. If a reviewer edited their review, the earlier versions and their star ratings come with it.
- Fast. In our tests a full history of 13,183 reviews took under 2 minutes, and a daily check of a few businesses takes seconds.
- $0.25 per 1,000 reviews, no start fee. No Yelp account, API key or proxy setup. Export to JSON, CSV, Excel or Google Sheets, or use the API.
What can you do with Yelp Reviews Scraper?
| Goal | How |
|---|---|
| Monitor your own locations | Schedule your business URLs with Only new reviews on, and send new reviews to Slack, email or a spreadsheet. |
| Answer reviews faster | Sort by lowest or filter to 1 and 2 stars, then check hasOwnerReply to see which complaints still need an answer. |
| Benchmark competitors | Put nearby competitors in one run and compare businessRatingCounts, review volume per month and owner reply rates. |
| Find recurring complaints or praise | Use Only reviews mentioning with words such as parking, wait, rude or dirty, or feed all reviews to an AI assistant. |
| Research a local market | Paste a Yelp search URL (e.g. "ramen in Portland") and collect the reviews of the top results. |
| Sentiment analysis and AI training | Collect the full history in every language, with dates and star ratings as labels. |
| Lead generation for agencies | Find businesses with many recent bad reviews and no owner replies: they need reputation help. |
How it compares
| What you need | Yelp Reviews Scraper | Most Yelp review scrapers on Apify | Yelp Fusion API (official) |
|---|---|---|---|
| Reviews per business | All recommended reviews | All, or a capped number | 3 review excerpts |
| Repeat runs | Returns only new and edited reviews, you pay only for them | Collect everything again, or a date range | No |
| Languages | Every language, merged and sorted | Often one language per run | One locale |
| Owner replies | Text, author and role | Varies | No |
| Edited reviews | Earlier versions with their ratings | Rarely | No |
| Star breakdown of the business | On every row | Some | No |
| Business names and search URLs | Yes | Mostly URLs only | Search, but 3 reviews each |
| Price | $0.25 per 1,000 reviews, no start fee | Mostly $0.30 to $2 per 1,000, some with start fees | Paid plans for commercial use |
Quick start
- Click Try for free and sign in to Apify. The free plan's monthly credit covers about 20,000 reviews.
- Paste a Yelp business URL into Businesses, for example
https://www.yelp.com/biz/gary-danko-san-francisco. Links from any Yelp country site work. - For a first run, set Max reviews per business to
20. - Click Start. When the run finishes, open the Output tab and export the data.
{"businesses": ["https://www.yelp.com/biz/gary-danko-san-francisco"],"maxReviewsPerBusiness": 20}
You can also enter a business name with a location, or a Yelp search URL:
{"businesses": ["Gary Danko","Tartine Bakery","https://www.yelp.com/search?find_desc=ramen&find_loc=Portland%2C+OR"],"location": "San Francisco, CA","maxBusinessesPerSearch": 5}
What data can you extract?
Every row is one review, with the business attached, so no joins are needed:
| Group | Fields |
|---|---|
| Review | reviewId, reviewUrl, rating, text, language, date, isFeatured, isFirstReview, usefulCount, funnyCount, coolCount |
| Edits | isEdited, previousVersions (earlier text, rating and date) |
| Media | photoCount, photos (full-size URL and caption), videos |
| Owner reply | hasOwnerReply, ownerReply, ownerReplyAuthor, ownerReplyAuthorRole |
| Reviewer | reviewerId, reviewerName, reviewerNickname, reviewerUrl, reviewerLocation, reviewerReviewCount, reviewerFriendCount, reviewerPhotoCount, reviewerEliteYears, isReviewerElite, reviewerMemberSince, reviewerPhotoUrl, reviewerCheckIns, paidThroughYelp |
| Business | businessId, businessAlias, businessName, businessUrl, businessRating, businessReviewCount, businessRatingCounts (1 to 5 stars), businessCategories, businessAddress, businessCity, businessPostalCode, businessState, businessCountry, businessPhone, businessWebsite, businessPrice, isBusinessClosed |
| Run | input (what you entered), scrapedAt |
The run's key-value store also has an OUTPUT record with one line per business: how many reviews were saved, the newest review date, and whether the business failed.
Track new Yelp reviews with repeat runs
Most of the value comes from running the same businesses again and getting only what changed. Apify can run the actor for you on a schedule and send the new reviews wherever you need them.
1. Save your input as a task
Open the actor, add your businesses, turn on Only new reviews, then click Save as a new task. A task is a saved input you can run again with one click or on a schedule. Each task keeps its own memory of what it has seen, so you can have one task for your own locations and another for competitors.
2. Schedule the task
In Apify Console, go to Schedules, click Create new, choose how often to run (for example daily at 07:00 in your time zone), and add your task. See Schedules and How to create a schedule.
Watch how to schedule an Actor:
Or schedule a saved task:
Common schedules:
| Use case | Frequency | Cron expression |
|---|---|---|
| Answer new reviews of your locations | Every 6 hours | 0 */6 * * * |
| Daily reputation report | Daily | 0 7 * * * |
| Competitor watch | Weekly (Monday) | 0 7 * * 1 |
| Monthly rating and review-volume report | Monthly | 0 7 1 * * |
3. Send new reviews to a spreadsheet, Slack or email
Connect Google in the task's Integrations tab to add every run's reviews to Google Sheets or Google Drive automatically:
The Integrations tab also connects Slack, email, Make, Zapier, n8n and webhooks. A run with no new reviews has an empty dataset, which is easy to filter out in Make, Zapier or n8n.
4. What counts as new
- A review posted since the last run.
- A review that was edited since the last run. It comes back with
isEdited: trueand its earlier versions inpreviousVersions, so you see when a 2-star review becomes a 4-star one, or the other way round. - The memory is kept per task, per business and per filter set. If you change the languages, star ratings or keywords, the next run starts fresh for that combination.
- To collect everything again, turn Only new reviews off for one run, or save a new task.
Input reference
| Field | Type | Default | Effect |
|---|---|---|---|
businesses | Array of strings | Required | Yelp business URLs (any Yelp country site), business aliases or IDs, business names (with location), or Yelp search URLs. |
location | String | Empty | City or area for business names, e.g. San Francisco, CA. Not needed for URLs. |
maxReviewsPerBusiness | Integer | 100 | Maximum reviews saved per business. 0 means every review. |
onlyNewReviews | Boolean | false | Return only reviews posted or edited since the last run of the same task. Reviews are walked newest first. |
sortBy | String | "newest" | "newest", "oldest", "highest", "lowest", "elite" (Elite reviewers first) or "recommended" (Yelp's order). Decides which reviews a limit keeps. |
ratings | Array of strings | All | Only these star ratings, e.g. ["1", "2"]. |
newerThan | String | Empty | Only reviews newer than a date (2026-01-31) or an age (7 days, 3 months, 1 year). |
languages | Array of strings | All | Two-letter codes such as ["en", "es"]. Empty collects every language the business has. |
keywords | Array of strings | Empty | Only reviews whose text contains one of these words or phrases (not case-sensitive). |
maxBusinessesPerSearch | Integer | 10 | For Yelp search URLs: how many of the top results to include. |
includeReviewerDetails | Boolean | true | Turn off to leave reviewer fields empty (the columns stay, with null). |
Ready-to-run examples
Get new reviews of your locations every morning
{"businesses": ["https://www.yelp.com/biz/your-business-san-francisco","https://www.yelp.com/biz/your-business-oakland"],"maxReviewsPerBusiness": 0,"onlyNewReviews": true}
Save it as a task and schedule it daily. The first run collects every review; later runs return only new and edited ones.
Find unanswered complaints
{"businesses": ["https://www.yelp.com/biz/hotel-zetta-san-francisco-san-francisco-3"],"ratings": ["1", "2"],"newerThan": "1 year","maxReviewsPerBusiness": 0}
Filter the dataset on hasOwnerReply = false.
Compare competitors over the last 6 months
{"businesses": ["Gary Danko", "Kokkari Estiatorio", "Quince"],"location": "San Francisco, CA","newerThan": "6 months","maxReviewsPerBusiness": 0}
Open the Businesses view, or count reviews per business and month and compare the average rating.
Collect complaints about one topic
{"businesses": ["https://www.yelp.com/biz/mon-ami-gabi-las-vegas-2"],"keywords": ["wait", "reservation", "line"],"maxReviewsPerBusiness": 0}
Research a local market
{"businesses": ["https://www.yelp.com/search?find_desc=dentist&find_loc=Austin%2C+TX"],"maxBusinessesPerSearch": 20,"maxReviewsPerBusiness": 50}
The 50 newest reviews of the top 20 dentists in Austin.
Full history for sentiment analysis, in every language
{"businesses": ["https://www.yelp.com/biz/mon-ami-gabi-las-vegas-2"],"maxReviewsPerBusiness": 0}
Analyze the results with ChatGPT or Claude
Export the dataset as CSV (the Overview view keeps it small) and attach it to a chat with ChatGPT, Claude or another AI assistant. Some prompts to start with:
Find what to fix. "These are Yelp reviews of my business. Group the 1- to 3-star reviews by topic (for example wait time, staff, price, cleanliness). For each topic, give the number of reviews, two short quotes, and the most recent date."
Draft replies. "For each review where hasOwnerReply is false and rating is 2 or lower, draft a short, specific reply that addresses the reviewer's main point. Don't offer refunds."
Compare competitors. "This file has reviews of several businesses (businessName). For each business, show the average rating per quarter, the share of reviews with an owner reply, and the three things customers praise and criticize most."
The dataset is also available through the Apify API and integrations such as Make, Zapier and n8n, so you can feed it into an automated workflow.
Output
Results go to the run's default dataset. Use the views Overview, Reviewers, Owner replies or Businesses, or export everything as JSON, CSV, Excel, XML or HTML.
This is a real row from a run on October 6, 2026, with the reviewer's profile fields left out:
{"reviewId": "zy3zc_AWy56uNjp1bpkDRA","reviewUrl": "https://www.yelp.com/biz/hotel-zetta-san-francisco-san-francisco-3?hrid=zy3zc_AWy56uNjp1bpkDRA","rating": 1,"text": "Everything about this hotel was great except for the $62 valet parking that took 40 minutes. It's one thing to pay over $50 for one night of valet parking, and another to wait 40 for your car. Staff was not willing to reimburse or partially reimburse. Happy to change this review shall another staff member be willing to work something out.","language": "en","date": "2015-12-21T05:31:31.000Z","isEdited": false,"previousVersions": [],"usefulCount": 0,"funnyCount": 1,"coolCount": 0,"photoCount": 0,"photos": [],"hasOwnerReply": true,"ownerReply": "Emerald G,\n\nI am sorry about the valet incident you experienced! I agree that 40 minutes to retrieve your car is unacceptable, especially when paying for such a service. Please drop me a line directly with your info so that I can reach out to you further and resolve this issue.\n\n-Michel N\nGeneral Manager","ownerReplyAuthor": "Michel N.","ownerReplyAuthorRole": "Business Manager","reviewerName": "Emerald T.","reviewerLocation": "Los Angeles, CA","reviewerReviewCount": 109,"reviewerEliteYears": [2023],"isReviewerElite": false,"reviewerMemberSince": "2010-06-04T03:12:26.000Z","businessId": "4IZUuGz6odBxqY6jISF8GQ","businessName": "Hotel Zetta - San Francisco","businessUrl": "https://www.yelp.com/biz/hotel-zetta-san-francisco-san-francisco-3","businessRating": 3.8,"businessReviewCount": 297,"businessRatingCounts": { "1": 37, "2": 27, "3": 29, "4": 64, "5": 141 },"businessCategories": ["Hotels"],"businessAddress": "55 5th St, San Francisco, CA 94103","businessPhone": "(415) 543-8555","businessWebsite": "https://www.zhotelssf.com","businessPrice": "$$$","input": "hotel-zetta-san-francisco-san-francisco-3","scrapedAt": "2026-10-06T19:00:52.269Z"}
Notes on fields
dateis when the review was posted or last edited. Edited reviews haveisEdited: trueand their earlier versions inpreviousVersions.isReviewerElitemeans Elite in the current year.reviewerEliteYearslists every Elite year.businessRatingandbusinessRatingCountsdescribe the whole business, not the review.ownerReplyhas no date: Yelp's app doesn't publish one.- With Include reviewer details off, reviewer fields are
null(or[]), and the columns stay the same. - Missing values are
null. Every row hasscrapedAtin UTC.
FAQ
How many reviews can I get?
Every review Yelp recommends for the business, in every language, with no cap. Set Max reviews per business to 0. Yelp hides some reviews as "not recommended"; those aren't part of the business's rating and aren't included. That's why businessReviewCount can be a little different from the number of reviews you get.
How fast is it?
In our tests, the full history of a business with 13,183 reviews took under 2 minutes, and 20 reviews each from two businesses took about 6 seconds. Repeat runs with Only new reviews usually finish in seconds, because they stop at the first review they've already seen.
How does "Only new reviews" know what's new?
After each business, the actor remembers the newest review it saw in a key-value store in your Apify account (yelp-reviews-scraper-state). The next run of the same task walks reviews newest first and stops there. Runs started without a task (for example from the API) share one memory per business and filter set. If a run stops early because it hit your spending limit, that business isn't marked as done, so the next run picks up the reviews you didn't get.
Can I collect reviews in one language only?
Yes. Add language codes in Review languages, e.g. en. Leave it empty to get every language.
Can I use business names instead of URLs?
Yes. Enter the name and set Location to the city. The actor picks Yelp's top match and logs which business it chose; every row has the original input next to businessName, so a wrong match is easy to spot. For chains, use the URL of the exact location.
Why did I get no reviews for a business?
The log says why: the URL didn't match a business, the business has no reviews in the languages you chose, or your filters (stars, date, keywords) matched nothing. With Only new reviews on, 0 means nothing new since the last run.
Why did my run stop before reaching my limit?
If the log says the charge limit was reached, the run hit its maximum cost or your account's spending limit. Everything collected before that is saved. Raise the limit in the run options to collect more.
How is this different from the Yelp Fusion API?
Yelp's official API returns at most 3 review excerpts per business. This actor returns every review in full, with owner replies, reviewer details, photos and edits.
Do I need proxies, a Yelp account or an API key?
No. The actor handles connections and retries itself and doesn't log in.
Is it legal to scrape Yelp reviews?
The actor collects publicly visible reviews and business data. Reviewer names and profiles are personal data under laws such as GDPR and CCPA. If you have no lawful basis to process them, turn off Include reviewer details. You are responsible for how you use the data, including Yelp's terms.
Cost
This actor uses pay-per-event pricing. You pay only for reviews saved, with no subscription and no start fee:
| Event | Price | Per 1,000 | Charged when |
|---|---|---|---|
review | $0.00025 | $0.25 | A review is saved. Business lookups, the star breakdown, reviews skipped by filters and already-seen reviews are free. |
Example runs:
| Run | Cost |
|---|---|
| 100 reviews | $0.025 |
| 1,000 reviews | $0.25 |
| Full history of a business with 13,183 reviews | $3.30 |
| 20 locations checked daily, about 3 new reviews each per day, 30 days | $0.45 |
Set a maximum cost per run; the actor stops cleanly when it's reached. The Pricing tab always shows the current prices.
Support
Report problems or request features in the Issues tab. Include the run ID, the input and what you expected. We read every issue.
This actor is not affiliated with or endorsed by Yelp Inc. "Yelp" is a trademark of Yelp Inc.