Yelp Scraper - Local Business Data, Hours & Contacts
Pricing
from $4.00 / 1,000 business scrapeds
Yelp Scraper - Local Business Data, Hours & Contacts
Scrape Yelp local businesses by city and category: name, address, phone, website, opening hours, categories, price tier, rating and review count. No login. Export CSV/JSON.
Pricing
from $4.00 / 1,000 business scrapeds
Rating
0.0
(0)
Developer
WebDataLabs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Yelp Scraper — Local Business Data, Hours & Contacts
Turn any US city into a clean spreadsheet of local businesses: name, street address, phone, website, opening hours, categories, price tier, rating and review count — one flat row each, ready for CSV, Excel, Google Sheets or your CRM.
What you get
| Field | Example |
|---|---|
name | Moonshine Grill |
address, city, state, postalCode | 900 E 11th St · Austin · TX · 78702 |
phone | (512) 653-1187 |
website | https://franklinbbq.com/ |
categories | Southern, Breakfast & Brunch, Cocktail Bars |
priceRange | $$ |
rating / reviewCount | 4.4 / 6400 |
hours | Mon: Closed · Tue: 11:00 AM - 3:00 PM · … |
photoUrls | Yelp CDN links |
yelpUrl, businessId, alias, ranking | stable identifiers + search position |
website is the field most people actually come for — Yelp's own official API does not return
it at any price tier.
Why this one
- Real review counts. Yelp's UI abbreviates to "6.4k". Other scrapers ship
6.4. This returns6400. - Honest completeness. Every row carries
enrichmentStatus—full,search_onlyorblocked— so you always know whether a null means "Yelp doesn't list it" or "we couldn't read it". Nothing is ever invented to fill a gap: no"N/A", no0ratings, no placeholder addresses. - Honest coverage. Yelp will not paginate an anonymous search past roughly 60 results, no matter what total it displays. Most scrapers quietly hand you a truncated list that looks complete; this one tells you in the run summary exactly which queries were cut short and what to do about it.
- No fake success. A run that gets refused on every query fails loudly rather than finishing green with an empty dataset.
Input
| Field | Required | Default | Notes |
|---|---|---|---|
location | yes* | — | "Austin, TX" or a ZIP code |
searchTerms | no | ["Restaurants"] | one query per term |
maxResults | no | 100 | stop after N businesses |
enrichDetails | no | true | off = faster/cheaper, search-page fields only |
startUrls | no | [] | paste Yelp business URLs instead of searching |
* either location or startUrls.
{"location": "Austin, TX","searchTerms": ["Pizza", "Coffee", "Sushi"],"maxResults": 200,"enrichDetails": true}
Covering a whole city — read this first
Yelp serves roughly 60 results per search query, then stops paginating. It will happily tell you there are 240 matches, but it does not hand them over to anonymous visitors — offsets beyond the first few pages are refused outright. That is Yelp's limit, not the scraper's, and no scraper can honestly promise you 240 from one query.
So: use more queries, not a bigger maxResults. Each search term gets its own ~60-result
allowance.
{"location": "Los Angeles, CA","searchTerms": ["Pizza", "Sushi", "Tacos", "Thai", "Burgers", "Ramen", "Steakhouse", "Vegan"],"maxResults": 400}
Eight specific terms will get you far more of a city than one broad "Restaurants" ever will.
Searching per ZIP code works the same way. The run summary names every query that was cut short and
how many it returned versus how many Yelp claimed.
Example output
{"businessId": "cs6HfZNykLVitm09jWFqWg","alias": "moonshine-grill-austin","name": "Moonshine Grill","yelpUrl": "https://www.yelp.com/biz/moonshine-grill-austin","ranking": 1,"address": "303 Red River St","city": "Austin","state": "TX","postalCode": "78701","country": "US","phone": "(512) 236-9599","website": "https://moonshinegrill.com/","categories": ["Southern", "Breakfast & Brunch", "Cocktail Bars"],"priceRange": "$$","rating": 4.4,"reviewCount": 6400,"isPermanentlyClosed": null,"hours": [{ "day": "Mon", "hours": "11:00 AM - 10:00 PM" },{ "day": "Tue", "hours": "11:00 AM - 10:00 PM" }],"photoUrls": ["https://s3-media0.fl.yelpcdn.com/bphoto/…/l.jpg"],"enrichmentStatus": "full","searchTerm": "Restaurants","searchLocation": "Austin, TX","scrapedAt": "2026-07-27T12:00:00.000Z"}
Three dataset views ship with the actor: Overview, Contact list (name/phone/website/address — the lead-gen export), and Full data.
Pricing
Pay per result. You are charged $0.004 per business delivered, plus Apify's platform usage. Nothing else — a run that returns 40 businesses costs about $0.16.
Turning enrichDetails off makes runs substantially faster and cheaper, at the cost of the
address, phone, website and hours fields.
Run summary
Every run writes an OUTPUT record to the key-value store with per-query coverage, how many rows
were full vs search_only vs blocked, request counts, and any 240-cap warning. Use it to check
a run really did cover what you asked for.
What this actor does not collect
- No reviews, no reviewer names, photos or profiles. Only the aggregate
ratingandreviewCountnumbers. This keeps the output free of personal data. - No images are copied. Photos are referenced by URL only.
- No login, no accounts. Only publicly visible pages are read, at a deliberately measured request rate.
Notes
- US residential proxy is required and enabled by default. Yelp filters by IP reputation, so datacenter proxies will be refused.
- Sponsored/ad placements are excluded — you get organic listings only.
- You are responsible for how you use the data you collect, including compliance with applicable law and with Yelp's terms.
Built by WebDataLabs. Found a problem or need another field? Open an issue on the actor page.