# Yellow Pages US Scraper (`solidcode/yellowpages-scraper`) Actor

\[💰 $0.8 / 1K] Extract US business listings from Yellow Pages — name, address, phone, website, email, hours, services, ratings, and optional client reviews. Search by keyword + location, paste category URLs, or pull individual business profiles.

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

## Pricing

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Yellow Pages US Scraper

Pull business listings from Yellow Pages at scale — names, verified phone numbers, websites, emails, full street addresses with lat/lng, day-of-week hours, services, payment methods, BBB accreditation, claimed status, social handles, photos, and optional customer reviews for any keyword or category in any of the 50 US states. Built for sales teams, lead-gen agencies, local-SEO analysts, recruiters sourcing trades, and franchise operators who need a structured, deduplicated US business directory without wrestling with Yellow Pages' HTML one page at a time.

### Why This Scraper?

- **28 fields per business** (29 with reviews enabled) — verified phone, website, email, lat/lng coordinates, day-by-day hours, services, payment methods accepted, BBB accreditation flag, owner-claimed flag, years-in-business, and Facebook / Twitter / Instagram / LinkedIn / YouTube links — all on a single flat row.
- **Built-in client reviews** — flip `includeReviews` on and the row arrives with up to 2,000 reviews per business (reviewer name, 1–5 rating, ISO date, title, body, owner response). Most competing Yellow Pages scrapers omit reviews entirely.
- **Three input shapes in one actor** — keyword + location, a Yellow Pages category URL like `/los-angeles-ca/restaurants`, or a direct business-profile URL. Mix all three in a single run.
- **Cross-join searches** — pass `["plumbers", "electricians"]` × `["Brooklyn, NY", "Queens, NY"]` and the actor automatically runs all 4 combinations in one job.
- **Coverage of every US state and Yellow Pages category** — search any city, "City, ST", or 5-digit ZIP across all 50 states; no per-state setup, no hand-crafted URLs.
- **Four sort modes** — Best Match, Distance, Name (A–Z), or Highest Rated. Pull the top-rated 5 plumbers in any ZIP in a single call.
- **Hours structured by weekday** — `{"Mon": "9:00 AM - 5:00 PM", "Tue": ...}` instead of raw text. Drop straight into a CRM, dashboard, or lead-routing rule.
- **Owner-claimed status, BBB accreditation, and years-in-business** — three trust signals competing scrapers consistently omit, but invaluable for B2B outreach scoring and franchise / acquisition research.

### Use Cases

**Lead Generation & Sales**
- Build targeted prospect lists of local SMBs by category and ZIP
- Pull every plumber, dentist, or HVAC contractor in a metro for cold outreach
- Filter for `claimed: false` to find owners who haven't verified their listing — high-intent agency / SaaS pitch
- Capture Facebook, LinkedIn, and Instagram handles for multi-channel campaigns

**Market Research & Competitive Intelligence**
- Map local SMB density by category across cities, ZIPs, or whole states
- Compare review-volume and rating distributions across markets
- Track years-in-business to identify mature vs. emerging local markets
- Benchmark service offerings and payment methods within a category

**Local SEO & Reputation Management**
- Audit a client's Yellow Pages listing against top-ranked competitors in their ZIP
- Pull aggregate ratings + review counts for share-of-voice reporting
- Sort by Highest Rated to identify reputation leaders to study
- Monitor BBB accreditation across a competitor set

**Recruiting & Talent Sourcing**
- Source contact details for trades businesses (electricians, plumbers, contractors) when filling skilled-trade roles
- Build employer lists by category for outbound recruiting
- Identify multi-location operators by name + address dedupe

**Franchise Development & Site Selection**
- Count competitor density before opening a new location
- Find under-served categories within a ZIP or city
- Pull operating hours to size labor shifts in target markets

**Data Enrichment & Integration**
- Append verified phone, website, and lat/lng to an existing local business database
- Power a "find a local provider" feature with fresh, structured listings
- Feed a directory product, comparison site, or local-services marketplace

### Getting Started

#### Simple Search

The fastest way to start — one keyword and one location:

```json
{
    "searchTerms": ["plumbers"],
    "locations": ["Brooklyn, NY"],
    "maxResults": 50
}
````

#### Browse a Category Page

Skip the search step and crawl an entire Yellow Pages category page directly:

```json
{
    "startUrls": [
        "https://www.yellowpages.com/los-angeles-ca/restaurants"
    ],
    "sortBy": "rating",
    "maxResults": 200
}
```

#### Full Profile + Reviews

Pull a single business profile with up to 100 customer reviews embedded:

```json
{
    "startUrls": [
        "https://www.yellowpages.com/new-york-ny/mip/joes-pizza-12345678"
    ],
    "includeReviews": true,
    "maxReviewsPerBusiness": 100
}
```

#### Cross-Join Multi-Market Run

Two keywords across three metros = six searches automatically:

```json
{
    "searchTerms": ["plumbers", "electricians"],
    "locations": ["Brooklyn, NY", "Queens, NY", "Manhattan, NY"],
    "sortBy": "rating",
    "includeReviews": true,
    "maxReviewsPerBusiness": 30,
    "maxResults": 1000
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchTerms` | string\[] | `["plumbers"]` | Keywords or business categories (e.g. `plumbers`, `dentists`, `pizza`). Cross-joined with `locations`. |
| `locations` | string\[] | `["Los Angeles, CA"]` | Cities, "City, ST", or 5-digit US ZIPs (e.g. `90210`, `Brooklyn, NY`). Cross-joined with `searchTerms`. |
| `startUrls` | string\[] | `[]` | Paste Yellow Pages URLs directly. Search results, category pages, or individual business profiles all work — the actor auto-detects the type. Filters in the URL are honored. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `sortBy` | select | `Best Match (Yellow Pages default)` | Order results by `Best Match`, `Distance`, `Name (A-Z)`, or `Highest Rated`. Applied to keyword searches and category URLs (ignored for single-profile URLs). |

#### Output Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeReviews` | boolean | `false` | Embed each business's customer reviews on its row. Off by default — turning it on adds extra page fetches per business. |
| `maxReviewsPerBusiness` | integer | `30` | Cap on reviews per business when `includeReviews` is on (newest first). Set `0` to capture all available reviews up to an internal hard cap of ~2,000. Ignored when reviews are off. |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Hard cap on total business rows across every search and URL. Set `0` for no cap (an internal upper limit of 100,000 still applies). The actor stops requesting new pages once the cap is reached but keeps the full final page even if it slightly overshoots. |

### Output

Each business is a single flat row. Here's a representative example with reviews enabled:

```json
{
    "name": "Joe's Pizza",
    "profileUrl": "https://www.yellowpages.com/new-york-ny/mip/joes-pizza-12345678",
    "yellowPagesId": "12345678",
    "categories": ["Pizza", "Italian Restaurants", "Take Out Restaurants"],
    "primaryCategory": "Pizza",
    "phone": "(212) 555-0142",
    "website": "https://joespizzanyc.com",
    "email": "info@joespizzanyc.com",
    "address": {
        "street": "7 Carmine St",
        "city": "New York",
        "state": "NY",
        "postalCode": "10014",
        "country": "US"
    },
    "addressFormatted": "7 Carmine St, New York, NY, 10014",
    "coordinates": { "latitude": 40.7308, "longitude": -74.0027 },
    "rating": 4.6,
    "reviewCount": 1842,
    "yearsInBusiness": 47,
    "claimed": true,
    "bbbAccredited": false,
    "hours": {
        "Mon": "10:00 AM - 4:00 AM",
        "Tue": "10:00 AM - 4:00 AM",
        "Wed": "10:00 AM - 4:00 AM",
        "Thu": "10:00 AM - 4:00 AM",
        "Fri": "10:00 AM - 5:00 AM",
        "Sat": "10:00 AM - 5:00 AM",
        "Sun": "11:00 AM - 4:00 AM"
    },
    "services": ["Cheese Slices", "Sicilian Pies", "Catering"],
    "paymentMethods": ["Visa", "Mastercard", "Amex", "Cash"],
    "description": "Family-owned pizzeria serving classic New York-style slices since 1975.",
    "tagline": "A Slice of New York History",
    "photos": [
        "https://images.yellowpages.com/photos/joes-1.jpg",
        "https://images.yellowpages.com/photos/joes-2.jpg"
    ],
    "logo": "https://images.yellowpages.com/logos/joes.jpg",
    "socialLinks": {
        "facebook": "https://www.facebook.com/joespizzanyc",
        "twitter": "https://twitter.com/joespizzanyc",
        "instagram": "https://www.instagram.com/joespizzanyc",
        "linkedin": null,
        "youtube": null
    },
    "searchTerm": "pizza",
    "searchLocation": "New York, NY",
    "sourceUrl": "https://www.yellowpages.com/search?search_terms=pizza&geo_location_terms=New+York%2C+NY",
    "reviews": [
        {
            "author": "Maria L.",
            "rating": 5,
            "date": "2025-12-14",
            "title": "Best slice in the city",
            "body": "Crisp crust, tangy sauce, exactly the slice my grandfather used to take me for. Worth the line.",
            "response": null
        }
    ],
    "scrapedAt": "2026-05-09T14:30:00Z"
}
```

#### Core Identity

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Business name |
| `profileUrl` | string | Direct Yellow Pages profile URL |
| `yellowPagesId` | string | Yellow Pages internal business ID |
| `primaryCategory` | string | Top category (e.g. `Pizza`) |
| `categories` | string\[] | All categories the business is listed under |
| `tagline` | string | Business slogan if listed |
| `description` | string | Full business description / general info |

#### Contact

| Field | Type | Description |
|-------|------|-------------|
| `phone` | string | Primary phone number |
| `website` | string | Business website URL |
| `email` | string | Public contact email when published |
| `socialLinks` | object | `facebook`, `twitter`, `instagram`, `linkedin`, `youtube` URLs (null when absent) |

#### Address & Location

| Field | Type | Description |
|-------|------|-------------|
| `address` | object | Structured `street`, `city`, `state`, `postalCode`, `country` |
| `addressFormatted` | string | One-line formatted address |
| `coordinates` | object | `{ latitude, longitude }` from the listing's geo data |

#### Trust & Business Signals

| Field | Type | Description |
|-------|------|-------------|
| `rating` | number | Aggregate star rating (1.0–5.0) |
| `reviewCount` | number | Total review count |
| `yearsInBusiness` | number | Reported years operating |
| `claimed` | boolean | `true` when the owner has verified the listing |
| `bbbAccredited` | boolean | `true` when accredited by the Better Business Bureau |
| `paymentMethods` | string\[] | Accepted payment methods (e.g. `Visa`, `Mastercard`, `Cash`) |

#### Schedule & Services

| Field | Type | Description |
|-------|------|-------------|
| `hours` | object | Weekday-keyed hours, e.g. `{ "Mon": "9:00 AM - 5:00 PM" }` |
| `services` | string\[] | Specific services / products offered |

#### Media

| Field | Type | Description |
|-------|------|-------------|
| `logo` | string | Business logo URL |
| `photos` | string\[] | Profile photo URLs |

#### Run Context

| Field | Type | Description |
|-------|------|-------------|
| `searchTerm` | string | Term that produced this row (null for direct profile URLs) |
| `searchLocation` | string | Location that produced this row |
| `sourceUrl` | string | Yellow Pages URL the row was extracted from |
| `scrapedAt` | string | ISO 8601 timestamp of extraction |

#### Reviews (when `includeReviews` is on)

| Field | Type | Description |
|-------|------|-------------|
| `reviews` | object\[] | Array of review objects, newest first |
| `reviews[].author` | string | Reviewer display name |
| `reviews[].rating` | number | 1–5 star rating |
| `reviews[].date` | string | ISO date |
| `reviews[].title` | string | Review title / headline |
| `reviews[].body` | string | Full review text |
| `reviews[].response` | string | object | Owner response when present |

### Tips for Best Results

- **City + state beats ZIP-only** — `"Brooklyn, NY"` returns more accurate matches than `"11201"`. ZIP-only searches still work but Yellow Pages may broaden them to the surrounding metro.
- **Use category URLs for exhaustive scrapes** — pasting a category URL like `/los-angeles-ca/restaurants` paginates deeper than a keyword search; ideal when you want every listing in a category.
- **Keep `includeReviews` off for bulk runs** — it adds extra fetches per business. Pull a clean directory first, then enrich the top 50 by rating with reviews on a second run.
- **Sort by `Highest Rated` for outreach lists** — pulls reputation leaders first, useful when you want quality over coverage.
- **Mix `startUrls` with `searchTerms`** — combine a hand-picked list of profile URLs with broader keyword searches in the same run.
- **Set a small `maxResults` first** — start with 25–50 to confirm the data shape matches your needs, then scale to thousands.
- **`maxReviewsPerBusiness: 0` captures every review** — up to an internal safety cap of ~2,000 per business. Use only when you need full review depth (e.g. sentiment analysis), not for routine lead lists.

### Pricing

**$0.80 per 1,000 results** — pay only for what you get. No compute charges, no separate per-page fees.

| Results | Cost |
|---------|------|
| 100 | $0.08 |
| 1,000 | $0.80 |
| 10,000 | $8.00 |
| 100,000 | $80.00 |

A "result" is one business row in the dataset, regardless of how many embedded reviews come with it. Platform fees (storage, dataset hosting) are additional and depend on your Apify plan.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate business research, market analysis, lead generation, and directory enrichment. Users are responsible for complying with applicable laws and Yellow Pages' Terms of Service. Do not use the extracted data for spam, harassment, scraping for the purpose of mass unsolicited contact, or any illegal purpose. Respect the do-not-call registry, anti-spam regulations (CAN-SPAM, TCPA), and any opt-out signals when reaching out to businesses captured here.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords or business categories to search (e.g. plumbers, dentists, pizza). Each term is cross-joined with every entry in Locations — for example, 2 terms x 3 locations = 6 searches.

## `locations` (type: `array`):

Cities, 'City, ST', or US ZIP codes (e.g. 'Los Angeles, CA', '90210', 'Brooklyn, NY'). Cross-joined with Search Terms.

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

Paste one or more Yellow Pages URLs. Accepts search results (yellowpages.com/search?...), city-category pages (yellowpages.com/los-angeles-ca/restaurants), or individual business profiles (yellowpages.com/.../mip/<slug>-<id>). Filters in the URL are honored as-is.

## `sortBy` (type: `string`):

How Yellow Pages sorts the search results before we collect them. Applies to keyword + location searches and category URLs (ignored when you paste a single business profile).

## `includeReviews` (type: `boolean`):

Embed each business's customer reviews on the result row. Off by default — turning this on makes runs slower and more expensive, since each business needs additional review-page fetches.

## `maxReviewsPerBusiness` (type: `integer`):

Cap on the number of reviews captured per business when 'Include Client Reviews' is on (most recent first). Set to 0 to capture every available review (an internal hard cap of ~2,000 reviews per business still applies). Ignored when reviews are disabled.

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

Hard cap on total business rows across all searches and URLs. Default 100 — increase for bigger runs, or set to 0 for no cap (an internal upper limit of 100,000 still applies). The actor stops requesting new listing pages once this number is reached but keeps the full final page even if it slightly overshoots. A single search term + location pair caps out at roughly 6,000 results (Yellow Pages itself rarely returns more) — split a large request across multiple cities or ZIPs to gather more.

## Actor input object example

```json
{
  "searchTerms": [
    "plumbers"
  ],
  "locations": [
    "Los Angeles, CA"
  ],
  "startUrls": [],
  "sortBy": "default",
  "includeReviews": false,
  "maxReviewsPerBusiness": 30,
  "maxResults": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of scraped businesses with the most useful columns at a glance.

# 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": [
        "plumbers"
    ],
    "locations": [
        "Los Angeles, CA"
    ],
    "startUrls": [],
    "sortBy": "default",
    "includeReviews": false,
    "maxReviewsPerBusiness": 30,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/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": ["plumbers"],
    "locations": ["Los Angeles, CA"],
    "startUrls": [],
    "sortBy": "default",
    "includeReviews": False,
    "maxReviewsPerBusiness": 30,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/yellowpages-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 '{
  "searchTerms": [
    "plumbers"
  ],
  "locations": [
    "Los Angeles, CA"
  ],
  "startUrls": [],
  "sortBy": "default",
  "includeReviews": false,
  "maxReviewsPerBusiness": 30,
  "maxResults": 100
}' |
apify call solidcode/yellowpages-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Yellow Pages US Scraper",
        "description": "[💰 $0.8 / 1K] Extract US business listings from Yellow Pages — name, address, phone, website, email, hours, services, ratings, and optional client reviews. Search by keyword + location, paste category URLs, or pull individual business profiles.",
        "version": "1.0",
        "x-build-id": "K9zNJizRqze6Ds9WL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~yellowpages-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-yellowpages-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/solidcode~yellowpages-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-yellowpages-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/solidcode~yellowpages-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-yellowpages-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchTerms": {
                        "title": "Search Terms",
                        "type": "array",
                        "description": "Keywords or business categories to search (e.g. plumbers, dentists, pizza). Each term is cross-joined with every entry in Locations — for example, 2 terms x 3 locations = 6 searches.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Cities, 'City, ST', or US ZIP codes (e.g. 'Los Angeles, CA', '90210', 'Brooklyn, NY'). Cross-joined with Search Terms.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Yellow Pages URLs",
                        "type": "array",
                        "description": "Paste one or more Yellow Pages URLs. Accepts search results (yellowpages.com/search?...), city-category pages (yellowpages.com/los-angeles-ca/restaurants), or individual business profiles (yellowpages.com/.../mip/<slug>-<id>). Filters in the URL are honored as-is.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sortBy": {
                        "title": "Sort Listings By",
                        "enum": [
                            "default",
                            "distance",
                            "name",
                            "rating"
                        ],
                        "type": "string",
                        "description": "How Yellow Pages sorts the search results before we collect them. Applies to keyword + location searches and category URLs (ignored when you paste a single business profile).",
                        "default": "default"
                    },
                    "includeReviews": {
                        "title": "Include Client Reviews",
                        "type": "boolean",
                        "description": "Embed each business's customer reviews on the result row. Off by default — turning this on makes runs slower and more expensive, since each business needs additional review-page fetches.",
                        "default": false
                    },
                    "maxReviewsPerBusiness": {
                        "title": "Max Reviews per Business",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap on the number of reviews captured per business when 'Include Client Reviews' is on (most recent first). Set to 0 to capture every available review (an internal hard cap of ~2,000 reviews per business still applies). Ignored when reviews are disabled.",
                        "default": 30
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap on total business rows across all searches and URLs. Default 100 — increase for bigger runs, or set to 0 for no cap (an internal upper limit of 100,000 still applies). The actor stops requesting new listing pages once this number is reached but keeps the full final page even if it slightly overshoots. A single search term + location pair caps out at roughly 6,000 results (Yellow Pages itself rarely returns more) — split a large request across multiple cities or ZIPs to gather more.",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
