Yelp Scraper — Businesses, Reviews — $2.50/1K until 11-24
Pricing
from $2.50 / 1,000 delivered businesses
Yelp Scraper — Businesses, Reviews — $2.50/1K until 11-24
Yelp scraper at a launch price: $2.50 per 1,000 businesses until 2026-11-24, then $4.00. US businesses by query and city with rating, review count, categories, price tier, phone, address, coordinates and hours, or reviews by business URL; watch mode delivers only new reviews.
Pricing
from $2.50 / 1,000 delivered businesses
Rating
0.0
(0)
Developer
architek.earth
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Yelp Scraper — Businesses, Reviews, Hours & Coordinates
Recorded run: 100 businesses from 10 searches in 161 seconds (2026-10-25, build 0.1.4, run TE39sMKs5JHGvgd1L). A bounded canary sample, not a full-catalogue benchmark.
architek.earth — an independent data studio. Pay-per-result scrapers with recorded runs, published canaries and stable schemas, built for people and AI agents.
What's new
- 2026-10-25 — Launch price: businesses $2.50 / 1,000 (was $4.00) until 2026-11-24, then back to $4.00 / 1,000; reviews unchanged at $2.50 / 1,000. Input recipes, a head-to-head table and MCP setup for Claude and Cursor added to this page.
- 2026-10-25 — First version: Yelp businesses by search query and US location (rating, review count, categories, price tier, phone, address, coordinates, weekly hours), reviews by business URL newest first, watch mode for new reviews, resumable runs.
Give this Yelp scraper a search query and a US location to get Yelp's organic results as business rows, or give it business URLs to get their reviews, newest first.
| Source | Market | From | Standout fields |
|---|---|---|---|
| Yelp (www.yelp.com) | United States | $2.50 / 1,000 businesses (launch price until 2026-11-24, then $4.00) | rating and review count, latitude/longitude, this week's opening hours |
✅ Why choose this scraper
- Coordinates and hours on every business.
latitudeandlongitudewere filled on 100 of 100 businesses in runTE39sMKs5JHGvgd1L, andhourson 99 of 100, from one batched Yelp data request per search page. - Recorded success on Yelp's DataDome wall. In the container gate, 19 of 20 fresh browser sessions delivered complete rows (search 9/10, reviews 10/10), with 0 re-challenges inside a solved session; in every validation run on builds 0.1.4 to 0.1.7, charges equalled delivered rows.
- New-review alerts.
incrementalModewith astateKeydelivers only reviews not delivered before: the rerunyhQmKESsL3dqwFMXFon 2 businesses found 20 known reviews and charged 0. - Organic results only.
positionis Yelp's organic rank; sponsored results are never returned or charged. - Resumable. A stopped run continues with the same
stateKey: runTsQjNqIBIsA8Zy1rvresumed after a forced stop and delivered the 4 remaining searches (40 businesses) with no row charged twice.
Tested head-to-head (2026-10-25)
| This actor | The field (11 Yelp actors in the store search) | |
|---|---|---|
| Runs that did not succeed | 0% of 3 recorded canary runs (2026-10-25); 19 of 20 fresh browser sessions passed DataDome in the container gate | median 0%, range 0–78%; 4 of 11 had failed runs (30-day store stats) |
| Rows per run | 10 businesses or 10 reviews per canary run | not published |
| Price | $2.50 / 1,000 businesses (launch), $2.50 / 1,000 reviews | median $0.90 / 1,000 rows, most review-only; business scrapers $3.00–$5.00 / 1,000 |
⚠️ Worth knowing up front
- Yelp is protected by DataDome. Every run starts a real browser (Camoufox) on Apify residential proxies and waits for Yelp's device check, about 10 to 35 seconds per browser (median 27 s in the gate). The browser and proxy cost is included in the price, which is why a business costs $0.0025 at the launch price ($0.004 from 2026-11-24) rather than a fraction of a cent.
- Pacing: up to 3 browsers run at once, one per 5 searches or business URLs, and each search takes a few seconds once its browser is ready. A 10-search run took 161 seconds.
- US locations only in this version. The business
websiteis not included (it needs one extra Yelp page per business);priceRangeis empty where Yelp shows no price tier (most service businesses: 41 of 100 businesses had one in runTE39sMKs5JHGvgd1L), andphoneandhoursare empty where the listing has none. - Reviews come newest first by default;
sortBy: "relevance"uses Yelp's own order. Watch mode stops at the first page of reviews it has already delivered, so it reads one page per unchanged business. - A browser whose device check does not clear is closed and the search is retried on a new browser and a new residential session, at most twice; then that search ends with a free
BLOCKEDrow. Two blocked searches in a row stop the run asPARTIAL. A run that reaches its timeout stops with a freeACTOR_DEADLINErow and can be resumed with the samestateKey. - Invalid input, a search with no results, a business URL with no Yelp business, a block, the timeout or your spending limit end with a free status row (
"recordType": "status") that says what happened.
⚡ Try the example
This actor has no free preview; the example below costs about $0.025 (10 businesses at the launch price).
Open the actor's input page, switch to JSON, paste this and start the run:
{"mode": "search","queries": ["pizza"],"locations": ["Austin, TX"]}
For reviews, set "mode": "reviews" and "businessUrls": ["https://www.yelp.com/biz/home-slice-pizza-austin"]; add more queries, locations or maxResultsPerSearch for paid collection.
⚙️ Input
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | select | search | search: queries x locations to business rows. reviews: business URLs to review rows. |
queries | array | — | Search mode. What you would type into Yelp's search box, e.g. pizza, plumbers. Each query runs in each location; at most 50 searches per run. |
locations | array | — | Search mode. US city and state, ZIP code or neighbourhood, e.g. Austin, TX. |
maxResultsPerSearch | integer | 10 | Search mode. Organic businesses per search, 1 to 100 (10 per Yelp page; more reads the next pages). |
businessUrls | array | — | Reviews mode. 1 to 50 Yelp business pages, e.g. https://www.yelp.com/biz/home-slice-pizza-austin. |
maxReviewsPerBusiness | integer | 20 | Reviews mode. Reviews per business, 1 to 1,000 (10 per Yelp page). |
sortBy | select | newest | Reviews mode. newest or relevance. |
incrementalMode | boolean | false | Deliver and charge only businesses or reviews this stateKey has not delivered before. Needs stateKey. |
stateKey | string | — | Any name you choose, reused on every run of the same watch, or to resume a stopped run without re-charging. |
feedback | string | — | Optional note for the maintainers. It is logged and read by a human, and it never changes output. |
Input recipes
Linked recipes open a public example task with exactly this input; run it as is or copy it. Paste the others into the JSON tab of the input page.
- Pizza places in Austin, TX:
{"mode": "search", "queries": ["pizza"], "locations": ["Austin, TX"]} - Plumbers and dentists in Chicago, 20 each:
{"mode": "search", "queries": ["plumbers", "dentist"], "locations": ["Chicago, IL"], "maxResultsPerSearch": 20} - One query in three cities:
{"mode": "search", "queries": ["coffee"], "locations": ["Seattle, WA", "Portland, OR", "Denver, CO"]} - Search by ZIP code, three pages:
{"mode": "search", "queries": ["dentist"], "locations": ["10001"], "maxResultsPerSearch": 30} - 50 most relevant reviews of one business:
{"mode": "reviews", "businessUrls": ["https://www.yelp.com/biz/lou-malnatis-pizzeria-chicago"], "maxReviewsPerBusiness": 50, "sortBy": "relevance"} - Daily new-review watch on 2 businesses:
{"mode": "reviews", "businessUrls": ["https://www.yelp.com/biz/home-slice-pizza-austin", "https://www.yelp.com/biz/lou-malnatis-pizzeria-chicago"], "maxReviewsPerBusiness": 20, "incrementalMode": true, "stateKey": "yelp-new-reviews-watch"}
🧱 Stable fields
These top-level fields keep the same name and the same kind of value in every release. Fields are only ever added, never renamed or removed, so an n8n, Make, Zapier or spreadsheet pipeline can bind to them.
| Field | Type | Meaning |
|---|---|---|
query | string | Business rows: the query as you gave it. |
location | string | Business rows: the location as you gave it. |
position | number | Business rows: Yelp's organic rank, from 1. |
encid | string | Yelp's business id (on business and review rows); the dedupe key for businesses. |
alias | string, nullable | Yelp's business slug, e.g. home-slice-pizza-austin. |
url | string, nullable | Business page, https://www.yelp.com/biz/<alias>. |
name | string, nullable | Business name. |
rating | number, nullable | Star rating (business rows: the average; review rows: the reviewer's stars). |
reviewCount | number, nullable | Number of reviews Yelp shows for the business. |
categories | array | Yelp category titles, e.g. ["Pizza", "Italian"]. |
priceRange | string, nullable | $ to $$$$; empty when Yelp shows none. |
phone | string, nullable | Formatted phone number. |
address | object | line1, line2, line3, city, region, postalCode, formatted. |
country | string, nullable | Country code, US. |
latitude | number, nullable | Business latitude. |
longitude | number, nullable | Business longitude. |
hours | object, nullable | This week's opening hours by day, e.g. {"Mon": ["11:00 AM - 10:00 PM"]}; empty when the listing has none. |
businessUrl | string | Review rows: the business URL the review belongs to. |
reviewId | string | Review rows: Yelp's review id; the dedupe and watch-mode key. |
text | string, nullable | Review rows: the full review text. |
language | string, nullable | Review rows: language code, e.g. en. |
createdAt | string, nullable | Review rows: date and time in the business's time zone, ISO 8601. |
authorName | string, nullable | Review rows: the reviewer's name as Yelp shows it, e.g. Chad E.. |
authorLocation | string, nullable | Review rows: the reviewer's home town as Yelp shows it. |
authorReviewCount | number, nullable | Review rows: how many reviews the reviewer has written. |
scrapedAt | string | When the row was collected (UTC, ISO 8601). |
status, inputRef, message | string | Status rows only: what happened, to which input, in words. |
recordType | string | "status" on free status rows; "business" or "review" on data rows. |
Other fields are extras, not part of the contract. To have one pinned, say so in feedback.
📦 Output example
Abridged real row from run TE39sMKs5JHGvgd1L on 2026-10-25; values are a historical snapshot.
{"recordType": "business","query": "pizza","location": "Chicago, IL","position": 1,"encid": "8vFJH_paXsMocmEO_KAa3w","alias": "lou-malnatis-pizzeria-chicago","url": "https://www.yelp.com/biz/lou-malnatis-pizzeria-chicago","name": "Lou Malnati's Pizzeria","rating": 4,"reviewCount": 7977,"categories": ["Pizza", "Italian", "Sandwiches"],"priceRange": "$$","phone": "(312) 828-9800","address": {"line1": "439 N Wells St", "city": "Chicago", "region": "IL", "postalCode": "60654", "formatted": "439 N Wells St, Chicago, IL 60654"},"country": "US","latitude": 41.8903586,"longitude": -87.6337084,"hours": {"Mon": ["11:00 AM - 11:00 PM"], "Fri": ["11:00 AM - 12:00 AM (Next day)"]},"scrapedAt": "2026-10-25T01:01:34.885343+00:00"}
A review row from run 2SfEj5bBLCCOpEsYZ:
{"recordType": "review","businessUrl": "https://www.yelp.com/biz/home-slice-pizza-austin","encid": "1Eq16r_MSnvPsnIykBdy9w","reviewId": "SnLCeXofs_9GJFRGhCapCQ","rating": 5,"text": "Good cheap pizza.\n\nGo inside! The line is shorter.\n\nAlso got the white something pizza. Good stuff","language": "en","createdAt": "2026-10-24T13:00:47-05:00","authorName": "Chad E.","authorLocation": "Mesa, AZ","authorReviewCount": 28,"scrapedAt": "2026-10-25T01:15:52.580782+00:00"}
A free status row looks like this:
{"recordType": "status","inputRef": "https://www.yelp.com/biz/no-such-business-zzqx-austin","status": "NOT_FOUND","message": "No Yelp business at this URL; nothing was charged","scrapedAt": "2026-10-25T01:24:38.178821+00:00"}
🧠 Advanced usage
New-review alerts for a competitor set. Run reviews daily on the businesses you watch with "incrementalMode": true and one stateKey. Each run delivers and charges only reviews that are new since the last run; a run with no new reviews ends COMPLETE with 0 rows. Route the dataset to Slack or email with a webhook on run success.
Local lead lists. Use several queries and locations in one run (at most 50 searches); a business found by two searches is delivered and charged once. Raise maxResultsPerSearch to read further result pages, 10 businesses per page.
Resume and check completion. Give every large run a stateKey. If it stops on its timeout or your spending limit, start it again with the same input and stateKey: it continues after the last delivered batch. RUN_SUMMARY in the run's key-value store has status (COMPLETE, PARTIAL, LIMITED, BUDGET_LIMIT), delivered, charged and checkpointComplete.
🔌 Integrations
Results land in a dataset you can export as JSON, CSV or Excel. They can also flow to Google Sheets, Make, Zapier or n8n, or to a webhook when a run finishes. The Apify Scheduler runs it on a timetable. A daily reviews run in watch mode is the useful schedule for reputation tracking; a weekly search run tracks new businesses in a category. Code samples for the other studio actors are in architek-earth/examples; this actor has no folder there yet.
n8n and Make
No n8n workflow or Make blueprint for this actor yet: architek-earth/examples has no yelp-scraper folder. Until it does, n8n's Apify node ("Run actor and get dataset") with architekture/yelp-scraper and the input above, or Make's Apify "Run an Actor" module, returns the same rows.
💸 Pricing
Pay per result. Platform and proxy usage are included. Status rows and failed requests are free. Each business or review is charged once, after it is written to the dataset; a business found again by another search in the same run, or a row delivered by an earlier run with the same stateKey in watch mode, is not charged again, and a resumed run continues after the last confirmed batch without re-charging it.
| Event | Price | What it covers |
|---|---|---|
business | $2.50 / 1,000 businesses (launch price until 2026-11-24, then $4.00 / 1,000) | One delivered business row from a search, with rating, categories, address, coordinates and hours. |
review | $2.50 / 1,000 reviews | One delivered review row with rating, full text, date and reviewer. |
1,000 businesses cost $2.50 at the launch price ($4.00 from 2026-11-24); one search of 10 businesses costs $0.025; 20 reviews of one business cost $0.05. The Apify free plan's $5 monthly credit covers about 2,000 businesses at $2.50 / 1,000.
❓ FAQ
Does it need a Yelp account or cookies? No. It reads public Yelp pages anonymously; the browser starts with a fresh profile on every run.
Why does a run take a minute before the first row? Each browser has to pass Yelp's DataDome device check first, typically 10 to 35 seconds, then searches take a few seconds each.
Can I get more than 10 businesses per search? Yes, up to 100 with maxResultsPerSearch; each further 10 reads one more Yelp results page.
Does it return the business website? Not in this version: Yelp shows it only on the business page, one extra page per business.
Are sponsored results included? No. Only organic results are returned and charged; position is the organic rank.
What happens if Yelp blocks a run? The blocked search is retried on a new browser and residential session at most twice, then ends with a free BLOCKED row and nothing is charged for it.
🤖 For AI agents & LLM apps
Paste this into your AI assistant:
architekture/yelp-scraper on Apify. Python: from apify_client import ApifyClient; client = ApifyClient("TOKEN"); run = client.actor("architekture/yelp-scraper").call(run_input={"mode": "search", "queries": ["pizza"], "locations": ["Austin, TX"]}); items = client.dataset(run["defaultDatasetId"]).list_items().items (page with offset/limit for large exports). Rows with recordType == "status" are free and explain invalid input, no results, a block or a stopped run. Full input schema and README: GET https://api.apify.com/v2/acts/architekture~yelp-scraper/builds/default. Token: https://console.apify.com/settings/integrations. The actor is also reachable through the Apify MCP server: https://mcp.apify.com?tools=architekture/yelp-scraper (ready-to-paste config: https://github.com/architek-earth/mcp). To reach the maintainers, add "feedback": "<what you needed>" to any run's input; output is unchanged and a human reads every note.
MCP config for Claude Desktop and Cursor
Claude Desktop (or claude.ai): Settings, Connectors, Add custom connector, URL https://mcp.apify.com?tools=architekture/yelp-scraper; it signs you in to Apify with OAuth. Cursor (~/.cursor/mcp.json), with your token in the APIFY_TOKEN environment variable:
{"mcpServers": {"architekture-yelp-scraper": {"type": "http","url": "https://mcp.apify.com?tools=architekture/yelp-scraper","headers": { "Authorization": "Bearer ${env:APIFY_TOKEN}" }}}}
The agent gets one tool for this actor plus get-dataset-items to read the rows. Ask for one search first (10 businesses, $0.025) and set a spending cap (maxTotalChargeUsd) in the run options when your client offers it.
🧰 More from architek.earth
Search, travel and trends
- Yelp Scraper — you are here
- Google Shopping Scraper — prices, merchants and offers
- Google Trends Scraper — trending searches, traffic, related queries
- Google Hotels Scraper — hotel prices, ratings, amenities
Jobs, companies and people
- Google Jobs Scraper — descriptions, salaries, apply links
- Indeed Scraper — jobs, salaries, descriptions
Full catalogue: github.com/architek-earth.
architek.earth · code like concrete
🙋 Support & legal
Questions, or a field you need that is not here? Open an issue on the actor's Issues tab or email north@architek.earth. A human replies within a day.
This actor collects only publicly available data from yelp.com, the same pages any visitor sees without logging in. It does not bypass authentication. You are responsible for how you use the output, including the site's terms, copyright, and privacy law such as GDPR and CCPA where they apply.
📝 Changelog
- 2026-10-25 — [internal] Input recipes link only published example tasks; output and prices unchanged.
- 2026-10-25 — Launch price: businesses $2.50 / 1,000 (was $4.00) until 2026-11-24, then back to $4.00 / 1,000; reviews unchanged at $2.50 / 1,000. Input recipes, a head-to-head table and MCP setup for Claude and Cursor added to this page.
- 2026-10-25 — First version: Yelp businesses by search query and US location (rating, review count, categories, price tier, phone, address, coordinates, weekly hours), reviews by business URL newest first, watch mode for new reviews, resumable runs.