Quick answer: The compliant way to get Yelp reviews and business data is the official Yelp Fusion API, not an HTML scraper. It returns business details, ratings, and a limited set of review excerpts as structured JSON. Yelp's Terms of Service prohibit scraping its pages, and reviews contain personal data, so scraping full review text off the site is both a ToS problem and a privacy problem. Start with the API and keep your use to what it officially provides.
Yelp reviews are valuable for reputation monitoring, local market research, and understanding customer sentiment. Businesses especially want visibility into their own listings. The honest constraint is that Yelp does not offer full review corpora through its API, and scraping the rest off the site is against the rules, so the compliant answer is narrower than most tutorials admit.
Start with the Yelp Fusion API
Yelp Fusion is the official developer API. You create an app in the Yelp developer portal, get an API key, and call documented endpoints. It is the sanctioned path and the only one that keeps you clearly inside Yelp's terms.
What it broadly returns:
- Business search: businesses matching a term and location, with rating, review count, categories, price level, coordinates, and hours.
- Business details: fuller info for a specific business by ID.
- Reviews: a limited set of review excerpts per business (a small number of reviews, often truncated), plus the aggregate rating and count.
That review limitation is the crux. Fusion gives you the star rating, the total review count, and a few excerpts, not the entire review history. That is a deliberate boundary, and it is the boundary you should respect rather than route around.
API vs scraping the HTML
| Yelp Fusion API | Scraping HTML | |
|---|---|---|
| Terms of service | Sanctioned path | Prohibited |
| Data format | Structured JSON | Markup to parse |
| Review coverage | Rating, count, a few excerpts | Full text (against terms) |
| Stability | Documented, versioned | Breaks on layout changes |
| Rate limits | Defined daily call limit | Undocumented, blocking |
| Risk | Low, within terms | ToS breach, privacy exposure, bans |
For business metadata and aggregate ratings, the API is the clear pick. For full review text, the honest answer is that there is no compliant self-serve scraping route, so you should reconsider whether you truly need every review or whether the aggregate plus excerpts is enough.
What is available officially, in concept
Fusion is organized around a daily call limit rather than a dollar-per-request price, and different endpoints serve different needs. In practice:
- Use business search to find and identify listings by term and location.
- Use business details for a specific listing's full metadata.
- Use the reviews endpoint for the rating, count, and the handful of excerpts Yelp exposes.
- Cache results so you are not re-spending your daily limit on data you already have.
I am not quoting the exact call limit, because Yelp adjusts it; check the current figure in the Fusion documentation.
A compliant code sketch
A minimal Fusion call to fetch business details and the available review excerpts (API key auth):
import requests
API_KEY = "YOUR_YELP_FUSION_API_KEY"
BUSINESS_ID = "garaje-san-francisco"
headers = {"Authorization": f"Bearer {API_KEY}"}
details = requests.get(
f"https://api.yelp.com/v3/businesses/{BUSINESS_ID}",
headers=headers,
timeout=30,
)
details.raise_for_status()
biz = details.json()
print(biz["name"], biz["rating"], biz["review_count"])
reviews = requests.get(
f"https://api.yelp.com/v3/businesses/{BUSINESS_ID}/reviews",
headers=headers,
timeout=30,
)
reviews.raise_for_status()
for r in reviews.json().get("reviews", []):
print(r["rating"], r["text"][:120])
No headless browser, no proxy rotation, no fragile selectors. You get structured JSON within your daily limit.
Fetching a business's own public pages
There is a legitimate adjacent case: a business wants to monitor its own online presence, or you want firmographic data from a company's own public website (not from Yelp's listing pages). For that, link.sc turns a public URL into clean markdown or JSON in one call:
curl https://link.sc/v1/fetch \
-H "Authorization: Bearer lsc_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.example-restaurant.com/",
"format": "markdown"
}'
Use link.sc for the legitimate slice: a company's own public site, public pages you can access, and official API responses. It is not a tool for scraping Yelp's review pages or bypassing its defenses, and you should not use any tool that way. If you also need structured data off a page, see our guide on how to extract structured JSON from any webpage.
The legal and ethics note
This one has an extra layer because reviews are written by real people. Yelp's Terms of Service prohibit scraping, crawling, and automated data collection outside the API. Beyond the ToS, review text is personal data (it is authored content tied to identifiable reviewers), so the GDPR and similar privacy laws govern how you collect, store, and reuse it. Republishing scraped reviews can also run into copyright and defamation questions. Circumventing access controls can raise CFAA exposure in the US.
Guardrails:
- Use the Yelp Fusion API for business data, ratings, and the excerpts it provides.
- Do not scrape full review text off Yelp's pages; that path is against the terms and carries privacy risk.
- Never bypass rate limits or anti-bot systems.
- Have a lawful basis before storing anything tied to a reviewer, and do not republish reviews without checking rights.
For the broader picture, read is web scraping legal and ethical web scraping and compliance best practices. None of this is legal advice.
The bottom line
For Yelp reviews, the compliant hierarchy is short: the Fusion API for business metadata, aggregate ratings, and the excerpts Yelp exposes, and nothing scraped off the review pages. The API's review limit is a boundary, not an obstacle to engineer around. If the aggregate rating plus a few excerpts is not enough for your use case, the answer is to rethink the requirement, not to breach the terms and collect personal data without a basis.
Need clean content from public pages and official API responses in one call? link.sc fetches any public URL to markdown or JSON. Try it free.