# Yellow Pages Canada Scraper - Business Leads & Phone Numbers (`ryeguy96/yellowpages-scraper`) Actor

Scrape Canadian business leads from Yellow Pages, company names, phone numbers, addresses, websites, and categories by keyword and city. Clean JSON/CSV/Excel export for sales prospecting, lead generation, CRM enrichment, and local business data. Any category, any Canadian city, multi-city in one run

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

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

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

## Yellow Pages Canada Scraper — Business Leads

Scrape **business listings from Yellow Pages Canada (yellowpages.ca)** for any search term and location — get **business name, phone number, address, website, and categories** as clean, structured JSON/CSV. Sweep multiple cities in a single run and build lead lists ready for sales, outreach, or market research.

No login, no API key — just set a search term and location and go.

### What you get per business

| Field | Example |
|---|---|
| **name** | `Drain King Plumbers` |
| **phone** | `647-362-2109` |
| **address** | `100 Saint Regis Crescent, North York, ON` |
| **website** | `http://www.drainkingplumbers.ca/` |
| **categories** | `["Plumbers & Plumbing Contractors"]` |
| **url** | link to the Yellow Pages profile |

### Features

| | |
|---|---|
| 📇 **Lead-ready data** | Name, phone, address, website, and categories for every listing. |
| 🔎 **Full pagination** | Returns all results across pages, not just page one. |
| 🌎 **Multi-location sweep** | Search the same term across many cities in one run. |
| 🔁 **Deduplicated** | No repeated businesses across pages. |
| 🛡️ **Proxy-ready** | Built-in Apify Proxy support for reliable large runs. |
| 💪 **Resilient** | A failed page or location is skipped — the run still finishes. |

### Input

| Field | Type | Description | Example |
|---|---|---|---|
| `query` *(required)* | string | Business type or keyword. | `plumber` |
| `locations` | array | Canadian locations to search. | `["Toronto ON", "Vancouver BC"]` |
| `maxResults` | integer | Cap businesses per location. Leave blank for all. | `100` |
| `proxyConfiguration` | object | Proxies for every request. Residential recommended for large runs. | Apify Proxy |

### Output

Each business is one dataset record:

```json
{
  "listing_id": "101902936",
  "name": "Drain King Plumbers",
  "phone": "647-362-2109",
  "address": "100 Saint Regis Crescent, North York, ON M3J 1Y8",
  "website": "http://www.drainkingplumbers.ca/",
  "categories": ["Plumbers & Plumbing Contractors"],
  "url": "https://www.yellowpages.ca/bus/Ontario/Toronto/Drain-King-Plumbers/101902936.html",
  "location": "Toronto ON",
  "query": "plumber"
}
```

Export results as JSON, CSV, Excel, or via API.

### Example uses

- Build targeted **B2B lead lists** for sales outreach.
- Compile a directory of businesses in a category and region.
- Enrich a CRM with phone numbers and websites.
- Market and competitor research by city.

### Tips

- For large multi-city runs, enable **Apify Proxy (residential)** to avoid rate-limiting.
- Start with a small `maxResults` to preview the data, then scale up.

***

*This scraper collects only publicly visible business listing data. Respect Yellow Pages'
terms and applicable laws (including anti-spam rules such as Canada's CASL) when using
the data you collect.*

# Actor input Schema

## `query` (type: `string`):

Business type or keyword to search, e.g. plumber, dentist, restaurant, electrician.

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

Canadian locations to search, e.g. "Toronto ON", "Vancouver BC", "Montreal QC".

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

Cap businesses returned per location (leave blank for all, across all pages).

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

Proxies used for every request. Residential proxies are recommended for large runs to avoid rate-limiting.

## Actor input object example

```json
{
  "query": "plumber",
  "locations": [
    "Toronto ON"
  ],
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `businesses` (type: `string`):

All scraped businesses in the run's 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 = {
    "query": "plumber",
    "locations": [
        "Toronto ON"
    ],
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ryeguy96/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 = {
    "query": "plumber",
    "locations": ["Toronto ON"],
    "maxResults": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("ryeguy96/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 '{
  "query": "plumber",
  "locations": [
    "Toronto ON"
  ],
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call ryeguy96/yellowpages-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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