Yelp Scraper
Pricing
$0.30 / 1,000 results
Yelp Scraper
Collect public Yelp business reviews with ratings, dates, text, reactions, business details, and optional reviewer details from business URLs or search pages.
Pricing
$0.30 / 1,000 results
Rating
0.0
(0)
Developer
MLG Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Share
Scrape Yelp business reviews from public business pages and export Yelp review data to CSV or JSON. This Yelp API alternative accepts business URLs, business identifiers, or search result URLs, and returns one structured record per review when the public source is reachable.
Validation status: The latest hosted test succeeded with 40 real reviews from a Swiss business page. Review ID, link, text, rating, date, and business URL were present in all 40 records. Yelp's United States business pages still returned HTTP 403 in the available network, so coverage is regional and should be checked for each target. Several optional fields and deeper pagination remain unverified.
What data can you extract from Yelp?
Each result is a review record with its business context attached. Field names are stable even when Yelp omits a value. Optional reviewer details are null unless enabled. The actor collects page-embedded review JSON from public mobile business pages; it does not access accounts or private reviews. The verified Swiss page contained normalized review records, business ratings, reaction counts, and review counts by language.
| Field | Description | Example or shape |
|---|---|---|
reviewId | Public review identifier, if exposed | Text identifier |
reviewUrl | Direct review link | Business URL with hrid |
reviewPosition | Position in the requested order | 1 |
text | Review body | Text string |
rating | Review star rating | 4 |
reviewDate | Date supplied by the source | Date string |
language | Language code when supplied | en |
translatedText | Source-provided translation when present | Text or null |
helpfulCount | Helpful reactions when supplied | 2 |
funnyCount | Funny reactions when supplied | 0 |
coolCount | Cool reactions when supplied | 1 |
checkInCount | Check-ins associated with the review | 0 |
userSpecifiedTimeOfExperience | Experience time if the reviewer supplied one | Date or null |
isFirstReviewer | First-reviewer indicator when supplied | Boolean or null |
reviewOfTheDay | Source recognition detail when supplied | Text or null |
expertRecognition | Other expert recognition when supplied | Text or null |
hasPaidThroughYelp | Payment indicator when supplied | Boolean or null |
hasPurchasedDeal | Deal purchase indicator when supplied | Boolean or null |
hasPlacedReservation | Reservation indicator when supplied | Boolean or null |
reservationProvider | Reservation source when supplied | Text or null |
publicReply | Public business response | Text or null |
photos | Review image references | Array |
videos | Review video references | Array |
feedback | Other reaction details | Array |
authorName | Public display name, only when enabled | Text or null |
authorProfileUrl | Public profile link, only when enabled | URL or null |
authorPhotoUrl | Public profile image, only when enabled | URL or null |
authorReviewCount | Public contribution count, only when enabled | Integer or null |
businessId | Encoded business identifier when present | Text or null |
businessAlias | Last segment of the business URL | Text |
businessName | Business display name when present | Text or null |
businessUrl | Canonical business page link | URL |
businessRating | Overall business rating when present | Number or null |
businessReviewCount | Public total review count when present | Integer or null |
businessPhotoUrl | Primary business photo when present | URL or null |
ratingDetail | Business rating distribution when present | Object or null |
reviewsCountByLanguage | Business review totals by language when present | Array |
scrapedAt | UTC time the item was collected | Timestamp |
The table is a field contract, not a claim that every field is available on every page. The source may offer a review without reactions, media, language, or business metadata. Nullable values remain null; absent arrays become empty arrays. Review text and rating are required to recognize a review record. The actor deduplicates by review identifier where available, then by review link and text when the identifier is missing.
How to scrape Yelp
- Paste one or more complete business URLs into
businessUrls. A direct business URL is the clearest starting point because it does not require search result discovery. You may instead provide identifiers inbusinessIdsor public search result URLs insearchUrls. - Set
reviewsLimitfor the number of reviews requested from each business. SetmaxItemsif you need one cap across all businesses. A small limit reduces requests during initial checks. - Choose
reviewsSort, and optionally set a language, a keyword, or star ratings. These filters are applied to the reviews present in each fetched page. Sorting after retrieval does not guarantee a global newest or oldest order across the business's entire history. - Run the actor and inspect its status. A successful run must contain review records. If all sources are blocked or empty, the run fails with a direct error instead of producing an apparently successful empty dataset.
- Open the dataset to download JSON or CSV. Keep the business URL and review URL columns when combining multiple runs so records remain traceable.
The verified example uses a Swiss business with hundreds of public reviews. If a target page responds with 403 or omits embedded review data, the actor records an error for that business. A run with no reviews fails.
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
businessUrls | List of strings | Empty | Public business page URLs. Each URL keeps its regional domain. |
businessIds | List of strings | Empty | Business aliases or encoded identifiers placed in a business URL on the chosen domain. Encoded identifier resolution is not verified. |
searchUrls | List of strings | Empty | Search result pages from which business links are extracted. A Swiss search page loaded during discovery; end-to-end expansion has not been validated. |
reviewsLimit | Integer | 100 | Per-business review cap. |
maxItems | Integer | 0 | Total output cap; zero means no total cap. |
reviewsSort | String | recommended | Recommended, newest, oldest, highest rated, or lowest rated within fetched records. |
ratings | List of integers | Empty | Keep only selected star ratings from one through five. |
language | String | Empty | Keep records with this language code. Empty keeps all languages. |
keyword | String | Empty | Keep fetched reviews containing this text. |
includePersonalData | Boolean | false | Include public reviewer name, profile, photo, and contribution count. |
domain | String | www.yelp.com | Regional domain used to construct URLs from identifiers. |
proxyConfiguration | Object | Public proxy enabled | Connection settings for public pages. |
A realistic input for a business with many reviews is:
{"businessUrls": ["https://de.yelp.ch/biz/hiltl-z%C3%BCrich"],"reviewsLimit": 40,"maxItems": 40,"reviewsSort": "recommended","ratings": [],"language": "","keyword": "","includePersonalData": false}
At least one of the three start lists must lead to a business. Duplicated business URLs are visited once. The total cap can stop a run before every requested business has been processed. A per-business cap applies separately to each business. The verified page embedded forty complete recommended reviews in one response, so this example needed one business-page fetch.
Output example
This item comes from the successful hosted run. The review text and arrays are shortened for readability; the stored dataset contains the full values and all fields listed above.
{"reviewId": "3xoC_lpjkFVtwaXipigF7Q","reviewUrl": "https://de.yelp.ch/biz/hiltl-z%C3%BCrich?hrid=3xoC_lpjkFVtwaXipigF7Q","reviewPosition": 1,"text": "Single best vegetarian restaurant I've been to in my life...","rating": 5,"reviewDate": "2026-09-03T16:23:24Z","language": "en","helpfulCount": 0,"authorName": null,"businessId": "KeNGoOn5jsAtsq-AXyDWzQ","businessAlias": "hiltl-zürich","businessName": "Hiltl","businessUrl": "https://de.yelp.ch/biz/hiltl-z%C3%BCrich","businessRating": 4.4,"businessReviewCount": 380,"ratingDetail": {"1_star": 9,"2_star": 14,"3_star": 29,"4_star": 110,"5_star": 218}}
Use cases
- A local operator can compare changes in public star ratings over time after a successful collection run.
- A customer experience team can group review text by recurring service topics, keeping the review URL for context.
- A multi-location business can attach each review to its branch through the business URL and alias fields.
- A researcher can compare review language and date across public business pages, subject to the availability of those source fields.
- A reporting workflow can identify reviews with public business replies and inspect response coverage.
- A data export can join public ratings and review text with a separate business list using business URLs.
The successful Swiss run provides data for these uses. Other regions and businesses can still block access or expose different fields. The actor does not infer sentiment, verify reviewer identity, or retrieve reviews hidden behind a login. It returns source data, not a quality judgment about a business or a person.
How much does it cost to scrape Yelp?
The current private configuration is $0.30 per 1,000 dataset items, or $0.0003 for each stored review. At that rate, 1,000 delivered reviews would cost $0.30, 5,000 would cost $1.50, and 10,000 would cost $3.00. These are item charges, not a promise that those quantities are reachable for every business. The latest hosted test stored 40 items.
Request count depends on the number of businesses, the page limit, and how many reviews are embedded in each response. The verified 40-item run fetched one mobile business page. Additional retries can occur when a request is blocked. The fetch layer first tries a lower-cost proxy, then rotates a session and escalates after repeated blocks. Escalation uses paid residential traffic and may consume account resources even when no reviews are returned. Keep trial inputs small when testing a new region.
The item price can be checked in the actor listing before use. If an account has a spending ceiling, the output helper stops when the platform reports that the charge limit has been reached. maxItems provides an additional count-based stop. The two controls solve different problems: one concerns stored item count, while the other concerns the budget available to the run.
Tips for best results
Start with a complete business URL. It avoids dependence on search result parsing and makes it easier to see which page failed. Use a business with at least as many visible reviews as your requested reviewsLimit. For a small inspection run, request twenty to forty items rather than an unlimited crawl. The Swiss example returned forty complete records from its mobile page. If a run fails, inspect the log for the business URL and response status.
Keep ratings empty while checking connectivity. A rating filter can reduce the number of stored records, and a page with forty embedded records may contain fewer records with the selected stars. Likewise, a narrow keyword can produce few or no matches. Verify that an unfiltered run works before interpreting a zero-result filtered run as evidence that no matching reviews exist.
Use reviewsSort to order the reviews returned by each page. Recommended preserves the source connection order. Newest, oldest, highest, and lowest sort the fetched records locally. These choices do not fetch different source slices, so they cannot guarantee that the first result is the newest or lowest-rated review among all of a business's reviews.
Leave includePersonalData disabled unless your use case requires public reviewer details and you have a lawful basis to use them. The review record still contains text, rating, date, and business context when those values are available. Avoid storing extra person-related fields when the analysis concerns businesses rather than reviewers.
Limits
The verified source is page-embedded normalized JSON on a Swiss mobile business page when that page returns complete review data. The prior United States business and review-feed requests returned HTTP 403 through the available network. A direct review-feed path on the Swiss site returned 404. An official reviews endpoint required authorization, and a public RSS information page did not provide anonymous business feeds. These paths are not used to manufacture substitute rows.
Source fields can vary by business, region, review type, and page version. Translation appears only if the source supplies translated text; the actor does not perform translation. Business name, overall rating, review count, and photo can be null when page data is absent. Media arrays and reaction details can be empty. The verified Swiss records supplied timestamps, but other pages may display dates with less precision. The actor never invents missing values.
The current implementation requests up to fifty mobile pages per business when no per-business limit is supplied. The first page and its forty review records are verified; offsets beyond the first page have not been validated. It stops earlier when a page is short or adds no new reviews and deduplicates across pages. Encoded business IDs and search result expansion are implemented as input paths but have not passed an end-to-end hosted test.
A 403 response is an access refusal, not a signal that a business has no reviews. An empty dataset should not be used as evidence of zero public feedback. The actor fails on zero items so monitoring systems can distinguish a blocked collection from a successful empty result. It may still produce a partial dataset if one business works and another fails; inspect logs for per-business errors.
Automation
A scheduled workflow can provide the same business URLs on each run and compare returned review IDs to a previous dataset. Date comparisons can help identify recently published records within the returned slice. A second workflow can export rows with rating, text, date, and business URL for review by a human. In both cases, check run status before consuming the dataset.
FAQ
Is collecting public reviews permitted? Requirements vary by jurisdiction and intended use. Read Yelp's terms and applicable privacy rules before collecting or republishing review content. This actor accesses public pages only; it does not provide a license to reuse text or personal information.
Do I need to configure a proxy? The default input uses the available public proxy. The successful Swiss run needed no manual proxy setting. Some other business pages still block access after escalation.
How fast is a run? Speed depends on access and page count. The verified 40-item hosted run finished in about nine seconds. Blocked pages can take longer because the fetch layer retries and rotates sessions.
Can I schedule or monitor runs? Yes, run status and dataset item count can be monitored by the hosting platform. Treat zero items with a failed status as an error, not a valid empty review period.
Can I export to a spreadsheet? The dataset can be downloaded in JSON or CSV, then opened in a spreadsheet. Preserve review IDs and URLs if you plan to merge exports from repeated runs.
Why is a field empty? The public source may omit it, the review may not have that feature, or the business page may be unavailable. Reviewer fields are intentionally null while includePersonalData is false.
Can I request every review? A low reviewsLimit stops early, while a larger limit requests more mobile pages. Only the first forty-review slice has been verified. Deeper pagination, source restrictions, and access blocks can prevent complete coverage.
Integrations
A dataset can feed an internal reporting pipeline through the platform API, a webhook, or a scheduled export. CSV and JSON downloads can be imported into a database or spreadsheet. For reliable automation, require a successful run and a nonzero item count before updating downstream reports. The verified Swiss run meets that condition; test each additional region before relying on it.
Support
Open an issue on the Issues tab with the business URL, run ID, and relevant log lines. Current open issues include the HTTP 403 block on tested United States business pages, unverified deeper pagination, and unverified encoded-ID inputs. Include a reproducible public URL when requesting support for another region.