Yelp Scraper
Scrape Yelp businesses and reviews through Yelp's official Fusion API. Get rating, review count, price, phone, address, GPS and text. Bring your own key.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
searchQueries,query,location(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.003 per business = $3 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Business returned | Charged per business returned (blocked/empty not charged). | $0.003 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-04, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
searchQueries | Listing searches. Each entry is "{term} in {location}", e.g. "coffee in San Francisco", "plumbers in Austin, TX". Use this OR the single query + location fields below. | array |
query | A single search term, e.g. "coffee", "dentist", "pizza". Combine with the Location field below. Ignored if Search queries is used. | string |
location | City / area for the single search term above, e.g. "San Francisco", "Austin, TX", "10001". | string |
businessUrls | Yelp business page URLs (https://www.yelp.com/biz/...) to scrape for full detail + reviews. Use this for detail mode. | array |
businessSlugs | Yelp business slugs (the part after /biz/, e.g. "blue-bottle-coffee-san-francisco-7") to scrape for full detail + reviews. | array |
countryCode | Two-letter country code. Yelp is geo-aware, so use US for US searches and GB, CA and so on for other Yelp regions. | string |
maxItems | Maximum number of businesses to collect across all inputs (search paginates in batches of 10). Note: on a search row, only name, yelpUrl and slug are guaranteed, rating, reviewCount, category, price, phone, address, city, state, zip, lat and lng can be null when Yelp's structured data is missing and the DOM fallback is used. Use businessUrls/businessSlugs (detail mode) for complete records. | integer |
maxReviews | For business URL/slug detail mode: how many reviews to include per business (author, rating, text, date). 0 = no reviews. Listing search rows never include reviews. | integer |
slackConnector | Optional. Post a summary of the scrape (count + top 5 businesses + dataset link) to Slack when the run finishes. Authorize a Slack connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default), results are always saved to the dataset regardless. | string |
slackChannel | Channel for the Slack summary (only used if a Slack connector is set), e.g. "#leads". Defaults to #general. | string |
notionConnector | Optional. Write each scraped business as a page into your Notion when the run finishes, great for turning leads into a CRM. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default), results are always saved to the dataset regardless. | string |
notionParentId | Optional. The Notion data source ID of the database to write businesses into (only used if a Notion connector is set). Leave empty to create the pages privately in your workspace instead. | string |
yelpApiKey | Your free Yelp Fusion API key (create one at https://www.yelp.com/developers/v3/manage_app and paste the API Key, not the Client ID). Yelp's public pages are protected by DataDome and cannot be scraped reliably, so the API is the only way to get real results. Without a key the run returns one labelled sample row and is not charged. | string |
What you get
A structured dataset — each result includes fields like:
nameratingreviewCountcategorypriceyelpUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Maps & Local Lead Generation
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
Google Maps Reviews Scraper
Scrape Google Maps reviews: rating, full text, exact date, reviewer, owner reply and photos. Set a date cutoff. No API key. $0.27 per 1,000.
Yandex Maps Scraper
Scrape Yandex Maps business listings: name, address, coordinates, rating, reviews, phone, website and hours. No API key. $0.40 per 1,000 places.
Google Maps Scraper
Scrape Google Maps places and reviews. Business name, category, address, rating, GPS coordinates and place ID. $0.27 per 1,000 rows.
Google Reviews Monitor — Multi-Location Alerts & Reports
Watch Google reviews for every location on a schedule. Get only the new ones, rating-drop alerts in Slack and AI reply drafts. $1.00 per 1,000 reviews.
2GIS Places Scraper
Scrape 2GIS places: name, category, address, phone, email, website, rating and hours. Russia, the CIS, the UAE and Cyprus only. $0.50 per 1,000 places.
2GIS Reviews Scraper
Scrape 2GIS reviews by place URL or city: rating, text, author, date, photos, owner replies. No API key. $0.50 per 1,000.
Where this tool sits
- Categories
- Maps & Local Lead Generation Reviews & Reputation Data
- Platforms
- Yelp
Yelp Scraper: businesses, ratings and contact details from Yelp's own API
Search Yelp by term and city, or name business pages directly, and get structured rows back: name, category, star rating, review count, price band, phone, full address, postcode and coordinates.
It runs on Yelp's official Fusion API, and the key is yours. Yelp gives one away free in about two minutes. Without it the run returns one labelled sample row so you can see the shape, and nothing more.
| Input | Searches like coffee in San Francisco, or Yelp business URLs and slugs |
| Output | One row per business, with up to three reviews attached |
| Ceiling | 1,000 businesses per run |
| Account needed | Your own free Yelp Fusion API key |
| Price | $3.00 per 1,000 businesses, flat on every plan |
🍽️ What Yelp Scraper does
You give it searches in the form {term} in {location}, or a single term and location in their own boxes, or the URLs of business pages you already know. It walks the results in pages of 50 and delivers one row per business, deduped by Yelp's own business id.
Every row carries the lead-list fields people actually want: phone, street address, city, state, postcode, latitude and longitude, alongside the rating and review count. Ask for reviews and each row gains a reviews array with the author, star rating, excerpt, date and permalink.
The key stays yours and is marked secret, so it is not stored with the run input.
📥 What you give it
{
"searchQueries": ["coffee in San Francisco", "plumbers in Austin, TX"],
"maxItems": 50,
"maxReviews": 3,
"yelpApiKey": "your-fusion-api-key"
}
| Field | Default | What it is |
|---|---|---|
searchQueries | box starts at coffee in San Francisco | One search per line, each written {term} in {location}. |
query | none | A single search term, used with location. Ignored when searchQueries is filled. |
location | none | City, area or postcode for the single term above. |
businessUrls | none | Full https://www.yelp.com/biz/... links, for businesses you already know. |
businessSlugs | none | The part after /biz/, like blue-bottle-coffee-san-francisco-7. |
maxItems | 50 | Businesses across all inputs, up to 1,000. |
maxReviews | 0 | Reviews to attach per business. Yelp returns at most three, whatever you put here. |
yelpApiKey | none | Your own free key from Yelp's developer site. Marked secret. |
countryCode | US | Only used as the location when a search entry has no in {place} part. It does not otherwise change the results. |
proxyConfiguration | Apify's default | Optional, and best left alone. The run goes to Yelp's API, which does not need it. |
A URL without yelp.com/biz/ in it is dropped silently, with no row to tell you. Check the links before a large run.
📤 What you get back
There is no keyed run in this actor's recent history to quote from, so this is the labelled sample row the actor itself returns when no key is supplied, with its explanatory note field left out. A real row carries the same fields with source set to yelp-fusion-api:
{
"ok": true,
"_sample": true,
"name": "Sample Coffee Bar",
"yelpUrl": "https://www.yelp.com/biz/sample-coffee-bar-san-francisco",
"slug": "sample-coffee-bar-san-francisco",
"category": "Coffee & Tea",
"rating": 4.5,
"reviewCount": 128,
"price": "$$",
"phone": "(415) 555-0100",
"address": "123 Sample St, San Francisco, CA 94103",
"city": "San Francisco",
"state": "CA",
"zip": "94103",
"lat": 37.7749,
"lng": -122.4194,
"isAd": false,
"businessId": "sample-business-id",
"source": "sample",
"reviews": []
}
| Field | What it is |
|---|---|
businessId | Yelp's own id. Stable, and the dedupe key used inside a run. Use it across runs too. |
slug | Yelp's alias, the part after /biz/. Feed it straight back in as a businessSlugs entry. |
category | Every category title Yelp lists, joined with commas. |
price | Yelp's band, $ to $$$$, or null when the business has none. |
address | The display address lines joined into one string. city, state and zip are also separate. |
reviews | Up to three entries, each with author, rating, text, date and url. Empty when maxReviews is 0. |
isAd | Always false on this path. Yelp's API does not return sponsored placements. |
source | yelp-fusion-api on a real row, sample on the keyless sample. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it | Charged |
|---|---|---|
| A business | ok: true and a businessId | yes |
| The keyless sample | _sample: true | no |
| A diagnostic | ok: false and an errorCode | no |
| Code | What it means |
|---|---|
BAD_INPUT | No search input at all, or Yelp rejected the key. Paste the API Key, not the Client ID. |
NO_RESULTS | The search ran and matched no businesses. Try a broader term or a wider area. |
RATE_LIMITED | Your key hit its Yelp daily limit or asked for too much too fast. |
SERVER_ERROR | Yelp's API answered with an error status. |
PARSE_ERROR | Yelp's API answered with something that was not JSON. |
NETWORK | Yelp's API could not be reached. |
Rows arrive at the end. Every search finishes before anything is written, so a run with several queries shows an empty dataset until it is done. If one search fails partway, the run reports that failure and delivers nothing rather than a partial set, so keep runs to a handful of searches.
▶️ How to run it
1. Create a free key at Yelp's developer site and copy the API Key. 2. Open Yelp Scraper and click Try for free. 3. Put one search per line into Search queries, each written {term} in {location}. 4. Paste your key into Yelp Fusion API key, set Max businesses, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$3.00 per 1,000 businesses, which is $0.003 each. Flat on every Apify plan, no volume tiers.
You pay per business row delivered. Reviews attached to a row are included, duplicates are dropped before they reach you, and the keyless sample row and diagnostic rows are not billed as businesses. Yelp's own API is free at the volumes most people run.
💡 What people use it for
- Building a call list for a trade in a city, with phone and address already on the row.
- Mapping where a category clusters, using
latandlngstraight into a map tool. - Tracking a set of locations' ratings and review counts over time, keyed on
businessId. - Pulling the top few reviews for a shortlist of places to read what people actually say.
🚧 What it does not do
- It does not include a Yelp key. The key is free, but it is yours to create and yours to paste
in.
- Three reviews per business, maximum. Yelp's API returns three excerpts and no more, so a
higher maxReviews changes nothing. For deep review history, Yelp is not the source for it here.
- Review text is an excerpt, not the full review, and there is no owner reply.
- No photos, no menus, no opening hours, no attributes.
- The Slack and Notion delivery options in the input do not currently send anything. The fields
are there, results are always in the dataset, and nothing is posted or written to those apps.
countryCodedoes not change the results. It only fills in the location when a search entry
has no in {place} part.
- The result depth stops at 1,000 because Yelp's search does. Narrow the term or the area rather
than raising the number.
- Duplicates are removed after the cap is applied, so a run across overlapping searches can come
back a little short of maxItems.
🧭 Which local business scraper do you need?
| If you want | Use |
|---|---|
| Yelp businesses with contact details | This one |
| Google Maps places, hours and attributes | Google Maps Scraper |
| Every review for a Google Maps place | Google Maps Reviews Scraper |
| Reviews plus AI-drafted replies, on a schedule | Google Reviews Monitor |
| Software vendor reviews instead of local businesses | Capterra Reviews Scraper |
❓ Questions people ask
How do I get a Yelp key? Create an app at Yelp's developer site and copy the API Key field. It takes a couple of minutes and costs nothing. Pasting the Client ID by mistake is the usual cause of a BAD_INPUT row.
Why only three reviews? That is Yelp's own limit on what the API returns per business.
Can I mix searches and business URLs in one run? Yes. Both feed the same list and share maxItems.
Why is price empty on some rows? Because Yelp has no price band for that business. Same for phone on businesses that never listed one.
Can I schedule it? Yes. A weekly run on the same searches, keyed on businessId, shows you what opened, closed or moved.
Is scraping Yelp data legal? This uses Yelp's own API under their developer terms, so read those for what you may do with the data. Reviews carry personal data, which GDPR and similar laws cover. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the run ID and the search you used. Never send your API key. The errorCode and hint on the diagnostic row usually name the problem on their own.