🎉 Premium Proxies · 3-Day Free TrialClaim Now →
Guides

How to Scrape Yelp Data (Listings and Reviews)

Scrape Yelp data the durable way: pull business name, rating, review count, category, address, phone, and hours from the page's JSON-LD, past PerimeterX.

S SparkProxy 0 20 min read
Share
How to Scrape Yelp Data (Listings and Reviews)

To scrape Yelp data without your parser rotting in a month, skip the obfuscated React class names and read the schema.org JSON-LD block Yelp ships inside every business page. That one block hands you the name, rating, review count, price range, address, and phone as clean structured data, so most of the fields people fight over are already parsed for you. This guide walks the full pipeline for public Yelp business data and reviews: which fields to pull and where they live, how to page through search results and past the roughly 240-result cap, how to get through the PerimeterX bot wall, and how to collect reviews without stepping on privacy law. Every request uses SparkProxy's Scraping API, so browser rendering and residential IP rotation are request parameters instead of infrastructure you babysit.

What data you can extract (fields reference)

A Yelp business page carries almost everything you'd want in a single embedded JSON-LD block, plus a couple of fields that live in the rendered HTML. The search results page is thinner: it's really a list of links to business pages, so the durable pattern is to harvest business aliases from search, then follow each one for the full record. Here's the reference set worth pulling, with the stable way to get each field as of mid-2026.

FieldWhere it livesHow to get itNotes
Business nameJSON-LD `name`; page `h1`Parse the `application/ld+json` blockJSON-LD is the most stable source
Business aliascanonical URL `/biz/``link[rel="canonical"]` or the `/biz/` hrefYour stable per-business identifier
RatingJSON-LD `aggregateRating.ratingValue`float, 1.0 to 5.0Search cards also expose it in an `aria-label`
Review countJSON-LD `aggregateRating.reviewCount`integerMatches the "N reviews" on the page
CategoryJSON-LD `@type` plus category linkse.g. `Restaurant`, "Italian, Pizza"Category anchors carry `find_desc=`
Price rangeJSON-LD `priceRange``$`, `$$`, `$$$`, `$$$$`Not always present
AddressJSON-LD `address` (PostalAddress)street, locality, region, postal codeCleanly split into fields
PhoneJSON-LD `telephone`formatted string
Hoursrendered hours table rowsday plus open/close textUsually NOT in JSON-LD; needs render
Reviews (sample)JSON-LD `review[]`first page of reviewsFull set via `?start=` pagination

Two rows are the reason this guide leans on JSON-LD. The rating, review count, address, phone, and price are handed to you already parsed inside the