# YellowPages Scraper 📇 (business leads, no key) (`tagadanar/yellowpages-us`) Actor

Turn YellowPages.com into a clean B2B lead list: business name, phone, website, full address, categories, rating, review count and years in business for any category in any US city. No API key, no subscription, no usage surprises: one flat price per lead with platform usage included.

- **URL**: https://apify.com/tagadanar/yellowpages-us.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** Lead generation, Automation, AI
- **Stats:** 5 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.05 / 1,000 business leads

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/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

## YellowPages Scraper: Local Business Leads with Phone & Website

Turn YellowPages.com into a clean B2B lead list. Give it a category and a city and it returns every business it finds with the fields a sales team actually needs: name, phone, website, full address, categories, star rating, review count and years in business, all as structured JSON.

The per-lead price is the whole bill: platform usage is included, so what you see on the pricing tab is what a lead costs. Rows with no phone, website or address are dropped, so every result is a usable lead rather than an empty promo card.

### What you get per business

| Field | Description |
| --- | --- |
| `name` | Business name |
| `phone` | Phone number as listed |
| `website` | Business website when present |
| `streetAddress`, `city`, `state`, `zip` | Full address, split into fields |
| `categories` | The YellowPages categories the business is listed under |
| `rating`, `reviewCount` | Star rating and number of reviews |
| `yearsInBusiness` | Years in business when shown |
| `snippet` | A short review snippet when present |
| `openStatus` | "open now" / hours flag when shown |
| `ypUrl`, `listingId` | Link to the YellowPages page and its listing id |
| `isAd` | True for sponsored / promoted listings |
| `searchTerm`, `location`, `sourceUrl`, `scrapedAt` | The search that found it and the run timestamp |

### Who uses it

- **Lead-generation and sales teams** building call and email lists for a trade in a territory.
- **Agencies** selling websites, ads or SEO to local businesses that have a phone but a weak or missing site.
- **Field-service and franchise sales** mapping competitors and prospects city by city.
- **Data pipelines** that need local business data as clean JSON, no API key.

### Input examples

One trade in one city:

```json
{
  "searchTerms": ["plumber"],
  "locations": ["Austin, TX"],
  "maxResults": 300
}
```

Several trades across several metros (each term is searched in each location):

```json
{
  "searchTerms": ["roofing contractor", "hvac", "electrician"],
  "locations": ["Denver, CO", "Phoenix, AZ", "Dallas, TX"],
  "maxResults": 2000
}
```

Paste a YellowPages URL directly:

```json
{
  "searchTerms": ["https://www.yellowpages.com/search?search_terms=dentist&geo_location_terms=Miami%2C+FL"]
}
```

### How it works

Each category is searched in each location, and the actor walks the YellowPages result pages, deduping businesses so a chain office listed on several pages is one row. It stops a search when a page returns nothing new or when your `maxResults` is reached. Sponsored and promo listings are flagged with `isAd`; contentless promo cards with no contact details are skipped entirely.

### Pricing

You pay per business lead returned, and that is the whole bill: platform usage is included in the price. No subscription.

| Event | Price |
| --- | --- |
| Business lead | $1.50 per 1,000 |
| Actor start | $0.001 per run |

The tiny start fee covers runs that return nothing; on any normal search it is noise next to the per-lead price.

### FAQ

**Do I need a proxy or an API key?** No. The actor brings everything it needs, and platform usage is included in the price, so nothing extra appears on your bill.

**How do I search many cities at once?** Put the cities in `locations` and the trades in `searchTerms`. The actor runs every combination, so three trades across five cities is fifteen searches in one run.

**Can I paste a filtered YellowPages URL?** Yes. Put the full URL in `searchTerms` and it is fetched as-is, so any filters in that URL are respected.

**Do I get an email address?** YellowPages listings carry a phone, website and address rather than an email. Use the `website` field to enrich emails downstream. Email enrichment straight from the business website is on the roadmap; open an issue if you want it prioritized.

**Why are some businesses missing?** Rows with no phone, website or address are dropped because they are not usable leads. Everything with at least one contact field is kept.

***

### Something missing?

If you need an extra field, email enrichment, or another directory, open an issue on this Actor and describe it. I read every request and small additions usually ship within days. More lead generation Actors are on [my profile](https://apify.com/tagadanar).

*YellowPages scraper, YellowPages leads, local business leads, B2B lead generation, scrape YellowPages phone numbers, business directory scraper, local SEO prospecting, sales lead list, YellowPages API alternative, small business contact data.*

# Actor input Schema

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

What kind of business to find. One per entry (e.g. <code>plumber</code>, <code>dentist</code>, <code>roofing contractor</code>). You can also paste a full YellowPages search URL and it is used as-is. Each term is searched in every location below.

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

Where to search, as YellowPages accepts it: a city and state (<code>Austin, TX</code>), a ZIP code (<code>78704</code>), or a county. Each category above is searched in each location. Leave empty only if your search terms are full YellowPages URLs.

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

Total businesses to return across all category and location combinations. YellowPages lists about 30 businesses per page and pages deep for common categories.

## Actor input object example

```json
{
  "searchTerms": [
    "plumber"
  ],
  "locations": [
    "Austin, TX"
  ],
  "maxResults": 40
}
```

# Actor output Schema

## `leads` (type: `string`):

One item per business in the default dataset.

# 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": 40
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/yellowpages-us").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": 40,
}

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

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/HBRx3kAqma4rNTjVW/builds/LapyIvtzOhxcbDLOl/openapi.json
