Yelp Business Search & Review Scraper avatar

Yelp Business Search & Review Scraper

Pricing

from $0.49 / 1,000 results

Go to Apify Store
Yelp Business Search & Review Scraper

Yelp Business Search & Review Scraper

Search Yelp by keyword and location, or scrape specific business pages directly, to collect business details, ratings, categories, contact details, and customer reviews.

Pricing

from $0.49 / 1,000 results

Rating

0.0

(0)

Developer

Nimbryxo-studio

Nimbryxo-studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 days ago

Last modified

Features

Limited permissions

Share

Yelp Business Profiles & Review History Extractor

Yelp packs a lot into each business page: star ratings, price signals, weekly hours, photo galleries, contact details, and years of customer reviews. This actor turns that material into structured business records, with the review feed paged well beyond the handful of reviews Yelp shows by default.

What this actor does

  • Finds businesses by keyword and location, or by a Yelp search URL that already contains filters.
  • Looks up exact businesses from a Yelp business URL, a bare alias such as prince-street-pizza-new-york-2, or a 22-character Yelp business ID.
  • Pages each business's review feed up to your chosen limit, including reviewer names, Elite years, photos, reactions, and owner replies.
  • Adds search metadata so you can tell organic ranking from sponsored placement and remove duplicate cards.
  • Omits empty fields at every level. A business that does not publish a website, price level, or owner reply simply has no such key in its record.
  • Writes an explicit status record when a business is missing, a page is blocked, or Yelp changes the data contract, so an empty dataset is never mistaken for a successful scrape.

Output per business

Each business is one dataset row. Reviews are nested under reviews.

FieldDescription
recordTypebusiness for a business row, status for a run status row
businessIdYelp's 22-character business ID
encIdThe same stable Yelp business ID, kept as a separate field for joins
aliasYelp URL slug, e.g. prince-street-pizza-new-york-2
nameBusiness name
categoriesArray of Yelp category titles
addressObject with streetAddress, addressLocality, addressRegion, postalCode, addressCountry, and formatted when supplied
cityCity name
stateState or region code
zipPostal code
countryTwo-letter country code
latLatitude
lngLongitude
ratingAverage star rating (number)
reviewCountReview total shown on the business profile
reviewsTotalReviews available in the public review feed, when it differs from reviewCount
pricePrice level such as $ or $$
phoneBusiness phone number
websiteBusiness website URL
hoursWeekly hours keyed by short day name, each value an array of time ranges
photosBusiness photo URLs, including the primary photo and gallery
urlYelp business page URL
isClosedWhether Yelp marks the business as closed
isClaimedWhether the business profile has been claimed
descriptionShort business summary from Yelp
reviewsArray of review objects, omitted when reviews are off or none are available
searchRankOrganic position in the search results, when found through search
sponsoredtrue when the business first appeared as a sponsored card
searchQueryKeyword that found the business
searchLocationLocation used for that search
searchCategoryCategory filter used for that search
sourceUrlSearch page or business URL the record came from
scrapedAtISO timestamp for the record

Review objects contain:

FieldDescription
idReview ID
ratingStar rating (1–5)
textFull review text
authorReviewer display name
authorIdReviewer ID
authorUrlReviewer profile URL
authorLocationReviewer location as shown by Yelp
authorReviewCountNumber of reviews on the reviewer's profile
dateReview date in UTC
dateLocalReview date in the business's local time
photosReview photo URLs
ownerReplyObject with text, author, and date when the business replied
eliteWhether the reviewer has an Elite year
eliteYearThe Elite year Yelp displays
languageReview language code
isFirstReviewWhether Yelp marks this as the reviewer's first review
checkInCountCheck-in count attached to the review
reactionsObject with useful, funny, and cool counts

Status records

When something prevents a business or search page from being collected, the dataset receives a row with recordType: "status":

  • status is not_found, blocked, api_drift, no_results, or invalid_input.
  • message explains what happened.
  • sourceUrl and businessId are included when known.
  • scrapedAt records when the status was written.

Legacy compatibility keys are also present when they have values: directUrl (same as url), bizId (same as alias), aggregatedRating (rating as text), priceRange (same as price), and images (same as photos). Review rows also keep isUsefulCount, isFunnyCount, and isCoolCount beside the reactions object.

Status rows are separate from business rows, so filter on recordType before loading the business records.

Input

FieldTypeDefaultDescription
modestringsearchsearch discovers businesses by keyword, category, or Yelp search URL; direct scrapes business URLs, aliases, or business IDs
searchQuerystringpizzaKeyword for mode=search
locationstringNew York, NYCity, neighborhood, or ZIP for mode=search
startUrlsarray[]Yelp search URLs in mode=search, or business URLs, aliases, and IDs in mode=direct
categoriesarray[]Yelp category aliases or names used to narrow a search
sortBystringrecommendedSearch ordering: recommended, rating, or reviewCount
pricearray[]Price levels $, $$, $$$, $$$$; empty keeps all
minRatingnumber0Drop businesses rated below this value (0–5)
maxItemsinteger50Maximum business records (1–500)
maxReviewsPerBusinessinteger20Maximum reviews per business (1–1000)
includeReviewsbooleantrueTurn off to skip review collection
reviewSortstringDATE_DESCDATE_DESC, DATE_ASC, RATING_DESC, RATING_ASC, RELEVANCE_DESC, or ELITES_DESC
reviewRatingsarray["5","4","3","2","1"]Star ratings to include
reviewLanguagestringenReview language code, or all to page every language Yelp reports
proxyConfigurationobjectApify Proxy AUTOOptional routing choice; the actor automatically uses a working route when Yelp blocks a request

mode is the only required field. mode=search needs a query, category, or search URL. mode=direct needs at least one business URL, alias, or ID.

{
"mode": "search",
"searchQuery": "ramen",
"location": "Seattle, WA",
"price": ["$$", "$$$"],
"minRating": 4,
"maxItems": 20,
"maxReviewsPerBusiness": 30,
"reviewSort": "DATE_DESC",
"reviewLanguage": "en"
}

Example: specific businesses by URL

{
"mode": "direct",
"startUrls": [
"https://www.yelp.com/biz/prince-street-pizza-new-york-2",
"https://www.yelp.com/biz/bar-lento-new-york"
],
"maxItems": 2,
"maxReviewsPerBusiness": 100,
"reviewSort": "RATING_DESC",
"reviewRatings": ["5", "4"]
}

Example: businesses and reviews in another language

{
"mode": "direct",
"startUrls": ["https://www.yelp.com/biz/bar-lento-new-york"],
"maxReviewsPerBusiness": 50,
"reviewLanguage": "all"
}

Example: profiles only

{
"mode": "search",
"searchQuery": "coffee",
"location": "Portland, OR",
"categories": ["coffee"],
"includeReviews": false,
"maxItems": 10
}

Use cases

  • Competitive benchmarking — compare ratings, review volume, price levels, and review themes across a set of local businesses.
  • Review monitoring — schedule runs against your own locations and watch new reviews, owner replies, and rating changes over time.
  • Lead research — collect phone numbers, websites, cities, and categories for businesses in a target market.
  • Voice-of-customer analysis — export hundreds of reviews per business with ratings, dates, languages, and reviewer context.
  • Location planning — map business density and quality across ZIP codes, neighborhoods, or categories.
  • Data enrichment — join Yelp business IDs, aliases, websites, and coordinates to an existing CRM or dataset.

FAQ

Do I need to supply a proxy? No. The actor starts with a direct request and automatically routes through Apify Proxy when Yelp blocks it. Leave proxyConfiguration at its default, or supply a country or custom proxy only when you need a specific route.

How many businesses can one search return? Yelp caps a single search at 240 businesses, displayed 10 at a time. maxItems can be as high as 500 across multiple queries or direct URLs, but each individual search stops at Yelp's 240-result ceiling.

How many reviews can I collect per business? Up to 1,000. The review feed is paged at 49 reviews per request, so a deep run uses several requests per business. Set maxReviewsPerBusiness lower for faster, cheaper runs.

Why is reviewsTotal sometimes lower than reviewCount? Yelp's profile count and its public review feed are not identical. The feed leaves out reviews Yelp does not recommend, so reviewsTotal can be slightly lower than the number shown on the page.

What does reviewLanguage: "all" do? The actor reads the language counts Yelp reports for the business and pages each language until the review limit is reached, de-duplicating by review ID. It can use several requests per business.

Why is a business or review field missing? Yelp does not publish every field for every business. Missing values are omitted rather than written as null, empty strings, or empty arrays.

What happens when Yelp changes its data format? The actor writes an api_drift status row with a message and the source URL, and the run status message reports the problem. It does not silently return an empty dataset.

Can I use a Yelp search URL with filters already in it? Yes. Put it in startUrls with mode=search; the actor keeps the URL's query parameters and pages from its existing start position.

Does this actor collect the reviews Yelp does not recommend? No. It collects the public review feed. Reviews outside that feed are not exposed, which is why the feed total can differ from the profile count.

Is this affiliated with Yelp? No. This is an independent third-party actor and is not endorsed by or affiliated with Yelp.