Yelp Business Scraper - Most Comprehensive avatar

Yelp Business Scraper - Most Comprehensive

Pricing

from $0.08 / 1,000 places

Go to Apify Store
Yelp Business Scraper - Most Comprehensive

Yelp Business Scraper - Most Comprehensive

🔥 ~$0.1/1K places 🔥 Look up any Yelp business by URL or alias. Returns comprehensive business data including categories, hours, location, photos, attributes, and more. Optionally fetches all reviews inline.

Pricing

from $0.08 / 1,000 places

Rating

5.0

(1)

Developer

Kai

Kai

Maintained by Community

Actor stats

1

Bookmarked

127

Total users

26

Monthly active users

2 hours ago

Last modified

Share

Get the Yelp data of any business, or find businesses by location, category, and keyword. Each business has 77 fields: rating and review counts by star, address, coordinates, phone, hours, categories, attributes, photo counts, and more. Add the reviews (21 fields each, with reactions, photos, and owner replies) and the photos and videos of each business in the same record.

Look up one business or search a whole city. A one-business run takes about 3 to 5 seconds. A 20-business search takes about 12 seconds, and 300 reviews of one business take about 17 seconds. Start with a Yelp URL, an alias, an encrypted business ID, or a location. $0.10 per 1,000 businesses and $0.02 per 1,000 reviews.

What can you do with it?

  • Local lead lists. Search a category in a city, such as plumbers in Austin. Every business comes with its name, address, phone, categories, rating, review count, hours, and coordinates.
  • Competitor benchmarking. Compare ratings, the split of reviews by star, review counts, price range, and review languages across nearby businesses.
  • Site and market research. Search around a point with a radius. Sort by distance, rating, or review count to see how many competitors are close.
  • Reputation monitoring. Collect the newest reviews of your places every day or week. Use the review id to skip reviews that you already have.
  • Complaint finding. Read only the 1- and 2-star reviews, or only the reviews that mention a word such as "parking".
  • Sentiment and topic analysis. Feed review text, ratings, languages, reactions, and reviewer details into your models.
  • Reviewer analysis. Read the Elite reviews first. See how many reviews, friends, and photos each reviewer has.
  • Owner reply audits. Find the reviews that got a reply and read the replies.
  • Listing audits. Compare the name, address, phone, hours, and categories on Yelp with your own records. Collect photos and videos with their captions.

What data does it extract?

DataWhen you get it
Business ID, alias, name, rating, review count, reviews by star, reviews by language, main photoEvery business
Address, coordinates, country code, phoneEvery business that has them. A business without a listed phone gets an empty phone.
Categories with their parent categories, price range, closed flagEvery business that has them
Opening hours for each day, open-now flag, and when Yelp last updated the hoursEvery business that has hours
Attributes and services as yes/no or list values, such as parking, credit cards, and alcoholWhen Yelp lists them
Photo counts by tab, highlight videos, review snippets, and the number of reviews that Yelp does not recommendWhen Yelp has them
Website, menu and order links, claimed flag, year established, specialties, summary, popular dishes, menu items, owner profile, health inspections, licenses, and about 30 moreOnly when Yelp serves its business web page to the run. See "Why are many fields null?".
Reviews: ID, rating, full text, translation, language, dates, reviewer details, votes, reactions, photos, videos, owner reply, and tagsWhen includeReviews is on
Photos and videos: links, thumbnails, captions, sizes, uploader, likes, and the review that holds themWhen includePhotos is on

Yelp does not have every field for every business. A field without data is null or [].

Quick start

  1. Enter a Yelp URL, an alias, or an encrypted ID in Business URLs, Aliases, or IDs. Or enter a Location to search.
  2. Turn on Include Reviews if you want reviews, and set Max Reviews Per Business. Use 0 to get all reviews.
  3. Click Start. Download the results as JSON, CSV, Excel, or HTML.

The same input as JSON:

{
"businesses": ["https://www.yelp.com/biz/gary-danko-san-francisco"],
"includeReviews": true,
"maxReviewsPerBusiness": 20
}

Examples by use case

One business with its profile only. This is the fastest and cheapest run:

{
"businesses": ["gary-danko-san-francisco"]
}

A lead list. The 100 best-rated plumbers in Austin:

{
"category": "plumbers",
"location": "Austin, TX",
"searchSort": "rating",
"maxSearchResults": 100
}

Competitors near a site. Coffee shops within 3 km of a point, nearest first:

{
"category": "coffee",
"latitude": 30.2672,
"longitude": -97.7431,
"searchRadius": 3,
"searchRadiusUnit": "km",
"searchSort": "distance",
"maxSearchResults": 50
}

Businesses and their reviews in one run. 20 pizza places with their 10 newest reviews each:

{
"searchTerm": "pizza",
"location": "San Francisco, CA",
"maxSearchResults": 20,
"includeReviews": true,
"maxReviewsPerBusiness": 10
}

Every review of a place:

{
"businesses": ["WavvLdfdP6g8aZTtbBQHTw"],
"includeReviews": true,
"maxReviewsPerBusiness": 0
}

Monitor new reviews. Run this on a schedule. Yelp has no date filter, so read the newest reviews and use the id field to skip reviews that you already have:

{
"businesses": ["gary-danko-san-francisco", "zuni-cafe-san-francisco"],
"includeReviews": true,
"maxReviewsPerBusiness": 50,
"sortBy": "DATE_DESC"
}

Find complaints. Only 1- and 2-star reviews:

{
"businesses": ["gary-danko-san-francisco"],
"includeReviews": true,
"maxReviewsPerBusiness": 100,
"ratings": ["1", "2"]
}

Reviews about a topic. Reviews that mention parking:

{
"businesses": ["gary-danko-san-francisco"],
"includeReviews": true,
"maxReviewsPerBusiness": 50,
"query": "parking"
}

Reviews from Elite reviewers first:

{
"businesses": ["gary-danko-san-francisco"],
"includeReviews": true,
"maxReviewsPerBusiness": 50,
"sortBy": "ELITES_DESC"
}

Reviews in another language. Set languageCode to a code such as de, fr, or es. You get the reviews that people wrote in that language:

{
"businesses": ["gary-danko-san-francisco"],
"includeReviews": true,
"maxReviewsPerBusiness": 50,
"languageCode": "de"
}

Photos and videos with captions:

{
"businesses": ["gary-danko-san-francisco"],
"includePhotos": true,
"maxPhotosPerBusiness": 100
}

Compare places. One run reads all the places. The dataset keeps the order of your list:

{
"businesses": [
"gary-danko-san-francisco",
"zuni-cafe-san-francisco",
"tartine-bakery-san-francisco"
]
}

Choose the businesses

Use one of two ways. Direct lookup reads the businesses that you list. Search finds businesses for you.

What you haveUseRequired input
A Yelp URL, an alias, or an encrypted business IDDirect lookupbusinesses
A city, postal code, address, or neighborhoodSearch by locationlocation
A point on a mapSearch by coordinateslatitude and longitude

If you set location, latitude and longitude, or searchTerm, the Actor runs a search and ignores businesses. To do both, start two runs.

Look up businesses

Put one or more entries in businesses. You can mix the three kinds in one run.

  • URL. A business page link, such as https://www.yelp.com/biz/gary-danko-san-francisco. These forms work too:

    • m.yelp.com and regional sites such as yelp.co.uk and yelp.ca.
    • A link without https://.
    • A link with a query string or a sub-page such as /photos.
    • A link that your browser copies with a percent-encoded name, such as https://www.yelp.com/biz/lol%C3%B3-san-francisco-4.

    The Actor reads the alias from the link and asks yelp.com for it.

  • Alias. The last part of the URL, such as gary-danko-san-francisco.

  • Encrypted business ID. 22 characters, such as WavvLdfdP6g8aZTtbBQHTw. Each business record has its ID in the id field. A business ID can return fewer optional fields than a URL or an alias, so use a URL when you can.

The Actor reads the businesses in your order, so the dataset keeps that order. A repeated business is read again and saved again. A business that fails does not stop the others. The log shows Failed to process and the reason, and the run saves the other businesses. A link that is not a business page, such as a search page, fails in the same way.

Search for businesses

  • Where. Set location to a city, postal code, address, or neighborhood. Or set latitude and longitude together. You can set both.
  • What. searchTerm is a keyword, such as pizza, dentist, or a business name. category is a Yelp category alias, such as restaurants, plumbers, or coffee. A search needs a location or a coordinate pair. A searchTerm without a location fails the run with a message that says so. An unknown category alias fails the run too.
  • How many. maxSearchResults is 20 by default. Yelp shows at most 240 results for one search, the same as its 24 web pages of 10, so a higher number gives the same result as 240. A search cannot return more businesses than Yelp lists for it.
  • Order. searchSort is default (Yelp's best match), distance, rating, or review_count.
  • Radius. Use searchRadius with latitude and longitude. The Actor drops results outside the radius. Yelp searches at most 25 miles (about 40 km) around the point. searchRadiusUnit is km or miles.

Yelp can return the same business on two result pages. The Actor saves it once, so a search with 240 results usually gives about 220 businesses. To find more businesses, split the area into smaller searches, add a category, or run again with another searchSort. A search with no matches ends as succeeded with an empty dataset, and the log shows a warning.

Add reviews and media

Add to each businessTurn onSet the maximum with
ReviewsincludeReviewsmaxReviewsPerBusiness (default 20, 0 for all)
Photos and videosincludePhotosmaxPhotosPerBusiness (default 20, 0 for no limit)

Reviews are a list in the reviews field of each business. The Actor does not save a business as complete when a review or media section you asked for cannot be read.

maxPhotosPerBusiness counts photos and videos together. With 0, a business with more than 3,000 photos and videos can fail, and the Actor does not save it.

Filter the reviews

Filters are combined. A review must match every filter that you set. Inside one filter, a review can match any of the values.

  • ratings. Any combination of 1 to 5. You can use strings or numbers.
  • query. Text that the reviews must match. Yelp then orders the reviews by relevance, and it can ignore sortBy and ratings.
  • languageCode. The language that the reviews are written in. The default is en, so you get only English reviews. The reviewCountsByLanguage field of each business lists its languages with counts. For a language other than en, translatedText holds Yelp's translation when Yelp has one.

Yelp does not recommend some reviews. The Actor does not return them. The notRecommendedReviewCount field of each business has their number.

Choose the review order

sortBy sets the order. The default is DATE_DESC.

ValueOrder
DATE_DESCNewest first.
DATE_ASCOldest first.
RATING_DESCFive-star reviews first.
RATING_ASCOne-star reviews first.
ELITES_DESCReviews from Elite reviewers first.

A non-empty query uses relevance order for every sortBy value.

Input reference

Give businesses, or a search with a location or a coordinate pair.

FieldTypeDefaultDescription
businessesstring[][]Yelp URLs, aliases, or 22-character encrypted business IDs. Repeated entries stay in order and are saved separately.
searchTermstringnoneKeyword, such as coffee, dentist, or a business name. A search also needs a location or a coordinate pair.
locationstringnoneCity, postal code, address, or neighborhood. Required for a search unless you set both coordinates.
latitudenumbernoneFrom -90 to 90. Needs longitude.
longitudenumbernoneFrom -180 to 180. Needs latitude.
categorystringnoneYelp category alias used to filter a search, such as restaurants. It does not start a search.
maxSearchResultsinteger20Maximum businesses from a search, from 1. Yelp shows at most 240 results for one search.
searchSortstringdefaultdefault, distance, rating, or review_count.
searchRadiusnumbernoneSearch radius for a search with coordinates. A value of 0 gives no result unless a business is at the exact point. Yelp searches at most 25 miles.
searchRadiusUnitstringkmkm or miles.
includePhotosbooleanfalseAdd the photos and videos of each business.
maxPhotosPerBusinessinteger20Maximum photos and videos together for each business. 0 means no limit.
includeReviewsbooleanfalseAdd the reviews of each business.
maxReviewsPerBusinessinteger20Maximum reviews for each business. 0 collects all available reviews.
sortBystringDATE_DESCDATE_DESC, DATE_ASC, RATING_DESC, RATING_ASC, or ELITES_DESC.
ratingsstring[] or number[]all ratingsAny combination of 1, 2, 3, 4, and 5.
querystringnoneText that returned reviews must match. Uses relevance order.
languageCodestringenLanguage that the reviews are written in, such as en, de, or fr.
proxyConfigurationobjectApify Proxy enabledOptional connection settings managed by Apify.

Repeated filter values are accepted. Unknown input fields are ignored. A value with the wrong type, such as a text maxSearchResults, fails before the run starts.

Output

Each item in the dataset is one business. The Overview table shows the name, alias, rating, review count, price, phone, address, city, state, coordinates, and the open and closed flags. A field without data is null or [].

reviews is in the item only when includeReviews is on. businessPhotos and businessVideos are lists when includePhotos is on. Without it they are null.

Fields by topic

  • Identity. ID, alias, name, main photo, and alternate names.
  • Rating. Rating, review count, and the number of reviews for each star level and each language. The number of reviews that Yelp does not recommend.
  • Location and contact. Address, coordinates, country code, phone, neighborhood, and service area.
  • Hours. Opening hours for each day, open-now and closed-today flags, special hours, and when Yelp last updated the hours.
  • Classification. Categories, category details, and the parent categories of each category.
  • Attributes and services. Attributes with yes/no, single, or list values. Ambiance, specialties, and summary.
  • Business details. Claimed flag, year established, owner profile, website, menu and order links, menu items, popular dishes, health inspections, licenses, and notices.
  • Media. Photos, videos, photo counts by tab, highlight videos, and the main photo.
  • Reviews. The reviews of the business, when you ask for them.
  • Run. The UTC time at which the Actor read the business.

Business example

This example is Gary Danko with two reviews, one photo, and one video removed to keep it short. Square brackets mark values removed from the documentation. In this run Yelp did not serve its business web page, so the fields that need the page are null. The next section lists them.

Why are many fields null?

Yelp has two sources for a business. Its data service gives the fields in the example above. Its business web page gives 40 more fields, and the menu page gives menu. Yelp blocked the web page for every run that we tested with the default Apify Proxy. The Actor then saves the business with every field that the data service gives, and the page fields stay null. When the page loads, the Actor fills them.

These fields need the business web page: closedUntil, isClaimed, isYelpAdvertiser, isMultiloc, hasStorefrontAddress, yearEstablished, location, meteredPhoneNumber, specialties, summary, alternateNames, ambiance, logo, externalResources (the website, menu, and order links), yelpMenu, serviceArea, messaging, onlineOrdering, media, searchStats, reviewHighlights, healthInspections, verifiedLicenses, attributes, menuVerbiage, consumerAlert, bizOwnerProfile, dataFreshness, isCommunityQuestionsEnabled, isConnectEnabled, isItemListSchemaEnabled, communityQuestionCount, postCount, containerBusiness, categoryGroups, associatedSearches, internalLinks, jobPricing, jobs, popularDishes, and menu. The fields categories, isClosed, phoneNumber, operationHours, and priceRange come from the data service too, so they are filled either way.

Field groups

GroupRoot fields
Identity and statusid, alias, name, alternateNames, isClosed, closedUntil, isClaimed, isYelpAdvertiser, isMultiloc, hasStorefrontAddress, yearEstablished, containerBusiness
Ratingrating, reviewCount, reviewCountsByRating, reviewCountsByLanguage, notRecommendedReviewCount, reviewHighlights, reviewSnippets
Location and contactformattedAddress, coordinates, countryCode, location, serviceArea, phoneNumber, formattedPhone, meteredPhoneNumber
HoursoperationHours, regularHoursRaw, upcomingSpecialHours, regularHoursLastUpdated, isCurrentlyOpen, isClosedToday
Classificationcategories, categoryDetails, categoryAncestry, categoryGroups, priceRange
AttributesauthoritativeAttributes, attributes, ambiance, specialties, summary
Business detailsexternalResources, bizOwnerProfile, businessOwnerVideo, healthInspections, verifiedLicenses, consumerAlert, dataFreshness, jobs, jobPricing, costGuides, partnerData, messaging, onlineOrdering
Menumenu, yelpMenu, menuVerbiage, popularDishes
Yelp page datalogo, logoHasPurchased, media, searchStats, associatedSearches, internalLinks, isCommunityQuestionsEnabled, isConnectEnabled, isItemListSchemaEnabled, communityQuestionCount, postCount
MediaprimaryPhotoUrl, photoTabs, videoCarouselItems, businessPhotos, businessVideos
Reviewsreviews
RunscrapedAt

Field notes

  • id is the encrypted business ID. Use it to remove repeated rows when you join the results of two searches. reviews[].id is the review ID. Use it to skip reviews that you already have.
  • reviewCountsByRating has five numbers for the ratings 1 to 5, in that order.
  • phoneNumber and formattedPhone hold the phone number that Yelp lists. They are empty text when the business has no phone on Yelp. For some businesses that advertise on Yelp, Yelp lists a tracking number that forwards calls.
  • regularHoursRaw[].rawMinutes gives the opening and closing times as minutes from Monday 00:00. For Monday 5:00 PM to 10:00 PM it is [1020, 1320].
  • isCurrentlyOpen and isClosedToday are true or false at the time of the run. regularHoursLastUpdated is display text, such as "Updated 1 month ago". It is not a date.
  • authoritativeAttributes[].type is bool (read boolValue), single (read singleValue), or multi (read multiValue).
  • photoTabs gives the photo counts that Yelp shows for each tab, such as Food, Drink, and Inside. These counts do not depend on includePhotos.
  • reviews[].createdAt is a UTC time. reviews[].localDateTime is the local time of the business with its offset.
  • reviews[].language is the language of the review. translatedText is Yelp's translation, or null.
  • reviews[].reactions[].type is a reaction such as HELPFUL, THANKS, or LOVE_THIS. feedback holds the Useful, Funny, and Cool votes.
  • reviews[].author.eliteYear is the latest Elite year, or null. isEliteAllStar is true for an Elite All-Star.
  • reviews[].ownerReply is the reply text of the business owner, or null.
  • reviews[].expertRecognition is the reviewer's expert badge for the category of the business, such as "Bakery" with the number of reviews behind it.
  • reviews[].previousReviewIds lists the IDs of the same reviewer's earlier reviews of this business. It is empty for most reviews.
  • Photos, videos, and reviews keep Yelp's order.

FAQ

How many reviews can I get?

There is no fixed limit. Set maxReviewsPerBusiness to 0 to get all the reviews that Yelp recommends in the language you chose. 300 reviews take about 17 seconds. Yelp adds and removes reviews all the time, so your count can differ by a few from the count on the Yelp page.

Why did I get fewer reviews than maxReviewsPerBusiness?

maxReviewsPerBusiness is an upper limit. The business can have fewer reviews. languageCode is en by default, so reviews in other languages are not included. Your ratings filter and your query can remove more. Yelp also keeps some reviews out of the recommended list. Their number is in notRecommendedReviewCount.

Why are many fields null?

Yelp blocked its business web page for every run that we tested with the default Apify Proxy. See "Why are many fields null?" above for the list of fields. Everything else is filled, and the run is not an error.

How do I find the URL, alias, or ID?

Open the business on Yelp. The URL is https://www.yelp.com/biz/ followed by the alias. You can copy the whole URL. The 22-character ID is in the id field of every result. A search or a first lookup gives you the IDs for later runs.

How do I get only the new reviews?

Yelp has no date filter. Run the Actor on a schedule with the default newest order. Set maxReviewsPerBusiness higher than the number of new reviews between two runs. Use reviews[].id to remove the reviews that you already have.

Why does a search return fewer businesses than maxSearchResults?

A search cannot return more businesses than Yelp lists for it. Yelp shows at most 240 results for one search, and some of them are repeats. The Actor saves each business once, so a full search usually gives about 220 businesses. A radius removes the businesses outside it, and Yelp searches at most 25 miles around a point. Try a larger radius, a wider location, or no category. To get more than one search allows, split the area into smaller searches or run each searchSort.

Why do I see the same business twice?

One search saves each business once. A business can show twice when your businesses list has it twice, or when you join the results of two searches. Remove the repeats with the id field.

What happens if a business fails?

The Actor saves the other businesses and shows Failed to process with the reason in the log. If every business fails, the run still ends as succeeded with an empty dataset. A search that cannot complete stops the run with an error and does not report an empty result.

Can I search and look up businesses in one run?

No. When you set a location, coordinates, or a search term, the Actor runs a search and ignores businesses. Start one run for each.

A feature or field that I need is missing. What can I do?

Tell us in the Issues tab. Describe what you need and give an example business.

Where can I report a problem?

Open an issue in the Issues tab. Include the run ID and the input, so that we can reproduce it.

Similar Actors