# Yelp Scraper (`scraptivo/yelp-scraper`) Actor

Scrape Yelp business listings by search term, category, location, or URL. Optional full business details with phone, hours, website, and reviews.

- **URL**: https://apify.com/scraptivo/yelp-scraper.md
- **Developed by:** [Scraptivo](https://apify.com/scraptivo) (community)
- **Categories:** E-commerce, MCP servers, Automation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 business scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

**Yelp Scraper** collects business listings and reviews from Yelp and turns them into structured data for lead generation, market research, and local business monitoring. Provide a search term, location, or Yelp URL, run the Actor, and export business names, ratings, review counts, addresses, phone numbers, websites, opening hours, and reviews to JSON, CSV, Excel, or your preferred integration. Use it to build local business lists, monitor competitors, and track ratings over time. Scraping 1,000 businesses costs $1.50, with optional full business details for an extra $0.003 per business.

### What can you automate with Yelp Scraper?

- **Build targeted local business lists** — search by category and location, then export names, ratings, categories, and addresses for outreach.
- **Collect reviews and ratings** — gather review text, author, rating, and date for sentiment and reputation analysis.
- **Enrich business records with details** — enable full details to fetch phone, website, opening hours, and attributes per business.
- **Monitor competitors** — schedule recurring runs to track rating and review-count changes.
- **Feed a CRM or spreadsheet** — export JSON, CSV, or Excel and push new records into your pipeline.

### Who is this scraper for?

| Team | Workflow |
|---|---|
| Lead-generation agencies | Pull business name, category, phone, and website to build local prospect lists. |
| Market researchers | Analyze rating distributions and category density across cities. |
| Reputation and review analysts | Collect review text and ratings to track sentiment over time. |
| Sales teams | Enrich CRM records with up-to-date Yelp business details. |

### What data can you collect from Yelp?

| Data group | Example fields | How it helps |
|---|---|---|
| Business identity | name, url, categories, alias | Identify and link the listing. |
| Reputation | rating, reviewCount, priceRange, isOpenNow | Qualify and prioritize businesses. |
| Contact and location | address, city, phone, website, latitude, longitude | Reach and map businesses. |
| Reviews | reviews\[] (rating, text, author, date) | Sentiment and reputation analysis. |

Phone, website, opening hours, attributes, and reviews are only present when **Scrape Business Details** is enabled.

### How to use Yelp Scraper

1. Open the Actor in the Scraptivo account.
2. Enter a search term and location, or paste a Yelp search or business URL.
3. Choose the country site, enable business details if needed, and set a limit.
4. Run the Actor.
5. Export the dataset to JSON, CSV, Excel, or your integration.

```json
{ "searchTerm": "Pizza", "location": "Berlin", "countryCode": "DE", "scrapeDetails": true, "maxItems": 20 }
```

### Example workflow

#### Build a weekly list of highly rated restaurants in Berlin

1. Run a "Restaurants" search for Berlin every Monday.
2. Keep businesses with a rating above 4.0 and more than 50 reviews.
3. Send new records to Google Sheets or a CRM.
4. Deduplicate using the stable business `url`.

### Automate and integrate your results

- **Schedule** daily or weekly runs per search term or category using Apify's Scheduler or the API.
- **Webhooks** after a successful run to trigger your downstream pipeline.
- **Export** to Google Sheets, Make, Zapier, Slack, or a database.
- **Deduplicate** using the stable business `url` field.

```shell
curl "https://api.apify.com/v2/acts/scraptivo~yelp-scraper/run-sync" -H "Content-Type: application/json" -d '{"searchTerm":"Pizza","location":"Berlin","countryCode":"DE","maxItems":20}'
```

### Input reference

| Field | Type | Required | Default | What it controls |
|---|---|---|---:|---|
| startUrls | array | no | — | Preferred input: Yelp search or business page URLs. |
| searchTerm | string | no | "Lunch" | Keyword or Yelp category to search. |
| location | string | no | "Berlin" | City or area to search in. |
| searchQueries | array | no | — | Alternative list of "term in location" queries. |
| countryCode | string | no | US | Which Yelp regional site to use. |
| scrapeDetails | boolean | no | false | Fetch phone, website, hours, reviews (extra charge). |
| maxItems | integer | no | 0 | Maximum businesses to scrape (0 = unlimited). |
| proxyConfiguration | object | no | RESIDENTIAL | Proxy settings; residential recommended for DataDome. |

### Output example

```json
{
  "name": "Café Bondi",
  "url": "https://www.yelp.de/biz/café-bondi-berlin-2",
  "rating": 4.2,
  "reviewCount": 117,
  "priceRange": "€€",
  "categories": ["Frühstück & Brunch", "Café"],
  "address": "Eichendorffstr. 6, Berlin, BE, 10115",
  "city": "Berlin",
  "isOpenNow": true,
  "searchTerm": "Lunch",
  "detailsFetched": true
}
```

### How much does it cost to scrape Yelp?

Yelp Scraper uses pay-per-event billing on Apify:

- **$0.0015 per business scraped** (the headline result event).
- **+$0.003 per business** when **Scrape Business Details** is enabled (detail fetch).
- **$0.00005 per run** for the actor-start event.

Examples: 100 businesses without details cost about $0.15; 1,000 businesses with details cost about $4.50 plus the start fee. Residential proxy traffic is billed separately by Apify according to your plan.

### Reliability and responsible use

- Yelp uses DataDome bot protection; residential proxies are recommended and enabled by default.
- Phone, website, hours, and reviews are only present when `scrapeDetails` is enabled.
- Some fields (phone, website, latitude, longitude) can be empty when a business has not published them.
- Scrape only public business data and follow Yelp's terms of service.

### Frequently asked questions

#### Can I scrape specific business categories from Yelp?

Yes. Set `searchTerm` to a Yelp category such as "Restaurants", "Pizza", or "Coffee & Cafes", and choose a `countryCode` and `location`.

#### Can I schedule Yelp Scraper to run automatically?

Yes. Use Apify's Scheduler or the API to run a search term, location, or URL on a daily or weekly cadence.

#### What counts as one result?

One business listing. If you enable **Scrape Business Details**, each successful detail fetch adds a separate `listing-details` event.

#### Why are some fields empty?

Phone, website, hours, and reviews are only fetched when `scrapeDetails` is enabled, and individual businesses may not publish every field.

#### How do I avoid duplicate records?

Deduplicate on the stable business `url` (or `businessId`) field before writing to your CRM or spreadsheet.

#### Do I need a proxy?

Yes. Yelp's DataDome protection blocks datacenter IPs; residential proxies are enabled by default.

### Related Scraptivo automations

- [BBB Scraper](https://apify.com/scraptivo/bbb-scraper) — business details and accreditation from the Better Business Bureau.
- [Clutch Scraper](https://apify.com/scraptivo/clutch-scraper) — B2B service provider profiles and reviews.
- [Rotten Tomatoes Reviews Scraper](https://apify.com/scraptivo/rottentomatoes-reviews-scraper) — movie and TV ratings and reviews.

### Support and custom workflows

Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, a sample URL, the required fields, and expected volume so we can assess the request.

# Actor input Schema

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

Preferred input. Paste Yelp search URLs (e.g. https://www.yelp.de/search?find\_desc=Lunch\&find\_loc=Berlin) or business page URLs (e.g. https://www.yelp.com/biz/example-business-name). Domain is taken from the URL host.

## `searchTerm` (type: `string`):

What to find — a keyword or Yelp category such as Restaurants, Lunch, Pizza, Coffee & Cafes, Contractors & Handymen, etc.

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

City or area to search in (e.g. Berlin, Frankfurt am Main, New York, NY). Uses Yelp location autocomplete when possible.

## `searchQueries` (type: `array`):

Alternative to searchTerm + location. Each item can be "term in location" or "term | location" (e.g. "Pizza in Berlin").

## `countryCode` (type: `string`):

Which Yelp regional site to use for searchTerm/location/searchQueries when startUrls are not provided. Ignored when startUrls include a host.

## `scrapeDetails` (type: `boolean`):

When enabled, fetches full business details (phone, website, hours, attributes, review snippets, photos). Charges an extra listing-details event per successful detail fetch. Disabled by default for faster, cheaper listing-only runs.

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

Maximum number of businesses to scrape (0 = unlimited)

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

Proxy settings. Residential proxies are recommended — Yelp uses DataDome bot protection.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.yelp.de/search?find_desc=Lunch&find_loc=Berlin"
    }
  ],
  "searchTerm": "Lunch",
  "location": "Berlin",
  "countryCode": "US",
  "scrapeDetails": false,
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset containing scraped Yelp businesses

## `runStats` (type: `string`):

Key-value store record with recordsScraped and timestamps

# 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.de/search?find_desc=Lunch&find_loc=Berlin"
        }
    ],
    "searchTerm": "Lunch",
    "location": "Berlin",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraptivo/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 = {
    "startUrls": [{ "url": "https://www.yelp.de/search?find_desc=Lunch&find_loc=Berlin" }],
    "searchTerm": "Lunch",
    "location": "Berlin",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scraptivo/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 '{
  "startUrls": [
    {
      "url": "https://www.yelp.de/search?find_desc=Lunch&find_loc=Berlin"
    }
  ],
  "searchTerm": "Lunch",
  "location": "Berlin",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scraptivo/yelp-scraper --silent --output-dataset

```

## MCP server setup

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