# Yelp Reviews Scraper (`thescrappa/yelp-reviews-scraper`) Actor

Export Yelp reviews with star rating, full text, date, language, photos, reactions and reviewer name, location and review count. Paste Yelp links or aliases, scrape many businesses in one run, sort by newest or lowest and filter by star rating.

- **URL**: https://apify.com/thescrappa/yelp-reviews-scraper.md
- **Developed by:** [Scrappa](https://apify.com/thescrappa) (community)
- **Categories:** Marketing, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.30 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Yelp Reviews Scraper

Export the Yelp reviews of any business as one clean row per review: star rating, full text, date and time, language, photos, the helpful, thanks, love this and oh no reactions, and the reviewer's name, location and review count. Paste Yelp links or aliases, add up to 100 businesses per run, sort by newest, oldest, highest, lowest or elite reviewers, and keep only one star rating if you want. Each row also carries the business name and alias, so you can compare businesses in one sheet.

### What data can you extract?

| Field | Type | Description |
| --- | --- | --- |
| `review_id` | String | Yelp ID of the review. |
| `rating` | Integer | Star rating from 1 to 5. |
| `text` | String | Full review text. |
| `created_at` | String | ISO 8601 date and time in UTC when the review was posted. |
| `language` | String or null | Two-letter language code of the review, such as en. |
| `author_name` | String | Public Yelp name of the reviewer, such as Dana R. |
| `author_location` | String or null | Home town of the reviewer as shown on Yelp. |
| `author_review_count` | Integer or null | Number of reviews the reviewer wrote on Yelp. |
| `author_friend_count` | Integer or null | Number of Yelp friends of the reviewer. |
| `author_id` | String | Yelp user ID of the reviewer. |
| `author_url` | String | Yelp profile page of the reviewer. |
| `photos` | Array\<String> or null | Links to the photos the reviewer added. |
| `helpful_count` | Integer or null | Number of Helpful reactions. Null when there are none. |
| `thanks_count` | Integer or null | Number of Thanks reactions. Null when there are none. |
| `love_this_count` | Integer or null | Number of Love this reactions. Null when there are none. |
| `oh_no_count` | Integer or null | Number of Oh no reactions. Null when there are none. |
| `review_url` | String | Link to the review on Yelp. |
| `business_alias` | String | Yelp alias of the business. |
| `business_name` | String | Name of the business. |
| `business_id` | String | 22-character Yelp business ID. |
| `business_url` | String | Yelp page of the business. |
| `business_review_count` | Integer or null | Total number of Yelp reviews of the business. |
| `input_business` | String | The link, alias or ID from your input. |
| `scraped_at` | String | UTC date and time when this record was collected. |

### Use cases

- Restaurant and shop owners can track new Yelp reviews of their own business and their competitors.
- Agencies can collect the 1 and 2 star reviews of a business to find what customers complain about.
- Analysts can measure customer sentiment across many branches of a chain.
- Data teams can build training sets for review summaries and sentiment models.
- Marketing teams can find authentic 5 star customer quotes for websites and ads.

### How to use

1. Add one entry per business to `businesses`, with a Yelp link such as `https://www.yelp.com/biz/pequods-pizza-chicago-3` or an alias.
2. Optional: set `sort` to `newest` for the latest reviews, and `rating` to a star rating from 1 to 5.
3. Set `maxResults` to the number of reviews you want for each business.
4. Start the run. Each review gives one dataset row with the business name and alias.

```json
{
  "businesses": [
    {
      "business": "https://www.yelp.com/biz/pequods-pizza-chicago-3"
    }
  ],
  "sort": "newest",
  "maxResults": 20
}
```

### Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `businesses` | Array\<object> | Yes | Yelp businesses to scrape, one per entry. Paste the Yelp link, the alias or the business ID. Each entry can set its own sort order and star rating filter. |
| `businesses[].business` | string | Yes per entry | Yelp business alias such as gary-danko-san-francisco, the 22-character business ID, or the yelp.com/biz link. The Actor reads the alias after /biz/ in the link. |
| `businesses[].sort` | string | No | Order of the reviews. Leave empty for the Yelp default order (most relevant). |
| `businesses[].rating` | integer | No | Only reviews with exactly this star rating, from 1 to 5. Leave empty for all ratings. |
| `sort` | string | No | Order of the reviews. Leave empty for the Yelp default order (most relevant). |
| `rating` | integer | No | Only reviews with exactly this star rating, from 1 to 5. Leave empty for all ratings. |
| `maxResults` | integer | No | Maximum reviews to save for each business. Yelp returns 10 reviews per page. |
| `maxPages` | integer | No | Maximum pages to request for each batch entry. |

### Output example

```json
{
  "review_id": "Hk3vQ8mZp1LcW7rT2yBn5A",
  "rating": 5,
  "text": "The al pastor tacos are the best I have had in Austin. Tortillas are made right in front of you and the green salsa has real heat. We waited ten minutes on a Friday night, which was fine.",
  "created_at": "2026-10-18T19:47:10Z",
  "language": "en",
  "author_name": "Dana R.",
  "author_location": "Round Rock, TX",
  "author_review_count": 87,
  "author_friend_count": 12,
  "author_id": "Rf2LxK9wQm4TzB7cN1pVhg",
  "author_url": "https://www.yelp.com/user_details?userid=Rf2LxK9wQm4TzB7cN1pVhg",
  "photos": [
    "https://s3-media0.fl.yelpcdn.com/bphoto/Tq8vYb2NcL5mWx1Rk7Ha3g/o.jpg"
  ],
  "helpful_count": 3,
  "thanks_count": 1,
  "love_this_count": 2,
  "oh_no_count": 1,
  "review_url": "https://www.yelp.com/biz/la-cocina-roja-austin?hrid=Hk3vQ8mZp1LcW7rT2yBn5A",
  "business_alias": "la-cocina-roja-austin",
  "business_name": "La Cocina Roja",
  "business_id": "q7Lm2Xc9RtYv4BnW8aKd1Q",
  "business_url": "https://www.yelp.com/biz/la-cocina-roja-austin",
  "business_review_count": 1284,
  "input_business": "https://www.yelp.com/biz/pequods-pizza-chicago-3",
  "scraped_at": "2026-10-01T12:00:00Z"
}
```

### Pricing

$0.38 per 1,000 results. Apify saves one dataset item per result and applies the Actor’s per-result price to saved items.

Pagination follows the source response. Set **maxPages** per batch entry and **maxResults** for each entry.

### FAQ

#### Is scraping this information legal?

Rules depend on the source, location, data type, and intended use. Check applicable laws and source terms, and make sure your workflow follows privacy and data protection requirements.

#### What limits apply?

Submit up to 100 batch entries per run. Use **maxResults** to cap saved items for each entry and **maxPages** to limit pages for each entry. Results also depend on source availability and your Scrappa API plan.

#### Can I start runs through the Apify API?

Yes. Send a POST request to `https://api.apify.com/v2/acts/thescrappa~yelp-reviews-scraper/runs` with your Actor input, or use an Apify client library. Read the output from the run dataset.

#### Can I connect the results to other tools?

Yes. Apify integrations and APIs can pass dataset results to Make, Zapier, n8n, Google Sheets, and other data workflows.

#### What happens when one input fails?

The Actor logs a short source error and continues with the remaining entries. Transient rate limits and gateway errors are retried; if every entry fails, the run reports an error.

#### How many reviews can I get for one business?

Up to 2,000 per business and run, 10 per page. Set maxResults to stop earlier. Yelp may show fewer reviews than the review count on the page, because it hides reviews that its software does not recommend.

#### How do I get only new reviews?

Set sort to newest and maxResults to a small number, such as 20. Run it on a schedule and keep the review_id to skip reviews you already have.

#### Why are the reaction counts or photos sometimes empty?

The fields are null when nobody reacted to the review or the reviewer added no photos.

### Related Scrappa Actors

- [Yelp Search Scraper](https://apify.com/thescrappa/yelp-search-scraper)
- [Yelp Business Details Scraper](https://apify.com/thescrappa/yelp-business-scraper)
- [Google Maps Search Scraper](https://apify.com/thescrappa/google-maps-search-scraper)
- [Google Maps Reviews Scraper](https://apify.com/thescrappa/google-maps-reviews-scraper)
- [Tripadvisor Reviews Scraper](https://apify.com/thescrappa/tripadvisor-reviews-scraper)

# Actor input Schema

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

Yelp businesses to scrape, one per entry. Paste the Yelp link, the alias or the business ID. Each entry can set its own sort order and star rating filter.

## `sort` (type: `string`):

Order of the reviews. Leave empty for the Yelp default order (most relevant).

## `rating` (type: `integer`):

Only reviews with exactly this star rating, from 1 to 5. Leave empty for all ratings.

## `maxResults` (type: `integer`):

Maximum reviews to save for each business. Yelp returns 10 reviews per page.

## `maxPages` (type: `integer`):

Maximum pages to request for each batch entry.

## Actor input object example

```json
{
  "businesses": [
    {
      "business": "https://www.yelp.com/biz/pequods-pizza-chicago-3"
    }
  ],
  "sort": "newest",
  "maxResults": 20,
  "maxPages": 200
}
```

# Actor output Schema

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

All results from this run in the default dataset.

# 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 = {
    "businesses": [
        {
            "business": "https://www.yelp.com/biz/pequods-pizza-chicago-3"
        }
    ],
    "sort": "newest",
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("thescrappa/yelp-reviews-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 = {
    "businesses": [{ "business": "https://www.yelp.com/biz/pequods-pizza-chicago-3" }],
    "sort": "newest",
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("thescrappa/yelp-reviews-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 '{
  "businesses": [
    {
      "business": "https://www.yelp.com/biz/pequods-pizza-chicago-3"
    }
  ],
  "sort": "newest",
  "maxResults": 20
}' |
apify call thescrappa/yelp-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thescrappa/yelp-reviews-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/4nFgfqG6Gbp9QDV5e/builds/58ajJNBduu1XJy7YD/openapi.json
