Unlike most targets, Yelp does ship an official API — Fusion. So the question here isn't "is there an API?", it's "does the API give you what you actually need?" For two of the most common jobs — mining the full review corpus and building local business lead lists — the honest answer is no. Let's look at exactly where the ceiling sits, then at what scraping the public pages adds back.
The Fusion API's real caps
These are the limits that decide whether the official API can do your job. None of them are obscure; they are just rarely spelled out before you have already built against them:
| Limit | What it means in practice |
|---|---|
| 3 reviews per business | The reviews endpoint returns at most three. A restaurant with 4,000 reviews still gives you three. |
| Truncated review text | Each of those three is an excerpt, not the full review body. No good for sentiment or theme analysis. |
| ~5,000 calls / day | Standard access ceiling. One call per business detail burns through this fast across multiple cities. |
| 1,000 results per search | Search pagination caps at 1,000 (50 per page x 20 pages). A dense category in a big metro overflows it. |
| No raw website field guarantee | Business website links are inconsistent in the API payload, which hurts lead-gen enrichment. |
If your project is "show me a couple of representative reviews on a map," Fusion is fine — use it, it's clean and free. The moment you need the whole review history, the full text, or a wide business sweep for outreach, you have outgrown it.
API vs scraping, side by side
Fusion API gives you
- Up to 3 truncated reviews
- Core business fields (name, rating, count)
- 1,000 search results max
- ~5k calls/day
- Official, ToS-clean, free
Scraping the public pages adds
- Full review text, all of it
- Reviewer name, date, rating, useful/funny/cool counts
- Phone + website for outreach
- Unbounded search depth via pagination
- Categories, hours, price tier, photos
Two data shapes: businesses and reviews
It helps to think of Yelp as two related datasets you can pull independently.
Business records (the lead-gen layer)
One row per business: name, address, phone, website, categories[], rating, reviewCount, priceTier ($ to $$$$), hours, coordinates and the Yelp page URL. This is the layer that turns into a prospect list: "every plumber in Phoenix rated 4.0+ with under 30 reviews" is a sharp, contactable target set.
Review records (the sentiment layer)
One row per review, joined to a business: full text, rating, date, reviewerName, reviewer's total review count, and the helpful-vote counts. This is the layer the Fusion API specifically cripples, and the reason most serious review projects scrape.
A worked lead-gen example
Suppose you sell a booking tool to independent salons and you want warm leads — salons that are busy enough to care but not so big they already have software. Here's the pipeline:
- Search the category
hair salonsacross your target metros. - Filter on the business layer: rating ≥ 4.0 (they care about reputation),
reviewCountbetween 15 and 150 (active but not enterprise), and aphonepresent. - Enrich: keep the
websitewhere listed so you can check if they already run online booking. - Score and export to CSV. You now have a ranked outreach list, not a raw dump.
The Fusion API can start this, but the 1,000-result cap and missing website fields force you back to the public listings to finish it cleanly.
A note on anti-bot — why you don't roll your own
Yelp actively defends its pages: aggressive rate-limiting on datacenter IPs, interstitial challenges, and layout shuffles that quietly break hand-written parsers. A naive scraper works for a day and then starts returning empty results or CAPTCHAs. A maintained actor absorbs that with rotating residential proxies and parser upkeep, so your pipeline doesn't go dark the week Yelp ships a redesign.
Running it as an API call
A run that searches a category in a city and pulls full reviews per business:
curl -X POST "https://api.apify.com/v2/acts/renzomacar~yelp-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchTerms": ["hair salons"],
"locations": ["Phoenix, AZ"],
"maxBusinesses": 200,
"maxReviewsPerBusiness": 50,
"minRating": 4.0
}'
You get one JSON object per business, each with a nested reviews[] array carrying the full text the Fusion API never hands over. Append &format=csv to the dataset URL to flatten it into a spreadsheet for the sales team.
Practical cautions
- Volume costs money. "All reviews for 5,000 businesses" is a large job. Cap
maxReviewsPerBusinessto what your analysis actually needs — the most recent 50 usually beats 4,000 stale ones. - Deduplicate businesses by Yelp ID, not name. Chains and franchises share names across locations.
- Respect the obvious line: aggregate analysis and public business data are one thing; harvesting individual reviewers for targeting is another. Stay on the business and aggregate-sentiment side.
Get the full Yelp picture, not three truncated reviews
Our maintained Yelp Scraper pulls complete business records and full-text reviews past the Fusion API's caps — proxies and anti-bot handled, clean JSON or CSV out. Free Apify credits to start.
Get the Yelp Scraper → Or get done-for-you leadsDisclosure: the links to Apify on this page are affiliate links. If you create a paid account through them we may earn a commission, at no extra cost to you. We recommend Apify because we build and ship the Yelp Scraper on it ourselves.