Yelp Business Scraper - Leads, Emails, Contacts & Reviews
Pricing
from $37.82 / 1,000 business results
Yelp Business Scraper - Leads, Emails, Contacts & Reviews
Scrape Yelp businesses by keyword and location or by URL. Get name, categories, rating, reviews, price, phone, website, emails and socials, full address, coordinates, hours, attributes, menu, health score and photos. Optional AI lead scoring. Export to JSON, CSV or Excel.
Pricing
from $37.82 / 1,000 business results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
12 days ago
Last modified
Categories
Share
Yelp Business Scraper - Leads, Emails, Contacts & Reviews
Here is one real result (a lead from plumbers in Chicago, IL with contact enrichment, review highlights and AI lead scoring turned on). Long text fields are shortened here for readability, but nothing is invented and genuinely empty fields stay null:
{"searchTerm": "plumbers","location": "Chicago, IL","businessId": "PsL6IZ3hL2ICBpFfvV_BIQ","alias": "rosso-handyman-services-chicago","businessName": "Rosso Handyman Services","yelpUrl": "https://www.yelp.com/biz/rosso-handyman-services-chicago","categories": ["Electricians", "Plumbing", "Water Heater Installation/Repair"],"primaryCategory": "Electricians","rating": 4.8,"reviewCount": 51,"priceLevel": null,"phone": "(773) 941-1112","address": "5407 N Christiana Ave, Chicago, IL 60625","street": "5407 N Christiana Ave","city": "Chicago","state": "IL","postalCode": "60625","country": "US","latitude": 41.979678,"longitude": -87.712139,"neighborhoods": ["North Park"],"timezone": "America/Chicago","isAd": true,"website": "https://rossohandyman.com/contact-2/","websiteDisplayUrl": "https://rossohandyman.com","hours": ["Mon: Open 24 hours", "Tue: Open 24 hours", "Wed: Open 24 hours"],"openNow": true,"businessStatus": "Open","isClosedPermanently": false,"claimed": true,"yearEstablished": "2015","businessDescription": "Founded in 2015, I am excited and proud to serve the Chicago area, bringing over 30 years of contract and remodeling experience...","businessOwnerName": "Mo R.","attributes": ["ASL proficient", "Accepts cash", "Accepts Zelle"],"amenityCount": 8,"photoCount": 25,"images": ["https://s3-media0.fl.yelpcdn.com/bphoto/kuuCA4x5BkufCUI0IGNxRA/o.jpg"],"reviewHighlights": ["Will definitely be calling him back for future projects!","Mohammed was always on time and attentive to details and able to spot other problems that needed to be fixed."],"reviews": [{ "text": "Will definitely be calling him back for future projects!", "rating": null, "author": null, "date": null, "source": "review_highlight" }],"emails": ["abcrosso3@gmail.com"],"socials": null,"aiLeadScore": 85,"aiLeadTier": "Hot","aiLeadRationale": "High rating and review count indicate strong customer satisfaction and visibility.","source": "yelp.com","observedAt": "2026-08-25T19:11:10.063Z"}
One of the most complete Yelp business scrapers available. It returns every listing field Yelp exposes for a search, plus a deep detail pass that adds the full address with coordinates, opening hours, attributes and amenities, menu URL, health score, verified licenses, photos, owner name, year established, price and claimed status, plus emails and social profiles pulled from the business website and an optional AI lead score. Fourteen input filters let you target exactly the businesses you need, by keyword, location, direct URL, price, rating, open-now and feature attributes.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- How we compare
- Quickstart
- Input reference
- Output reference
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
Give the actor one or more search terms (a category or business type) and one or more locations (city and state, or a ZIP code), or paste direct Yelp business URLs. It runs each term in each location, paginates the results, and writes one normalized record per business to the run dataset. Every business comes back with its name, Yelp URL, categories, star rating, review count, price level, address and phone when Yelp lists it.
Three optional add-ons enrich each business further:
- Contact and detail enrichment opens each business page and adds the full street address, city, state, ZIP and country, latitude and longitude, website, menu URL, opening hours, open-now status, attributes and amenities, verified licenses, health score, photos, year established, owner name, claimed status and a business description. It then reads the business website to pull emails and social profiles. This is the lead data most people want. It is off by default and charged only when a phone or website is found.
- Review highlights adds the review excerpts Yelp publishes on the business page as a reviews array.
- AI lead score rates each business as a sales prospect from 0 to 100, assigns a tier (Hot, Warm, Cold) and gives a one-line rationale.
Missing values are returned as null, never invented. Anti-bot handling is fully internal, so you do not configure proxies or supply any login.
How we compare
We checked the top direct Yelp scrapers on the Apify Store. Here is an honest, side-by-side view. We do not win on every axis and we say so.
| Capability | scrapers_lat (this actor) | tri_angle/yelp-scraper | web_wanderer/yelp-reviews-scraper | beatanalytics/yelp-business-scraper | memo23/yelp-scraper |
|---|---|---|---|---|---|
| Input filters | 14 | 5 | 18 (review-focused) | 5 | 18 |
| Distinct output fields per business | 55+ | ~25 | ~35 (per review) | ~25 | ~25 |
| Search by keyword + location | Yes | Yes | Yes | Yes | Yes |
| Direct business URLs | Yes | Yes | Yes | Yes | Yes |
| Price / rating / open-now / attribute filters | Yes (all four) | No | Price + features | No | Sort only |
| Full address + coordinates | Yes | Yes | No | Yes | City/state/ZIP |
| Hours + open-now + attributes | Yes | Yes | No | Yes | Hours only |
| Menu URL + health score | Yes | Health score | No | Yes | No |
| Verified licenses + owner name + year | Yes | Partial | No | No | Owner name |
| Emails from business website | Yes | No | No | No | Yes |
| Social profiles from business website | Yes | No | No | No | No |
| Reviews | Highlight excerpts | Limited | Full feed, deep filters | Sibling actor | Full feed |
| AI lead scoring | Yes | No | No | No | AI review insights |
| Price per 1,000 businesses | $20 to $40 | ~$1.50 | n/a (per review) | ~$2.50 | ~$2.75 |
| Adoption (store users) | Newer, low | 6,800+ | 600+ | 200+ | 200+ |
Where competitors win, honestly:
- Price. tri_angle at about $1.50 per 1,000 businesses is far cheaper than us, and web_wanderer bills reviews at about $0.30 per 1,000. We are the premium option because we clear Yelp's anti-bot layer with a paid unblocking transport and return a much wider field set. If your only need is a big cheap list of names and phones, tri_angle is the value pick.
- Reviews depth. web_wanderer and memo23 return the full review-by-review feed with author, rating, date and reaction counts, plus per-review filters (language, keyword, date). Yelp does not expose full review bodies to plain HTTP clients, so we return the review highlight excerpts Yelp publishes on the business page, not the exhaustive feed. For deep review export, use one of those actors.
- Adoption. tri_angle has thousands of users and a long track record. We are newer.
Where we win:
- Widest single-record profile. 55+ populated fields per business, more than any direct competitor, in one row.
- Only actor that returns emails and social profiles from the business website together with the full Yelp business profile and coordinates and health score and menu and AI lead scoring. memo23 does emails; nobody else combines all of it.
- Strongest business-search filters: price, minimum rating, open-now and Yelp feature attributes, plus direct URLs and multi-term, multi-location runs.
- No charge on failed or empty runs, internal anti-bot, no proxy or login setup.
Quickstart
Open the actor, paste this into the input, and press Run. It returns the 10 top coffee shops in Seattle.
{"searchTerms": ["coffee"],"locations": ["Seattle, WA"],"maxBusinesses": 10,"sortBy": "Most Reviewed"}
For full leads with contacts, emails, socials, review highlights and AI lead scores (a paid Apify plan is required for add-ons):
{"searchTerms": ["plumbers", "electricians"],"locations": ["Austin, TX"],"maxBusinesses": 50,"minRating": 4,"withContacts": true,"scrapeReviews": true,"withLeadScore": true}
Scrape specific businesses by URL:
{"businessUrls": ["https://www.yelp.com/biz/gary-danko-san-francisco","https://www.yelp.com/biz/rosso-handyman-services-chicago"],"withContacts": true}
Input reference
| Field | Type | Required | Example | Description |
|---|---|---|---|---|
searchTerms | array of strings | yes* | ["plumbers"] | Categories or business types to search. Each term is searched in each location. |
locations | array of strings | yes* | ["Austin, TX"] | Places to search: city and state, or a ZIP code. Each location is searched with every term. |
businessUrls | array of strings | no | ["https://www.yelp.com/biz/gary-danko-san-francisco"] | Scrape these Yelp business pages directly by URL or alias. Combined with any search. |
maxBusinesses | integer | no | 10 | Maximum businesses to collect across the whole run. Free plans are capped at 10. |
sortBy | enum | no | Most Reviewed | Result order: Recommended, Highest Rated, Most Reviewed, or Distance. |
priceLevels | array of strings | no | ["1","2"] | Keep only these price levels: 1 = $, 2 = $$, 3 = $$$, 4 = $$$$. Empty for all. |
openNow | boolean | no | false | Only return businesses open at run time. |
minRating | integer | no | 4 | Keep only businesses rated at least this many stars (1 to 5). 0 disables the filter. |
attributes | array of strings | no | ["RestaurantsDelivery","WiFi"] | Filter by Yelp feature attribute keys (for example hot_and_new, deals_v2, RestaurantsReservations, DogsAllowed, WheelchairAccessible). |
maxImages | integer | no | 10 | Maximum photo URLs per business (detail pass only). 0 to skip images. |
withContacts | boolean | no | false | Paid add-on. Detail page plus emails and socials from the business website. Charged only on a phone or website hit. |
scrapeReviews | boolean | no | false | Paid add-on. Add Yelp review highlight excerpts as a reviews array. |
maxReviews | integer | no | 10 | Maximum review excerpts per business when review scraping is on. |
reviewSort | enum | no | Yelp Sort | Preferred review order: Yelp Sort, Newest First, Oldest First, Highest Rated, Lowest Rated. |
withLeadScore | boolean | no | false | Paid add-on. AI lead score, tier and rationale per business. Charged only on a usable score. |
* Provide searchTerms + locations, or businessUrls, or both. Add-ons are disabled on free Apify plans.
Output reference
One dataset item per business. Types: string, number, integer, boolean, string[], object[], or null when a value is absent.
| Field | Type | Description |
|---|---|---|
searchTerm | string | Search term that produced this business (null for direct URLs). |
location | string | Location searched (null for direct URLs). |
businessId | string | Yelp business id (encid). |
alias | string | Yelp business alias (URL slug). |
businessName | string | Business name. |
alternateNames | string[] | Alternate names, when listed. |
yelpUrl | string | Full Yelp business page URL. |
categories | string[] | All Yelp categories. |
primaryCategory | string | First listed category. |
rating | number | Star rating, 1 to 5. |
reviewCount | integer | Number of reviews. |
priceLevel | string | Price level $ to $$$$. |
priceLevelNumber | integer | Price level as 1 to 4. |
phone | string | Phone number. |
address | string | Formatted address. |
street | string | Street address (detail). |
city | string | City (detail). |
state | string | State or region code (detail). |
postalCode | string | Postal or ZIP code (detail). |
country | string | Country code (detail). |
latitude | number | Latitude (detail). |
longitude | number | Longitude (detail). |
neighborhoods | string[] | Neighborhoods. |
serviceArea | string | Service area for mobile businesses. |
timezone | string | Business timezone (detail). |
isAd | boolean | Whether the listing was a sponsored slot. |
rankPosition | integer | Position in the collected result set. |
website | string | Business website (detail add-on). |
websiteDisplayUrl | string | Display form of the website (detail add-on). |
menuUrl | string | External menu URL (detail add-on). |
hours | string[] | Opening hours by day (detail add-on). |
openNow | boolean | Whether the business is open at run time (detail add-on). |
businessStatus | string | Operational status (Open, Closed now, Permanently closed). |
isClosedPermanently | boolean | Whether the business is permanently closed. |
claimed | boolean | Whether the owner has claimed the Yelp page (detail add-on). |
verifiedLicense | boolean | Whether a Yelp verified license is present (detail add-on). |
licenseNumbers | string[] | Verified license numbers (detail add-on). |
licenseTrades | string[] | Verified license trades (detail add-on). |
yearEstablished | string | Year the business was established (detail add-on). |
specialties | string | Business specialties text (detail add-on). |
businessDescription | string | Business description or history (detail add-on). |
businessOwnerName | string | Business owner display name (detail add-on). |
healthScore | string | Latest health inspection score, for eligible categories (detail add-on). |
healthScoreDate | string | Date of the latest health inspection (detail add-on). |
attributes | string[] | Amenities and attributes (detail add-on). |
amenityCount | integer | Number of amenities captured. |
popularDishes | string[] | Popular dishes or items, for eligible categories (detail add-on). |
photoCount | integer | Number of photos on the page (detail add-on). |
images | string[] | Photo URLs, capped by maxImages (detail add-on). |
reviewHighlights | string[] | Review highlight quotes (detail add-on). |
reviewHighlightCount | integer | Number of review highlights captured. |
reviews | object[] | Review highlight excerpts as objects (review add-on). |
reviewCountCaptured | integer | Number of review excerpts captured. |
emails | string[] | Emails found on the business website (contacts add-on). |
socials | string[] | Social profile URLs found on the business website (contacts add-on). |
aiLeadScore | integer | AI lead score 0 to 100 (AI add-on). |
aiLeadTier | string | AI lead tier Hot, Warm or Cold (AI add-on). |
aiLeadRationale | string | One-line rationale for the score (AI add-on). |
source | string | Always yelp.com. |
observedAt | string | ISO 8601 timestamp when the record was collected. |
error | string | null on success. On a failed run a single item with a populated error field is written instead. |
Run via API and CLI
Start a run and read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~yelp-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchTerms":["coffee"],"locations":["Seattle, WA"],"maxBusinesses":25,"sortBy":"Most Reviewed"}'
Start a run asynchronously with the paid add-ons:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~yelp-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchTerms":["dentists"],"locations":["Miami, FL"],"maxBusinesses":100,"withContacts":true,"withLeadScore":true}'
Apify CLI:
apify call scrapers_lat/yelp-scraper \--input '{"searchTerms":["law firms"],"locations":["Chicago, IL"],"maxBusinesses":50}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets.
Billing and limits
- Pay per result. You are charged one
resultevent per business returned. A one-timeactor-startevent is charged when a run begins. - Add-ons are opt-in. Contact and detail enrichment (
contacts) and AI lead score (ai_lead_score) are off by default. Each is charged only when it produces data:contactswhen a phone or website is found,ai_lead_scorewhen the AI returns a usable score. Both are disabled on free Apify plans. - No charge on failure. If a run errors or matches nothing, the actor writes a single item with a populated
errorfield and does not chargeresultor any add-on. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 businesses per run and cannot use the paid add-ons. Upgrade for higher
maxBusinesses. - Tiered pricing. Per-event prices step down across Apify plan tiers. See the pricing tab for current rates.
FAQ and troubleshooting
A run returned 0 businesses. Why?
The term and location combination matched nothing, or the location was not recognized. Try a broader term, a nearby larger city, or a City, ST format. Zero-result runs are not charged.
Do I get emails and social profiles?
Yes, when withContacts is on. The actor reads each business website and extracts emails and social profile links. Not every business publishes an email or links its socials, so those fields are null when the site does not expose them. In our tests emails come back for a meaningful share of businesses that list a website.
How complete are the reviews?
The reviews array returns the review highlight excerpts Yelp publishes on the business page. Yelp does not expose full individual review bodies (author, date, full text) to HTTP clients, so this is not the exhaustive review-by-review feed. For deep review export, use a dedicated Yelp reviews actor.
Why is healthScore or popularDishes empty?
Those fields exist only for eligible categories (mostly restaurants and food). Service businesses return null for them, which is correct.
Do I need a proxy or a Yelp login? No. Anti-bot handling is fully internal. You never configure a proxy or supply cookies or credentials. Paid runs use a premium unblocking transport for reliable delivery; free runs use the standard proxy and may be blocked by Yelp, in which case the run is not charged.
Is this an official Yelp tool? No. This actor is independent and not affiliated with Yelp. It reads only data that is publicly visible on Yelp business and search pages.
Related scrapers
- Website Contacts Scraper: emails, phones and socials from any website.
- Local business and leads scrapers at scrapers.lat: local business leads across platforms.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Yelp. Accesses only publicly available Yelp data. Use in accordance with Yelp's terms of service.
