All scrapers

Business data

Yelp Reviews Scraper

yelp.com

99.4% Success rate
2.2s Avg response
DataDome Protection
1,100 calls Measured over

Yelp business reviews are served through a dedicated plugin endpoint rather than the generic page fetch. Give it a business - a Yelp business URL such as https://www.yelp.com/biz/gary-danko-san-francisco, its alias gary-danko-san-francisco or its business id - and it reads the review feed yelp.com's own review section loads, returning the reviews already parsed: the review id and link, the star rating, the full text, its language, the publish date and time, the author (name, location, review, friend and photo counts, Elite status and year), photos with captions, videos, the Helpful, Thanks, Love this and Oh no reaction counts, check-ins, the owner's public reply and the author's earlier reviews of the same business. The business comes with them: name, rating, review count, the 1-5 star histogram, review counts per language, categories, city and neighbourhoods. Sort the way yelp.com does (relevance, newest, oldest, highest, lowest or Elite reviewers first), keep only some star ratings, search the reviews for a phrase, drop reviews older than a date, and start at any page or offset; a call collects up to 500 reviews and nextStart continues where it stopped. Yelp lists one review language at a time: by default a call reads the business's most-reviewed language, and language picks another. It is the reviews companion to our Yelp search plugin, and no Yelp account or Fusion API key is involved.

What you can extract

  • Review id, link, star rating, full text, language and publish date and time
  • Author: name, location, review, friend and photo counts, Elite status and year
  • Photos with captions, videos, check-ins and the Helpful, Thanks, Love this and Oh no reaction counts
  • The owner's public reply and the author's earlier reviews of the same business
  • Business summary: name, rating, review count, 1-5 star histogram, review counts per language, categories, city and neighbourhoods
  • Sort by relevance, newest, oldest, highest, lowest or Elite, and filter by star rating, a phrase or a since date
  • Every review page: up to 500 reviews per call from any page or offset, one language per call, with nextStart to continue

Dedicated endpoints

/local/yelp-reviews

Yelp business reviews

The reviews of a Yelp business given as a business URL, alias or business id: business (businessId, alias, name, url, rating, reviewCount, ratingHistogram, reviewsCountByLanguage, categories, city, region, neighborhoods) and a reviews array with id, url, rating, text, language, publishedDate, date, user (name, location, reviewCount, friendCount, photoCount, isElite, eliteYear), photos, videos, reactions (helpful, thanks, loveThis, ohNo), ownerResponse, checkIns and previousReviews. sort is relevance, newest, oldest, highest, lowest or elites; rating keeps some star ratings (such as 1,2), query searches the reviews for a phrase, language picks the review language (default: the business's most-reviewed one) and since drops older reviews. max_reviews 1-500 (default 20) from page (10 reviews a page) or start; totalResults, hasMore and nextStart for paging, pagesFetched for billing.

How to scrape it

curl -X POST \
  -H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
  "https://api.scrapeunblocker.com/local/yelp-reviews?business=gary-danko-san-francisco&max_reviews=20&sort=newest"
import requests

resp = requests.post(
    "https://api.scrapeunblocker.com/local/yelp-reviews",
    headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
    params={"business": "gary-danko-san-francisco", "max_reviews": "20", "sort": "newest"},
)
print(resp.text)
import { ScrapeUnblockerClient } from 'scrapeunblocker';

const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });

const data = await su.yelpReviews('gary-danko-san-francisco', {
  maxReviews: 20,
  sort: 'newest',
});
console.log(data);

Requests are POST and take their parameters in the query string. Browser rendering always happens - there is no flag to enable.

Example response

{
  "business": {
    "businessId": "WavvLdfdP6g8aZTtbBQHTw",
    "alias": "gary-danko-san-francisco",
    "name": "Gary Danko",
    "url": "https://www.yelp.com/biz/gary-danko-san-francisco",
    "rating": 4.5,
    "reviewCount": 6149,
    "ratingHistogram": {
      "1": 125,
      "2": 216,
      "3": 485,
      "4": 1100,
      "5": 4228
    },
    "reviewsCountByLanguage": {
      "en": 6150,
      "zh": 3,
      "de": 1
    },
    "categories": [
      "New American",
      "French",
      "Cocktail Bars"
    ],
    "city": "San Francisco",
    "region": "CA",
    "neighborhoods": [
      "Russian Hill",
      "Fisherman's Wharf"
    ],
    "image": "https://s3-media0.fl.yelpcdn.com/bphoto/5dbjkeTld05HumeToIAhRQ/90s.jpg"
  },
  "reviews": [
    {
      "id": "rmHRbvuVBpNb6faLI7EufQ",
      "url": "https://www.yelp.com/biz/gary-danko-san-francisco?hrid=rmHRbvuVBpNb6faLI7EufQ",
      "rating": 5,
      "text": "Been here for 10 years and cannot believe I haven't written a review.  First time dining at the bar and I think we like it better than the main dining room. The bartenders are very friendly and there's more of an interaction...",
      "language": "en",
      "publishedDate": "2026-09-26T20:12:05-07:00",
      "date": "2026-09-26",
      "user": {
        "id": "...",
        "name": "Dana K.",
        "location": "San Francisco, CA",
        "profileUrl": "https://www.yelp.com/user_details?userid=...",
        "avatar": "https://s3-media0.fl.yelpcdn.com/photo/.../180s.jpg",
        "reviewCount": 601,
        "friendCount": 281,
        "photoCount": 1481,
        "isElite": true,
        "eliteYear": 2026,
        "isEliteAllStar": null
      },
      "photos": [
        {
          "id": "0gwh8dr1Cc5sTNpfStU9oQ",
          "url": "https://s3-media0.fl.yelpcdn.com/bphoto/0gwh8dr1Cc5sTNpfStU9oQ/o.jpg",
          "caption": "Lobster Risotto",
          "width": 1501,
          "height": 2000
        }
      ],
      "photosCount": 2,
      "videos": [],
      "ownerResponse": null,
      "reactions": {
        "helpful": 1,
        "thanks": 0,
        "loveThis": 0,
        "ohNo": 0
      },
      "helpfulVotes": 1,
      "checkIns": 0,
      "isFirstReviewer": false,
      "isReviewOfTheDay": false,
      "authorExpertise": "Cocktail Bar",
      "isUpdated": false,
      "previousReviews": []
    }
  ],
  "resultsCollected": 10,
  "totalResults": 6150,
  "page": 1,
  "start": 0,
  "sort": "newest",
  "language": "en",
  "rating": null,
  "query": null,
  "since": null,
  "pagesFetched": 1,
  "hasMore": true,
  "nextPage": 2,
  "nextStart": 10
}

Read the API docs

Frequently asked questions

Is it legal to scrape Yelp reviews?

Collecting publicly available Yelp reviews and ratings is lawful in many jurisdictions, but the rules depend on your country, the data you collect and how you use it. Reviewer names, photos and review text can be personal data, so follow the privacy rules that apply to you. ScrapeUnblocker returns the public reviews; what you collect and how you use it is your responsibility.

How do I scrape Yelp reviews without getting blocked?

Yelp's business pages sit behind DataDome. The /local/yelp-reviews plugin reads the reviews from the review feed yelp.com's own review section loads, over rotating ISP exits with no browser render, and sends a refused request again on a fresh exit. A business given as a URL or alias costs one business-page fetch through ScrapeUnblocker's unblocking chain first, to find its business id; the response returns businessId, so later calls can skip that step. In ScrapeUnblocker's benchmark it returned reviews on 99.4% of 1,100 calls with a different business each time, about 2.2s per call.

How many Yelp reviews can I get?

All of them: the plugin pages through every review Yelp lists for the business, not only the few the business page shows. A call collects up to 500 reviews (max_reviews, default 20), starting at any page (10 reviews a page, as on yelp.com) or at an exact offset with start, and nextStart continues where it stopped while hasMore is true. totalResults says how many reviews match the call's language, rating and query. Yelp lists one review language per call, so a business reviewed in several languages takes one pass per language; business.reviewsCountByLanguage shows how many reviews each language has.

What data do I get for each review?

Each review has its id and link, the star rating, the full text and its language, the publish date and time, the author's name, location, review, friend and photo counts and Elite status with the year, the photos with captions and sizes, videos, the Helpful, Thanks, Love this and Oh no reaction counts, check-ins, the owner's public reply and the author's earlier reviews of the same business. The business summary adds its name, rating, review count, the 1-5 star histogram, review counts per language, categories, city, region and neighbourhoods.

Can I sort or filter Yelp reviews?

Yes. sort orders the reviews the way yelp.com's Sort by menu does: relevance (Yelp's default), newest, oldest, highest, lowest or elites. rating keeps only some star ratings, such as 1,2 for the critical ones, query keeps reviews that mention a phrase, using yelp.com's own review search, and since drops reviews written before a date; with sort=newest, paging stops at the first older review, which suits monitoring new reviews. To find businesses first, use our Yelp search plugin, /local/yelp, which returns a businessId for every result.

How much does it cost to scrape Yelp reviews?

Yelp reviews are billed by volume: one request per 10 reviews returned, rounded up, and at least one per call. The default 20 reviews count as 2 requests, 500 reviews as 50, and pagesFetched shows the exact number. Finding the business id from a URL or alias is not billed. 1 request = 1 credit, EUR 1.00 per 1,000 on pay as you go, down to about EUR 0.55 per 1,000 on the Ultimate plan. Blocks and timeouts are not billed, and the free trial includes 500 requests with no card.

Related scrapers

Start scraping this site today

Free tier included. No credit card required to test it.