# Yelp Business & Reviews Scraper (APP) (`dreamland-blog/yelp-scraper`) Actor

Scrapes Yelp business listings and reviews by search terms and regions.

- **URL**: https://apify.com/dreamland-blog/yelp-scraper.md
- **Developed by:** [DreamLand](https://apify.com/dreamland-blog) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 33.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.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?

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 Business & Reviews Scraper

Scrape Yelp business listings and reviews at scale. Search by any keyword across 12+ regions worldwide, and extract rich structured data including business details, ratings, photos, hours, attributes, and full review text.

### What data can you extract?

#### Business Data

Each business result contains **60+ fields** of structured data:

| Field | Example |
|-------|---------|
| Business Name | Marufuku Ramen - San Francisco |
| Business ID | HHtpR0RslupSQ99GIIwW5A |
| Rating | 4.5 |
| Review Count | 6,042 |
| Price Level | $$ |
| Phone | (415) 872-9786 |
| Full Address | 1581 Webster St, Ste 235, San Francisco, CA 94115 |
| Coordinates | 37.7849, -122.4317 |
| Categories | Ramen, Noodles |
| Neighborhoods | Lower Pacific Heights, Japantown |
| Business Hours | Mon-Sun 11:00 am - 10:00 pm |
| Photos | URLs to business photos |
| Website | marufukuramen.com |
| Business Attributes | Takes Reservations, Offers Delivery, Outdoor Seating, Wi-Fi, Parking, etc. |

#### Review Data

| Field | Description |
|-------|-------------|
| Review Text | Full review content |
| Rating | Individual review rating |
| Reviewer Info | Reviewer name and details |
| Date | Review timestamp |
| Business ID | Linked business reference |

### Supported Regions

US, TW (Taiwan), SG (Singapore), TH (Thailand), HK (Hong Kong), JP (Japan), KR (Korea), MY (Malaysia), CT, ID (Indonesia), PH (Philippines), TX, and more.

### How to Use

#### Step 1: Search Businesses

Set **Spider Name** to `yelp`, enter your search keywords, and choose target regions.

**Example - Search restaurants in the US and Japan:**

```json
{
    "spider_name": "yelp",
    "search_terms": "Restaurants",
    "regions": "US|JP"
}
```

**Example - Search multiple categories:**

```json
{
    "spider_name": "yelp",
    "search_terms": "Plumbers,Electricians,HVAC",
    "regions": "US"
}
```

#### Step 2: Scrape Reviews (Optional)

After collecting businesses, scrape their reviews by providing the Dataset ID from Step 1.

Set **Spider Name** to `reviews` and enter the Dataset ID:

```json
{
    "spider_name": "reviews",
    "review_input_dataset_id": "YOUR_DATASET_ID_FROM_STEP_1",
    "review_limit": 20
}
```

### Input Parameters

| Parameter | Required | Default | Description |
|-----------|----------|---------|-------------|
| `spider_name` | Yes | `yelp` | `yelp` for business search, `reviews` for review scraping |
| `search_terms` | No | `Custom T Shirts` | Comma-separated keywords |
| `regions` | No | All regions | Pipe-separated region codes (e.g., `US\|JP\|TW`) |
| `per_page` | No | 30 | Results per page (1-50) |
| `review_input_dataset_id` | No | - | Dataset ID for review spider input |
| `review_limit` | No | 20 | Max reviews per business (1-50) |
| `proxy_url` | No | - | Custom proxy URL |

### Output Example

```json
{
    "business": {
        "id": "HHtpR0RslupSQ99GIIwW5A",
        "name": "Marufuku Ramen - San Francisco",
        "alias": "marufuku-ramen-san-francisco-san-francisco-2",
        "address1": "1581 Webster St",
        "city": "San Francisco",
        "state": "CA",
        "zip": "94115",
        "country": "US",
        "phone": "4158729786",
        "avg_rating": 4.5,
        "review_count": 6042,
        "price": 2,
        "localized_price": "$$",
        "latitude": 37.7849544,
        "longitude": -122.4317274,
        "categories": [
            {"name": "Ramen", "category_filter": "ramen"},
            {"name": "Noodles", "category_filter": "noodles"}
        ],
        "neighborhoods": ["Lower Pacific Heights", "Japantown"],
        "localized_hours": ["Mon-Sun 11:00 am - 10:00 pm"],
        "photo_url": "https://s3-media0.fl.yelpcdn.com/bphoto/.../ms.jpg",
        "photo_count": 9239,
        "localized_attributes": [
            {"label": "Takes Reservations", "value": "No"},
            {"label": "Offers Delivery", "value": "Yes"},
            {"label": "Outdoor Seating", "value": "No"},
            {"label": "Wi-Fi", "value": "No"},
            {"label": "Alcohol", "value": "Full Bar"}
        ]
    }
}
```

### Use Cases

- **Lead Generation**: Find businesses by category and region, with phone numbers and addresses
- **Market Research**: Analyze ratings, review counts, and pricing across competitors
- **Location Intelligence**: Extract coordinates and neighborhood data for mapping
- **Sentiment Analysis**: Collect reviews for NLP and sentiment analysis
- **Competitive Analysis**: Compare business attributes like hours, amenities, and services

### Proxy Support

For high-volume scraping, provide a proxy URL in the input settings to avoid rate limiting. The scraper includes built-in request throttling (1 request/second) and automatic deduplication.

### Integrations

Export your data in any format:

- **JSON / CSV / Excel** - Download directly from the Apify Console
- **API** - Access results programmatically via the Apify API
- **Webhooks** - Get notified when a run completes
- **Integrations** - Connect to Google Sheets, Slack, Zapier, Make, and more

# Actor input Schema

## `spider_name` (type: `string`):

Which spider to run: 'yelp' for business search, 'reviews' for review scraping.

## `search_terms` (type: `string`):

Comma-separated search terms (for 'yelp' spider). Example: 'Custom T Shirts,Restaurants'

## `regions` (type: `string`):

Pipe-separated region codes. Example: 'US|TW|JP'

## `per_page` (type: `integer`):

Number of results per page for business search.

## `review_input_dataset_id` (type: `string`):

Apify Dataset ID containing business data (for 'reviews' spider). Leave empty to use KV store input file.

## `review_limit` (type: `integer`):

Max reviews to fetch per request (for 'reviews' spider).

## `proxy_url` (type: `string`):

Proxy URL for requests. Example: 'http://user:pass@proxy:port'

## Actor input object example

```json
{
  "spider_name": "yelp",
  "search_terms": "Custom T Shirts",
  "regions": "TW|SG|TH|HK|JP|KR|MY|CT|ID|PH|TX|US",
  "per_page": 30,
  "review_limit": 20
}
```

# Actor output Schema

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

Business listings with name, rating, review count, phone, address, and categories

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("dreamland-blog/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("dreamland-blog/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 '{}' |
apify call dreamland-blog/yelp-scraper --silent --output-dataset

```

## MCP server setup

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