# Yelp Scraper: Business Data, Reviews, Hidden Reviews & Menus (`sourabhbgp/yelp-scraper`) Actor

Scrape Yelp business profiles, ratings, hours, phone, website and photos, plus every review, including the not recommended and removed reviews Yelp hides from the public page. Search any city by keyword, pull full menus with prices. No Yelp account or proxy setup. $3 per 1,000 rows.

- **URL**: https://apify.com/sourabhbgp/yelp-scraper.md
- **Developed by:** [Sourabh Kumar](https://apify.com/sourabhbgp) (community)
- **Categories:** Lead generation, Agents, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Scrape any Yelp business: search by city, reviews, photos, hours & contacts

One actor for the whole Yelp page. Pull business profiles, every review, the reviews Yelp hides from the public feed, keyword search, full photo galleries and menus with prices.

**$3.00 per 1,000 rows. No proxy setup, no browser, no Yelp account needed.**

Works on any Yelp business in any country: United States, Canada, United Kingdom, France, Germany, Australia and the rest.

### The reviews Yelp hides

Yelp does not show every review it has. A large share get pushed into a "not recommended" section that almost nobody clicks, and a second set gets removed outright for breaking Yelp's terms of service. Neither is counted in the star rating on the page.

The numbers are not small. One San Francisco restaurant shows roughly 12,900 public reviews. Underneath it sits another **4,400 or so marked not recommended**, plus about **1,800 Yelp removed**. If you are tracking a brand, that is a third of the conversation you cannot see.

This actor returns both sets, to full depth, with a `reviewStatus` field telling you which is which. Most Yelp scrapers only warn you that these reviews exist.

### What you can pull

| Mode | What you get |
|---|---|
| **Business** | Ratings, the full star breakdown, price range, categories, phone, website, address, coordinates, opening hours, whether it is open right now, amenities, health inspection score, popular dishes with prices |
| **Reviews** | Every public review with text, star rating, date, photos, reactions, the reviewer's profile, and the owner's reply |
| **Hidden reviews** | The not recommended set and the removed set, both to full depth |
| **Search** | Keyword plus location, with each result's name, rating, review count, price, address and rank |
| **Photos** | The whole gallery, not a 25 photo preview, with captions, uploader and dimensions |
| **Menu** | Sections, items, descriptions and prices, including items priced by size |

Every row carries a `recordType` field, so you can run mixed jobs and filter afterwards.

### Top use cases

#### Reputation monitoring that sees the whole picture

Public reviews tell you what Yelp decided to show. The hidden sets tell you what it filtered out, and those skew angry: sorted by rating, the first page is almost always one star. For a brand tracking sentiment, that is the half worth reading. Schedule it with **Only new reviews** and each run returns just what appeared since last time.

#### Local lead generation

Search a category and a city, get names, ratings, review counts, price bands and addresses in one pass. Turn on **Add full business details** and each row also carries the phone number, website and opening hours. No second run, no matching step.

#### Competitor and pricing research

Menu mode returns a competitor's whole menu with prices, including the ones priced by size, so "Bowl $10.00, Cup $7.00" comes through as both numbers rather than the cheaper one. Business mode adds the popular dishes Yelp computes itself, with prices and how many people mentioned them.

#### Franchise and multi-location audits

Feed a list of business URLs and get one row each: hours, categories, amenities, health score and whether the phone and website are still right. Service area businesses like plumbers return their coverage area instead of a storefront address, so nothing comes back blank.

#### Review datasets for AI and analysis

Reviews come with the reviewer's history, Elite status and the exact local timestamp, plus the owner's reply where there is one. The hidden sets are the interesting part: text that never reached the public page.

### Input examples

**Business details.** Paste any Yelp business URL.

```json
{
  "mode": "business",
  "businesses": [
    "https://www.yelp.com/biz/brendas-french-soul-food-san-francisco-6"
  ]
}
```

**Reviews, newest first.** `maxReviewsPerBusiness` caps each business; leave it at 0 for everything.

```json
{
  "mode": "reviews",
  "businesses": [
    "https://www.yelp.com/biz/marines-memorial-club-and-hotel-san-francisco-4"
  ],
  "sortBy": "DATE_DESC",
  "maxReviewsPerBusiness": 200
}
```

**Only one star and two star reviews**, to find the complaints fast.

```json
{
  "mode": "reviews",
  "businesses": [
    "https://www.yelp.com/biz/brendas-french-soul-food-san-francisco-6"
  ],
  "ratings": ["1", "2"],
  "maxReviewsPerBusiness": 100
}
```

**Search reviews for a word.** Useful for "refund", "rude", "food poisoning" or a dish name.

```json
{
  "mode": "reviews",
  "businesses": [
    "https://www.yelp.com/biz/gary-danko-san-francisco"
  ],
  "query": "risotto",
  "maxReviewsPerBusiness": 50
}
```

**The hidden reviews.** Both sets come back together, tagged by `reviewStatus`.

```json
{
  "mode": "notRecommendedReviews",
  "businesses": [
    "https://www.yelp.com/biz/brendas-french-soul-food-san-francisco-6"
  ],
  "maxReviewsPerBusiness": 500
}
```

**Keyword search with full business details merged in.**

```json
{
  "mode": "search",
  "searchTerms": ["coffee", "espresso bar"],
  "location": "Springfield, MO",
  "enrich": true,
  "maxItems": 100
}
```

**Photos and menu.**

```json
{
  "mode": "photos",
  "businesses": [
    "https://www.yelp.com/biz/gary-danko-san-francisco"
  ],
  "maxReviewsPerBusiness": 300
}
```

```json
{
  "mode": "menu",
  "businesses": [
    "https://www.yelp.com/biz/sotto-mare-san-francisco-4"
  ]
}
```

**Only reviews you have not seen before.** Run it on a schedule and each run returns the new ones.

```json
{
  "mode": "reviews",
  "businesses": [
    "https://www.yelp.com/biz/brendas-french-soul-food-san-francisco-6"
  ],
  "delta": true,
  "deltaStoreName": "yelp-delta"
}
```

### Output examples

Real rows from real runs. Where a value was too long to show, it is cut off at the end and marked with an ellipsis. Nothing is reordered, and no field is removed from the middle of a value.

**Business mode**, one row per business:

```json
{
  "recordType": "business",
  "businessEncid": "lJAGnYzku5zSaLnQ_T6_GQ",
  "businessAlias": "brendas-french-soul-food-san-francisco-6",
  "businessName": "Brenda's French Soul Food",
  "businessUrl": "https://www.yelp.com/biz/brendas-french-soul-food-san-francisco-6",
  "scrapedAt": "2026-09-15T16:03:08.077Z",
  "rating": 4.2,
  "reviewCount": 12864,
  "ratingCount1": 351,
  "ratingCount2": 487,
  "ratingCount3": 1465,
  "ratingCount4": 4199,
  "ratingCount5": 6366,
  "priceRange": "$$",
  "categories": "Breakfast & Brunch, Southern, Cajun/Creole",
  "phone": "(415) 345-8100",
  "website": "http://frenchsoulfood.com",
  "websiteIsTrusted": true,
  "addressLine1": "652 Polk St",
  "addressFormatted": "652 Polk St\nSan Francisco, CA 94102",
  "city": "San Francisco",
  "regionCode": "CA",
  "postalCode": "94102",
  "country": "US",
  "latitude": 37.78293189,
  "longitude": -122.41892117,
  "hasStorefrontAddress": true,
  "serviceArea": null,
  "hoursMonday": "8:00 AM - 3:00 PM",
  "hoursThursday": "8:00 AM - 8:00 PM",
  "isCurrentlyOpen": true,
  "isClosedPermanently": false,
  "amenities": "Takes reservations | Offers delivery | Offers take-out | Vegan options | Limited vegetarian options | Wheelchair accessible | ADA-compliant main entrance | No steps or stairs | ...",
  "attributes": "accepts_credit_cards | caters | corkage | gender_neutral_restrooms | offers_contactless_delivery | parking=street | wheelchair_accessible",
  "primaryPhotoUrl": "https://s3-media0.fl.yelpcdn.com/bphoto/isd_PODFOZ03BI7L8K-Now/l.jpg",
  "healthScore": "Pass",
  "healthScoreDate": "2026-01-30T08:00:00.000Z",
  "popularItems": "One Crawfish Beignet ($6.00) | Crawfish Beignets Order ($18.00) | Fried Chicken Benedict ($23.00) | French Toast ($15.00) | Crispy Pork Belly ($25.00) | Chocolate Beignets Order ($15.00) | ...",
  "popularItemsLabel": "Popular Dishes"
}
```

**Reviews mode**, one row per review. This one has an owner reply:

```json
{
  "recordType": "review",
  "businessName": "Marines' Memorial Club & Hotel",
  "businessUrl": "https://www.yelp.com/biz/marines-memorial-club-and-hotel-san-francisco-4",
  "scrapedAt": "2026-09-15T16:02:56.310Z",
  "reviewId": "1hjKwXoA5-v-FM1QOtY3FA",
  "reviewUrl": "https://www.yelp.com/biz/marines-memorial-club-and-hotel-san-francisco-4?hrid=1hjKwXoA5-v-FM1QOtY3FA",
  "rating": 5,
  "text": "My, oh my!!! We had such an incredibly good time at the Marines' Memorial Club and Hotel last weekend!!! ...",
  "language": "en",
  "publishedAtLocal": "2026-06-28T14:49:13-07:00",
  "isRecommended": true,
  "wasUpdated": false,
  "helpfulCount": 0,
  "thanksCount": 0,
  "loveThisCount": 1,
  "ohNoCount": 1,
  "photoCount": 0,
  "photoUrls": null,
  "ownerReplyText": "Robin, Thank you so much for the very kind review. We hope to see you again soon!",
  "ownerReplyAt": "2026-04-02T07:33:19-07:00",
  "ownerReplyBy": "Michael A.",
  "ownerReplyRole": "MANAGER",
  "reviewerId": "8YTTNVMNe0tQSW-bSOlGJw",
  "reviewerName": "Anne H.",
  "reviewerUrl": "https://www.yelp.com/user_details?userid=8YTTNVMNe0tQSW-bSOlGJw",
  "reviewerLocation": "Poulsbo, WA",
  "reviewerReviewCount": 1,
  "reviewerFriendCount": 0,
  "reviewerPhotoCount": 0,
  "reviewerIsElite": false,
  "reviewerEliteYear": null
}
```

**Hidden reviews**, one row per review, tagged with `reviewStatus`:

```json
{
  "recordType": "notRecommendedReview",
  "businessName": "Brenda's French Soul Food",
  "businessUrl": "https://www.yelp.com/biz/brendas-french-soul-food-san-francisco-6",
  "scrapedAt": "2026-09-15T16:02:44.315Z",
  "reviewId": "ULPIC9f1WuqHK--cR8ZtCA",
  "reviewStatus": "notRecommended",
  "isRecommended": false,
  "rating": 1,
  "text": "They DO NOT have the pulled pork sandwich anymore. The whole reason I came to this place. Will no longer be stopping by for any reason.",
  "publishedAtLocal": "2026-09-03T11:23:40-07:00",
  "reviewerId": "4--T71EdnMfQMuaEMry-CQ",
  "reviewerName": "Trisha B.",
  "reviewerLocation": "San Jose, CA",
  "reviewerReviewCount": 40,
  "reviewerFriendCount": 1,
  "reviewerPhotoCount": 16,
  "reviewerIsElite": false
}
```

**Search mode**, one row per result:

```json
{
  "recordType": "searchResult",
  "businessEncid": "8RYC23YQSEOIKaNEoC0c1A",
  "businessAlias": "architect-coffee-springfield",
  "businessName": "Architect Coffee",
  "businessUrl": "https://www.yelp.com/biz/architect-coffee-springfield",
  "scrapedAt": "2026-09-15T16:02:30.722Z",
  "searchTerm": "coffee",
  "searchLocation": "Springfield, MO",
  "resolvedLocation": "Springfield, MO",
  "searchRank": 1,
  "searchSlot": 1,
  "isAd": false,
  "snippet": "This coffee shop has vibe, great coffee, and great food. Farm fresh eggs, great Pastries, and one of...",
  "photoUrls": "https://s3-media0.fl.yelpcdn.com/bphoto/YpfeLN4PSftOXMDRMrxMxw/ls.jpg",
  "rating": 4.8,
  "reviewCount": 84,
  "priceRange": "$$",
  "categories": "Coffee & Tea",
  "addressLine1": "1604 E Republic Rd",
  "city": "Springfield",
  "neighborhood": null
}
```

`resolvedLocation` is the place Yelp actually searched. Type "Springfield" and Yelp picks one; this field tells you which, so you are never guessing whether you got Missouri or Illinois.

**Photos mode**, one row per photo:

```json
{
  "recordType": "photo",
  "businessName": "Gary Danko",
  "businessUrl": "https://www.yelp.com/biz/gary-danko-san-francisco",
  "scrapedAt": "2026-09-15T16:02:42.790Z",
  "photoId": "5dbjkeTld05HumeToIAhRQ",
  "photoUrl": "https://s3-media0.fl.yelpcdn.com/bphoto/5dbjkeTld05HumeToIAhRQ/o.jpg",
  "thumbnailUrl": "https://s3-media0.fl.yelpcdn.com/bphoto/5dbjkeTld05HumeToIAhRQ/348s.jpg",
  "caption": "Matcha cake",
  "width": 2000,
  "height": 1500,
  "uploadedBy": "Rie K.",
  "uploadedAt": "2022-10-16T01:35:42Z",
  "keywords": "dessert, food",
  "isFromReview": true,
  "reviewRating": 4,
  "format": "JPEG",
  "isFamilyFriendly": true
}
```

**Menu mode**, one row per item. Note the item priced two ways:

```json
{
  "recordType": "menuItem",
  "businessName": "Sotto Mare",
  "businessUrl": "https://www.yelp.com/biz/sotto-mare-san-francisco-4",
  "scrapedAt": "2026-09-15T16:02:59.683Z",
  "menuSection": "Appetizers",
  "itemName": "Oysters on Half Shell",
  "itemPrice": "2.00",
  "itemPriceVariants": "West Coast: $2.00 | East Coast: $3.00",
  "itemCurrency": "USD",
  "itemReviewCount": 16,
  "itemPhotoCount": 110,
  "itemPhotoUrl": "https://s3-media0.fl.yelpcdn.com/bphoto/rRn9hvJb2n8Dvc3XEWhDXg/60s.jpg",
  "itemDescription": null,
  "itemUrl": "https://www.yelp.com/menu/sotto-mare-san-francisco-4/item/oysters-on-half-shell"
}
```

### How much does Yelp Scraper cost?

**$3.00 per 1,000 rows**, plus $0.005 each time a run starts.

A row is one business, one review, one hidden review, one search result, one photo or one menu item.

| Plan | What your monthly credit buys |
|---|---|
| Free ($5) | about 1,660 rows |
| Starter ($29) | about 9,660 rows |

Two things that are easy to get wrong elsewhere, and are worth knowing:

- **Rows that report a problem are never charged.** Feed a dead URL and you get a row explaining what happened, for free.
- **The same business supplied twice is charged once.** Paste a URL, an alias and an ID for one place and you pay for one.

Every mode is available on every plan. Nothing is held back for paid users.

### Limitations

Straight answers, so nothing surprises you after you have paid.

- **Removed reviews have no text.** Yelp strips the body when it removes a review for breaking its terms, and often the reviewer's name too. You get the rating, the date and the reviewer's profile. The not recommended set does keep its full text.
- **Hidden reviews come lowest rated first.** That is Yelp's own order and it cannot be changed. If you cap at 20 you will get 20 one star reviews, which is usually what people want, but it is not a random sample.
- **Search returns about 200 businesses per query.** Yelp caps a search at 240 result slots and repeats some listings inside them, so a full walk usually yields a little over 200 distinct businesses. The run tells you when it hit that ceiling. For wider coverage, run more specific searches rather than deeper ones.
- **Sorting by Elite reviewers fails on very large businesses.** Yelp's own website breaks on that sort once a business has several thousand reviews. It works fine below that. Any other sort works at any size.
- **Searching reviews for a word overrides the sort and star filters.** Yelp returns text matches in its own relevance order. The run warns you when this happens.
- **Menus exist only where the business published one on Yelp.** Most do not. Asking for a menu that is not there gives you a clear row saying so, at no charge. Permanently closed businesses often still have their last menu online.
- **Photo and review counts move.** Yelp recounts constantly, so a total captured a minute apart can differ by a few.

### Frequently asked questions

**Do I need a Yelp account or an API key?**
No. Everything here is public data from public pages.

**Do I need to configure a proxy?**
No. Proxy handling and retries are built in and covered by the row price.

**How many reviews can I get from one business?**
All of them. There is no depth cap, and no page limit. Businesses with several thousand reviews return every one, and the run reconciles its count against the total Yelp reports.

**Can I get only new reviews since my last run?**
Yes. Set `delta` to true and give a `deltaStoreName`. Each run then returns only reviews it has not delivered before.

**What is the difference between "not recommended" and "removed" reviews?**
Not recommended reviews were filtered by Yelp's software but are still on the site, and they keep their full text. Removed reviews were taken down for breaking Yelp's terms, and Yelp deletes the text. Both arrive in the same mode, labelled by `reviewStatus`.

**Which countries does it work in?**
All of them. Paste a Yelp URL from any country. Addresses, phone numbers and currencies come back in local format.

**What happens if I paste a bad URL?**
You get a row explaining the problem and the run finishes normally. Bad input never fails the run and is never charged.

**How is this priced?**
$3.00 per 1,000 rows plus $0.005 per run start. Errors and duplicates are not charged.

### Your feedback

Found a bug, or need a field that is not here? Open an issue and it reaches a person:
[console.apify.com/actors/WuQhGHiEIjUOjwXCD/issues](https://console.apify.com/actors/WuQhGHiEIjUOjwXCD/issues)

### Legal

This actor collects publicly available information from Yelp, the same content any visitor can see without logging in. It does not collect private data and does not require an account.

You are responsible for how you use what you collect. Review text and reviewer names are personal data in many places, so if you store or publish them, make sure you have a lawful basis under GDPR, CCPA or your local equivalent. If you are unsure, take legal advice before you run this at scale.

# Actor input Schema

## `mode` (type: `string`):

Pick one. Business details, reviews, hidden reviews, photos and menus all take Yelp business URLs. Search takes keywords and a location instead.

## `businesses` (type: `array`):

Yelp business page URLs, the short alias from the URL such as gary-danko-san-francisco, or a 22 character business ID. Menu and photo page URLs work too.

## `searchTerms` (type: `array`):

Search mode only. One or more keywords, for example dentist or coffee shop. Yelp caps a search at 240 result slots and repeats some listings inside them, so one term returns roughly 200 distinct businesses. Several narrow terms reach far more than one broad one.

## `location` (type: `string`):

Search mode only. A city, neighbourhood or postal code, for example San Francisco, CA.

## `enrich` (type: `boolean`):

Search mode only. Adds phone, website, opening hours and the full rating breakdown to each search result. Merged into the same row, so you are still charged once per business. Name, rating, review count, price and address are always included without this.

## `sortBy` (type: `string`):

Reviews mode only. Ignored when Only new reviews is on, which always reads newest first. Elite reviewers first is a Yelp feature that times out on businesses with several thousand reviews, on Yelp's own site too; any other order works at any size.

## `ratings` (type: `array`):

Reviews mode only. Keep only these star ratings. Leave empty for all.

## `query` (type: `string`):

Reviews mode only. Keep only reviews mentioning this text. Yelp returns text matches in its own relevance order, so this overrides Review order and Star ratings.

## `delta` (type: `boolean`):

Reviews mode only. Returns just the reviews that appeared since the last run, so a daily schedule costs a handful of rows instead of the whole history. Runs must share the same storage name below.

## `deltaStoreName` (type: `string`):

Named storage that remembers which reviews were already delivered. Keep it the same across scheduled runs. Change it to start over.

## `maxReviewsPerBusiness` (type: `integer`):

Caps reviews, hidden reviews, photos or menu items per business. Leave at 0 for everything available. Ignored by Business details, which always returns one row per business.

## `maxItems` (type: `integer`):

Hard ceiling on rows for the whole run, across every business. 0 means no limit. Rows that report a problem are never counted or charged.

## `proxyConfiguration` (type: `object`):

Leave as is unless you have a reason to change it. Yelp works over datacenter proxy, which is the cheapest option; residential is used automatically only if datacenter gets blocked.

## Actor input object example

```json
{
  "mode": "business",
  "businesses": [
    "https://www.yelp.com/biz/gary-danko-san-francisco"
  ],
  "enrich": false,
  "sortBy": "RELEVANCE_DESC",
  "ratings": [],
  "delta": false,
  "deltaStoreName": "yelp-delta",
  "maxReviewsPerBusiness": 20,
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All rows from this run: business details, reviews, hidden reviews, search results, photos or menu items depending on the mode.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "business",
    "businesses": [
        "https://www.yelp.com/biz/gary-danko-san-francisco"
    ],
    "maxReviewsPerBusiness": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("sourabhbgp/yelp-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "business",
    "businesses": ["https://www.yelp.com/biz/gary-danko-san-francisco"],
    "maxReviewsPerBusiness": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("sourabhbgp/yelp-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "business",
  "businesses": [
    "https://www.yelp.com/biz/gary-danko-san-francisco"
  ],
  "maxReviewsPerBusiness": 20
}' |
apify call sourabhbgp/yelp-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sourabhbgp/yelp-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WuQhGHiEIjUOjwXCD/builds/Z68F8FJiCbtY0drlh/openapi.json
