# YellowPages Business Scraper (USA Listings) (`webdatatools/yellowpages-scraper`) Actor

Scrape YellowPages.com business search results for any keyword and place: business name, categories, business phone, address, website, star rating, review count, years in business and profile link. Real Chromium, no login, pay per business.

- **URL**: https://apify.com/webdatatools/yellowpages-scraper.md
- **Developed by:** [Murat Uzun](https://apify.com/webdatatools) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.81 / 1,000 businesses

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

## YellowPages Business Scraper (USA Listings)

### What is YellowPages Business Scraper?

YellowPages Business Scraper collects business listings from YellowPages.com for any keyword and place in the USA. For each business it returns the name, the categories, the business phone number, the address, the website, the star rating and review count where shown, the years in business and the YellowPages profile link. It opens the public search pages in a real Chromium browser, reads the rendered results, and pages through them. It collects business listings only; it does not collect personal contact details.

### What data does YellowPages Business Scraper extract?

| Field | Type | Description |
|---|---|---|
| `name` | string | Business name |
| `categories` | array | Categories listed for the business |
| `phone` | string or null | The business phone number shown on the listing |
| `address` | string or null | Street and city line as shown |
| `street` / `locality` | string or null | Street address and city, state and ZIP, when shown separately |
| `website` | string or null | The business website, when listed |
| `rating` | number or null | Star rating, 1 to 5, when shown |
| `reviewCount` | number or null | Number of reviews shown next to the rating |
| `yearsInBusiness` | number or null | Years in business, when shown |
| `sponsored` | boolean | True for paid placements |
| `businessId` / `profileUrl` | string | YellowPages business number and profile link |
| `keyword`, `location`, `page`, `position`, `scrapedAt` | mixed | The search that produced the row |

### How to use YellowPages Business Scraper

1. Enter the **What** keyword, for example "plumber".
2. Enter the **Where** place, for example "Austin, TX" or a ZIP code.
3. Set **Max businesses** and click **Start**.
4. Download the dataset as JSON, CSV or Excel, or read it through the API.

### Example input

```json
{
    "searchTerms": "dentist",
    "location": "Denver, CO",
    "maxItems": 40
}
```

### Example output

Real row from a run on 2026-10-23 (dentist, Denver, CO). Values are as shown on YellowPages at that time.

```json
{
    "businessId": "561052407",
    "name": "Aspen Dental",
    "categories": ["Dentists", "Oral & Maxillofacial Surgery", "Orthodontists"],
    "phone": "(303) 376-4154",
    "address": "9409 Sheridan Blvd, Westminster, CO 80031",
    "street": null,
    "locality": null,
    "website": null,
    "rating": null,
    "reviewCount": null,
    "yearsInBusiness": 5,
    "sponsored": true,
    "profileUrl": "https://www.yellowpages.com/westminster-co/mip/aspen-dental-561052407",
    "keyword": "dentist",
    "location": "Denver, CO",
    "page": 1,
    "position": 1,
    "scrapedAt": "2026-10-23T03:03:20.257Z"
}
```

### Input parameters

- **What** (`searchTerms`): the business type or keyword. Default "plumber".
- **Where** (`location`): city and state, or a ZIP code. Default "Austin, TX".
- **Max businesses** (`maxItems`): 1 to 500. Default 30.

### Pricing

Pay per business: one event for each business row written to the dataset. Prices in USD.

| Plan | Price per 1,000 businesses |
|---|---|
| Free | $1.00 |
| Bronze | $0.93 |
| Silver | $0.87 |
| Gold, Platinum, Diamond | $0.81 |

Measured platform usage on 2026-10-23: 40-business runs took 21 to 22 seconds on a 2 GB browser and were billed at $0.003 each (rounded by the platform), about $0.000075 per business. That is an upper estimate that includes the run start.

### YellowPages Business Scraper vs. alternatives

Other YellowPages actors in the Apify Store list their per-result price at about $0.00096 to $0.003 at the free tier (checked on 2026-10-23). This Actor reads the search results in a real browser and returns the listing data. It does not open each business page, so hours, reviews text and photos are not included.

### Using YellowPages Business Scraper with AI agents and MCP

Each business is one dataset row with flat fields, so an agent can filter by `categories`, `rating` or `locality` without parsing nested data. Call the Actor through the Apify MCP server or the REST API with `{"searchTerms": "...", "location": "...", "maxItems": 40}`.

### FAQ

**Is this legal?** The Actor reads public business listings without logging in and without solving any challenge. Use the data within the law and within YellowPages' terms. Business phone numbers are public listing data; the Actor does not collect personal names or private contact details.

**Why is the rating null for some businesses?** Many listings show no rating. The field stays null instead of guessed.

**Why are some websites null?** Only listings with a website link show one.

**Why do sponsored listings appear?** They are paid placements shown in the results. The `sponsored` flag tells them apart.

**What happens when YellowPages shows a check page?** The Actor retries the page up to three times. If results still do not render, it records the page in the ERRORS record and stops that search. A run with no businesses at all fails, so you are not billed for an empty run.

**Limits.** Large limits (hundreds of businesses) were not measured in this release. The search is limited to what YellowPages returns for the keyword and place.

### Related Actors

- Other webdatatools Actors are listed on the publisher profile.

### Support

Open an issue on the Actor's Issues tab. Include the keyword, the place, the run ID and the ERRORS record if one exists.

# Actor input Schema

## `searchTerms` (type: `string`):

The business type or keyword, e.g. "plumber", "dentist" or "coffee shop".

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

The place to search, e.g. "Austin, TX" or "10001". YellowPages uses it as the geographic term.

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

Most business listings to return, e.g. 60. YellowPages shows about 30 per page; the Actor pages through.

## Actor input object example

```json
{
  "searchTerms": "plumber",
  "location": "Austin, TX",
  "maxItems": 30
}
```

# Actor output Schema

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

All businesses from this run.

# 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 = {
    "searchTerms": "plumber",
    "location": "Austin, TX",
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdatatools/yellowpages-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 = {
    "searchTerms": "plumber",
    "location": "Austin, TX",
    "maxItems": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("webdatatools/yellowpages-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 '{
  "searchTerms": "plumber",
  "location": "Austin, TX",
  "maxItems": 30
}' |
apify call webdatatools/yellowpages-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,webdatatools/yellowpages-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/9Pu5GqOQZlNzO7pi3/builds/0Ac9SQvRP3nPzaf9L/openapi.json
