# Yelp Business Scraper - Business Details from Links (`barefoot_grade/yelp-business-scraper`) Actor

Paste Yelp business links from any Yelp site (yelp.com, yelp.ca, yelp.co.uk, ...) or business aliases. Each business becomes one row with name, rating, review count, categories, price range, address, phone, hours, website, coordinates and photo count. Failures are not charged.

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

## Pricing

from $1.30 / 1,000 business rows

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?

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 Business Scraper - Business Details from Links

Turn a list of Yelp business links into clean business rows. Paste links from any Yelp site (yelp.com, yelp.ca, yelp.co.uk, yelp.com.au, yelp.de, m.yelp.com and the rest), the alias at the end of a link, or Yelp business ids. Every business becomes one row with its name, star rating, review count, categories, price range, full address, phone number, opening hours, website, map coordinates, photo count, amenities and whether it is closed or claimed. No Yelp account is needed.

### Quick Start

```json
{
  "businessUrls": [
    "https://www.yelp.com/biz/franklin-barbecue-austin",
    "https://www.yelp.co.uk/biz/dishoom-london",
    "https://www.yelp.ca/biz/schwartzs-montr%C3%A9al-4"
  ]
}
```

More examples:

- Aliases instead of links: `{"businessUrls": ["tartine-bakery-san-francisco-3", "katzs-delicatessen-new-york"]}`
- A Yelp business id: `{"businessUrls": ["MGzro82Fi4LYvc86acoONQ"]}`
- Photo or menu links work too: `{"businessUrls": ["https://www.yelp.com/biz_photos/bi-rite-creamery-san-francisco"]}`

### Input

| Input | Type | Default | Meaning |
| --- | --- | --- | --- |
| `businessUrls` | array | — | Yelp business page links from any Yelp site (`yelp.com/biz/...`, `yelp.ca/biz/...`, `yelp.co.uk/biz/...`, photo and menu pages), the alias at the end of such a link (`franklin-barbecue-austin`) or a 22-character Yelp business id. Up to 5,000 per run. |

Give at least one business. The same business given twice (for example as a link and as its alias, or on two Yelp sites) is returned once. Search and review pages are not accepted: open a business from the results and paste its link.

### What it returns

The dataset contains one row per business:

| Field | Meaning |
| --- | --- |
| `businessId`, `alias` | Yelp's business id and the business's name in Yelp links (after any rename on Yelp). |
| `name` | Business name. |
| `url` | The business page on yelp.com. |
| `rating`, `reviewCount` | Average star rating (1 to 5, to one decimal) and the number of reviews. `rating` is `null` for a business without reviews. |
| `categories` | Yelp categories, for example `BBQ & Barbecue`. |
| `priceRange` | Price range as Yelp shows it, in the business's local currency sign: `$$`, `£££`, `€`. |
| `phone`, `website`, `menuUrl` | Phone number as Yelp formats it, the business's own website and its menu link. |
| `address`, `street`, `city`, `region`, `postalCode`, `countryCode` | Full address on one line and its parts. |
| `neighborhoods` | Neighbourhoods Yelp places the business in. |
| `latitude`, `longitude`, `timezone` | Map pin and the business's time zone. |
| `hours` | Regular opening hours for each weekday, `Mon` to `Sun`, for example `["11:00 AM - 3:00 PM"]`, `["Closed"]` or `["Open 24 hours"]`. |
| `photosCount` | Number of photos and videos on the business page. |
| `amenities` | Features Yelp lists, each with `name` and `available`, for example `Offers delivery`: `false`. |
| `isClosed`, `isClaimed` | Whether Yelp marks the business as closed, and whether the owner has claimed the page. |
| `yearEstablished`, `about` | Year established and the owner's description, when given. |
| `input` | The link, alias or id the row was read from. |
| `scrapedAt` | Collection time (UTC, ISO 8601). |

Fields the business page does not show are `null` (or an empty list), never guessed.

The run summary (`OUTPUT`) reports `results`, `errors` with the list at `sourceErrors`, and `duplicates` (inputs that turned out to be a business already returned).

### Example queries

- **Lead lists:** turn a list of Yelp links into phone numbers, websites and addresses.
- **Location data:** map businesses by `latitude` and `longitude` with their hours and categories.
- **Reputation tracking:** schedule a run over your locations and track `rating` and `reviewCount`.
- **Data cleaning:** check which businesses on your list Yelp now marks as closed.

### Output example

One row, with the `amenities` list shortened (this business lists 39):

```json
{
  "businessId": "MGzro82Fi4LYvc86acoONQ",
  "alias": "franklin-barbecue-austin",
  "name": "Franklin Barbecue",
  "url": "https://www.yelp.com/biz/franklin-barbecue-austin",
  "rating": 4.5,
  "reviewCount": 6492,
  "categories": [
    "BBQ & Barbecue"
  ],
  "priceRange": "$$$",
  "phone": "(512) 653-1187",
  "website": "https://franklinbbq.com",
  "menuUrl": "https://franklinbbq.com/menu/",
  "address": "900 E 11th St, Austin, TX 78702, United States",
  "street": "900 E 11th St",
  "city": "Austin",
  "region": "TX",
  "postalCode": "78702",
  "countryCode": "US",
  "neighborhoods": [
    "East Austin"
  ],
  "latitude": 30.270135,
  "longitude": -97.731345,
  "timezone": "America/Chicago",
  "hours": [
    {"day": "Mon", "hours": ["Closed"]},
    {"day": "Tue", "hours": ["11:00 AM - 3:00 PM"]},
    {"day": "Wed", "hours": ["11:00 AM - 3:00 PM"]},
    {"day": "Thu", "hours": ["11:00 AM - 3:00 PM"]},
    {"day": "Fri", "hours": ["11:00 AM - 3:00 PM"]},
    {"day": "Sat", "hours": ["11:00 AM - 3:00 PM"]},
    {"day": "Sun", "hours": ["11:00 AM - 3:00 PM"]}
  ],
  "photosCount": 8631,
  "amenities": [
    {"name": "Offers take-out", "available": true},
    {"name": "Takes reservations", "available": false},
    {"name": "Offers delivery", "available": false}
  ],
  "isClosed": false,
  "isClaimed": true,
  "yearEstablished": "2009",
  "about": "With the encouragement of family and friends, Aaron and Stacy Franklin debuted Franklin BBQ in late 2009. 10+ years later, they are still aiming to serve the highest quality meats, friendliest service and most authentic Austin experience as possible.",
  "input": "https://www.yelp.com/biz/franklin-barbecue-austin",
  "scrapedAt": "2026-10-21T03:54:17Z"
}
```

### Failed businesses

A link or alias that Yelp does not know, or a business page that could not be read, is reported in the run summary at `OUTPUT.sourceErrors` with its input, `code` and `message`: `NOT_FOUND` when Yelp has no business under that name, `NOT_RENDERED` when Yelp kept sending the page without its business details, `BLOCKED` when Yelp turned the run's requests away. Failures are never dataset rows and are not charged. If no business at all could be read, the run ends with an error instead of finishing green with an empty dataset.

### Limits and caveats

- Business details only: reviews, review text and Yelp search results are not collected.
- Opening hours are the regular weekly hours; holiday hours are not included.
- Yelp sends a renamed or moved business on to its current page; the row then carries the current `alias` and `url`, with your original `input`.
- Some businesses cannot be read even after several tries; they are listed in the run summary as `NOT_RENDERED` and are not charged. Running them again does not guarantee they will be read.
- Each business takes a few seconds; about 1,000 businesses take 20 to 30 minutes.
- Automated access is subject to Yelp's terms; use this actor only where you have the necessary permissions and a lawful basis, and handle any personal data in line with the privacy laws that apply to you.

### FAQ

**Do I need a Yelp account?** No. Only public business information is collected.

**Which Yelp sites are supported?** Links from any Yelp site. A business has the same alias on every Yelp site, so a yelp.ca link and a yelp.com link to the same business return the same row.

**Why are the hours in English?** Rows use English weekday names and Yelp's English hour format whichever Yelp site the link came from.

**What is a business alias?** The last part of a Yelp business link: `franklin-barbecue-austin` in `yelp.com/biz/franklin-barbecue-austin`.

### Price

**$0.0013 per business row** delivered, that is $1.30 per 1,000 businesses, plus **$0.005 per run start**. The run-start event is charged per GB of memory; the default 512 MB run is one start event. The start is charged even if the run saves no results. Businesses that fail are not charged. When your maximum charge for the run is reached, the run stops and keeps the rows already saved. Platform usage is included in these prices.

# Actor input Schema

## `businessUrls` (type: `array`):

Business page links from any Yelp site (yelp.com/biz/..., yelp.ca/biz/..., yelp.co.uk/biz/..., m.yelp.com/biz/..., photo and menu pages too), the alias at the end of such a link (for example "franklin-barbecue-austin") or a 22-character Yelp business id. Up to 5,000 per run.

## Actor input object example

```json
{
  "businessUrls": [
    "https://www.yelp.com/biz/franklin-barbecue-austin",
    "https://www.yelp.co.uk/biz/dishoom-london",
    "https://www.yelp.ca/biz/schwartzs-montr%C3%A9al-4"
  ]
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

No description

# 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 = {
    "businessUrls": [
        "https://www.yelp.com/biz/franklin-barbecue-austin",
        "https://www.yelp.co.uk/biz/dishoom-london",
        "https://www.yelp.ca/biz/schwartzs-montr%C3%A9al-4"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("barefoot_grade/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 = { "businessUrls": [
        "https://www.yelp.com/biz/franklin-barbecue-austin",
        "https://www.yelp.co.uk/biz/dishoom-london",
        "https://www.yelp.ca/biz/schwartzs-montr%C3%A9al-4",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("barefoot_grade/yelp-business-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 '{
  "businessUrls": [
    "https://www.yelp.com/biz/franklin-barbecue-austin",
    "https://www.yelp.co.uk/biz/dishoom-london",
    "https://www.yelp.ca/biz/schwartzs-montr%C3%A9al-4"
  ]
}' |
apify call barefoot_grade/yelp-business-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,barefoot_grade/yelp-business-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/0gyJAf7btS8V9ehRY/builds/PE0gVt14RLGGl7xbf/openapi.json
