Yelp Scraper - Business Contacts and Reviews avatar

Yelp Scraper - Business Contacts and Reviews

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Yelp Scraper - Business Contacts and Reviews

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

kane liu

Maintained by Community

Actor stats

1

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Categories

Features

Limited permissions

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 findDesc and findLoc for a trade, business name or keyword in a location.
  • Business pages: use bizSlug or business URLs in startUrls.
  • Company information: choose about, privacy, support, press or ir for Yelp's own public information, not individual merchants.
  • Reviews: includeReviews is 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

FieldDescriptionExample
idRow identifierexample-business-id
listingIdBusiness identifierexample-business-id
bizSlugBusiness page slugexample-pizza-new-york
nameBusiness nameExample Pizza
urlYelp page URLhttps://www.yelp.com/biz/example-pizza-new-york
ratingOverall rating4.5
reviewCountNumber of reviews shown42
categoriesBusiness categories["Pizza"]
phonesPhone entries, with normalized numbers when available[{"value":"+1 555 0100"}]
addressStreet, locality, region, postal code and country{"locality":"New York","country":"US"}
websiteBusiness website, when returnedhttps://example.com
webWebsite and related links, when returned{"website":"https://example.com"}
hoursOpening hours, when available[]
geoLatitude and longitude{"lat":40.7,"lng":-74.0}
priceRangePrice label shown by Yelp$$
isClosedWhether the business is marked closedfalse
leadAbsencesReasons 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.

FieldDescriptionExample
rowTypeIdentifies a review rowreview
idUnique row identifierexample-review-id
parentListingIdLinks to the businessexample-business-id
bizSlugBusiness slugexample-pizza-new-york
urlBusiness page URLhttps://www.yelp.com/biz/example-pizza-new-york
reviewAuthorDisplay name, when availableJane Doe
reviewRatingRating given by the reviewer5
reviewTextAvailable review textExample review text.

Company information rows

These describe Yelp itself. They use the same contact-field structure, but are not merchant leads.

FieldDescriptionExample
listingIdCompany-page identifieryelp-about
nameCompany or departmentYelp
urlPublic company pagehttps://www.yelp.com/about
emailsPublished contact email entries, when available[{"value":"name@example.com","type":"email"}]
orgOrganization details{"name":"Yelp"}

How to scrape Yelp

  1. Open Yelp Scraper in Apify Console.
  2. Enter a keyword in findDesc and a city in findLoc, or use a business target below.
  3. Set maxResults to 3 for a small first run.
  4. Click Start and wait for completion.
  5. 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.

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

FieldWhat to enterDefault
searchTypeauto, search, detail, about, privacy, support, press or irauto
findDescKeyword or business nameNo fixed default; form prefill pizza
findLocCity, neighborhood or addressNo fixed default; form prefill New York, NY
bizSlugBusiness slug or full business URLEmpty
startUrlsList of Yelp /search or /biz/ URLsEmpty
marketCountry-site code from the formus
maxResultsMaximum rows per input, from 1 to 5050; form prefill 3
maxPagesSearch page allowance, from 1 to 201
startInitial search offset, from 0 to 9900
sortByRequested order: recommended, rating or review_count; ordering can varyrecommended
enrichDetailsAdd available business detail informationtrue
includeReviewsAdd separate review rows within the same allowancefalse

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}
  • maxItems and limit are aliases for maxResults, 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_REPORT record shows inferred modes, corrections and ignored fields. INPUT_ECHO shows 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_SUMMARY records failures.
  • Missing contact details stay empty: do not treat a blank phone or email as a verified absence from every source.
  • Several inputs: use startUrls for 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 planStart eventPrice per rowPrice 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.

  • maxResults applies 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 (maxTotalChargeUsd in 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 ApifyClient
client = 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

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 findDesc instead.
  • Sorting requests may not be applied consistently. Search URL parameters may not be reproduced exactly; specify findDesc and findLoc explicitly.
  • Phone reverse lookup, contact submission, dedicated photo mode and map mode are not supported as usable Actor features.
  • City shortcuts such as /sf are not supported search targets. Use a Yelp /search or /biz/ URL.
  • No guarantee that unfinished collection will be delivered after a manual abort or timeout.

More local services and lead generation scrapers from the same publisher:

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.