# Yelp Business Scraper — Phone, Address, Rating & More (`scrapersdelight/yelp-business-scraper`) Actor

Scrape Yelp business listings by search term + location — business name, phone, address, website, categories, rating and review count. Via Yelp's own search backend. No login. Export JSON, CSV, Excel or Google Sheets.

- **URL**: https://apify.com/scrapersdelight/yelp-business-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Automation, Lead generation, Agents
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 per business returneds

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/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 Business Scraper — Phone, Address, Rating & More

**Scrape Yelp business listings by search term + location — business name, phone, address, website, categories, rating and review count. The cheapest, most reliable Yelp scraper: $2 per 1,000 businesses, no login, no API key.**

> 🕒 Fast search feed · 📞 Phone + address + website · ⭐ Rating + review count · 💵 $2 / 1,000 results · 🚫 No login or API key

Turn any Yelp search into a clean, structured dataset in minutes. Type a **search term** (`plumbers`, `restaurants`, `dentists`, `hvac`) and a **location** (`Austin, TX`, `10001`) and get back a flat lead record per business — the exact contact + reputation fields sales, marketing, and market-research teams need. Export to JSON, CSV, Excel, or Google Sheets, or pull straight into your app via API. A drop-in **Yelp API** for lead lists and local-market data.

***

### What it does

- 🔎 **Search like a human** — `searchTerm` + `location`, exactly what you'd type in Yelp's Find/Near boxes. Every matching business comes back structured.
- 📞 **The contact fields that matter** — business name, phone, own website, and full address (city / state / ZIP parsed out).
- ⭐ **Reputation, quantified** — star rating, review count, and price range ($ – $$$$).
- 🏷️ **Categories & neighborhoods** — every Yelp category tag and neighborhood, ready to filter.
- 💵 **Cheapest in class** — pay-per-result at **$0.002 / business ($2 per 1,000)**, and free to try.
- 🛡️ **Reliable by design** — reads Yelp's own public front-end pages across rotating IPs and multiple front-ends, judging every response by its data and retrying automatically, so runs don't come back empty.

### 📊 Output — one flat record per business

| Field | Type | Example |
|---|---|---|
| 🏢 `business_name` | text | `Joe's Plumbing & Rooter` |
| 📞 `phone` | text | `(415) 555-0142` |
| 📍 `address` | text | `123 Market St, San Francisco, CA 94103` |
| 🏙️ `city` / `state` / `zip` | text | `San Francisco` / `CA` / `94103` |
| 🌐 `website` | link | `https://joesplumbing.com` |
| 🏷️ `categories` | array | `["Plumbing", "Water Heater Installation/Repair"]` |

| ⭐ `rating` | number | `4.5` |
| 🗣️ `review_count` | number | `212` |
| 💲 `price_range` | text | `$$` |
| 🔗 `url` | link | `https://www.yelp.com/biz/joes-plumbing-san-francisco` |

Plus `neighborhoods`, `is_ad`, `biz_id`, `biz_slug`, `search_term`, `search_location`, and `scraped_at`.

<details><summary>⭐ Sample record</summary>

```json
{
  "business_name": "Joe's Plumbing & Rooter",
  "phone": "(415) 555-0142",
  "address": "123 Market St, San Francisco, CA 94103",
  "city": "San Francisco", "state": "CA", "zip": "94103",
  "website": "https://joesplumbing.com",
  "categories": ["Plumbing", "Water Heater Installation/Repair"],
  "rating": 4.5, "review_count": 212, "price_range": "$$",
  "url": "https://www.yelp.com/biz/joes-plumbing-san-francisco",
  "search_term": "plumbers", "search_location": "San Francisco, CA"
}
```

</details>

> 💡 Building this yourself means reverse-engineering Yelp's search backend, its bot management, pagination, and per-business enrichment. This Actor hands you a flat lead record per business — ready in minutes.

***

### Who it's for

- 🎯 **Lead-gen & sales teams** building targeted local B2B lists (name + phone + website by category and city).
- 📈 **Agencies & marketers** prospecting local businesses that need SEO, ads, web, or reputation help.
- 🧭 **Market researchers** mapping category density, ratings, and price tiers across a metro.
- 🤖 **Data teams** enriching CRMs with Yelp reputation signals (rating, review count).

### How to use it

1. Click **Try for free**.
2. Enter a **Search term** (`plumbers`, `restaurants`, `dentists`) and a **Location** (`Austin, TX`, `10001`).
3. *(Optional)* set **Max results**, or turn **Include contact details** off for a lighter, faster run.
4. Click **Start**. Export from the **Dataset** tab (JSON, CSV, Excel, Google Sheets) or via API.

#### Examples

Plumbers in San Francisco (full records — phone, website, address included):

```json
{ "searchTerm": "plumbers", "location": "San Francisco, CA", "maxResults": 100 }
```

Restaurants near a ZIP, core fields only (faster/cheaper, no per-business enrichment):

```json
{ "searchTerm": "restaurants", "location": "10001", "includeDetails": false }
```

***

### ❓ FAQ

**Is there a Yelp API?** Yes — this Actor is effectively a Yelp API: give it a search term + location, get back structured JSON. No official key needed.

**Do I need a Yelp login or API key?** No. It reads Yelp's public search data — no account, no key.

**Which fields do I get?** Business name, phone, address (city/state/ZIP), website (optional), categories, rating, review count, price range, neighborhoods, and the Yelp URL.

**How many results per search?** Yelp caps a single search around 240 results (~10 per page). Narrow by location or search term to pull more of the market across multiple runs.

**How much does it cost?** Pay-per-result at **$0.002 per business ($2 / 1,000)** — the cheapest Yelp scraper on the Store — and it's free to try. You only pay for the businesses returned.

**Is it reliable?** Yes — it reads Yelp's own public front-end pages across rotating IPs and several Yelp front-ends, judges every response by whether the business data is actually present, and retries automatically on any block, so searches return populated rows.

**Can I export to Excel or Google Sheets?** Yes — the dataset exports to JSON, CSV, Excel, or Google Sheets, or pull it via API.

**Can I scrape a whole city?** Run the same search term across several locations (ZIPs / cities) and combine the datasets.

**Does it get emails?** No — Yelp doesn't publish business emails. You get phone + website; pair the website with an email-finder to enrich further.

**Is the website field always filled?** Contact enrichment (phone, website, full address) is on by default, so the website is filled whenever the business lists one on Yelp. Some businesses (food trucks, pop-ups, brand-new listings) don't publish a phone, website, or price on Yelp — those come back empty, honestly. Turn **Include contact details** off to skip enrichment for a faster core-fields run.

### Notes & fair use

You are responsible for complying with Yelp's Terms of Service and applicable data/privacy law. This Actor reads publicly available business listings; it does not access private or login-gated data.

# Actor input Schema

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

What to search on Yelp — a category or keyword, exactly as you'd type in Yelp's "Find" box (e.g. "plumbers", "restaurants", "dentists", "coffee", "hvac").

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

Where to search — a city, neighborhood, ZIP code, or address, exactly as you'd type in Yelp's "Near" box (e.g. "San Francisco, CA", "Austin, TX", "10001").

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

Cap on the number of businesses returned this run (cost/speed guard). Yelp paginates ~10 per page and caps a single search around 240 results. Default 100; set 0 for everything Yelp returns for the search.

## `includeDetails` (type: `boolean`):

Enrich each business with its phone number, own website, and full postal address (state + ZIP) from its Yelp page. On by default. Turn OFF for a faster, lighter run that returns only the search-feed core fields — name, categories, rating, review count, price, city + street.

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

Proxy settings. This Actor reads Yelp through its public front-end pages, so the shared Apify (datacenter) pool is enough and is the cheap default — no residential bandwidth is billed. Rotating IPs are used automatically. You can switch to RESIDENTIAL here or supply your own proxies; it is not required.

## `requestConcurrency` (type: `integer`):

Max parallel requests during detail enrichment. Higher = faster; keep modest to respect the site and your proxy budget.

## Actor input object example

```json
{
  "searchTerm": "restaurants",
  "location": "San Francisco, CA",
  "maxResults": 20,
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "requestConcurrency": 4
}
```

# Actor output Schema

## `records` (type: `string`):

The dataset of scraped Yelp business leads (one item per business).

# 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 = {
    "searchTerm": "restaurants",
    "location": "San Francisco, CA",
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/yelp-business-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 = {
    "searchTerm": "restaurants",
    "location": "San Francisco, CA",
    "maxResults": 20,
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchTerm": "restaurants",
  "location": "San Francisco, CA",
  "maxResults": 20
}' |
apify call scrapersdelight/yelp-business-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapersdelight/yelp-business-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5m1ux7qOgUiNfPVfi/builds/oO4pmUys44cP2RZTZ/openapi.json
