Yelp Scraper — Businesses, Reviews — $2.50/1K until 11-24 avatar

Yelp Scraper — Businesses, Reviews — $2.50/1K until 11-24

Pricing

from $2.50 / 1,000 delivered businesses

Go to Apify Store
Yelp Scraper — Businesses, Reviews — $2.50/1K until 11-24

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

architek.earth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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.

SourceMarketFromStandout 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. latitude and longitude were filled on 100 of 100 businesses in run TE39sMKs5JHGvgd1L, and hours on 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. incrementalMode with a stateKey delivers only reviews not delivered before: the rerun yhQmKESsL3dqwFMXF on 2 businesses found 20 known reviews and charged 0.
  • Organic results only. position is Yelp's organic rank; sponsored results are never returned or charged.
  • Resumable. A stopped run continues with the same stateKey: run TsQjNqIBIsA8Zy1rv resumed 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 actorThe field (11 Yelp actors in the store search)
Runs that did not succeed0% of 3 recorded canary runs (2026-10-25); 19 of 20 fresh browser sessions passed DataDome in the container gatemedian 0%, range 0–78%; 4 of 11 had failed runs (30-day store stats)
Rows per run10 businesses or 10 reviews per canary runnot published
Price$2.50 / 1,000 businesses (launch), $2.50 / 1,000 reviewsmedian $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 website is not included (it needs one extra Yelp page per business); priceRange is empty where Yelp shows no price tier (most service businesses: 41 of 100 businesses had one in run TE39sMKs5JHGvgd1L), and phone and hours are 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 BLOCKED row. Two blocked searches in a row stop the run as PARTIAL. A run that reaches its timeout stops with a free ACTOR_DEADLINE row and can be resumed with the same stateKey.
  • 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

ParameterTypeDefaultDescription
modeselectsearchsearch: queries x locations to business rows. reviews: business URLs to review rows.
queriesarray—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.
locationsarray—Search mode. US city and state, ZIP code or neighbourhood, e.g. Austin, TX.
maxResultsPerSearchinteger10Search mode. Organic businesses per search, 1 to 100 (10 per Yelp page; more reads the next pages).
businessUrlsarray—Reviews mode. 1 to 50 Yelp business pages, e.g. https://www.yelp.com/biz/home-slice-pizza-austin.
maxReviewsPerBusinessinteger20Reviews mode. Reviews per business, 1 to 1,000 (10 per Yelp page).
sortByselectnewestReviews mode. newest or relevance.
incrementalModebooleanfalseDeliver and charge only businesses or reviews this stateKey has not delivered before. Needs stateKey.
stateKeystring—Any name you choose, reused on every run of the same watch, or to resume a stopped run without re-charging.
feedbackstring—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.

FieldTypeMeaning
querystringBusiness rows: the query as you gave it.
locationstringBusiness rows: the location as you gave it.
positionnumberBusiness rows: Yelp's organic rank, from 1.
encidstringYelp's business id (on business and review rows); the dedupe key for businesses.
aliasstring, nullableYelp's business slug, e.g. home-slice-pizza-austin.
urlstring, nullableBusiness page, https://www.yelp.com/biz/<alias>.
namestring, nullableBusiness name.
ratingnumber, nullableStar rating (business rows: the average; review rows: the reviewer's stars).
reviewCountnumber, nullableNumber of reviews Yelp shows for the business.
categoriesarrayYelp category titles, e.g. ["Pizza", "Italian"].
priceRangestring, nullable$ to $$$$; empty when Yelp shows none.
phonestring, nullableFormatted phone number.
addressobjectline1, line2, line3, city, region, postalCode, formatted.
countrystring, nullableCountry code, US.
latitudenumber, nullableBusiness latitude.
longitudenumber, nullableBusiness longitude.
hoursobject, nullableThis week's opening hours by day, e.g. {"Mon": ["11:00 AM - 10:00 PM"]}; empty when the listing has none.
businessUrlstringReview rows: the business URL the review belongs to.
reviewIdstringReview rows: Yelp's review id; the dedupe and watch-mode key.
textstring, nullableReview rows: the full review text.
languagestring, nullableReview rows: language code, e.g. en.
createdAtstring, nullableReview rows: date and time in the business's time zone, ISO 8601.
authorNamestring, nullableReview rows: the reviewer's name as Yelp shows it, e.g. Chad E..
authorLocationstring, nullableReview rows: the reviewer's home town as Yelp shows it.
authorReviewCountnumber, nullableReview rows: how many reviews the reviewer has written.
scrapedAtstringWhen the row was collected (UTC, ISO 8601).
status, inputRef, messagestringStatus rows only: what happened, to which input, in words.
recordTypestring"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.

EventPriceWhat 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 reviewsOne 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

Jobs, companies and people

Full catalogue: github.com/architek-earth.

architek.earth · code like concrete

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.