Yelp Reviews Scraper - Most Comprehensive avatar

Yelp Reviews Scraper - Most Comprehensive

Pricing

from $0.04 / 1,000 reviews

Go to Apify Store
Yelp Reviews Scraper - Most Comprehensive

Yelp Reviews Scraper - Most Comprehensive

🔥 ~$0.05/1K reviews 🔥 Scrape all reviews for any Yelp business. Full review text, ratings, author profiles, photos, reactions, owner replies. Accepts business URLs or aliases.

Pricing

from $0.04 / 1,000 reviews

Rating

0.0

(0)

Developer

Kai

Kai

Maintained by Community

Actor stats

0

Bookmarked

341

Total users

18

Monthly active users

6 days ago

Last modified

Share

Get the Yelp reviews of any business. Each review has 21 fields: rating, full text, dates, language, translation, reviewer details with Elite status, votes, reactions, photos, videos, the owner's reply, and tags. Each business also gets a profile record with rating counts, categories, address, hours, and price range. Filter by star rating, language, and text. Sort by newest, oldest, highest rated, lowest rated, or Elite reviewers first.

Read a few reviews or the full history of a business. Start with a Yelp URL, an alias, or a business ID. Starting at $0.04 per 1,000 reviews.

What can you do with it?

  • Reputation monitoring. Collect the newest reviews of your businesses every day or week, and skip the ones that you already have.
  • Competitor benchmarking. Compare ratings, review counts by star, and price range across businesses in one run.
  • Sentiment and topic analysis. Feed review text, ratings, and languages into your models.
  • Complaint finding. Read only the 1- and 2-star reviews, or only the reviews that mention a topic such as "parking".
  • Elite reviewer research. Read the reviews of Yelp Elite members first, with their review, friend, and photo counts.
  • Owner reply audits. Find the reviews that got a reply, and read the replies.
  • Photo and video collection. Get the photos and videos that reviewers added, with captions, keywords, sizes, and upload dates.
  • Market research by language. Read the reviews in one language, such as German or Chinese.
  • Full review archives. Download every review of a business, also a business with thousands of reviews.
  • Business profiles. Get the categories, address, hours, price range, and rating counts of each business.

What data does it extract?

Reviews are in the default dataset. Business profiles are in a second dataset with the alias businesses.

DataWhen you get it
Review ID, rating (1 to 5), full text, and review languageEvery review
Created time in UTC and in the business's local timeEvery review
Business ID, alias, and nameEvery review
Reviewer name, ID, location, review count, friend count, and photo countEvery review
Reviewer profile photo and Elite yearWhen the reviewer has them
Elite All-Star flagEvery review
Useful, funny, and cool votesEvery review. The count is 0 when there are none.
Reactions (Helpful, Thanks, Love this, Oh no) with countsWhen the review has reactions
Photos with caption, size, upload date, uploader, keywords, and likesWhen the reviewer added photos
Videos with captionWhen the reviewer added videos
Owner reply textWhen the owner replied
IDs of earlier reviews in the same historyWhen the reviewer wrote the review again
Tags: check-ins, first reviewer, paid through Yelp, deal, reservation, review of the dayEvery review
Expert badge, such as "Dessert", with the review countWhen Yelp gave one to the reviewer
TranslationWhen you set a languageCode other than en
Business name, alias, ID, rating, and review countEvery business
Review counts by star and by languageEvery business
Categories, closed flag, phone, price range, and hoursEvery business
Address, country, and open now flagEvery business
CoordinatesWhen you start with a URL or an alias
Photo counts, review snippets, and the number of reviews that Yelp does not recommendEvery business
Claimed status, year established, summary, specialties, attributes, health inspections, and linksWhen Yelp returns the business page. In current runs these fields are null.

Yelp does not have every field for every review. A field without data is null or [].

Quick start

  1. Enter a Yelp business URL, an alias, or a business ID in Business URLs, Aliases, or IDs.
  2. Set Max Reviews Per Business. Use 0 to get all reviews.
  3. Click Start. Download the results as JSON, CSV, Excel, or HTML.

The same input as JSON:

{
"businesses": ["https://www.yelp.com/biz/gary-danko-san-francisco"],
"maxReviewsPerBusiness": 20
}

The reviews are in the default dataset. The business profiles are in the second dataset. Open the Output tab and choose Businesses. In the API, read it from storageIds.datasets.businesses on the run.

Examples by use case

The newest reviews of a business. Use an alias or a business ID instead of a URL if you have one. This is the default order:

{
"businesses": ["gary-danko-san-francisco"],
"maxReviewsPerBusiness": 50
}

Every review of a business. This also works for a business with thousands of reviews. Gary Danko has more than 6,000 reviews and takes about 5 minutes:

{
"businesses": ["WavvLdfdP6g8aZTtbBQHTw"],
"maxReviewsPerBusiness": 0
}

Monitor new reviews. Run this on a schedule. Use a limit that is larger than the number of new reviews that you expect between two runs. Use the id field, or createdAt, to skip reviews that you already have:

{
"businesses": ["gary-danko-san-francisco"],
"sortBy": "DATE_DESC",
"maxReviewsPerBusiness": 100
}

Find complaints. Only 1- and 2-star reviews, newest first:

{
"businesses": ["gary-danko-san-francisco"],
"maxReviewsPerBusiness": 0,
"ratings": ["1", "2"]
}

Reviews about a topic. Reviews that mention parking. Search results come in Yelp's relevance order, and the matching words have markers:

{
"businesses": ["gary-danko-san-francisco"],
"query": "parking",
"maxReviewsPerBusiness": 100
}

Elite reviewers first. Reviews from Elite members come before the others:

{
"businesses": ["gary-danko-san-francisco"],
"sortBy": "ELITES_DESC",
"maxReviewsPerBusiness": 100
}

Compare businesses. One run reads all the businesses. The dataset keeps the order of your list:

{
"businesses": [
"gary-danko-san-francisco",
"house-of-prime-rib-san-francisco",
"https://www.yelp.com/biz/zuni-cafe-san-francisco"
],
"maxReviewsPerBusiness": 200
}

The best-rated reviews first:

{
"businesses": ["gary-danko-san-francisco"],
"sortBy": "RATING_DESC",
"maxReviewsPerBusiness": 100
}

The worst reviews first:

{
"businesses": ["gary-danko-san-francisco"],
"sortBy": "RATING_ASC",
"maxReviewsPerBusiness": 100
}

The oldest reviews first:

{
"businesses": ["gary-danko-san-francisco"],
"sortBy": "DATE_ASC",
"maxReviewsPerBusiness": 100
}

Reviews in another language. Set languageCode to a code such as de or zh. Yelp returns only the reviews that reviewers wrote in that language. The reviewCountsByLanguage field in the business record shows which languages a business has:

{
"businesses": ["gary-danko-san-francisco"],
"languageCode": "de",
"maxReviewsPerBusiness": 20
}

Owner replies. There is no filter for replies. Collect the reviews, then keep the rows where ownerReply is not null. Many businesses never reply. This example reads all 1- and 2-star reviews of one bakery:

{
"businesses": ["tartine-bakery-san-francisco"],
"ratings": ["1", "2"],
"maxReviewsPerBusiness": 0
}

Photos and videos. There is no filter for media. Collect the reviews, then keep the rows where photos or videos is not empty.

Business details only. Set maxReviewsPerBusiness to 1. The business record is complete, and you pay for one review:

{
"businesses": ["gary-danko-san-francisco"],
"maxReviewsPerBusiness": 1
}

Limit your spend. Set a maximum cost per run in the run options. The Actor stops when the limit is reached and keeps the reviews that it saved.

Choose the businesses

Put one or more entries in businesses. Each entry is a Yelp business URL, an alias, or a business ID. You can mix all three in one run.

  • URL. A business link on any Yelp domain, such as yelp.com/biz/..., yelp.co.uk/biz/..., or yelp.ca/biz/.... A query string, a trailing slash, and a /reviews ending are fine.
  • Alias. This is the text after /biz/ in the URL. In https://www.yelp.com/biz/gary-danko-san-francisco, the alias is gary-danko-san-francisco. An alias can have letters with accents, such as zuni-café-san-francisco-3. Yelp can send an old alias to the current one. The output holds the current alias.
  • Business ID. The 22-character ID that Yelp uses inside, such as WavvLdfdP6g8aZTtbBQHTw. Each record in the businesses dataset has it in id. A value of 22 letters, numbers, _, or - is always read as an ID. Use the full URL if an alias has that exact shape.
  • Not found. A business that does not exist. The log shows
    Could not resolve business ID for
    and your entry, and the other businesses still run.
{
"businesses": [
"https://www.yelp.com/biz/gary-danko-san-francisco?osq=restaurants",
"house-of-prime-rib-san-francisco",
"WavvLdfdP6g8aZTtbBQHTw"
],
"maxReviewsPerBusiness": 5
}

The Actor reads the businesses in your order, so the reviews of each business come as one block in that order. A repeated business is read again. A business that fails does not stop the others, and the run still ends with the status Succeeded. An empty businesses list also succeeds, with no records.

Filter the reviews

Filters are combined, except where noted.

  • ratings. Any combination of "1" to "5". An empty list means all ratings.
  • query. Text that the review must match. Search results come in Yelp's relevance order. Search ignores sortBy and ratings. The log shows a warning when you set one of them with a query.
  • languageCode. A language code such as en, de, or zh. Yelp returns only the reviews that reviewers wrote in that language. The default is en. A search in a language other than English can find no match.

This example keeps the 4- and 5-star reviews in English, newest first:

{
"businesses": ["gary-danko-san-francisco"],
"maxReviewsPerBusiness": 10,
"languageCode": "en",
"ratings": ["4", "5"],
"sortBy": "DATE_DESC"
}

A null query or an empty ratings list counts as not set. Do not send an empty languageCode. Leave the field out to get English.

Choose the review order

sortBy sets the order. The default is DATE_DESC.

ValueOrder
DATE_DESCNewest first.
DATE_ASCOldest first.
RATING_DESCHighest rated first.
RATING_ASCLowest rated first. Newest first within each star level.
ELITES_DESCReviews from Elite members first.

The Actor does not sort the reviews again. It saves them in the order that Yelp returns them. With a query, the order is Yelp's relevance order, whatever sortBy says.

Input reference

All fields are optional. A run without businesses succeeds and returns no records.

FieldTypeDefaultDescription
businessesstring[][]Yelp business URLs, aliases, or 22-character business IDs. The Actor reads them in your order, including repeated entries.
sortBystringDATE_DESCDATE_DESC, DATE_ASC, RATING_DESC, RATING_ASC, or ELITES_DESC.
ratingsstring[]all ratingsAny combination of "1", "2", "3", "4", and "5". An empty list means all ratings. Repeated values are accepted.
maxReviewsPerBusinessinteger20Maximum reviews for each business. 0 collects all available reviews.
querystring or null""Text that the reviews must match. null or an empty string means no search.
languageCodestringenA Yelp language code such as en, de, or zh. Do not send an empty string.
proxyConfigurationobjectApify Proxy enabledOptional connection settings managed by Apify.

Unknown input fields are ignored. Apify rejects a value of the wrong type before the run starts. Examples are a negative or fractional maxReviewsPerBusiness, a rating outside "1" to "5", and a sortBy that is not in the list above.

Output

Each item in the default dataset is one review. The Overview table shows the review ID, business, rating, text, author, created time, and language. Every field below is in every item. A field without data is null or [].

Each item in the businesses dataset is one business. The Overview table shows the ID, name, alias, rating, review count, price range, and phone number. The dataset has one item for each business that the Actor found, also when the business has no matching reviews.

Fields by topic

  • Review. ID, rating, text, translated text, language, the owner's reply, and the time of experience that the reviewer gave.
  • Dates. The created time in UTC (createdAt) and in the business's local time (localDateTime).
  • Reviewer. ID, name, location, review, friend, and photo counts, profile photo, Elite year, the Elite All-Star flag, and the expert badge.
  • Votes and reactions. Useful, funny, and cool counts. Each reaction with its count.
  • Media. Each photo with caption, size, upload date, uploader, keywords, and likes. Each video with caption.
  • History and tags. The IDs of earlier reviews in the same history. Check-in count and the first reviewer, payment, deal, reservation, and review of the day flags.
  • Business. Alias, name, and ID of the business.
  • Run. The UTC time at which the Actor saved the review.

Review example

This example is a 1-star review with an Elite reviewer, reactions, an expert badge, and an owner reply. Square brackets mark values removed from the documentation.

Field groups

GroupRoot fields
Reviewid, text, translatedText, rating, language, ownerReply, userSpecifiedTimeOfExperience
DatescreatedAt, localDateTime
Reviewerauthor, expertRecognition
Votes and reactionsfeedback, reactions
Mediaphotos, videos
History and tagspreviousReviewIds, tags
BusinessbusinessAlias, businessName, businessEncId
RunscrapedAt

Field notes

  • id is the Yelp review ID. Use it to remove reviews that you already have, for example when you run a monitor on a schedule.
  • createdAt is a UTC time in ISO 8601 format. localDateTime is the time in the business's time zone, with the offset.
  • businessAlias is the alias that Yelp uses now. It can differ from the alias that you entered.
  • text has the full review. In a search, the words that match are inside [[HIGHLIGHT]] and [[ENDHIGHLIGHT]] markers.
  • translatedText is null when languageCode is en. With another language, it holds Yelp's text in that language.
  • author.displayName is the short name that Yelp shows, such as "Alex K.".
  • author.eliteYear is the latest year of the reviewer's Elite status as Yelp shows it, such as 26. It is null for a reviewer without Elite status.
  • feedback holds the useful, funny, and cool votes. reactions holds the reaction buttons, each with its count.
  • ownerReply is the public reply text of the business. It is null when the business did not reply.
  • previousReviewIds lists the IDs of earlier reviews in the same history. It is empty for a review that has no earlier version.
  • Yelp can return the same review twice, mostly in a search. The Actor saves it once for each business you list.
  • Some reviews do not use the standard shape. The Actor saves each such review as it comes from Yelp, so no fixed field list applies to it.

Business example

These selected, unchanged fields came from one saved business record. This is a partial sample. The tables above cover the omitted fields.

{
"id": "WavvLdfdP6g8aZTtbBQHTw",
"alias": "gary-danko-san-francisco",
"name": "Gary Danko",
"rating": 4.5,
"reviewCount": 6150,
"reviewCountsByRating": [125, 217, 485, 1100, 4228],
"reviewCountsByLanguage": [
{ "language": "en", "count": 6151 },
{ "language": "zh", "count": 3 },
{ "language": "de", "count": 1 }
],
"primaryPhotoUrl": "https://s3-media0.fl.yelpcdn.com/bphoto/5dbjkeTld05HumeToIAhRQ/60s.jpg",
"categories": [
{ "alias": "newamerican", "title": "New American" },
{ "alias": "french", "title": "French" },
{ "alias": "cocktailbars", "title": "Cocktail Bars" }
],
"isClosed": false,
"priceRange": "$$$$",
"notRecommendedReviewCount": 1033,
"coordinates": { "latitude": 37.8058724, "longitude": -122.4205943 },
"countryCode": "US",
"formattedAddress": {
"addressLine1": "800 N Point St",
"city": "San Francisco",
"regionCode": "CA",
"postalCode": "94109"
},
"isCurrentlyOpen": false,
"scrapedAt": "2026-10-14T11:23:05.626Z"
}

FAQ

How many reviews can I get?

There is no fixed limit. Set maxReviewsPerBusiness to 0 to get all the reviews that Yelp recommends for a business. The Actor does not return the reviews that Yelp does not recommend. Your count can differ by a few from the count on the Yelp page, because Yelp adds and removes reviews all the time.

Why did I get fewer reviews than maxReviewsPerBusiness?

maxReviewsPerBusiness is an upper limit. The business can have fewer reviews, and your filters can remove some. A search finds only the reviews that match the text.

How do I find the alias or the business ID?

Open the business on Yelp. The alias is the text after /biz/ in the URL. You can also give the whole URL. After a run, the business ID is in the id field of the businesses dataset.

How do I get only the new reviews?

The Actor has no date filter. Run it on a schedule with sortBy set to DATE_DESC and a limit that is larger than the number of new reviews between two runs. Remove the reviews that you already have with the id field, or keep the reviews with a createdAt after your last run.

Can I find businesses by location or category?

This Actor needs the business URL, alias, or ID. To find businesses by location, category, and keyword, use Yelp Business Scraper.

A feature or field that I need is missing. What can I do?

Tell us in the Issues tab. Describe what you need and give an example business.

Where can I report a problem?

Open an issue in the Issues tab. Include the run ID and the input, so that we can reproduce it.

Similar Actors

  • Yelp Business Scraper. Yelp business data, and business search by location, category, and keyword.
  • TripAdvisor Reviews. TripAdvisor reviews of restaurants, hotels, attractions, and cruises, from URLs or location IDs.
  • Google Maps Reviews Scraper. Google Maps reviews with place context, from place URLs or Place IDs.
  • Glassdoor Reviews Scraper. Glassdoor company reviews with ratings, pros and cons, employment details, and employer responses.
  • G2 Scraper. G2 software reviews, products, analytics, comparisons, and discussions.