Yelp Scraper - Business Contacts and Reviews
Pricing
from $2.20 / 1,000 results
Yelp Scraper - Business Contacts and Reviews
Extract Yelp business names, ratings, phones, addresses, websites and optional reviews across the listed markets. Search by keyword or business URL and pay per delivered row, plus a start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
1
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Features
Share
Yelp Scraper
Export Yelp business names, ratings, contact details and optional review rows for local-business research across the markets listed in the input form.
- Search by keyword and location, or supply business page URLs.
- Collect phone numbers, addresses, websites and opening hours when available.
- Add separately billed review rows, linked to their business.
- Read Yelp's public company information with dedicated modes.
- Pay $3.00 per 1,000 delivered rows on the Free plan, plus a small start fee.
What does Yelp Scraper do?
Yelp Scraper turns business information from Yelp into rows for spreadsheets, customer databases and comparison reports. It is an unofficial tool, not a Yelp product or the official Yelp API. It does not require your Yelp login.
- Search: use
findDescandfindLocfor a trade, business name or keyword in a location. - Business pages: use
bizSlugor business URLs instartUrls. - Company information: choose
about,privacy,support,pressorirfor Yelp's own public information, not individual merchants. - Reviews:
includeReviewsis off by default. Each review is a separate row, billed at the same price as a business row, within the same row allowance.
The market form accepts country-site choices including the United States, Canada, United Kingdom, Australia, Germany, France, Ireland, Italy and Spain. A listed market does not guarantee that every page or field is available there. Try a small search for your location first.
What data can you extract from Yelp?
Fields depend on the source and mode. The following are useful examples, not a promise that every row contains every field.
Business rows
| Field | Description | Example |
|---|---|---|
id | Row identifier | example-business-id |
listingId | Business identifier | example-business-id |
bizSlug | Business page slug | example-pizza-new-york |
name | Business name | Example Pizza |
url | Yelp page URL | https://www.yelp.com/biz/example-pizza-new-york |
rating | Overall rating | 4.5 |
reviewCount | Number of reviews shown | 42 |
categories | Business categories | ["Pizza"] |
phones | Phone entries, with normalized numbers when available | [{"value":"+1 555 0100"}] |
address | Street, locality, region, postal code and country | {"locality":"New York","country":"US"} |
website | Business website, when returned | https://example.com |
web | Website and related links, when returned | {"website":"https://example.com"} |
hours | Opening hours, when available | [] |
geo | Latitude and longitude | {"lat":40.7,"lng":-74.0} |
priceRange | Price label shown by Yelp | $$ |
isClosed | Whether the business is marked closed | false |
leadAbsences | Reasons some contact fields are missing, when supplied | {} |
Review rows
Reviews are separate from business rows; do not count reviewCount as the number of review rows delivered.
| Field | Description | Example |
|---|---|---|
rowType | Identifies a review row | review |
id | Unique row identifier | example-review-id |
parentListingId | Links to the business | example-business-id |
bizSlug | Business slug | example-pizza-new-york |
url | Business page URL | https://www.yelp.com/biz/example-pizza-new-york |
reviewAuthor | Display name, when available | Jane Doe |
reviewRating | Rating given by the reviewer | 5 |
reviewText | Available review text | Example review text. |
Company information rows
These describe Yelp itself. They use the same contact-field structure, but are not merchant leads.
| Field | Description | Example |
|---|---|---|
listingId | Company-page identifier | yelp-about |
name | Company or department | Yelp |
url | Public company page | https://www.yelp.com/about |
emails | Published contact email entries, when available | [{"value":"name@example.com","type":"email"}] |
org | Organization details | {"name":"Yelp"} |
How to scrape Yelp
- Open Yelp Scraper in Apify Console.
- Enter a keyword in
findDescand a city infindLoc, or use a business target below. - Set
maxResultsto3for a small first run. - Click Start and wait for completion.
- Open the dataset and download rows, or read them through the API.
An empty input {} starts the form's example search: pizza in New York, NY, limited to 3 rows. Normal start and row charges apply. This is not a free preview.
With searchType set to auto, one target field selects a mode: a keyword or location selects search, and a business slug selects detail. URLs select search processing, which recognizes business pages.
Search
Fill both findDesc and findLoc. If only one is supplied, the missing keyword becomes ramen or the missing location becomes Chicago, IL. Location-only input therefore does not mean all businesses in that location.
Business pages
Use bizSlug for one business or startUrls for several /biz/ URLs. A full Yelp business URL also works in bizSlug. Keep enrichDetails enabled for additional business information.
About
Use searchType: "about" for Yelp's public company overview. No business target is needed.
Privacy
Use searchType: "privacy" for published privacy contact information. It does not access private account data.
Support
Use searchType: "support" for public support information. It does not read or submit tickets.
Press
Use searchType: "press" for public press contact information, not a paginated news archive.
Investor relations
Use searchType: "ir" for public investor-relations information. It is not a financial-report extraction mode.
What to fill in
| Field | What to enter | Default |
|---|---|---|
searchType | auto, search, detail, about, privacy, support, press or ir | auto |
findDesc | Keyword or business name | No fixed default; form prefill pizza |
findLoc | City, neighborhood or address | No fixed default; form prefill New York, NY |
bizSlug | Business slug or full business URL | Empty |
startUrls | List of Yelp /search or /biz/ URLs | Empty |
market | Country-site code from the form | us |
maxResults | Maximum rows per input, from 1 to 50 | 50; form prefill 3 |
maxPages | Search page allowance, from 1 to 20 | 1 |
start | Initial search offset, from 0 to 990 | 0 |
sortBy | Requested order: recommended, rating or review_count; ordering can vary | recommended |
enrichDetails | Add available business detail information | true |
includeReviews | Add separate review rows within the same allowance | false |
Some fields shown in the form (reviewTerm, reviewLimit, reviewOffset, includePhotos, photoLimit, includePresentation, communityQuestionsFirst) are not used by this Actor; leave them at their defaults.
Search:
{"findDesc":"pizza","findLoc":"New York, NY","maxResults":3}
Business details with optional reviews:
{"bizSlug":"joes-pizza-new-york","includeReviews":true,"maxResults":3}
Several business URLs:
{"startUrls":["https://www.yelp.com/biz/joes-pizza-new-york"],"maxResults":3}
About:
{"searchType":"about","maxResults":1}
Privacy:
{"searchType":"privacy","maxResults":1}
Support:
{"searchType":"support","maxResults":1}
Press:
{"searchType":"press","maxResults":1}
Investor relations:
{"searchType":"ir","maxResults":1}
maxItemsandlimitare aliases formaxResults, the per-input row allowance.- Unknown fields do not fail a run by themselves. Close misspellings can be corrected; other unknown fields are ignored with a note.
- Unusable targets fail before collection with
INVALID_INPUT:followed by the field and a correction. No rows are charged; the start fee can still apply. Invalid optional filters can instead be ignored. - The default key-value store's
INPUT_REPORTrecord shows inferred modes, corrections and ignored fields.INPUT_ECHOshows the settings used.
Output example
Illustrative business row; identifiers and contact details are placeholders:
{"id": "example-business-id","listingId": "example-business-id","bizSlug": "example-pizza-new-york","name": "Example Pizza","url": "https://www.yelp.com/biz/example-pizza-new-york","rating": 4.5,"reviewCount": 42,"categories": ["Pizza"],"phones": [{"type": "phone", "value": "+1 555 0100", "e164": null}],"address": {"street": "100 Example Street","locality": "New York","region": "NY","postal_code": "10000","country": "US"},"website": "https://example.com","emails": [],"hours": [],"leadAbsences": {}}
Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. Nested values such as phones and address are easiest to preserve in JSON.
Why use this Yelp scraper?
- Row-based billing: result charges apply to delivered dataset rows, not unsuccessful page attempts. The start fee is separate.
- Reusable output: business identifiers and URLs help match rows across your reports.
- Partial delivery: rows already written to the dataset remain available after a stop. Collection that has not reached the dataset is not guaranteed to be recoverable.
- Visible errors: input errors identify what to correct;
ERROR_SUMMARYrecords failures. - Missing contact details stay empty: do not treat a blank phone or email as a verified absence from every source.
- Several inputs: use
startUrlsfor multiple business pages, each with its own allowance. - No proxy configuration: you do not need to set up proxies.
How much does it cost to scrape Yelp?
The Actor uses pay-per-event pricing. Platform usage is included in these prices.
| Apify plan | Start event | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.003 | $3.00 |
| Starter | $0.005 | $0.003 | $3.00 |
| Scale | $0.005 | $0.0026 | $2.60 |
| Business | $0.005 | $0.0022 | $2.20 |
Start billing is one event per GB of allocated memory, with a minimum of one event. The default 1024 MB uses one $0.005 start event. Review and company rows cost the same as business rows.
maxResultsapplies to each URL, or to the single search, detail or company input when there is no URL list. Its default and maximum are 50, not 70.- Business and review rows share that allowance. Requesting 3 rows does not mean 3 businesses plus extra reviews.
- Free Apify plan runs are capped at 200 rows for the whole run. The Actor also allows 10 runs for free-plan users.
- Set Maximum cost per run in the run options (
maxTotalChargeUsdin the API) to limit total charges. A row allowance is a maximum, not a promise of that many matches.
Example: one run delivering 3 rows at the default 1024 MB costs 3 × $0.003 + $0.005 = $0.014 on the Free plan. A run delivering zero rows has no row charges, but its start fee still applies.
What happens when the run timeout is too short
When the remaining time is too short and automatic continuation is accepted, the Actor can pause instead of waiting until the timeout. It temporarily appears as ABORTED with a message such as "Queued on the collection backend; this run will resume automatically when results are ready (about N s)."
When results are ready, the same run can restart, deliver to the same dataset and finish as SUCCEEDED. Previously delivered rows are skipped rather than delivered again. When continuing after earlier delivery, the status can say "Resumed: delivering N rows."
There is a limit of 3 automatic pauses per run. Keep the default timeout of 3600 seconds to reduce interruptions. If continuation is unavailable or refused, the Actor keeps waiting in the current run; a short timeout can still end it.
The synchronous API endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and may return an empty dataset while the run is paused. For longer searches, start asynchronously and read the dataset after SUCCEEDED, or use a webhook for that event.
Use with AI agents and the API
Apify MCP server (Claude, ChatGPT, Cursor, VS Code)
Add this remote MCP server to a compatible client:
https://mcp.apify.com?tools=lentic_clockss/yelp-scraper
Sign in with Apify through OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; the agent reads rows with get-dataset-items.
Clients without remote support can run:
npx @apify/actors-mcp-server --tools lentic_clockss/yelp-scraper
Supply APIFY_TOKEN to that client. Example prompt: "Find up to 3 pizza businesses in New York, NY, and return their names, ratings and available phone numbers."
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/yelp-scraper").call(run_input={"findDesc": "pizza", "findLoc": "New York, NY", "maxResults": 3})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/yelp-scraper').call({findDesc: 'pizza', findLoc: 'New York, NY', maxResults: 3});const { items: rows } = await client.dataset(run.defaultDatasetId).listItems();console.log(rows);
For asynchronous HTTP use, send the input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~yelp-scraper/runs with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Integrations
Use the Actor's Integrations tab to connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable or a webhook. Use Apify Schedules for repeat runs.
FAQ
Is it legal to scrape Yelp?
Public availability does not grant unrestricted reuse. You are responsible for Yelp's terms and applicable data-protection law. Processing personal data requires a lawful basis. Get qualified advice if you are unsure about your use.
Why did my run end as ABORTED?
It may be an automatic pause described above. Check its status message before starting another run. A manual abort is not the same as an accepted automatic continuation.
How many results can I get?
Up to 50 rows per input, subject to available matches, maxPages, the total charge limit and the Free plan's 200-row run cap. A single business URL normally yields one business, plus reviews if requested and available.
Why are some fields empty?
Yelp may not supply a phone, website, address or hours for a business, or detail retrieval may fail. Merchant emails are often absent. leadAbsences sometimes explains missing contact fields.
Can I scrape Yelp reviews?
Set includeReviews to true and leave room for review rows in maxResults. This is not a complete review archive.
Does this replace the official Yelp API?
No. It is an independent Actor with its own input and row formats, not an official Yelp API subscription or partner product.
Can I scrape messages or submit support tickets?
No. Public company-information modes do not access private messages or submit forms, orders or support tickets.
Why did my location-only search return ramen businesses?
A location without a keyword receives the fallback keyword ramen. Fill both findDesc and findLoc to avoid fallback values.
Limitations
- No guarantee of exhaustive businesses, reviews, market coverage or a fixed order of results.
- Category browsing is not available; use a keyword search with
findDescinstead. - Sorting requests may not be applied consistently. Search URL parameters may not be reproduced exactly; specify
findDescandfindLocexplicitly. - Phone reverse lookup, contact submission, dedicated photo mode and map mode are not supported as usable Actor features.
- City shortcuts such as
/sfare not supported search targets. Use a Yelp/searchor/biz/URL. - No guarantee that unfinished collection will be delivered after a manual abort or timeout.
Related scrapers
More local services and lead generation scrapers from the same publisher:
- Nextdoor Business Scraper
- Google Maps Scraper for Leads, CRM, and Reviews
- AlloVoisins Scraper
- Angi Scraper
- HomeStars Scraper
- Jiffy On Demand Scraper
- Care.com Scraper
- TaskRabbit Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Changelog
- 0.2.30: surface session_health diagnostics on registerDevice
- 0.2.30: per-documentId outcome telemetry on GraphQL batches
- 0.2.30: mobile-api per-business sub-surfaces (opt-in) + credential exit-IP tagging
- 0.2.30: business_presentation optional full-form geo/device fields
Support
Report problems or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.