Yelp Reviews Scraper - All Languages & Owner Replies avatar

Yelp Reviews Scraper - All Languages & Owner Replies

Pricing

from $0.79 / 1,000 reviews

Go to Apify Store
Yelp Reviews Scraper - All Languages & Owner Replies

Yelp Reviews Scraper - All Languages & Owner Replies

Extract every Yelp review in every language: star rating, full text, date, reviewer profile, owner reply and photos. Yelp shows one language at a time; this returns all of them. Free business summary with the 1-5 star breakdown, categories and location. Export to JSON, CSV or Excel.

Pricing

from $0.79 / 1,000 reviews

Rating

0.0

(0)

Developer

ClearPath

ClearPath

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

3 days ago

Last modified

Share

Yelp Reviews Scraper | Every Review, All Languages & Owner Replies (2026)

The complete Yelp review history, not just the first few pages: every review, in every language. 6,137 off one restaurant in under 3 minutes.

Yelp reviews scraper: star rating, full review text, reviewer profile, owner reply and photos as structured JSON in every language

Place and review tools
Yelp Reviews  Yelp Reviews
➤ You are here
Place Aggregator  Place Aggregator
5 platforms, one export
Tripadvisor  Tripadvisor
Hotels, dining and attractions
Hotel Aggregator  Hotel Aggregator
Include hotel booking sites

Compare a business’s Yelp feedback with Google Maps and Tripadvisor using Place Review Aggregator. Optional Facebook recommendations and Swarm tips add more customer feedback to the same export.  

Yelp review data ready for analysis
🌐 Multilingual coverageCollect all published review languages or select only the markets you need.
👤 Reviewer contextName, location, Elite year, activity counts, and profile image on each available profile.
💬 Owner repliesPublic business responses with author, role, and response date.
🔍 Review statusOptionally include filtered reviews, labelled so rating analysis stays accurate.

Copy to your AI assistant

clearpath/yelp-reviews-scraper on Apify. Scrapes every Yelp review in every published language, with reviewer profile, owner reply, photos and review status. Call ApifyClient("TOKEN").actor("clearpath/yelp-reviews-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Business summaries land in a separate dataset, id at OUTPUT.summaryDatasetId. Full spec: GET https://api.apify.com/v2/acts/clearpath~yelp-reviews-scraper/builds/default (Bearer TOKEN). Token: https://console.apify.com/account/integrations

Key Features

  • Every review, not just the first page: collect a business's complete review history, up to 50,000 per business in one run, deep past the point where most scrapers stop.
  • Multilingual reviews: collect every language Yelp publishes for the business, or select specific two-letter language codes.
  • Full review record, plus a reviewer profile: rating, full text, language, date, visit date, whether it is featured, owner reply, photos, videos, and useful / funny / cool counts.
  • Business summary included: rating, review count, language breakdown, categories, address, coordinates, and photo count in a separate dataset.
  • Names or links: paste https://www.yelp.com/biz/... or just Hotel Zetta San Francisco with a city.
  • Nothing to configure: proxying and retries are handled for you.
  • Bulk-ready runs: process up to 200 businesses and request up to 50,000 reviews per business.

How to Scrape Yelp Reviews

Basic: every review from one business

{
"businesses": [
"https://www.yelp.com/biz/hotel-zetta-san-francisco-san-francisco-3"
]
}

Links from any Yelp country domain work and all identify the same business: yelp.com, yelp.de, yelp.co.uk, yelp.com.au, de.yelp.ch, m.yelp.com. Paste whatever your browser gave you.

By name, several businesses at once

{
"businesses": [
"Hotel Zetta San Francisco",
"Gary Danko",
"Tartine Bakery"
],
"searchLocation": "San Francisco, CA"
}

searchLocation is only used for names. Links already identify the business, so it is ignored for those.

The 100 newest reviews per business

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

Find place candidates before collecting reviews

Set mode to discover to inspect possible places without collecting reviews:

{
"mode": "discover",
"businesses": [
"Kaffeine"
],
"searchLocation": "London",
"maxCandidates": 10
}

maxCandidates defaults to 10 and accepts 1 to 20. It is a maximum, not a guarantee. Use a full Yelp business link to get details for that business. In discovery mode, bare text, including single-word names, is searched as a name.

Candidates go to a separate candidates dataset. Its ID is in OUTPUT.candidateDatasetId. The default review dataset stays empty, and no review charges apply. Review limits, sorting and filters do not select candidates; includeSummary does not suppress discovery output.

Every candidate includes inputIndex, query, candidateRank, retrieval (search or details) and observedAt, plus businessId, businessName, businessUrl, alias, address and coordinates in location, categories, rating and any available phone number. Missing fields remain empty. Candidate rank reflects source ordering and is not confirmation that the place matches your intended business.

OUTPUT.queryOutcomes records each query in the deduplicated input list with its status, candidatesReturned and issues. Statuses are pending, running, success, no_candidates, fetch_failed, invalid_input, skipped or interrupted. no_candidates means that this lookup returned none; it does not establish that the business is absent from the service. Completed queries are retained if another query fails. A run fails when every query is unavailable or invalid.

A Yelp search with no usable listing records is reported as unavailable until an empty result can be verified. A missing business link can return no_candidates.

Input Parameters

ParameterTypeDefaultDescription
businessesarrayrequiredYelp business links (any country domain) or business names, one per line
searchLocationstringCity or area, used only when you enter names instead of links
maxReviewsPerBusinessintegerallStop after this many reviews per business. Empty collects every review
sortBystringnewestnewest, oldest, highest_rating, lowest_rating, most_prolific
reviewLanguagesarrayallPick from the language dropdown. Empty collects every language
includeFilteredReviewsbooleanfalseAlso collect reviews Yelp keeps off the main listing
includeSummarybooleantrueAdd one business summary row to a separate summary dataset
modestringreviewsreviews collects reviews; discover returns place candidates
maxCandidatesinteger10Maximum candidates per discovery search, from 1 to 20

Choosing the right input

Use links when the exact branch matters. A link identifies the listing directly, which is the safest choice for hotel chains, restaurant groups, and businesses with similar names.

Use names for exploratory work. Add searchLocation so the closest match is picked in the city you meant.

Either way, every row carries searchQuery alongside the resolved businessName and businessUrl, so a wrong match is visible in the output rather than buried in it.

Leave reviewLanguages empty for reputation monitoring. Set codes only when the analysis targets one market.

The limit applies after sorting, so maxReviewsPerBusiness: 100 with sortBy: "newest" gives you the 100 newest reviews, not an arbitrary page.

For large lists, start with the default concurrency of 4. Increase it when several independent businesses need to finish faster. Lower it if run stability matters more than speed. Concurrency changes how many businesses are processed together; it does not change the result schema or the per-business limit.

Yelp Review Scraper Use Cases

Hotel reputation monitoring

Track feedback for one hotel or a whole portfolio. Sort by newest, keep the permalink, and use publishedAt as your cursor.

The summary row gives you the rating and totals for a dashboard tile: rating (rounded and precise), the 1-to-5 star distribution, review count, per-language breakdown, categories, price, phone, full location, opening hours, health score, menu link, business attributes, and permanent/temporary-closure flags. The review rows keep the text, language, reviewer context, and owner response behind it.

Competitive benchmarking

Put nearby businesses into one run and compare rating distributions, complaint themes, response coverage, and review velocity.

businessId, businessName and businessUrl sit on every row, so a combined export stays attributable.

Multilingual sentiment analysis

Collect all available languages, then group or route rows using the language field. This supports market-level topic analysis without mixing translated text into the original review. If your model or workflow supports only selected languages, set reviewLanguages before collection to reduce run size and cost.

Service recovery and response audits

Sort by lowest rating to build a support queue.

ownerReply shows which complaints got a public response and how fast. Keep reviewStatus in the analysis so filtered reviews are not counted towards the displayed star rating.

Lead generation and account research

Qualify businesses from the summary dataset by category, location, rating, review volume, and whether the listing is claimed.

Join it to the review dataset to find recurring complaints, weak response coverage, or fast review growth.

Review data can inform outreach. It should not be used to infer sensitive traits about reviewers.

What Data Can You Extract from Yelp?

Every review row includes:

  • The review: rating (1 to 5), full text, language, publish date, visit date, permalink, whether it is featured
  • The reviewer: stable reviewer ID, name, nickname, home city, Elite and Elite All-Star status, member-since date, review count, friend count, photo count, check-in count, video count, profile image
  • Engagement: useful / funny / cool counts, and Yelp's reaction counters
  • Owner reply: text, author name, author role, reply date
  • Media: review photos with captions, video thumbnails
  • Status: whether the review counts towards the business's star rating
Field groupIncluded data
Review identityreviewId, reviewUrl, publishedAt, date, experienceDate
Review contentrating, ratingScale, text, language, tags, reactions
ReviewerName, location, activity counts, Elite status and year, profile image
Business responseReply text, author name, author role, publication date
Business contextbusinessId, businessName, businessUrl, searchQuery

Unavailable values are returned as null. This is expected for reviewer details that are not public, reviews whose text is unavailable, or optional media and owner replies. Keep ratingScale: "1-5" when combining this dataset with hotel sources that use a different rating scale.

Business outcomes

The OUTPUT record in the run's default key-value store includes summaryDatasetId and businessOutcomes. Outcomes are available even when includeSummary is false. Each outcome includes the zero-based inputIndex in the deduplicated business list, searchQuery, resolved businessId, businessName and businessUrl when available, reviewsCollected, status and issues.

StatusMeaning
successReviews were delivered for the selected options without a detected collection gap.
no_reviewsThe business reports zero reviews and collection completed without a detected gap.
no_matching_reviewsThe business's published languages do not match the selected review languages.
unresolvedNo business was found for the input.
fetch_failedThe business or its reviews could not be collected reliably. An empty result does not establish zero reviews.
partialSome coverage is missing or the run stopped early. Check issues and reviewsCollected.
skippedProcessing stopped before any reviews were delivered for this input.
pendingNo final outcome has been recorded yet. Treat this as unfinished work.

Issue codes explain missing reviews, unavailable filtered reviews, unknown language coverage, an early stop, or a business Yelp did not return this time. source_unavailable is that last case: it is temporary and says nothing about the business, so retry it rather than treating it as missing or empty. A success status applies to the selected limits and languages; it does not guarantee every review on Yelp was returned or that a name search selected the intended branch. Verify the resolved business identity.

If every business is unresolved or fetch_failed, the run fails after saving its outcomes. Mixed runs preserve successful reviews and summaries. Runs stopped by their result or spending limit keep their existing results and report partial or skipped outcomes. Read the per-business outcomes before treating an empty dataset as a successful monitoring check.

Output Example

{
"type": "review",
"reviewId": "qmAT1Et_9UdEJ9VR_-vqBQ",
"reviewUrl": "https://www.yelp.com/biz/mon-ami-gabi-las-vegas-2?hrid=qmAT1Et_9UdEJ9VR_-vqBQ",
"reviewStatus": "recommended",
"countsTowardsRating": true,
"rating": 5,
"ratingScale": "1-5",
"text": "A charming French bistro inside Paris Las Vegas. The smoked salmon eggs benedict and the corned beef hash at brunch were both excellent, and the patio has a front-row view of the Bellagio fountains. Our server, Francisco, was attentive and warm. (Full review text is returned in the dataset.)",
"language": "en",
"publishedAt": "2024-12-27T09:41:18-08:00",
"date": "2024-12-27",
"experienceDate": "2024-12-27",
"isFeatured": false,
"reviewer": {
"reviewerId": "Wt84fvJ447KcATDcLRdUqw",
"name": "Elena M.",
"nickname": "VegasBrunchClub",
"location": "San Bruno, CA",
"reviewCount": 567,
"friendCount": 90,
"photoCount": 5973,
"checkInCount": 12,
"videoCount": 4,
"isElite": true,
"eliteYear": "2026",
"memberSince": "2007-11-28T06:28:20Z",
"isEliteAllStar": false,
"profileImage": "https://s3-media0.fl.yelpcdn.com/photo/rmpalZEuYwhAKyyjpV5U5w/ms.jpg"
},
"tags": {
"checkInCount": 3,
"isFirstReviewer": false
},
"reactions": {
"useful": 12,
"funny": 2,
"cool": 5
},
"ownerReply": {
"text": "Thank you for the wonderful review, Elena. We are so glad Francisco took great care of you and that the eggs benedict hit the mark. We look forward to welcoming you back to the patio soon.",
"authorName": "Guest Relations",
"authorRole": "Mon Ami Gabi",
"publishedAt": "2024-12-29T11:05:00-08:00"
},
"photos": [
{
"url": "https://s3-media0.fl.yelpcdn.com/bphoto/qh2sm6rZtjom3u5HA6RxOg/o.jpg",
"caption": "Smoked salmon eggs benedict"
},
{
"url": "https://s3-media0.fl.yelpcdn.com/bphoto/FwjENgypGlS7yEMEQF6k_A/o.jpg",
"caption": "Corned beef hash"
}
],
"videos": [
{
"thumbnail": "https://s3-media0.fl.yelpcdn.com/vphoto/9kQ2mFq0Zt3bXcV1nD8pLA/o.jpg",
"caption": "The Bellagio fountains from the patio"
}
],
"businessId": "4JNXUYY8wbaaDmk3BPzlWw",
"businessName": "Mon Ami Gabi",
"businessUrl": "https://www.yelp.com/biz/mon-ami-gabi-las-vegas-2",
"searchQuery": "Mon Ami Gabi Las Vegas"
}

The summary dataset holds one row per business:

{
"type": "business",
"businessId": "4JNXUYY8wbaaDmk3BPzlWw",
"businessName": "Mon Ami Gabi",
"businessUrl": "https://www.yelp.com/biz/mon-ami-gabi-las-vegas-2",
"alias": "mon-ami-gabi-las-vegas-2",
"rating": 4.2,
"ratingScale": "1-5",
"ratingPrecise": 4.23,
"reviewCount": 13156,
"reviewsCollected": 13156,
"isComplete": true,
"pagesMissed": 0,
"ratingDistribution": {
"1": 531,
"2": 740,
"3": 1425,
"4": 3836,
"5": 6624
},
"reviewsByLanguage": {
"en": 13071,
"es": 23,
"fr": 17,
"de": 13,
"ja": 11,
"zh": 10,
"pt": 5,
"da": 3,
"it": 2,
"sv": 2,
"nl": 1
},
"filteredReviewCounts": {
"notRecommended": 214,
"removed": 38
},
"categories": ["French", "Steakhouses", "Breakfast & Brunch"],
"location": {
"address": "3655 Las Vegas Blvd S",
"city": "Las Vegas",
"region": "NV",
"postalCode": "89109",
"country": "US",
"formatted": "3655 Las Vegas Blvd S\nThe Strip\nLas Vegas, NV 89109",
"neighborhoods": ["The Strip"],
"timezone": "America/Los_Angeles",
"latitude": 36.112859,
"longitude": -115.172434
},
"photoCount": 19582,
"primaryPhoto": "https://s3-media0.fl.yelpcdn.com/bphoto/z48sNZP1LYbtynh3843JvQ/o.jpg",
"priceRange": "$$$",
"phone": "(702) 944-4224",
"specialties": "Classic French bistro on the Las Vegas Strip: steak frites, fresh seafood towers, and weekend brunch on a patio overlooking the Bellagio fountains.",
"isPermanentlyClosed": false,
"isYelpGuaranteed": false,
"isClaimed": true,
"isAdvertiser": false,
"isOnlineOnly": false,
"isTemporarilyClosed": false,
"isChain": true,
"consumerAlert": null,
"hours": [
"Mon-Thu, Sun 7:00 am - 10:00 pm",
"Fri-Sat 7:00 am - 11:00 pm"
],
"healthScore": "A",
"menuUrl": "https://www.monamigabi.com/las-vegas/menus/",
"attributes": [
{ "label": "Takes Reservations", "value": "Yes" },
{ "label": "Outdoor Seating", "value": "Yes" },
{ "label": "Good For", "value": "Brunch, Lunch, Dinner" },
{ "label": "Alcohol", "value": "Full Bar" },
{ "label": "Parking", "value": "Garage Parking" },
{ "label": "Wheelchair Accessible", "value": "Yes" }
],
"searchQuery": "Mon Ami Gabi Las Vegas"
}

Advanced Usage

Ready-made configurations for reputation monitoring, competitor benchmarking, multilingual review analysis, and sentiment research.

Only negative reviews, for support triage

{
"businesses": ["https://www.yelp.com/biz/hotel-zetta-san-francisco-san-francisco-3"],
"sortBy": "lowest_rating",
"maxReviewsPerBusiness": 50
}

One language only, for a local-market study

{
"businesses": ["Hotel Adlon Kempinski"],
"searchLocation": "Berlin, Germany",
"reviewLanguages": ["de"]
}

Everything, including the reviews Yelp filters out

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

Filtered rows always arrive with countsTowardsRating: false. Filter on that field to keep your averages matching the rating Yelp displays.

reviewStatus names which group a row came from:

  • not_recommended: Yelp's ranking no longer shows it.
  • removed: Yelp took it down for breaking its rules. Text and reviewer are withheld.
  • filtered: a review limit stopped the sweep before the two groups could be told apart. Raise maxReviewsPerBusiness for the precise label.

A competitor set, newest first

{
"businesses": [
"https://www.yelp.com/biz/hotel-zetta-san-francisco-san-francisco-3",
"https://www.yelp.com/biz/hotel-zelos-san-francisco-san-francisco-3",
"https://www.yelp.com/biz/hotel-zeppelin-san-francisco-san-francisco-2"
],
"sortBy": "newest",
"maxReviewsPerBusiness": 200
}

Run from Python

Install the official client with pip install apify-client, then call the Actor and read the default review dataset:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("clearpath/yelp-reviews-scraper").call(
run_input={
"businesses": [
"https://www.yelp.com/biz/hotel-zetta-san-francisco-san-francisco-3"
],
"maxReviewsPerBusiness": 100,
"sortBy": "newest",
"includeSummary": True,
}
)
reviews = client.dataset(run["defaultDatasetId"]).list_items().items
for review in reviews:
print(review["businessName"], review["rating"], review["text"])

Schedule the Actor in the Apify Console and send completed-run notifications to a webhook, Make, Zapier, or Google Sheets. Daily suits most reputation monitoring; hourly only for high-volume businesses.

Use reviewId as the deduplication key and publishedAt as the event timestamp.

Do not deduplicate on text alone: short reviews repeat verbatim between people, and an edited review keeps its identifier.

Data Quality Notes

  • A business name can resolve to the wrong branch when several listings are similar. Compare searchQuery with the resolved business fields, or use links.
  • reviewCount describes reviews that contribute to Yelp's displayed rating. Rows with countsTowardsRating: false must stay outside a reconstructed average.
  • Deleted or withheld content cannot be restored. A valid row may contain a rating and date with text: null.
  • Profile and response fields reflect what is publicly available at run time. Absence does not necessarily mean a reviewer or business owner has never supplied the information.
  • A warning in the run log about missing reviews means the output is incomplete for that business. Retry the run before using it for an audit or benchmark.

Pricing: Pay Per Event (PPE)

$0.79 per 1,000 reviews, the same on every Apify plan. No volume tiers to work up to.

EventPer reviewPer 1,000
Review$0.00079$0.79

Business summary rows are never charged. They come from the same page as the reviews, so billing for one would be charging for the shape of the response. Small standard platform events, such as Actor start, are shown in Apify before you run the Actor.

ReviewsCost
100$0.08
500$0.40
1,000$0.79

Free users can preview the Actor for 10 lifetime runs, limited to the first business and up to 10 reviews per run.

FAQ

What is Yelp? Yelp is a local business directory and review platform used for restaurants, hotels, shops, and local services. Users rate businesses from one to five stars and publish written reviews. This Actor turns the public review and business details into structured rows.

Why do I get more reviews than the business's review count? If includeFilteredReviews is enabled, reviewsCollected can exceed the displayed reviewCount. Filtered reviews do not count toward Yelp's business rating or displayed review total.

Can I collect only certain languages? Yes. Set reviewLanguages to two-letter codes such as en, de, or fr. Leave it empty to collect all published languages.

How many reviews can I extract? Up to 50,000 reviews per business and up to 200 businesses per run. Set maxReviewsPerBusiness to control dataset size and cost.

How fresh is the data? Each run collects the currently public Yelp listing. Freshness ultimately depends on when Yelp publishes or updates a review.

What are filtered reviews? Yelp keeps some reviews off the main listing, either because its ranking no longer shows them or because it removed them for breaking its content rules. Neither group counts towards the star rating. Turn on includeFilteredReviews to collect them; each row is labelled so you can keep them separate.

Why do some filtered reviews have no text? Some removed reviews retain a rating and date while their text or reviewer is unavailable. Those fields are returned as null instead of being invented.

How do I export the data? JSON, CSV, Excel, XML, or HTML from the run's Storage tab, or through the Apify API. JSON preserves the nested reviewer, ownerReply and photos fields; CSV flattens them.

Can I use a Yelp link from my own country, like yelp.de or yelp.co.uk? Yes. A business carries the same identifier on every Yelp domain, so a link from any country site resolves to the same business and the same reviews. Language subdomains such as de.yelp.ch, mobile m.yelp.com links, and links with tracking parameters all work unchanged.

Can I get the business listing data instead of reviews? The summary dataset already gives you the business record: rating, the 1 to 5 star breakdown, review count, categories, address, coordinates, price range, phone, and photo count.

For place data across a whole city or category rather than one business at a time, use Google Maps Scraper.

Can I collect hotel or restaurant reviews from other platforms? Yes, and the field shapes line up so you can stack them. Booking.com Reviews and Tripadvisor Reviews cover the same properties from a different guest population, Expedia Hotels & Reviews covers 30+ regional sites, and TheFork Restaurant Reviews covers European restaurants.

Is it legal to scrape Yelp reviews? This Actor extracts only publicly visible data, nothing behind a login. Reviews and reviewer names are personal data, so you are responsible for complying with Yelp's terms and with data protection law in your jurisdiction, including GDPR and CCPA.

What happens if a business name matches the wrong place? Every row carries searchQuery alongside the resolved businessName and businessUrl, so a mismatch is visible in the output. Use business links when you need certainty.

How to run the scraper and put it on a schedule (official Apify videos):

More Zen Studio & Clearpath review and place scrapers

⭐ Travel and hospitality reviews

🍽️ Restaurant reviews

📍 Places

Support

Extracts publicly available data. Users must comply with Yelp terms and data protection regulations (GDPR, CCPA).


Structured Yelp reviews for reputation monitoring, hospitality research, competitive intelligence, and local-market analysis.