Yelp Scraper: Business Data, Reviews, Hidden Reviews & Menus avatar

Yelp Scraper: Business Data, Reviews, Hidden Reviews & Menus

Pricing

from $0.40 / 1,000 reviews

Go to Apify Store
Yelp Scraper: Business Data, Reviews, Hidden Reviews & Menus

Yelp Scraper: Business Data, Reviews, Hidden Reviews & Menus

Scrape Yelp business profiles, ratings, hours, phone, website and photos, plus every review, including the not recommended and removed reviews Yelp hides from the public page. Search any city by keyword, pull full menus with prices. No Yelp account or proxy setup.

Pricing

from $0.40 / 1,000 reviews

Rating

0.0

(0)

Developer

Sourabh Kumar

Sourabh Kumar

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

3

Monthly active users

12 hours ago

Last modified

Features

Limited permissions

Share

Yelp scraper: reviews, hidden reviews, business data, search and more

Get Yelp data six ways: reviews, the reviews Yelp hides, business details, keyword search, photos and menus. Paste Yelp business links or a keyword and a city, press Start, and download a clean spreadsheet.

From $0.50 per 1,000 reviews (from 12 November 2026; $3.00 per 1,000 results until then). No proxy setup, no browser, no Yelp account needed.

Works on any Yelp business in any country: United States, Canada, United Kingdom, France, Germany, Australia and the rest.


Top use cases


Pick a mode

Set What to scrape (mode), then fill the section the mode needs: Business URLs for five modes, Search by keyword and location for search. The other sections are ignored.

You wantmodePaste into
Public reviews, with ratings, text and owner repliesreviewsbusinesses (Yelp business links)
The reviews Yelp hides: not recommended and removednotRecommendedReviewsbusinesses
Phone, website, address, hours, star breakdown, amenities, health scorebusinessbusinesses
Businesses for a keyword in a city, with rank and adssearchsearchTerms + location
The whole photo gallery, full sizephotosbusinesses
Restaurant menus with prices, every tabmenubusinesses

Every mode can be scheduled. Turn on Only new reviews and a daily run becomes a review monitor.


Input fields

OptionFieldUsed byDefaultWhat it does
What to scrapemodeallReviewsPicks one of the six modes
Business URLsbusinessesall except searchnoneYelp business links from any country, the short name from the link, or Yelp's business ID
Search termssearchTermssearchnoneOne or more keywords, for example dentist
LocationlocationsearchnoneA city, neighbourhood or postal code, for example San Francisco, CA
Add full business detailsenrichsearchoffAdds phone, website, hours and the star breakdown to each result
Review ordersortByreviewsMost relevantRELEVANCE_DESC, DATE_DESC, DATE_ASC, RATING_DESC or ELITES_DESC
Star ratingsratingsreviewsall starsKeep only these stars, as "1" to "5"
Review languageslanguagesreviewsEnglishPick one or more languages, or all for every language the business has
Only reviews containing this textqueryreviewsnoneKeep reviews that mention a word; overrides order and stars
Only new reviewsdeltareviewsoffReturn only reviews not delivered by an earlier run
Storage name for Only new reviewsdeltaStoreNamereviewsyelp-deltaKeep it the same across scheduled runs; change it to start over
Maximum results per businessmaxReviewsPerBusinessreviews, hidden reviews, photos, menu0 (all)Caps each business
Maximum results in totalmaxItemsall0 (all)Ceiling for the whole run; in search it is split evenly across your terms
ProxyproxyConfigurationallApify proxyLeave as is; no setup needed

Why this Yelp scraper?

  • 🕵️ The hidden reviews: the not recommended and removed sets, to full depth, which most scrapers only mention.
  • 📚 Every review: no depth cap, even on businesses with thousands of reviews. English by default, or any language Yelp has, or all of them.
  • 🔔 Only new reviews: scheduled runs return just what appeared since last time, so you never pay twice.
  • 📍 Search with real ranks: Yelp's organic position and which results are ads, plus the place Yelp actually searched.
  • 🍽️ Whole menus: every tab (Lunch, Dinner, Drinks), with each price option, like glass and bottle.
  • 💸 Pay only for results: rows that report a problem and repeats are never charged.

The reviews Yelp hides

Yelp does not show every review it has. A large share get pushed into a "not recommended" section that almost nobody clicks, and a second set gets removed outright for breaking Yelp's terms of service. Neither is counted in the star rating on the page.

The numbers are not small. One San Francisco restaurant shows roughly 12,900 public reviews. Underneath it sits another 4,400 or so marked not recommended, plus about 1,800 Yelp removed. If you are tracking a brand, that is a third of the conversation you cannot see.

This actor returns both sets, to full depth, with a reviewStatus field telling you which is which.


1. Reviews: every public review, in any language

Paste Yelp business links (or the short name from the link).

Get one row per review: star rating, text, date, photos, reactions, the reviewer's profile and Elite status, and the owner's reply.

OptionFieldDefaultWhat it does
Review ordersortByMost relevantNewest, oldest, highest rated or Elite reviewers first
Star ratingsratingsallKeep only these stars, for example 1 and 2
Review languageslanguagesEnglishPick one or more languages, or all for every language the business has
Only reviews containing this textquerynoneKeep reviews that mention a word, like "refund" or a dish
Only new reviewsdeltaoffReturns only reviews not delivered by an earlier run with the same storage name
Maximum results per businessmaxReviewsPerBusiness0 (all)Caps each business

Languages: Yelp shows one language at a time and defaults to English, so a business outside the US can show less than half its reviews. Pick the languages you want, or All languages for everything the business has. Each row's language field says which language it is in.

With a limit and several languages, newest, oldest and highest rated order give the true top results across them. Any other order shares the limit by language size, so a small limit still covers each language. Without a limit, reviews come language by language, largest first.

Input

{
"mode": "reviews",
"businesses": ["https://www.yelp.com/biz/gary-danko-san-francisco"],
"sortBy": "DATE_DESC",
"maxReviewsPerBusiness": 200
}

Output (one real row, selected fields)

{
"recordType": "review",
"businessName": "Gary Danko",
"businessUrl": "https://www.yelp.com/biz/gary-danko-san-francisco",
"reviewId": "WE6Z_U3FuNOAi0mLDIB0dw",
"reviewUrl": "https://www.yelp.com/biz/gary-danko-san-francisco?hrid=WE6Z_U3FuNOAi0mLDIB0dw",
"rating": 2,
"text": "This score reflects overall value not necessarily the food quality or service. I was here last in 2014 and the service was impeccable. ...",
"language": "en",
"publishedAtLocal": "2026-10-27T07:52:30-07:00",
"ohNoCount": 1,
"photoCount": 0,
"ownerReplyText": null,
"reviewerName": "Kurt L.",
"reviewerLocation": "San Francisco, CA",
"reviewerReviewCount": 135,
"reviewerFriendCount": 42,
"reviewerIsElite": false
}

publishedAtLocal is the business's local time, never UTC.


Paste Yelp business links.

Hidden reviews always include every language. Yelp offers no language filter for them.

Get one row per hidden review, tagged with reviewStatus: notRecommended (filtered by Yelp, full text kept) or adminRemoved (taken down by Yelp, text stripped). The two kinds come interleaved, so even a small cap returns both.

OptionFieldDefaultWhat it does
Maximum results per businessmaxReviewsPerBusiness0 (all)Caps each business, both kinds together
Maximum results in totalmaxItems0 (all)Ceiling for the whole run

Input

{
"mode": "notRecommendedReviews",
"businesses": ["https://www.yelp.com/biz/zuni-cafe-san-francisco"],
"maxReviewsPerBusiness": 200
}

Output (one real row, selected fields)

{
"recordType": "notRecommendedReview",
"businessName": "Zuni Café",
"businessUrl": "https://www.yelp.com/biz/zuni-caf%C3%A9-san-francisco-3",
"reviewId": "bBtNnGQA98QmayL0fCFPhw",
"reviewStatus": "notRecommended",
"isRecommended": false,
"rating": 1,
"text": "Doesn't Zuni Cafe have any connection whatsoever to the Zuni Tribe. Does the Zuni tribe know their name is being used for commercial purpose...",
"publishedAtLocal": "2026-10-20T20:02:22-07:00",
"reviewerName": "Louise A.",
"reviewerLocation": "San Carlos, AZ",
"reviewerReviewCount": 1
}

3. Business details: contacts, hours and ratings

Paste Yelp business links.

Get one row per business: rating and the full star breakdown, price range, categories, phone, website, address, coordinates, hours per day, whether it is open now, amenities, health inspection score and popular items.

OptionFieldDefaultWhat it does
Business URLsbusinessesnoneOne row per business; the same business given twice is returned and charged once
Maximum results in totalmaxItems0 (all)Returns the first N businesses of your list

Input

{
"mode": "business",
"businesses": ["https://www.yelp.com/biz/gary-danko-san-francisco"]
}

Output (one real row, selected fields)

{
"recordType": "business",
"businessName": "Gary Danko",
"businessUrl": "https://www.yelp.com/biz/gary-danko-san-francisco",
"rating": 4.5,
"reviewCount": 6153,
"ratingCount1": 124,
"ratingCount5": 4234,
"priceRange": "$$$$",
"categories": "New American, French, Cocktail Bars",
"phone": "(406) 626-8866",
"website": "http://garydanko.com",
"addressLine1": "800 N Point St",
"city": "San Francisco",
"postalCode": "94109",
"latitude": 37.8058724,
"longitude": -122.4205943,
"hoursMonday": "5:00 PM - 10:00 PM",
"isClosedPermanently": false,
"healthScore": "Pass",
"healthScoreDate": "2026-06-04T07:00:00.000Z",
"popularItems": "Roast Maine Lobster | Lemon Pepper Duck Breast | Seared Filet of Beef | Chocolate Souffle | ..."
}

phone is the number Yelp shows on the business page.


4. Search: businesses by keyword and city

Paste one or more search terms and a location (a city, neighbourhood or ZIP code).

Get one row per business: name, rating, review count, price, categories, address, Yelp's organic rank and whether the listing is an ad. Turn on Add full business details (enrich) to merge in phone, website and hours.

OptionFieldDefaultWhat it does
Search termssearchTermsnoneOne or more keywords
LocationlocationnoneCity, neighbourhood or postal code
Add full business detailsenrichoffAdds phone, website, hours and the star breakdown to each row
Maximum results in totalmaxItems0 (all)Split evenly across your terms

Input

{
"mode": "search",
"searchTerms": ["plumbers"],
"location": "San Francisco, CA",
"maxItems": 25
}

Output (one real row, selected fields)

{
"recordType": "searchResult",
"businessName": "Ace Plumbing & Rooter",
"businessUrl": "https://www.yelp.com/biz/ace-plumbing-and-rooter-san-francisco-13",
"searchTerm": "plumbers",
"searchLocation": "San Francisco, CA",
"resolvedLocation": "San Francisco, CA",
"searchRank": 1,
"searchSlot": 6,
"isAd": false,
"rating": 4.7,
"reviewCount": 1499,
"categories": "Plumbing, Water Heater Installation/Repair, Hydro-jetting",
"city": "San Francisco",
"neighborhood": "SoMa"
}

searchRank is Yelp's organic position (null on ads); searchSlot is the position on the page counting ads. resolvedLocation is the place Yelp actually searched: type "Springfield" and this tells you whether you got Missouri or Illinois.


Paste Yelp business links.

Get one row per photo: full size image link, thumbnail, caption, uploader, upload date, and whether it came with a review.

OptionFieldDefaultWhat it does
Maximum results per businessmaxReviewsPerBusiness0 (all)Caps photos per business, in Yelp's gallery order
Maximum results in totalmaxItems0 (all)Ceiling for the whole run

Input

{
"mode": "photos",
"businesses": ["https://www.yelp.com/biz/ruby-king-bakery-oakland-3"],
"maxReviewsPerBusiness": 300
}

Output (one real row, selected fields)

{
"recordType": "photo",
"businessName": "Ruby King Bakery",
"photoId": "4GSJ-eZYY4ayuUwILx3WBA",
"photoUrl": "https://s3-media0.fl.yelpcdn.com/bphoto/4GSJ-eZYY4ayuUwILx3WBA/o.jpg",
"thumbnailUrl": "https://s3-media0.fl.yelpcdn.com/bphoto/4GSJ-eZYY4ayuUwILx3WBA/348s.jpg",
"caption": "August 2024",
"width": 4032,
"height": 3024,
"uploadedBy": "Roderick T.",
"uploadedAt": "2026-07-01T22:26:09Z",
"isFromReview": false,
"format": "JPEG"
}

width and height are the size of the original upload; the full size link Yelp serves is at most 1,000 pixels on its long side.


6. Menu: every tab, every price

Paste Yelp business links.

Get one row per menu item: tab, section, name, price, every price option, currency, description, and the item's review and photo counts.

OptionFieldDefaultWhat it does
Maximum results per businessmaxReviewsPerBusiness0 (all)Caps menu items per business
Maximum results in totalmaxItems0 (all)Ceiling for the whole run

Input

{
"mode": "menu",
"businesses": ["https://www.yelp.com/biz/the-cheesecake-factory-san-francisco-12"]
}

Output (one real row, selected fields)

{
"recordType": "menuItem",
"businessName": "The Cheesecake Factory",
"menuName": "From the Bar",
"menuSection": "Prosecco",
"itemName": "Ruffino, Italy",
"itemPrice": "14.50",
"itemPriceVariants": "Glass: $14.50 | Bottle: $51.00",
"itemCurrency": "USD",
"itemUrl": "https://www.yelp.com/menu/the-cheesecake-factory-san-francisco-12/item/ruffino-italy"
}

itemPrice is the first price; itemPriceVariants lists them all when an item has more than one. menuName is the menu tab, null when the menu has no tabs.


Use it from an AI agent (Claude, ChatGPT, MCP)

Connect Claude, ChatGPT, Cursor or any MCP client to Apify's MCP server with this scraper as a tool:

https://mcp.apify.com?tools=sourabhbgp/yelp-scraper

Then ask in plain words. The agent fills in the input, and you pay the same per result. For example:

  • "Get the 100 newest 1 and 2 star Yelp reviews for Brenda's French Soul Food in San Francisco."
  • "Show me the reviews Yelp hid for Zuni Café."
  • "Find 30 dentists in Austin, TX on Yelp with their phone numbers and websites."
  • "What are the prices on The Cheesecake Factory's Yelp menu?"

Notes for the agent:

QuestionModeMinimum input
What do customers say about a business?reviewsbusinesses (+ sortBy, ratings, query)
Which reviews did Yelp hide or remove?notRecommendedReviewsbusinesses
Phone, website, hours, rating of a businessbusinessbusinesses
Which businesses match a keyword in a place?searchsearchTerms + location (+ enrich for contacts)
Photos of a businessphotosbusinesses
Menu items and pricesmenubusinesses
  • Keep the cost small: set maxReviewsPerBusiness (reviews, hidden reviews, photos, menu) or maxItems (any mode, the only limit search uses) to what the question needs, for example 50. maxItems is shared across all businesses, so the first ones can use it up. To cover every business, set maxReviewsPerBusiness as well.
  • Business input: a Yelp business link from any country (https://www.yelp.com/biz/<name>), the short name from that link, or Yelp's 22 character business ID. A name typed in words is not accepted here: use search to find the business first.
  • Ratings filter: ratings takes strings "1" to "5"; empty means all stars. A query overrides sortBy and ratings.
  • Key output fields: reviewStatus separates notRecommended from adminRemoved; removed reviews have no text. searchRank is null on ads. publishedAtLocal is the business's local time.
  • Reading the result: the status message starts with a code when something did not go as asked: [U_...] means the input (U_NOT_FOUND, U_NO_RESULTS, U_CHARGE_CAP, U_TIMEOUT), [E_...] means our side, and a run that ends short starts with Partial:. The RUN_SUMMARY record in the run's key-value store lists every input with its own outcome.
  • Time: a few hundred reviews take under a minute; a full photo gallery of 15,000 images takes about 20 minutes; search with full details takes about 7 seconds per business.

How much does it cost?

You pay per result, and each result is charged once. Rows that report a problem and the same business supplied twice are never charged.

Until 12 November 2026: $3.00 per 1,000 results of any kind, plus $0.005 per run.

From 12 November 2026, each kind of result has its own price, lower on higher Apify plans:

What you getFree planStarterScaleBusiness
Review$1.00$0.50$0.45$0.40
Photo$1.00$0.50$0.45$0.40
Menu item$1.50$0.75$0.65$0.60
Search result$2.00$1.00$0.90$0.80
Hidden review$2.00$1.00$0.90$0.80
Business details (also search with full details)$3.00$1.50$1.35$1.20

Prices are per 1,000. Each run also costs $0.005 to start.

  • Free plan: your $5 monthly credit covers about 5,000 reviews, or 1,660 business details.
  • Starter plan ($29): about 58,000 reviews a month, or 19,300 business details.

Limitations

  • Removed reviews have no text: Yelp strips the body, and often the reviewer's name, when it removes a review. You get the rating, the date and the reviewer's profile.
  • Hidden reviews come lowest rated first: that is Yelp's own order within each kind, and it cannot be changed.
  • Search returns about 200 businesses per query: Yelp caps a search at 240 result slots and repeats some listings inside them. The run says when it reached that limit; more specific searches reach further.
  • Sorting by Elite reviewers fails on very large businesses: Yelp's own website breaks on that sort above a few thousand reviews. Any other sort works at any size.
  • Searching reviews for a word overrides the sort and star filters: Yelp returns text matches in its own relevance order.
  • Menus exist only where the business published one on Yelp: a business with no Yelp menu, or a menu linked off Yelp, gets a free row saying so.

FAQ

How do I scrape Yelp without coding?

Pick a mode, paste Yelp business links (or a keyword and a city for search), and press Start. Download the results as Excel, CSV or JSON.

Can I get only new reviews since my last run?

Yes. Turn on Only new reviews and keep the same storage name across scheduled runs. The first run collects everything up to your limit; later runs return only reviews posted since. Older reviews beyond that limit are not collected later, so to get a business's full history, run the first time without a limit.

Can I get reviews in other languages?

Yes. Reviews are in English by default. To get others, pick them in Review languages, or choose All languages for every language the business has, including Spanish, German, French, Chinese, Japanese and more.

How many reviews can I get from one business?

All of them. There is no depth cap and no page limit, even on businesses with thousands of reviews.

Not recommended reviews were filtered by Yelp's software but are still on the site, with their full text. Removed reviews were taken down for breaking Yelp's terms, and Yelp deletes the text. Both arrive in the same mode, labelled by reviewStatus.

Do I need a proxy or a Yelp account?

No. It works out of the box and never logs in.

You get a free row explaining the problem, and the run finishes normally.

Can I use it from code or an AI agent?

Yes. Call it through the Apify API, or connect it to an AI agent through Apify's MCP server (see above).

It collects only what Yelp shows any visitor, with no login. How you use the data is your responsibility: review text and reviewer names are personal data in many places, so store or publish them only with a lawful basis under GDPR, CCPA or your local equivalent.

Your feedback

Something missing or wrong? Open an issue.