# Yellow Pages US Scraper - Phones, Emails, Coordinates, Reviews (`scrapersdelight/yellowpages-us-scraper`) Actor

Scrape Yellow Pages (yellowpages.com) and SuperPages by trade + city/ZIP or URL: name, phone, address, coordinates, website, categories, rating, years in business. Optional profile details (email, hours, services, payment, socials, extra phones) and reviews. Sort, ad filter, monitor mode. No login.

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

## Pricing

from $0.63 / 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.

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

### What does Yellow Pages US Scraper do?

**Yellow Pages US Scraper** turns a [Yellow Pages](https://www.yellowpages.com) search - a trade and a US city or ZIP - into a clean table of local businesses: name, phone, street address, coordinates, website, categories, rating, review count and years in business, one row per business. It reads **SuperPages** too (the same Thryv directory, same business ids). Sales teams, lead-gen agencies, local-SEO analysts and recruiters use it to build call lists by trade and area.

- 📞 **Contact first** - a phone on 100% of rows in our test runs, a website on 91-95%.
- 📍 **Coordinates on every addressed business** without opening each profile (97-99% of businesses with a street address).
- 📇 **Optional profile details** - email, opening hours by day, description, services, payment methods, extra phones, social links, photos, year established.
- ⭐ **Optional reviews** - author, date, stars (plus YP's Expertise / Professionalism / Promptness), title, text, source.
- 🔎 **Search terms × locations, or paste URLs** - search pages, city-category pages (`/austin-tx/plumbers`) and business pages.
- 🔁 **Monitor mode** - only businesses earlier runs did not deliver, ready for a schedule.
- 🔓 **No login, no cookies, no API key.**

### What data can you get from Yellow Pages?

<table>
<tr><td>🏢 Name & <code>ypid</code></td><td>📞 Phone + extra phones</td><td>✉️ Email (profile)</td></tr>
<tr><td>🌐 Website</td><td>🏠 Street, city, state, ZIP</td><td>📍 Latitude / longitude</td></tr>
<tr><td>🗂️ Categories</td><td>⭐ Rating & review count</td><td>📅 Years in business</td></tr>
<tr><td>🕘 Hours by day (profile)</td><td>🧾 Services, payment methods</td><td>🗣️ Languages, brands, AKA</td></tr>
<tr><td>🔗 Social links (profile)</td><td>🖼️ Photos, thumbnail</td><td>✅ Claimed listing flag</td></tr>
<tr><td>📢 Sponsored flag & rank</td><td>📝 Snippet, slogan, description</td><td>💬 Reviews (optional)</td></tr>
</table>

### How to scrape Yellow Pages with Yellow Pages US Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) - the free plan includes monthly credit.
2. Open **Yellow Pages US Scraper** and type one or more **search terms** (`plumber`, `dentist`, `pizza`).
3. Add **locations** as `City, ST` or a ZIP code (`Austin, TX`, `90210`). Every term runs in every location.
4. Optional: turn on **Profile details** or **Reviews**, set a sort, filters or a cap.
5. Click **Start**. Rows appear as each results page is read.
6. Download JSON, CSV or Excel, or read the dataset through the API.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| `searchTerms` | string\[] | Trade, category or business name. Prefilled `["plumber"]`. |
| `locations` | string\[] | `City, ST` or 5-digit ZIP. Required with search terms. Prefilled `["Austin, TX"]`. |
| `startUrls` | string\[] | Yellow Pages / SuperPages search URLs, city-category pages or business pages. |
| `source` | select | `yellowpages` (default) or `superpages` for typed searches. Pasted URLs use their own site. |
| `sortBy` | select | `default` (best match), `distance`, `rating`, `name` - the directory's own sort. |
| `includeAds` | boolean | Also return the sponsored placements (marked `isAd: true`). Default off. |
| `requirePhone` / `requireWebsite` / `requireEmail` | boolean | Skip businesses without one. Email needs the profile page, so it turns details on. |
| `minRating` / `minReviews` | number | Skip businesses rated lower / with fewer reviews (unrated ones are skipped). |
| `includeCoordinates` | boolean | Latitude / longitude from the map view of each results page. Default **on**. |
| `includeDetails` | boolean | Open each business's profile page. Default off. |
| `includeReviews` | boolean | Add the reviews (turns details on). Default off. |
| `maxReviewsPerBusiness` | integer | Reviews kept per business. Default 10, `0` = all (up to 2,000). |
| `monitorMode` / `monitorKey` | boolean / string | Only businesses no earlier run (with the same search and key) delivered. |
| `maxResults` | integer | Rows across the whole run. Default 100, `0` = no limit. |
| `maxResultsPerSearch` | integer | Cap per term × location. Default `0` (none). |
| `maxPagesPerSearch` | integer | Results pages per search, 30 businesses each, at most 100. |
| `compact` | boolean | Core contact fields only. |
| `proxyConfiguration`, `maxConcurrency`, `webhookUrl` | | Advanced: your own proxies, parallel profile reads, one POST at the end. |

#### Input JSON

```json
{
  "searchTerms": ["plumber", "electrician"],
  "locations": ["Austin, TX", "78704"],
  "maxResults": 200,
  "includeDetails": true,
  "requirePhone": true
}
```

#### Put the trade in search terms and the place in locations

`"plumber"` + `"Austin, TX"` is one search. Use a city with its state or a ZIP - Yellow Pages answers an unknown place with "not found", and the run summary says so. Two terms and three locations are six searches.

#### Pick details only when you need them

The results pages already carry phone, address, coordinates, website, categories, rating and years in business. Profile details add email, hours, services, socials and photos, but read one extra page per business, so a run with details takes longer and adds the details event per row.

#### Paste URLs for exact pages

Any Yellow Pages search you have built in the browser can be pasted as a start URL - its filters are kept. City-category pages (`https://www.yellowpages.com/austin-tx/plumbers`) and business pages (`.../mip/clarke-kent-plumbing-10674347`) work too.

### ⬆️ Output

A real row from a test run (roofing, Phoenix, AZ):

```json
{
  "ypid": "6093144",
  "name": "Scott Roofing Company",
  "phone": "(602) 457-6300",
  "website": "http://www.scottroofingco.com",
  "street": "3601 N 36th Ave",
  "city": "Phoenix",
  "state": "AZ",
  "postalCode": "85019",
  "latitude": 33.49004,
  "longitude": -112.136734,
  "distanceMiles": 4.57,
  "categories": ["Roofing Contractors", "Gutters & Downspouts"],
  "rating": 4.98,
  "reviewCount": 56,
  "yearsInBusiness": 41,
  "isAd": false,
  "rank": 6,
  "profileUrl": "https://www.yellowpages.com/phoenix-az/mip/scott-roofing-company-6093144",
  "searchTerm": "roofing",
  "searchLocation": "Phoenix, AZ",
  "totalResults": 773
}
```

With **Profile details** (plumber, Austin, TX):

```json
{
  "name": "Radiant Plumbing, Air Conditioning, & Electrical",
  "phone": "(512) 957-9639",
  "email": "hello-austin@radiantplumbing.com",
  "yearEstablished": 1999,
  "hours": { "Mon": "7:00 am - 7:00 pm", "Fri": "7:00 am - 7:00 pm", "Sat": "Closed", "Sun": "Closed" },
  "paymentMethods": ["all major credit cards"],
  "extraPhones": [{ "label": "TollFree", "number": "(833) 429-1590" }],
  "detailsScraped": true
}
```

#### Fields and how often they are filled

Measured on our own runs, 2026-10-14. Frame A = 1,000 dentists in Los Angeles; B = 100 roofers in Phoenix; C = all 896 electricians in Denver.

| Field | A | B | C | Notes |
|---|---|---|---|---|
| `phone` | 100% | 100% | 100% | |
| `website` | 94% | 95% | 91% | the business's own site; links back into the directory are dropped |
| `street` / `city` / `postalCode` | 100% | 94-98% | 73-76% | service-area businesses publish no street |
| `latitude` / `longitude` | 98% | 93% | 71% | 97-99% of businesses that publish a street |
| `categories` | 100% | 100% | 100% | |
| `rating` / `reviewCount` | 7% | 16% | 4% | exact average from the search card (e.g. 4.98) |
| `yearsInBusiness` | 14% | 31% | 29% | |
| `openStatus` / `snippet` | 32% / 14% | 91% / 87% | 54% / 25% | |
| `claimed` | 100% | 100% | 100% | true/false; true on 3-12% |

Profile details, frame D = 30 plumbers in Austin, E = 30 dentists in Chicago: `email` 43% / 0%, `hours` 80% / 97%, `paymentMethods` 67% / 97%, `yearEstablished` 63% / 73%, `services` 33% / 90%, `description` 37% / 100%, `photos` 40% / 63%, `extraPhones` 33% / 20%, `socialLinks` 10% / 23%, `neighborhoods` 43% / 50%, `brands` 23% / 93%, `languages` 7% / 20%, `tagline` 10% / 33%. Reviews (149 read): author, date, stars and text 100%, title 95%, source 91%, YP sub-ratings 2%.

### How can I use Yellow Pages data?

- 📞 **Cold-call lists** - every plumber, roofer or dentist in a set of ZIP codes, phone first.
- 🗺️ **Territory planning** - coordinates on each row drop straight onto a map or a drive-time filter.
- 🎯 **Agency prospecting** - unclaimed listings (`claimed: false`) and businesses without a website.
- 📈 **Local market sizing** - `totalResults` per search counts businesses per trade and city.
- ⭐ **Reputation research** - ratings, review counts and review text by trade and city.
- 🔁 **New-business alerts** - monitor mode on a weekly schedule returns only newly listed businesses.

### How much does it cost to scrape Yellow Pages?

Pay per result, no start fee:

| Event | Price | When |
|---|---|---|
| Business | $0.00063 per business ($0.63 per 1,000) | every business row |
| Profile details | $0.00018 per business ($0.18 per 1,000) | rows read from their profile page (details or reviews on) |

| Run | Cost |
|---|---|
| 20 businesses (the prefilled demo) | $0.0126 |
| 100 businesses | $0.063 |
| 1,000 businesses | $0.63 |
| 100 businesses with profile details | $0.081 |

Sponsored listings you did not ask for, filtered businesses, duplicates and businesses a monitor run already delivered are not delivered and not charged.

### Integrations, API, scheduling and MCP

Run it on a [schedule](https://docs.apify.com/platform/schedules) (monitor mode returns only new businesses), send results to Google Sheets, Slack, Make, Zapier or n8n, or call it from code with the [Apify API](https://docs.apify.com/api/v2) - `apify-client` for [Python](https://docs.apify.com/api/client/python) and [JavaScript](https://docs.apify.com/api/client/js). AI agents can call it through the [Apify MCP server](https://mcp.apify.com). The optional `webhookUrl` gets one JSON POST with the counts when a run ends.

### More directory scrapers

- 🇨🇦 [YellowPages Canada Leads Scraper](https://apify.com/scrapersdelight/yellowpages-canada-scraper) - use it for yellowpages.ca businesses.
- 🇦🇪 [Yellowpages-UAE Scraper](https://apify.com/scrapersdelight/yellowpages-uae-scraper) - UAE business directory leads.
- 🇬🇧 [FreeIndex UK Business Directory Scraper](https://apify.com/scrapersdelight/freeindex-uk-scraper) - UK trades leads and phones.
- 🇮🇹 [PagineGialle Italy Scraper](https://apify.com/scrapersdelight/paginegialle-italy-scraper) - Italian Yellow Pages.

All our actors: [apify.com/scrapersdelight](https://apify.com/scrapersdelight).

### Limits and empty runs

- Yellow Pages lists at most **3,000 businesses per search** (100 pages of 30). Split a big metro by ZIP to go deeper.
- Deep result pages are served from more than one ordering, so a page can repeat businesses another page listed. Repeats are never delivered twice; the run re-reads such pages and reports, per search, how many different businesses it found against the site's own total (`RUN_SUMMARY`). Full walks in testing: 515 of 515 plumbers in Austin, 896 of 925 electricians in Denver (97%).
- A ZIP or city Yellow Pages does not know returns nothing; a search with no matches returns nothing. Neither is charged.
- Profile-page ratings are rounded to whole stars; rows from a search keep the exact average from the search card.
- Email from the business's own website (not from Yellow Pages) is not collected.

### ❓ FAQ

#### How much does Yellow Pages US Scraper cost?

$0.63 per 1,000 businesses, plus $0.18 per 1,000 when you add profile details. No start fee. The free Apify plan's monthly credit covers thousands of rows.

#### How many businesses can Yellow Pages US Scraper get?

Up to 3,000 per search term and location (Yellow Pages' own limit) and as many searches as you add. In local tests a 1,000-business run took 48-173 seconds.

#### Does Yellow Pages US Scraper get emails?

Yes, with **Profile details** on - Yellow Pages shows an email on some profiles (43% of 30 Austin plumbers, none of 30 Chicago dentists in our tests). Use "Only businesses with an email" to keep only those.

#### Can Yellow Pages US Scraper scrape SuperPages?

Yes. Set **Directory** to SuperPages or paste superpages.com URLs. SuperPages lists the same businesses under the same `ypid`, in a different order, with its own reviews.

#### Can I schedule Yellow Pages US Scraper to find new businesses?

Yes. Turn on **Only new businesses** and add a schedule; each run delivers only businesses earlier runs did not.

#### Can I use Yellow Pages US Scraper with the Apify API?

Yes - start it from the [API](https://docs.apify.com/api/v2) or `apify-client` and read the dataset as JSON, CSV or Excel.

#### Can AI agents use Yellow Pages US Scraper through MCP?

Yes, through the [Apify MCP server](https://mcp.apify.com). `compact: true` keeps rows short.

#### Do I need a Yellow Pages account, cookies or an API key?

No. Everything it reads is public.

#### Why did Yellow Pages US Scraper return no results?

The search matched nothing, the place was not recognised (use `City, ST` or a ZIP), or your filters removed every business. `RUN_SUMMARY` says which; nothing is charged.

#### Does Yellow Pages US Scraper return sponsored listings?

Only with **Include sponsored listings** on; they are marked `isAd: true` and a sponsored copy of a business already in the results is returned once.

#### Your feedback

Found a bug or need a field? Open an issue on the [Issues tab](https://apify.com/scrapersdelight/yellowpages-us-scraper/issues/open) - we read every one.

# Actor input Schema

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

What you would type into the Yellow Pages search box: a trade, category or business name, e.g. "plumber", "dentist", "pizza". Every term is searched in every location below.

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

US places as "City, ST" (e.g. "Austin, TX") or a 5-digit ZIP code (e.g. "90210"). Required with search terms.

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

Paste search URLs (yellowpages.com/search?search_terms=plumber\&geo_location_terms=Austin%2C+TX), city-category pages (/austin-tx/plumbers) or business pages (/austin-tx/mip/clarke-kent-plumbing-10674347). superpages.com URLs work too.

## `source` (type: `string`):

Which site to search. Both are Thryv's and list the same businesses under the same id; SuperPages orders results differently and shows its own reviews. Pasted URLs always use their own site.

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

How the directory orders the results before they are collected (its own sort menu).

## `includeAds` (type: `boolean`):

Also return the paid placements shown above the results (marked isAd: true). Off: only the directory's own results.

## `requirePhone` (type: `boolean`):

Skip businesses without a phone number. Skipped businesses are not charged.

## `requireWebsite` (type: `boolean`):

Skip businesses that list no website of their own.

## `requireEmail` (type: `boolean`):

Skip businesses whose profile shows no email. The email is only on the profile page, so this turns on profile details.

## `minRating` (type: `number`):

Skip businesses rated below this (1-5). Businesses without a rating are skipped too. Empty = no limit.

## `minReviews` (type: `integer`):

Skip businesses with fewer reviews than this. Empty = no limit.

## `includeCoordinates` (type: `boolean`):

Latitude and longitude from the directory's map view of each results page (businesses that publish an address). Turn off for the fastest list-only run.

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

Open each business's profile page: email, opening hours by day, description, slogan, services, payment methods, languages, brands, AKA names, extra phones, social links, photos, year established.

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

Add the business's reviews to its row: author, date, stars (+ YP's Expertise / Professionalism / Promptness), title, text, owner response, source. Turns on profile details.

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

Reviews kept per business, in the order the directory lists them. 10 = YP's first review page. 0 = every review (up to 2,000).

## `monitorMode` (type: `boolean`):

Deliver only businesses no earlier run with this search (and monitor key) delivered. Pairs with a daily or weekly schedule.

## `monitorKey` (type: `string`):

Optional name that keeps separate memories for the same search (e.g. one per client).

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

Total rows across all searches and URLs. Yellow Pages lists up to 3,000 businesses per search (100 pages of 30). 0 = no limit.

## `maxResultsPerSearch` (type: `integer`):

Cap for each search term × location, so one big city cannot use the whole run. 0 = no per-search cap.

## `maxPagesPerSearch` (type: `integer`):

Results pages read per search (30 businesses each). The directory stops at 100.

## `compact` (type: `boolean`):

Core contact fields only (name, phone, email, website, address, coordinates, category, rating) - smaller rows for spreadsheets, CRMs and AI agents.

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

Optional. By default the run uses its own route: direct requests first, residential proxies only when the directory refuses them. Add your own proxy URLs to route through them instead.

## `maxConcurrency` (type: `integer`):

Profile pages read at the same time when details are on.

## `webhookUrl` (type: `string`):

Optional. One JSON POST when the run ends: counts per search and the dataset id.

## Actor input object example

```json
{
  "searchTerms": [
    "plumber"
  ],
  "locations": [
    "Austin, TX"
  ],
  "source": "yellowpages",
  "sortBy": "default",
  "includeAds": false,
  "requirePhone": false,
  "requireWebsite": false,
  "requireEmail": false,
  "includeCoordinates": true,
  "includeDetails": false,
  "includeReviews": false,
  "maxReviewsPerBusiness": 10,
  "monitorMode": false,
  "maxResults": 20,
  "maxResultsPerSearch": 0,
  "maxPagesPerSearch": 100,
  "compact": false,
  "maxConcurrency": 4
}
```

# Actor output Schema

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

One row per business (with profile details and reviews when requested).

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

Per search: the directory's own total, pages read, delivered, skipped, completeness, transport used.

# 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"
    ],
    "locations": [
        "Austin, TX"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/yellowpages-us-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"],
    "locations": ["Austin, TX"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/yellowpages-us-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"
  ],
  "locations": [
    "Austin, TX"
  ],
  "maxResults": 20
}' |
apify call scrapersdelight/yellowpages-us-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapersdelight/yellowpages-us-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/sdW2rivYBjHjXQj7X/builds/5rLvPMIcq9xo4rPOK/openapi.json
