Yelp holds the most detailed public record of how customers feel about a local business, and getting that record out is harder than it should be. The official developer program hands you a few truncated review excerpts per business, and copying reviews off Yelp by hand stops being funny around page two. I'll show the DIY route, where it falls apart, and the shortcut: the Yelp Reviews API on Apify, which turns a place ID into clean JSON with every review.
Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.
Does Yelp have an official reviews API?
Yes, and that is the frustrating part. Yelp's official Fusion API is real and well documented, but its reviews endpoint returns at most three review excerpts per business, each trimmed to a short preview. That is fine for showing a badge on your website and useless for reputation monitoring or sentiment analysis. So in practice, a Yelp reviews API for analysis work means a scraper you call like an API: send a place ID, get the full review record back as JSON.
What the Yelp Reviews API returns
The Yelp Reviews API returns every review for a business as structured JSON: star rating, full review text, post date, reviewer profile details, photos, owner replies, and vote counts.
| Field | Example | Notes |
|---|---|---|
| rating | 1 |
Stars, 1 to 5 |
| review text | "Waited 45 minutes for a table we booked..." | Full text, not an excerpt |
| date | 2026-06-28 |
When the review was posted |
| reviewer | name, location, review count | Profile details and activity stats |
| owner reply | "We're sorry about the wait..." | Business responses, when present |
| votes | useful, funny, cool | Helpful vote counts per review |
Pagination runs about 49 reviews per page, the language is detected per review, and you can pull Yelp's not-recommended (filtered) reviews too if you want the whole picture.
Who this is for
Owners and operators who want low-star reviews surfaced before they fester, data scientists feeding full review text into sentiment models, and agencies running reputation monitoring across a portfolio of client businesses and their competitors.
The manual way, and where it breaks
The DIY version: request the business page, dig the review data out of the embedded JSON, and walk the pagination ten reviews at a time. It works for one page in a notebook. Then the markup shifts, your requests start coming back as challenge pages, and the filtered reviews you wanted for completeness never show up in the public listing at all. I got a prototype working in an afternoon once; keeping it working was the part that ate a month. You end up owning proxies, retries, and parser fixes for what was supposed to be a side feature.
The faster way: run the Yelp Reviews API
Apify Console
- Open the Yelp Reviews API and click Try for free.
- Paste the encoded place ID, the first entry of the
place_idsarray on any Yelp Search API result. - Run it and download the dataset as JSON, CSV, or Excel.
REST
curl -X POST "https://api.apify.com/v2/acts/johnvc~Yelp-Reviews-API/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "place_id": "ED7A7vDdg8yLNKJTSVHHmg", "sort_by": "date_desc", "max_pages": 1 }'
Run endpoint reference: the Apify API docs.
Get Yelp reviews in Python
Call the Actor with apify-client, filter to low stars, and print what comes back:
import json
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("johnvc/Yelp-Reviews-API").call(
run_input={
"place_id": "ED7A7vDdg8yLNKJTSVHHmg",
"sort_by": "date_desc",
"rating": "1,2",
"max_pages": 1,
}
)
for review in client.dataset(run["defaultDatasetId"]).iterate_items():
print(json.dumps(review, indent=2))
Each record carries the rating, date, full text, reviewer details, and any owner reply, so a low-star feed for your ops channel is one filter away. The published task Get Yelp reviews by API is a runnable version of this setup.
Check one restaurant's reviews in one run
Point the Actor at a single place ID and read the recent record before a visit, a pitch, or an acquisition. The task Check a restaurant's Yelp reviews is preconfigured for exactly that.
Export Yelp reviews to CSV
Analysts live in spreadsheets, and the dataset export covers them. Export Yelp reviews to CSV shows the same input with a CSV download for reporting or a quick pivot table.
Find 1-star reviews to fix service issues
The rating filter accepts 1 or 1,2, which turns the Actor into a service-issue detector. Find 1-star Yelp reviews to fix service issues is that configuration saved as a task.
Search reviews by keyword for menu insights
The q parameter keeps only reviews mentioning a term, so "cheesecake" or "wait time" becomes a query instead of a read-everything project. Search Yelp reviews by keyword for menu insights runs it on a menu-research example.
Use it from Claude and other MCP clients
Apify exposes the Actor over the Model Context Protocol, so Claude, Claude Code, and Cursor can pull live reviews mid-conversation. "Summarize this restaurant's last 50 reviews and flag recurring complaints" becomes a single prompt instead of a data project. You can read more about Claude and Claude Code at claude.ai.
FAQ about scraping Yelp reviews
Is there a free Yelp reviews scraper?
The official free route caps you at three excerpts per business, so any full-text collection ends up on a scraper. This one bills per event under Apify's pay-per-event model: each fetched page of about 49 reviews is billed separately, and max_pages caps spend before the run starts. New Apify accounts include free platform credit, which covers plenty of test runs.
How does a Yelp reviews scraper help with sentiment analysis?
Sentiment models need full review text, and excerpts starve them. The scraper returns complete text plus the star rating, so you can check model output against the reviewer's own score. From there the JSON goes straight into an LLM or a classic classifier.
Can I monitor a competitor's reputation with this scraper?
Yes. The input is a place ID, and nothing restricts it to businesses you own. Run the scraper against competitors on a schedule and compare rating trends and complaint themes side by side.
Does the scraper work with Claude over MCP?
Yes. Connect the Apify MCP server and the Actor appears as a callable tool, so an agent can fetch reviews and reason over them in one loop, no glue code required.
Can I schedule the scraper to catch new reviews?
That is the reputation-monitoring pattern. Save your input as a task, attach an Apify schedule, and sort by date_desc so each run leads with the newest reviews. Start from the Yelp Reviews API.
What are the limits of this Yelp scraper?
It fetches reviews for one business per run, and it needs the encoded place ID rather than the human-readable alias; the Yelp Search API returns those IDs. Pagination tops out at a safety cap of 20 pages per run, close to a thousand reviews, which covers most listings.
More from Truffle Pig Data
Reviews are one leg of the Yelp picture. The Yelp Search API finds businesses and returns the place IDs this Actor takes as input, and the Yelp Place API returns the listing details for a single place.
Wrapping up
Yelp's official API tells you a business exists; the reviews are the part worth reading. The Yelp Reviews API gets you all of them as structured JSON in a couple of minutes.
Top comments (0)