Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Yelp Scraper icon

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.

156 runs on Apify $0.003 per business ($3 / 1,000)
Run this in the cloudRun on Apify →

Maps & Local Lead Generation

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchQueries, query, location (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export 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 forWhenPrice
Business returnedCharged 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

FieldWhat it doesType
searchQueriesListing 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
queryA single search term, e.g. "coffee", "dentist", "pizza". Combine with the Location field below. Ignored if Search queries is used.string
locationCity / area for the single search term above, e.g. "San Francisco", "Austin, TX", "10001".string
businessUrlsYelp business page URLs (https://www.yelp.com/biz/...) to scrape for full detail + reviews. Use this for detail mode.array
businessSlugsYelp business slugs (the part after /biz/, e.g. "blue-bottle-coffee-san-francisco-7") to scrape for full detail + reviews.array
countryCodeTwo-letter country code. Yelp is geo-aware, so use US for US searches and GB, CA and so on for other Yelp regions.string
maxItemsMaximum 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
maxReviewsFor 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
slackConnectorOptional. 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
slackChannelChannel for the Slack summary (only used if a Slack connector is set), e.g. "#leads". Defaults to #general.string
notionConnectorOptional. 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
notionParentIdOptional. 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
yelpApiKeyYour 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:

nameratingreviewCountcategorypriceyelpUrl

Export 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 iconMaps & Local Lead Generation

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.

1 use cases

Yandex Maps Scraper iconMaps & Local Lead Generation

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.

1 use cases

Google Maps Scraper iconMaps & Local Lead Generation

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.

28 use cases

Google Reviews Monitor — Multi-Location Alerts & Reports iconMaps & Local Lead Generation

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.

4 use cases

2GIS Places Scraper iconMaps & Local Lead Generation

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.

Ready to run — no setup

2GIS Reviews Scraper iconMaps & Local Lead Generation

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.

Ready to run — no setup

See all Maps & Local Lead Generation →

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.

InputSearches like coffee in San Francisco, or Yelp business URLs and slugs
OutputOne row per business, with up to three reviews attached
Ceiling1,000 businesses per run
Account neededYour 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"
}
FieldDefaultWhat it is
searchQueriesbox starts at coffee in San FranciscoOne search per line, each written {term} in {location}.
querynoneA single search term, used with location. Ignored when searchQueries is filled.
locationnoneCity, area or postcode for the single term above.
businessUrlsnoneFull https://www.yelp.com/biz/... links, for businesses you already know.
businessSlugsnoneThe part after /biz/, like blue-bottle-coffee-san-francisco-7.
maxItems50Businesses across all inputs, up to 1,000.
maxReviews0Reviews to attach per business. Yelp returns at most three, whatever you put here.
yelpApiKeynoneYour own free key from Yelp's developer site. Marked secret.
countryCodeUSOnly used as the location when a search entry has no in {place} part. It does not otherwise change the results.
proxyConfigurationApify's defaultOptional, 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": []
}
FieldWhat it is
businessIdYelp's own id. Stable, and the dedupe key used inside a run. Use it across runs too.
slugYelp's alias, the part after /biz/. Feed it straight back in as a businessSlugs entry.
categoryEvery category title Yelp lists, joined with commas.
priceYelp's band, $ to $$$$, or null when the business has none.
addressThe display address lines joined into one string. city, state and zip are also separate.
reviewsUp to three entries, each with author, rating, text, date and url. Empty when maxReviews is 0.
isAdAlways false on this path. Yelp's API does not return sponsored placements.
sourceyelp-fusion-api on a real row, sample on the keyless sample.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itCharged
A businessok: true and a businessIdyes
The keyless sample_sample: trueno
A diagnosticok: false and an errorCodeno
CodeWhat it means
BAD_INPUTNo search input at all, or Yelp rejected the key. Paste the API Key, not the Client ID.
NO_RESULTSThe search ran and matched no businesses. Try a broader term or a wider area.
RATE_LIMITEDYour key hit its Yelp daily limit or asked for too much too fast.
SERVER_ERRORYelp's API answered with an error status.
PARSE_ERRORYelp's API answered with something that was not JSON.
NETWORKYelp'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 lat and lng straight 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.

  • countryCode does 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 wantUse
Yelp businesses with contact detailsThis one
Google Maps places, hours and attributesGoogle Maps Scraper
Every review for a Google Maps placeGoogle Maps Reviews Scraper
Reviews plus AI-drafted replies, on a scheduleGoogle Reviews Monitor
Software vendor reviews instead of local businessesCapterra 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.