# Yelp Reviews Scraper - Export All Reviews & Owner Replies (`headply/yelp-reviews-scraper`) Actor

Export every Yelp review for any business: full text, star rating, date, reactions, photos and owner replies. Filter by stars or date, or fetch only new reviews since your last run for review monitoring. $0.30 per 1,000 reviews.

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

## Pricing

from $0.18 / 1,000 reviews

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

Scrape **every Yelp review** for any business: full text, star rating, date, reactions, photos and the **owner's public reply**. Filter by stars or date, and turn on **only new reviews since my last run** to monitor businesses on a schedule and pay only for what is new. No login, no Yelp API key.

It is built for reputation-management platforms, franchise and multi-location operators, agencies and review-analytics tools. The Yelp API returns at most three review excerpts per business; this Actor returns every review in full.

#### Sample output (real run: plumbers in Austin, TX)

| Business | Rating | Reviews | Phone | Website | City |
|---|---|---|---|---|---|
| Blue Dragon Plumbing | 4.9 | 532 | (512) 947-2491 | bluedragonplumbing.com | Austin |
| Rooterman Plumbing | 4.7 | 516 | (512) 900-7676 | rootermanofaustin.com | Austin |
| Proven Plumbing & Air | 4.9 | 417 | (512) 775-1234 | callproven.com | Cedar Park |
| A\&T Service Plumbing | 4.8 | 372 | (512) 825-0983 | atserviceplumbing.com | Austin |

Each business also includes address, coordinates, hours, categories, price range, photos and Yelp URL. Reviews come as separate rows with full text, stars, date and owner reply.

#### Why this one

| | This Actor | Yelp Fusion API | Typical Store alternative |
|---|---|---|---|
| Reviews per business | **All of them** | 3 excerpts | All, slower |
| Businesses per search | Whole city (tiles past the 240 cap) | 240 max | Usually capped |
| Only-new-reviews mode | Yes | No | Rarely |
| Price | **$3 / 1,000 businesses, $0.30 / 1,000 reviews** | $7.99 to $14.99 / 1,000 calls | $0.30 to $5 / 1,000 reviews, often plus start fees |

**What it costs:** a 1,000-business lead list = $3. All 2,000 reviews of a busy restaurant = $0.60.

### What this Actor does

- Takes **Yelp business URLs**, or finds businesses by search term and location, and returns their reviews.
- Gets **all reviews** or the newest N, newest first, oldest first or in Yelp's recommended order. Pages are fetched in parallel, so thousands of reviews take minutes.
- Returns **the owner's reply** with its date, which is what response-rate and response-time reporting needs.
- **Filters by star rating**, for example 1 and 2 stars for complaint tracking, or by date or language.
- **Only new reviews since my last run.** It remembers the newest review seen per business, so scheduled runs return, and charge for, new reviews only.
- Adds one business record per business with rating, review count, categories and contact details.

### What data do you get?

| Field | Example |
| --- | --- |
| reviewId | HW0ZygMXZtlM\_u-C3z3FLw |
| businessName, businessId, businessUrl | Tartine Bakery |
| rating | 5 |
| date | 2026-09-14T06:40:19-07:00 |
| text | The full review |
| language | en |
| helpfulCount, thanksCount, loveThisCount, ohNoCount | 2, 0, 1, 0 |
| photos | Photo URLs attached to the review |
| isUpdated | Whether the reviewer updated the review |
| ownerReply | text, date and owner role |
| reviewer (opt-in) | name, location, review count, Elite year |

### How to scrape Yelp reviews

1. Paste one or more **Yelp business URLs**.
2. Set **Maximum reviews per business** (0 for all).
3. Optionally filter by **star rating** or **date**, and turn on **Only reviews new since my last run** for monitoring.
4. Run it, or schedule it daily, and export to JSON, CSV or Excel.

#### Example: track new 1- and 2-star reviews every day

```json
{
  "startUrls": [{"url": "https://www.yelp.com/biz/tartine-bakery-san-francisco"}],
  "maxReviewsPerBusiness": 0,
  "reviewRatings": ["1", "2"],
  "onlyNewReviews": true
}
```

### How much does it cost?

You pay per review returned, with lower prices on higher Apify plans, plus a small charge per business. Reviews that your filters skip are not charged. With only-new-reviews on, daily monitoring of a location that gets a few reviews a week costs cents a month. Current prices are on the pricing tab.

### FAQ

**Are reviewer names included?** Only if you turn on *Include reviewer name and profile stats*. They identify people, so they are off by default.

**Does it include "not recommended" reviews?** No, only reviews Yelp shows by default.

**How far back does it go?** To the business's first review; for older businesses that can be 2005.

### Related Actors

- [Yelp Scraper](https://apify.com/headply/yelp-scraper): whole-city business search with contact details, past Yelp's 240-result limit.

### Use it as an API

Run it from your own code and get the results back in one call. Replace `YOUR_TOKEN` with your [Apify API token](https://console.apify.com/settings/integrations).

```bash
curl -X POST "https://api.apify.com/v2/acts/headply~yelp-reviews-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls": [{"url": "https://www.yelp.com/biz/tartine-bakery-san-francisco"}], "maxReviewsPerBusiness": 100}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run_input = {'startUrls': [{'url': 'https://www.yelp.com/biz/tartine-bakery-san-francisco'}],
 'maxReviewsPerBusiness': 100}
run = client.actor("headply/yelp-reviews-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

It also works from Make, Zapier, n8n, Google Sheets and as a tool for AI agents through the [Apify MCP server](https://mcp.apify.com/?tools=headply/yelp-reviews-scraper).

### More data tools from the same developer

- [Threads Scraper & API](https://apify.com/headply/threads-scraper): posts, reply trees, profiles and keyword search from Threads
- [Yelp Scraper & API](https://apify.com/headply/yelp-scraper): every business in a city with phones, websites and all reviews
- [TikTok & YouTube Transcript API](https://apify.com/headply/tiktok-youtube-transcript-scraper): video to text, even without captions
- [Google Trends Scraper & API](https://apify.com/headply/google-trends-scraper): hundreds of keywords on one scale, daily history
- [Airbnb & Vrbo Scraper](https://apify.com/headply/airbnb-vrbo-scraper): listings, calendars, occupancy and revenue
- [Jumia Scraper & API](https://apify.com/headply/jumia-price-intelligence): prices and sellers across 8 African countries

# Changelog

This Actor's version history is a separate document: https://apify.com/headply/yelp-reviews-scraper/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

Yelp business pages to collect reviews from, for example <b>https://www.yelp.com/biz/tartine-bakery-san-francisco</b>.

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

0 means all reviews. Popular businesses have thousands.

## `reviewsSort` (type: `string`):

Which reviews come first.

## `reviewRatings` (type: `array`):

For example 1 and 2 to collect only negative reviews. Leave empty for all.

## `reviewsNewerThan` (type: `string`):

Skip reviews on or before this date.

## `onlyNewReviews` (type: `boolean`):

Remembers the newest review seen for each business and returns only newer ones next time. Ideal for scheduled monitoring: you pay only for new reviews.

## `reviewLanguage` (type: `string`):

Language code such as <b>en</b>, <b>fr</b> or <b>es</b>. Leave empty for Yelp's default for the business.

## `includeReviewerDetails` (type: `boolean`):

Reviewer display name, location, review count and Elite status. Off by default: these identify people, so only turn this on if you have a lawful reason to process them.

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

Search terms, one per line, as you would type them on Yelp: <b>plumber</b>, <b>sushi</b>, <b>dentist</b>. Each term is searched in every location below.

## `locations` (type: `array`):

Cities, neighborhoods or ZIP codes, one per line: <b>Austin, TX</b>, <b>Brooklyn, NY</b>, <b>94110</b>.

## `maxBusinessesPerSearch` (type: `integer`):

Stop each search term + location after this many businesses. Yelp itself shows at most 240 per search; above that, the Actor searches from a grid of points across the area to find more.

## `maxConcurrency` (type: `integer`):

Businesses and review pages fetched at once.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.yelp.com/biz/tartine-bakery-san-francisco"
    }
  ],
  "maxReviewsPerBusiness": 100,
  "reviewsSort": "newest",
  "onlyNewReviews": false,
  "includeReviewerDetails": false,
  "maxBusinessesPerSearch": 20,
  "maxConcurrency": 10
}
```

# Actor output Schema

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

One item per business and, when reviews are on, one per review.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.yelp.com/biz/tartine-bakery-san-francisco"
        }
    ],
    "maxBusinessesPerSearch": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("headply/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 = {
    "startUrls": [{ "url": "https://www.yelp.com/biz/tartine-bakery-san-francisco" }],
    "maxBusinessesPerSearch": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("headply/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 '{
  "startUrls": [
    {
      "url": "https://www.yelp.com/biz/tartine-bakery-san-francisco"
    }
  ],
  "maxBusinessesPerSearch": 20
}' |
apify call headply/yelp-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,headply/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/luXIbNwT8prXQzIGL/builds/eV1fYLslegH6F6MJk/openapi.json
