Yelp Business Scraper - Most Comprehensive
Pricing
from $0.08 / 1,000 places
Yelp Business Scraper - Most Comprehensive
๐ฅ ~$0.5/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
Maintained by CommunityActor stats
1
Bookmarked
108
Total users
21
Monthly active users
2 days ago
Last modified
Categories
Share
Yelp Business Scraper
Collect Yelp business profiles as structured data. Look up known businesses or discover businesses by location, category, or keyword. Each result is one item in the default dataset.
Business profile data
- Business identity, status, categories, rating totals, address, coordinates, contact details, and hours.
- Attributes, services, owner profile, menu items, popular dishes, ordering links, and business notices.
- Optional reviews with replies, reactions, tags, photos, and videos.
- Optional business photo and video collections with captions and source order.
Choose how to find businesses
| What you have | Use | Required input |
|---|---|---|
| A Yelp URL, alias, or encrypted ID | Direct lookup | businesses |
| A city, postal code, address, or neighbourhood | Text-location search | location |
| A point on a map | Coordinate search | latitude and longitude |
Add searchTerm or category to narrow a search. Search mode also supports a
radius and result sorting. Direct lookup keeps the supplied order and keeps
repeated targets as separate results.
Add reviews or media
| Add to each business | Turn on | Set the maximum with |
|---|---|---|
| Reviews | includeReviews | maxReviewsPerBusiness |
| Business photos and videos | includePhotos | maxPhotosPerBusiness |
Collect businesses
In Apify Console, select Input, paste an example, and select Run. Open the default Dataset when the run finishes.
Look up a business by URL:
{"businesses": ["https://www.yelp.com/biz/gary-danko-san-francisco"]}
Search by keyword and location:
{"searchTerm": "pizza","location": "San Francisco, CA","maxSearchResults": 10}
Search by coordinates:
{"searchTerm": "coffee","latitude": 37.7749,"longitude": -122.4194,"searchRadius": 2,"searchRadiusUnit": "km","maxSearchResults": 5}
Include reviews, photos, and videos:
{"businesses": ["WavvLdfdP6g8aZTtbBQHTw"],"includeReviews": true,"maxReviewsPerBusiness": 50,"includePhotos": true,"maxPhotosPerBusiness": 30}
Input
Provide at least one direct business reference, or search by location. Search requires either a text location or both latitude and longitude; searchTerm is optional. For combined inputs, direct and search fields may be combined. When a search location is present, the Actor uses search mode. Otherwise, it processes businesses in the supplied order. You can supply a text location and coordinates together. category filters a search, but it does not start one.
| Parameter | Type | Default | Behaviour |
|---|---|---|---|
businesses | string[] | [] | Yelp URLs, aliases, or 22-character encrypted business IDs. Duplicate references remain in input order and are emitted independently. |
searchTerm | string | none | Optional keyword, such as coffee, dentist, or a business name. A search also requires a location or a coordinate pair. |
location | string | none | City, postal code, address, or neighbourhood. It is required unless you supply both coordinates. |
latitude | number | none | Latitude from -90 through 90. It requires longitude. |
longitude | number | none | Longitude from -180 through 180. It requires latitude. |
category | string | none | Yelp category alias used as a search filter. |
maxSearchResults | integer | 20 | Maximum number of discovered businesses, from 1 through 1,000. |
searchSort | enum | default | default, distance, rating, or review_count. |
searchRadius | number | none | Non-negative search radius. A coordinate search keeps results at or within this distance. A value of 0 usually gives no result unless a business has the exact coordinates. |
searchRadiusUnit | enum | km | km or miles. |
includePhotos | boolean | false | Add business photos and videos. The input name is kept for compatibility. |
maxPhotosPerBusiness | integer | 20 | Maximum combined photos and videos for each business. The value must be non-negative. 0 removes this item limit, but media collection stops after 100 source pages of up to 30 items each. |
includeReviews | boolean | false | Add reviews to each business record. |
maxReviewsPerBusiness | integer | 20 | Maximum reviews for each business. The value must be non-negative. 0 means unlimited. |
sortBy | enum | DATE_DESC | DATE_DESC, DATE_ASC, RATING_DESC, RATING_ASC, or ELITES_DESC. |
ratings | string[] or number[] | ["1","2","3","4","5"] | Use strings or numbers from 1 through 5. Duplicate selections are preserved. Output ratings are numbers. |
query | string | "" | Search within reviews. A non-empty query uses relevance order. |
languageCode | string | en | Language value for the review request. |
proxyConfiguration | object | {"useApifyProxy":true} | Connection settings for the run. |
Complete input examples
Output
The default dataset contains one object for each business saved successfully.
Repeated direct inputs are preserved in order. Within each search page, repeated
business IDs are merged into their first occurrence. The Actor can keep the same
business again if Yelp returns it on another page.
reviews is present only when includeReviews is true. businessPhotos and
businessVideos are arrays when includePhotos is true; otherwise, they are
null.
Output at a glance
| Group | Main fields |
|---|---|
| Identity and status | id, alias, name, rating, reviewCount, priceRange, isClosed |
| Location and contact | formattedAddress, coordinates, phoneNumber, countryCode |
| Hours | operationHours, regularHoursRaw, upcomingSpecialHours, isCurrentlyOpen |
| Classification | categories, categoryDetails, categoryAncestry, authoritativeAttributes |
| Business details | specialties, summary, bizOwnerProfile, menu, externalResources |
| Media | businessPhotos, businessVideos, photoTabs, videoCarouselItems |
| Reviews | reviews, when includeReviews is on |
| Collection time | scrapedAt |
Root field types
| JSON type | Root fields |
|---|---|
| string | id, alias, name, scrapedAt |
string or null | primaryPhotoUrl, closedUntil, phoneNumber, meteredPhoneNumber, priceRange, specialties, summary, logo, countryCode, formattedPhone, regularHoursLastUpdated, containerBusiness |
| number | rating, reviewCount |
number or null | yearEstablished, notRecommendedReviewCount, communityQuestionCount, postCount |
boolean or null | isClosed, isClaimed, isYelpAdvertiser, isMultiloc, hasStorefrontAddress, messaging, onlineOrdering, isCommunityQuestionsEnabled, isConnectEnabled, isItemListSchemaEnabled, isCurrentlyOpen, isClosedToday, logoHasPurchased |
| number[] | reviewCountsByRating |
string[] or null | alternateNames, reviewHighlights |
| object[] | reviewCountsByLanguage |
object[] or null | categories, healthInspections, verifiedLicenses, attributes, associatedSearches, popularDishes, authoritativeAttributes, videoCarouselItems, reviewSnippets, categoryDetails, regularHoursRaw, upcomingSpecialHours, photoTabs, categoryAncestry, costGuides, menu, businessPhotos, businessVideos |
object or null | location, operationHours, ambiance, externalResources, yelpMenu, serviceArea, media, searchStats, menuVerbiage, consumerAlert, bizOwnerProfile, dataFreshness, categoryGroups, internalLinks, jobPricing, jobs, formattedAddress, businessOwnerVideo, partnerData, coordinates |
| optional object[] | reviews |
These unchanged fields are from a recorded Gary Danko result. This selected example is not a saved Dataset item:
{"id": "WavvLdfdP6g8aZTtbBQHTw","alias": "gary-danko-san-francisco","name": "Gary Danko","rating": 4.5,"reviewCount": 6136,"reviewCountsByRating": [124, 216, 484, 1097, 4220],"countryCode": "US","isCurrentlyOpen": false,"scrapedAt": "2026-08-16T17:27:44.693Z"}
Selected business fields
The five entries in reviewCountsByRating are counts for ratings 1 through 5.
Other arrays keep source order. The example shortens long arrays.
Nested field reference
Optional root fields can be null, including the fields shown as null above.
costGuides, upcomingSpecialHours, reviews[].reactions,
reviews[].videos, and reviews[].previousReviewIds can be empty arrays.
regularHoursLastUpdated can contain display text or be null. Availability
can change between businesses and runs.
For example, a text-location search returned Updated 3 months ago in
regularHoursLastUpdated for Third Wheel Coffee. Treat this value as display
text, not as a date.
Review objects are nested under their business and include the parent business ID. Photo, video, and review rows keep source order.
Lookup and search behaviour
Search results
A valid search with no matches produces an empty dataset. Search matching, order, and field availability can change when Yelp updates its data.
If the search request cannot complete, the run stops instead of reporting the request as an empty result.
Direct batches
A direct batch with some valid and some invalid businesses keeps the valid records. If every business fails, the run still completes successfully with an empty dataset.
An encrypted-ID lookup can return fewer optional fields than a URL or alias lookup. Use a URL or alias when you need the broadest available profile.
Reviews and media
If a requested review or media section is not available, the Actor does not save that business as a complete result.