๐Ÿฝ๏ธ Ultimate Yelp Scraper avatar

๐Ÿฝ๏ธ Ultimate Yelp Scraper

Pricing

from $4.99 / 1,000 results

Go to Apify Store
๐Ÿฝ๏ธ Ultimate Yelp Scraper

๐Ÿฝ๏ธ Ultimate Yelp Scraper

Ultimate Yelp Scraper extracts public business data including names, categories, ratings, reviews, addresses, phone numbers, websites, hours, and business URLs. Build structured datasets for local lead generation, market research, competitor analysis, and business discovery.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Yelp Business Scraper โ€” Reviews, Photos, Hours and Amenities

Ultimate Yelp Scraper extracts Yelp business listings as structured JSON โ€” ratings, price range, categories, address and coordinates, phone and website, hours, amenities, and the full paginated review feed with reviewer details. It also scrapes Yelp Collection and Event pages. Point it at business, search, collection or event URLs, or just give it a keyword and a location, and results save to your Apify dataset the moment each record is ready. Run it from the Actor's Apify Store page โ€” no coding required.

What is Ultimate Yelp Scraper?

Ultimate Yelp Scraper is an Apify Actor that navigates Yelp with a headless stealth browser, reads the same data a signed-out visitor sees, and returns it as clean JSON โ€” business details, reviews, photos, amenities, hours, Q&A, and the businesses/subscribers listed on Collection and Event pages. It does not require a Yelp account, login, or API key โ€” every field comes from Yelp pages that are publicly visible without signing in. It's built for developers, local-SEO and market-research teams, and data/AI engineers who need structured Yelp data without maintaining their own scraper or Yelp API integration.

What Yelp business data is publicly available to scrape?

Anyone who visits a Yelp business, search, collection, or event page without logging in can already see the fields listed below โ€” no Yelp account is required to view them.

Data CategoryPublicly AvailableRestricted (requires Yelp login / Yelp for Business account)
Business identity & contactName, categories, price range, phone, website, address, coordinatesโ€”
Ratings & review countsOverall rating, total review countโ€”
Review text & reviewer infoFull review text, rating, date, reviewer name, elite status, reaction countsSending a message to a reviewer, voting/reacting yourself
PhotosBusiness photo URLsUploading photos, tagging yourself in one
Hours, amenities & Q&AOperating hours, amenities/attributes, "Ask the Community" questionsPosting a new question or answer
Collections & EventsCollection business lists, event details and subscriber listsCreating or editing a collection, RSVPing to an event
Business analytics & inboxโ€”Owner-side traffic stats, lead/message inbox, ad performance (Yelp for Business login only)

Ultimate Yelp Scraper only returns publicly visible data โ€” what any visitor sees. Nothing behind a login wall.

What data can I extract with Ultimate Yelp Scraper?

Ultimate Yelp Scraper returns business identity and location fields, rating/review/media fields, and โ€” with Deep Detail Mode on โ€” amenities, about, Q&A and highlight fields, plus separate Collection and Event record shapes.

Field NameDescription
businessIdYelp's internal encoded business ID
typeRecord shape: business, collection, or event
urlCanonical Yelp URL for the business
titleBusiness name
addressObject: city, regionCode, addressLine1โ€“addressLine3, postalCode, formatted
coordinatesArray of {latitude, longitude}
categoriesArray of category names
phoneNumberFormatted phone number
websiteExternal business website URL (resolved from Yelp's outbound link)
reservationUrlReservation link, if Yelp exposes one
ratingOverall star rating
reviewCountTotal review count shown on Yelp
priceRangeYelp price tier, e.g. $$
isClaimedWhether the business owner has claimed the listing
isBusinessClosedWhether Yelp marks the business permanently closed
reviewsArray of review objects (see below)
mediaCountTotal photo count Yelp reports for the business
mediaArray of original-resolution photo URLs
operationHoursObject of day โ†’ hours string, e.g. {"Mon": "8:00 AM - 8:00 PM"}
amenitiesArray of amenity objects (Deep Detail Mode most reliable)
aboutAbout/history text shown on the business page
yearEstablishedYear the business states it was established
historyBusiness history text, if present
highlightsArray of highlight strings pulled from review highlights
questionsArray of "Ask the Community" question objects
searchUrlThe search URL that surfaced this business, if found via search
startUrlThe original Start URL this record came from

Business identity & location fields

businessId, title, url, address, coordinates, categories, phoneNumber, website, reservationUrl.

Ratings, review & media fields

rating, reviewCount, priceRange, isClaimed, isBusinessClosed, reviews, mediaCount, media, operationHours.

Each object in reviews carries: userName, userUrl, isElite, rating, date, review (full text), reviewLanguage, reviewLink, feedback (an object of Helpful/Thanks/Love this/Oh no reaction counts), and author (id, name, location, friendCount, reviewCount, businessPhotoCount, isElite, and photoUrls when the reviewer has a profile photo).

Amenities, about & Q&A fields (Deep Detail Mode)

amenities (array of single-key objects, e.g. {"wifi_options": "Free Wi-Fi", "isEnabled": true}), about, yearEstablished, history, highlights, questions (each {question, answer, user, answerDate}).

๐Ÿค– Add-on: Need additional Yelp-adjacent data?

Pair Ultimate Yelp Scraper with Shopify Store Leads Scraper if the businesses you're researching also run Shopify storefronts, or Zillow Property Details Scraper when you need the property records behind a business address. For turning a business's own site into text for an LLM pipeline, run its website field through Website Content Crawler.

How does Ultimate Yelp Scraper differ from the official Yelp Fusion API?

Yelp's own Fusion API returns basic business fields and up to three review excerpts per business behind a paid, approval-gated API key; Ultimate Yelp Scraper returns the full paginated review feed, the complete photo set, amenities/Q&A/about, and Collection/Event pages, started directly from a Yelp URL or keyword with no key required.

FeatureYelp Fusion APIUltimate Yelp Scraper
AccessRequires a Yelp developer account, an API key, and a selected commercial planRuns on Apify โ€” no Yelp account or API key
Reviews per businessUp to 3 review excerptsFull review feed, paginated, sortable by relevance/date/rating/elite
PhotosA small photos field on the business recordFull original-resolution photo set, page-limited if you choose
Search result capUp to 240 businesses per search requestGoverned by your own maxItems / endPage input
Amenities, about, Q&ANot part of the documented business fieldsIncluded via Deep Detail Mode
Collection & Event pagesNot part of the documented endpointsScraped directly as their own record types

Use the Fusion API when you're building a Yelp-branded integration under Yelp's own terms and three review excerpts are enough. Use Ultimate Yelp Scraper when you need full review text, the complete photo set, amenities/Q&A, or Collection/Event data in one JSON export.

How to use Ultimate Yelp Scraper

Ultimate Yelp Scraper runs on the Apify platform โ€” there's no separate signup or API key to obtain before starting a run.

  1. Open the Actor's page in Apify Console (or the Apify Store listing) and click Try for free / Start.
  2. Provide input: either paste one or more Yelp URLs into startUrls, or fill in search (and optionally searchLocation) โ€” no field is strictly required, but you need at least one of the two or the run exits immediately.
  3. Set optional filters โ€” maxItems to cap total results, deepDetail to include amenities/about/Q&A, includeReviews/includePhotos/includeAmenities to toggle each data type, and reviewSort to control review order.
  4. Start the run.
  5. Open the Output tab to browse results by section (Overview, Location & Hours, Reviews, Amenities & About, Media, Collections & Events), or export the full dataset as JSON or CSV.

How to scale to bulk business extraction

startUrls is an array โ€” paste business, search, collection, and event URLs in bulk (one per line, or upload a file) and the Actor works through all of them in a single run, deduplicating and dispatching each by URL type. For keyword-based bulk discovery instead of a URL list, use search + searchLocation with endPage to control how many search-result pages get paginated before businesses are queued for detail extraction.

What can you do with Yelp business data?

  • A local-SEO consultant auditing a client uses rating, reviewCount, and categories to benchmark a business against its Yelp presence over time.
  • A market researcher comparing neighborhoods uses priceRange, amenities, and address across many businesses to map competitive density by area.
  • A reputation-management team uses reviews[].rating, reviews[].date, and reviews[].review to track sentiment trends and flag repeat complaints.
  • An events marketer uses an Event record's fromDate, toDate, and subscribers to gauge interest before promoting a listing.
  • An AI engineer feeds about, amenities, and reviews[].review text into a RAG pipeline so an agent can answer natural-language questions about a business's offerings and reputation grounded in real Yelp data.

How does Ultimate Yelp Scraper handle rate limits and blocking?

Yelp fronts www.yelp.com with DataDome; a request without a browser-bound datadome cookie is hard-blocked. Ultimate Yelp Scraper handles this by launching one stealth browser session (camoufox) that passes Yelp's DataDome check, then issues every subsequent request as an in-page call from that same passed session instead of a bare HTTP client. If a bootstrap attempt is blocked, it automatically escalates the proxy tier โ€” no proxy โ†’ Apify datacenter proxy โ†’ Apify residential proxy โ€” retrying at least 3 times on residential, and once it reaches residential it stays there for the rest of the run. Every escalation is logged. Individual GraphQL calls that fail or get rate-limited are retried up to maxRetries times with a backoff delay; a business page that still can't be reached is skipped (logged) rather than failing the whole run.

โš ๏ธ Deep Detail Mode processes businesses one at a time (it navigates and renders each page to read amenities/about/Q&A/highlights from the DOM), so it is slower than the default; turning it off runs businesses concurrently via concurrency but returns amenities and about/Q&A only on a best-effort basis from the GraphQL response.

โฌ‡๏ธ Input

Ultimate Yelp Scraper takes no required fields โ€” provide either startUrls or search, or the run exits with nothing to do.

ParameterRequiredTypeDescriptionExample Value
startUrlsNoArrayOne or more Yelp URLs โ€” business (/biz/...), search (/search?...), collection (/collection/...), or event (/events/...) pages. Takes priority over search when non-empty.["https://www.yelp.com/biz/maxs-restaurant-glendale-glendale-3"]
searchNoStringKeyword to search for on Yelp. Used only when startUrls is empty."restaurants"
searchLocationNoStringCity/state or ZIP to search in. Used together with search."Los Angeles, CA"
maxItemsNoInteger (min 1)Stop after this many businesses/collections/events, combined across all inputs. Empty = no limit.10
endPageNoInteger (min 1)How many search-result pages (10 businesses/page) to paginate before stopping. Empty = keep paging until maxItems or results run out.3
deepDetailNoBoolean, default trueWhen on, navigates each business page to also capture amenities, about/history, Q&A, highlights, claimed status, and year established. When off, runs fully concurrent using only Yelp's GraphQL API.true
includeReviewsNoBoolean, default truePaginate and collect the full review feed. When off, only the first page of reviews shipped with the business detail is kept.true
reviewSortNoString, default "relevance_desc", enum: relevance_desc, date_desc, date_asc, rating_desc, rating_asc, elites_descOrder reviews are fetched in."date_desc"
startPageForReviewsNoInteger (min 1)Skip ahead to this review page (10 reviews/page) instead of starting from page 1.1
endPageForReviewsNoInteger (min 1)Stop after this review page. Empty = fetch every available review.5
includePhotosNoBoolean, default trueCollect original-resolution photo URLs for every business.true
endPageForPhotosNoInteger (min 1)Limit how many photo pages (~30 photos/page) to collect. Empty = collect every available photo.2
includeAmenitiesNoBoolean, default trueExtract amenities/attributes. Best-effort; most reliable with deepDetail on.true
proxyConfigurationNoObjectProxy settings. Default connects with no proxy and auto-escalates to datacenter then residential if DataDome blocks a bootstrap attempt. You can also force a tier here.{"useApifyProxy": false}
concurrencyNoInteger, default 5, min 1, max 20How many businesses to process in parallel (used only when deepDetail is off).5
maxRetriesNoInteger, default 3, min 1, max 10How many times to retry a single GraphQL/API call before giving up on it.3
maxBootstrapAttemptsNoInteger, default 12, min 1, max 30How many fresh browser/IP attempts to make while trying to pass Yelp's DataDome challenge before giving up the whole run.12
reloadsPerAttemptNoInteger, default 3, min 1, max 10How many times to reload the same page (same IP) before rotating to a fresh browser attempt.3

Example input

{
"startUrls": [
{ "url": "https://www.yelp.com/biz/maxs-restaurant-glendale-glendale-3" },
{ "url": "https://www.yelp.com/collection/user-abc123/my-favorite-spots" }
],
"search": "",
"searchLocation": "",
"maxItems": 25,
"endPage": 3,
"deepDetail": true,
"includeReviews": true,
"reviewSort": "date_desc",
"startPageForReviews": 1,
"endPageForReviews": 5,
"includePhotos": true,
"endPageForPhotos": 2,
"includeAmenities": true,
"proxyConfiguration": { "useApifyProxy": false },
"concurrency": 5,
"maxRetries": 3,
"maxBootstrapAttempts": 12,
"reloadsPerAttempt": 3
}

โฌ†๏ธ Output

Every run pushes typed JSON rows to your Apify dataset live, one per business, collection, or event, using the same field names in every run. The dataset also exposes six pre-built views (Overview, Location & Hours, Reviews, Amenities & About, Media, Collections & Events) plus an All Fields view, and the whole dataset can be exported as JSON or CSV.

Example output โ€” business record

{
"businessId": "znEKghXteVgPyaUboU1Dsg",
"type": "business",
"url": "https://www.yelp.com/biz/maxs-restaurant-glendale-glendale-3",
"title": "Max's Restaurant - Glendale",
"rating": 3.3,
"reviewCount": 1403,
"priceRange": "$$",
"categories": ["Filipino", "Asian Fusion", "Bars"],
"isClaimed": true,
"isBusinessClosed": false,
"yearEstablished": "1980",
"history": null,
"address": {
"city": "Glendale",
"regionCode": "CA",
"addressLine1": "740 N Brand Blvd",
"addressLine2": null,
"addressLine3": null,
"postalCode": "91203",
"formatted": "740 N Brand Blvd\nGlendale, CA 91203"
},
"coordinates": [{ "latitude": 34.15556, "longitude": -118.2554 }],
"highlights": ["Great for groups", "Family-friendly"],
"reviews": [
{
"userName": "Sarah K.",
"userUrl": "https://www.yelp.com/user_details?userid=abc123",
"isElite": true,
"rating": 5,
"date": "2026-07-08T00:12:15.000Z",
"review": "The crispy pata here is unbeatable...",
"reviewLanguage": "en",
"reviewLink": "https://www.yelp.com/biz/maxs-restaurant-glendale-glendale-3?hrid=xyz789",
"author": {
"id": "abc123",
"name": "Sarah K.",
"location": "Los Angeles, CA",
"friendCount": 42,
"reviewCount": 118,
"businessPhotoCount": 6,
"isElite": true
},
"feedback": { "Helpful": 4, "Thanks": 1, "Love this": 2, "Oh no": 0 }
}
],
"operationHours": { "Mon": "11:00 AM - 9:00 PM", "Tue": "11:00 AM - 9:00 PM" },
"amenities": [
{ "wifi_options": "Free Wi-Fi", "isEnabled": true },
{ "has_outdoor_seating": "Outdoor seating", "isEnabled": false }
],
"about": "A Filipino-American restaurant chain serving classic Filipino comfort food since 1980.",
"questions": [
{ "question": "Do they take large group reservations?", "answer": null, "user": null, "answerDate": null }
],
"website": "https://www.maxsrestaurant.com",
"phoneNumber": "(818) 500-1096",
"reservationUrl": null,
"mediaCount": 892,
"media": ["https://s3-media0.fl.yelpcdn.com/bphoto/abcXYZ123/o.jpg"],
"searchUrl": null,
"startUrl": "https://www.yelp.com/biz/maxs-restaurant-glendale-glendale-3"
}

Example output โ€” collection record

{
"type": "collection",
"url": "https://www.yelp.com/collection/user-abc123/my-favorite-spots",
"title": "My Favorite Spots",
"description": "Best places I've found around LA.",
"user": { "name": "Jordan T.", "avatar": "https://s3-media0.fl.yelpcdn.com/photo/abc/ls.jpg", "isElite": true },
"businesses": [
{
"url": "https://www.yelp.com/biz/maxs-restaurant-glendale-glendale-3",
"name": "Max's Restaurant - Glendale",
"reviewCount": 1403,
"rating": 3.3,
"image": "https://s3-media0.fl.yelpcdn.com/bphoto/abcXYZ123/o.jpg",
"priceRange": "$$",
"userReview": "'s 5-star review: Best sisig in town...",
"categories": []
}
]
}

Example output โ€” event record

{
"type": "event",
"url": "https://www.yelp.com/events/los-angeles-night-market",
"title": "LA Night Market",
"image": "https://s3-media0.fl.yelpcdn.com/photo/eventimg/o.jpg",
"categories": ["Food & Drink Yelp Events"],
"business": { "url": "", "name": null, "reviewCount": null, "rating": null, "location": "Los Angeles, CA 90012" },
"fromDate": "2026-09-12T18:00:00-07:00",
"toDate": "2026-09-12T23:00:00-07:00",
"price": "Free",
"description": "An evening night market featuring local vendors and live music.",
"subscribers": [
{ "name": "Alex R.", "avatar": "https://s3-media0.fl.yelpcdn.com/photo/abc/ls.jpg", "friendCount": null, "reviewCount": null, "isElite": false }
]
}

How does it work?

Ultimate Yelp Scraper launches a single headless stealth browser session (camoufox) and lands it on Yelp until it passes Yelp's DataDome bot check โ€” a request without that passed session's cookie is hard-blocked, so every subsequent request in the run reuses the same warmed browser context rather than a bare HTTP client. From there it calls Yelp's own internal GraphQL endpoints for business detail, reviews, hours, map data, and photos, and reads the rendered page DOM for fields Yelp only renders client-side (amenities, about, Q&A, highlights) when Deep Detail Mode is on. Yelp's internal GraphQL documentId signatures are re-extracted live from the page's own network traffic at the start of each run and used ahead of a hardcoded fallback, so a routine Yelp-side signature rotation doesn't require a code update. Only data visible to a signed-out visitor is returned, and the output field names stay the same regardless of how Yelp's page markup changes.

Integrations

Ultimate Yelp Scraper is an Apify Actor, so it's reachable anywhere Apify's API and client libraries reach โ€” direct API calls, the Apify CLI, or any automation platform that can make an HTTP request.

Calling Ultimate Yelp Scraper programmatically

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("scraper-engine/ultimate-yelp-scraper").call(run_input={
"search": "restaurants",
"searchLocation": "Los Angeles, CA",
"maxItems": 25,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["rating"])

Works in Go, Ruby, Node.js, cURL โ€” any language that can make an HTTP request.

No-code tools (n8n, Make, LangChain)

In n8n, use the HTTP Request node (or the Apify node) pointed at the Actor's run endpoint with your API token, then parse the returned dataset items. In Make, use an HTTP module the same way to trigger a run and poll for its dataset. In LangChain or a similar framework, wrap the Apify client call above as a tool so an agent can request fresh Yelp business data on demand.

Scraping publicly available web data is generally legal in the US and EU, and Ultimate Yelp Scraper only returns data any signed-out visitor can already see on Yelp. Business-identity fields (name, address, categories, price, hours) are business/product data, governed by Yelp's own Terms of Service rather than a personal-data regime. The reviews array is different: it carries reviewer names, profile details, and elite status, which are personal data under GDPR and CCPA โ€” you need a lawful basis to store and use that data, and reviewers may have rights to access or deletion requests under those regimes. Consult legal counsel if your use case involves bulk storage of personal data.

Frequently asked questions

What Yelp business fields does Ultimate Yelp Scraper return?

The top-level fields include title, rating, reviewCount, address, and reviews (with full review text and reviewer details) โ€” see What data can I extract above for the complete field list, including the separate Collection and Event record shapes.

Does Ultimate Yelp Scraper require a Yelp account or login?

No. It reads pages exactly as a signed-out visitor would, using a headless stealth browser to pass Yelp's DataDome check โ€” no Yelp account, login, or API key is needed.

How many businesses can I extract in one run?

As many as maxItems allows, or unlimited if you leave it empty โ€” the actual count also depends on how many results your search/searchLocation or startUrls combination actually surfaces on Yelp, and endPage controls how many search-result pages get walked.

What happens if a business page is blocked or can't be resolved?

If a business page can't be reached after maxRetries attempts, or its internal business ID can't be resolved, the Actor logs the failure and skips that one URL rather than stopping the whole run โ€” every other queued business, collection, or event still gets processed.

Can I scrape multiple Yelp businesses at once?

Yes โ€” pass an array of business, search, collection, or event URLs in startUrls (one per line, or upload a file), or use search + searchLocation to have the Actor discover businesses from Yelp's own search results.

Does Ultimate Yelp Scraper work with Claude, ChatGPT, and other AI agent tools?

It's callable as a standard Apify Actor run via HTTP by any agent framework that can make an API call โ€” wrap the run-and-fetch-dataset pattern shown in Integrations above as a tool function for your agent.

Does Ultimate Yelp Scraper return data in a format LLMs can use directly?

Yes. Every run returns typed, normalized JSON with the same field names across runs โ€” no HTML parsing or CSS selectors required. Pass it directly to an LLM prompt, index it into a vector store, or wire it into an agent tool.

What happens when Yelp changes its layout or anti-bot system?

The Actor's GraphQL documentId signatures are re-extracted live from Yelp's own network traffic on every run, so routine signature rotations are handled automatically; DOM-read fields (amenities, about, Q&A, highlights) are anchored on heading text rather than hashed class names to reduce breakage when Yelp restyles a page.

Can I use Ultimate Yelp Scraper without managing proxies or browser infrastructure?

Yes. It runs headless on Apify's infrastructure and handles the stealth browser bootstrap and proxy tier escalation (no proxy โ†’ datacenter โ†’ residential) automatically; you only need to touch proxyConfiguration if you want to force a specific tier yourself.

Which Yelp business fields work best for AI training data and RAG indexing?

For RAG, index about, reviews[].review, and questions[].question โ€” the highest-information free text fields. For structured training data, rating, reviewCount, priceRange, and categories are the most consistently populated fields across records, and all fields return as typed strings, numbers, booleans, or arrays.

Scraper NameWhat it extracts
Shopify Store Leads ScraperShopify store emails, phone numbers, addresses, and ratings
Zillow Property Details ScraperProperty price, Zestimate, tax history, schools, and photos
Y Combinator ScraperCompanies, founders, and open jobs from the YC directory
Website Content CrawlerClean text, Markdown, HTML, and metadata from any website

Your feedback

Found a bug or missing a field in Ultimate Yelp Scraper? Let us know at dev.scraperengine@gmail.com so we can fix it โ€” active issue reports directly shape what gets prioritized in the next update.