Yelp Business Leads & Reviews Scraper
Pricing
from $37.82 / 1,000 business results
Yelp Business Leads & Reviews Scraper
Scrape Yelp business listings by keyword and location. Get name, address, phone, website, categories, rating, review count, price level, hours and review highlights, plus 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
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Yelp Business Leads & Reviews Scraper
Here is one real result, with every field the actor returns:
{"searchTerm": "plumbers","location": "Austin, TX","businessName": "Capital City Plumbing and Drain","alias": "capital-city-plumbing-and-drain-leander","yelpUrl": "https://www.yelp.com/biz/capital-city-plumbing-and-drain-leander","categories": ["Water Heater Installation/Repair", "Plumbing"],"primaryCategory": "Water Heater Installation/Repair","rating": 4.8,"reviewCount": 231,"priceLevel": null,"address": "180 Antlers Trail","neighborhoods": [],"serviceArea": null,"phone": "(512) 630-0852","isAd": true,"rankPosition": 2,"website": "http://capitalcityplumbing.services","hours": ["Mon Open 24 hours", "Tue Open 24 hours", "Wed Open 24 hours","Thu Open 24 hours", "Fri Open 24 hours", "Sat Open 24 hours", "Sun Open 24 hours"],"verifiedLicense": true,"photoCount": 48,"businessDescription": "The pros at Capital City Plumbing & Drain are ready to take care of all your commercial plumbing needs. Our commercial plumber in Austin, TX can complete repair and remodeling projects of all sizes...","reviewHighlights": ["Get pricing & availability."],"reviewHighlightCount": 1,"aiLeadScore": 85,"aiLeadTier": "Hot","aiLeadRationale": "High rating and review count indicate strong customer satisfaction and visibility.","source": "yelp.com","observedAt": "2026-08-20T01:18:47.544Z"}
The most complete Yelp business scraper available. It returns every listing field Yelp exposes for a search (name, categories, rating, review count, price level, address, neighborhoods and phone), plus an optional detail pass that adds website, opening hours, verified license, photo count, business description and review highlights, plus an optional AI lead score, and gives you six filters to target exactly the businesses you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- 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). It runs each term in each location on Yelp, paginates the search 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, neighborhoods and phone when Yelp lists it.
Two optional add-ons enrich each business further:
- Contact enrichment opens each business page and adds the phone, website, opening hours by day, verified license flag, photo count, business description and review highlights. This is the lead data most people want. It is off by default and charged only when a phone or website is found.
- 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. Off by default, charged only when a usable score is returned.
Missing values are returned as null, never invented. Anti-bot handling is fully internal, so you do not configure proxies or supply any login.
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"}
To get full contact details and AI lead scores, add the two add-ons (a paid Apify plan is required for add-ons):
{"searchTerms": ["plumbers", "electricians"],"locations": ["Austin, TX"],"maxBusinesses": 50,"withContacts": true,"withLeadScore": 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. |
maxBusinesses | integer | no | 10 | Maximum businesses to collect across the whole run (all terms and locations combined). 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 | 0 | Keep only businesses rated at least this many stars (1 to 5). 0 disables the filter. |
withContacts | boolean | no | false | Paid add-on, off by default. Fetch each business page for phone, website, hours, license, photos, description and review highlights. Charged only on a phone or website hit. |
withLeadScore | boolean | no | false | Paid add-on, off by default. AI lead score, tier and rationale per business. Charged only on a usable score. |
Terms and locations combine as a cross product: two terms and two locations run four searches. withContacts and withLeadScore are disabled on free Apify plans.
Output reference
One dataset item per business. Types: string, number, integer, boolean, string[], or null when a value is absent.
| Field | Type | Description |
|---|---|---|
searchTerm | string | Search term that produced this business. |
location | string | Location that was searched. |
businessName | string | Business name. |
alias | string | Yelp business alias (URL slug). |
yelpUrl | string | Full Yelp business page URL. |
categories | string[] | All Yelp categories for the business. |
primaryCategory | string | First listed category. |
rating | number | Star rating, 1 to 5 (may be 0 for some sponsored listings). |
reviewCount | integer | Number of reviews. |
priceLevel | string | Price level $ to $$$$, or null. |
address | string | Street address as listed, or null. |
neighborhoods | string[] | Neighborhoods, when listed. |
serviceArea | string | Service area text for mobile or at-home businesses, or null. |
phone | string | Phone number. Filled from the search listing, and from the detail page when contact enrichment runs. |
isAd | boolean | Whether the listing was returned in a sponsored slot. |
rankPosition | integer | Position of the business in the collected result set. |
website | string | Business website (contact enrichment). null otherwise. |
hours | string[] | Opening hours by day (contact enrichment). |
verifiedLicense | boolean | Yelp verified business license (contact enrichment). |
photoCount | integer | Number of photos on the business page (contact enrichment). |
businessDescription | string | Business self-description (contact enrichment). |
reviewHighlights | string[] | Top review highlight quotes (contact enrichment). |
reviewHighlightCount | integer | Number of review highlights captured. |
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. |
Example output record
Real record from a live run (input {"searchTerms":["plumbers"],"locations":["Austin, TX"],"maxBusinesses":3,"withContacts":true,"withLeadScore":true}):
{"searchTerm": "plumbers","location": "Austin, TX","businessName": "Radiant Plumbing & Air Conditioning - Austin","alias": "radiant-plumbing-and-air-conditioning-austin-austin","yelpUrl": "https://www.yelp.com/biz/radiant-plumbing-and-air-conditioning-austin-austin","categories": ["Plumbing", "Heating & Air Conditioning/HVAC", "Water Heater Installation/Repair"],"primaryCategory": "Plumbing","reviewCount": 849,"address": "901 Reinli St","phone": "(512) 690-4932","website": "https://radiantplumbing.com/austin/","hours": ["Mon Open 24 hours", "Tue Open 24 hours", "Wed Open 24 hours", "Thu Open 24 hours", "Fri Open 24 hours", "Sat Open 24 hours", "Sun Open 24 hours"],"verifiedLicense": true,"photoCount": 128,"reviewHighlights": ["came out the next day and was very thorough and efficient in fixing the marked-up areas.","I would highly recommend Radiant to anyone - Ian, Woody, Joe, and the install crew are top-notch!"],"reviewHighlightCount": 3,"aiLeadScore": 85,"aiLeadTier": "Hot","aiLeadRationale": "High review volume and positive feedback indicate strong customer satisfaction and visibility.","source": "yelp.com","observedAt": "2026-08-20T01:19:35.003Z"}
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 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 the 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.
Why is phone or website empty on some records?
Yelp does not always list a phone in search results, and website is only filled when contact enrichment is enabled and the business has one. Businesses without a public phone or website return null for those fields.
Why does rating show 0 on some businesses?
A few sponsored listings return a 0 rating in the search feed even though they have reviews. reviewCount is still accurate. Enable contact enrichment for the fuller profile.
How do I get emails and full contact details?
Enable withContacts. It adds phone, website, opening hours, license, photo count, description and review highlights from each business page. It is charged only when a phone or website is found.
How is the AI lead score calculated?
When withLeadScore is on, the actor sends the business profile (categories, rating, review volume, reachability) to an AI model that returns a 0 to 100 score, a tier and a one-line rationale. It is charged only when a usable score comes back.
Do I need a proxy or a Yelp login? No. Anti-bot handling is fully internal. You never configure a proxy or supply any cookies or credentials.
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.
- Google Maps and business 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.
