# Yellow Pages Canada Scraper - Emails & Leads (`confidential_gnat/yellowpages-canada-scraper`) Actor

Scrape Canadian businesses from Yellow Pages Canada (yellowpages.ca) with emails: name, phone, address, website, rating, hours and the business email when listed, plus employee emails from each website. Search by keyword and city or paste a URL. Export JSON, CSV or Excel.

- **URL**: https://apify.com/confidential_gnat/yellowpages-canada-scraper.md
- **Developed by:** [ActorFlow](https://apify.com/confidential_gnat) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## Yellow Pages Canada Scraper - Emails & Leads

![Yellow Pages Canada Scraper - Emails & Leads cover](https://i.postimg.cc/5NJ19GWB/Gemini-Generated-Image-d8qfrhd8qfrhd8qf.jpg)

**Scrape businesses from Yellow Pages Canada (yellowpages.ca)**: name, phone, address, categories, website, rating, hours, services, brands, languages, coordinates and social links. Export to JSON, CSV or Excel, or call it as an **API**. Paste a **Yellow Pages Canada search URL**, or give search terms and locations, and press Start. **Emails too:** business emails where the page lists one, plus employee emails found on each business website.

**Target website:** [Yellow Pages Canada (yellowpages.ca)](https://www.yellowpages.ca)

### ✨ Features of this Yellow Pages Canada business scraper

- **Email extraction** — business emails where the page lists one, plus employee emails found on each business website.
- **Business listing extraction** — name, phone, full address, categories, website, rating, review count and a short description from any Yellow Pages Canada search page.
- **Pagination support** — walks the result pages of each search until it has the number of businesses you asked for.
- **Search terms and locations** — give any number of terms and locations; every term is searched in every location.
- **Business page details** — optional: opens each business page for the full description, coordinates, opening hours, services, brands, specialties, languages and social links.
- **Employee contacts (leads)** — optional: finds employee names, roles, emails and LinkedIn links from each business's website.
- **Cache, new and changed businesses only** — use one cache name across scheduled runs and skip businesses you already have.
- **No proxy needed** — pages are loaded by the Actor's built-in service, so you leave proxies off.

### 🚀 How to scrape Yellow Pages Canada businesses in 5 steps

1. [Sign up](https://apify.com/sign-up) for a free Apify account — includes **$5 monthly credit**.
2. Open the actor page and click **Try for free**.
3. Paste Yellow Pages Canada search URLs, or fill in **Search terms** and **Locations**.
4. Click **Start** and wait for the run to complete.
5. Download results from the **Output** tab in JSON, CSV, or Excel format.

You can also run this actor via the [Apify API](https://docs.apify.com/api/v2) or integrate it directly into your workflows using [Zapier](https://zapier.com/apps/apify), [Make](https://www.make.com/), or [n8n](https://n8n.io/).

### 💰 Pricing for the Yellow Pages Canada scraper

This actor uses **pay-per-result** billing based on the compute units a run consumes.

- New Apify accounts include **$5 of free monthly credit**.
- It reads the data straight from the directory's pages instead of driving a browser, so it costs significantly less to run than browser-based scrapers.
- **Business pages** (the *Scrape business pages* option) are charged separately, per business whose page is opened, on top of the result price. Runs with business pages off pay only the standard result price.
- **Employee contacts** are charged separately, and only when the lookup successfully returns a list of contacts: every business you are charged for comes with at least one contact. The charge is once per business, not per contact. Businesses with no website, or where no contacts are found, are not charged for it.
- Businesses skipped by the cache are not charged.

### 🖼️ Yellow Pages Canada scraper input screenshot

![Yellow Pages Canada Scraper - Emails & Leads input form in Apify Console: search or business URLs, max items per search, cache project name, find employee contacts, scrape business pages, search terms, locations and proxy configuration](https://i.postimg.cc/sDTPfkGK/image.png)

Numbered labels in the screenshot:

1. **Search or business URLs** — the search result pages or business pages to scrape.
2. **Max items per search** — how many businesses to save for each search.
3. **Cache project name** — reuse the same name on scheduled runs to get only new and changed businesses.
4. **Find employee contacts (leads)** — look up each business website for employee contacts (charged separately, only when contacts are found).
5. **Scrape business pages** — open every business page for extra details (charged separately per business page).

Search terms and Locations (in the collapsible optional section) and the proxy settings sit below these fields.

### 🔧 Yellow Pages Canada scraper input configuration

| Field | Type | Required | Default | Description |
| ----- | ---- | -------- | ------- | ----------- |
| Search or business URLs (`startUrls`) | array | — | example search (prefill) | Yellow Pages Canada search result pages or single business pages, for example https://www.yellowpages.ca/search/si/1/plumber/Toronto+ON or https://www.yellowpages.ca/bus/Ontario/North-York/Drain-King-Plumbers/101902936.html. Leave empty to use the search terms and locations below. |
| Max items per search (`maxItems`) | integer | — | 5 | Maximum businesses saved for each search. A search shows up to about 50 result pages; for more, use narrower searches (more search terms or locations). |
| Cache project name (`cacheProjectName`) | string | — | — | Same name on each run = only new and changed businesses. |
| Find employee contacts (`enrichLeads`) | boolean | — | false | Looks up each business's website for employee contacts and adds them as a `leads` array. Needs the business to have a website. Charged only when the lookup successfully returns a list of contacts (at least one per charged business): once per business, not per contact; nothing when none are found. |
| Scrape business pages (`scrapeDetails`) | boolean | — | false | Open every business page for the full description, coordinates, opening hours, services, brands, specialties, languages and social links. Slower; off by default. Adds a separate charge per business page opened, on top of the normal result price. |
| Search terms (`searchTerms`) | array | — | — | What to search for, for example plumber, dentist or restaurant. Each term is searched in every location. |
| Locations (`locations`) | array | — | — | Where to search, for example Toronto ON or Vancouver BC. Each location is searched for every search term. |
| Proxy configuration (`proxyConfiguration`) | object | — | no proxy | Not needed: pages are loaded by the Actor's built-in service. |

**Supported URL types:**

- Search: `https://www.yellowpages.ca/search/si/1/plumber/Toronto+ON`
- Business page: `https://www.yellowpages.ca/bus/Ontario/North-York/Drain-King-Plumbers/101902936.html`

### 📦 Yellow Pages Canada scraper output data

The output is a dataset of business records with the fields `businessId`, `name`, `url`, `phone`, `address`, `street`, `city`, `region`, `postalCode`, `categories`, `website`, `rating`, `ratingCount`, `snippet`, `imageUrl`, `description`, `latitude`, `longitude`, `hours`, `email`, `socialLinks`, `services`, `brands`, `specialties`, `languages`, `leads`, `changeType`, `searchUrl`, `scrapedAt`. The dataset has 2 views:

- **Overview** — name, phone, address, categories, website, rating and number of reviews.
- **Contacts** — name, phone, email, website and city of each business.

**Output at a glance:**

| Business | Phone | Address | Categories | Website | Rating | Reviews |
| --- | --- | --- | --- | --- | --- | --- |
| [Drain King Plumbers](https://www.yellowpages.ca/bus/Ontario/North-York/Drain-King-Plumbers/101902936.html) | 647-362-2109 | 100 Saint Regis Crescent, North York, ON | Plumbers & Plumbing Contractors | http://www.drainkingplumbers.ca/ | 5 | 8 |
| [New Water Plumbing](https://www.yellowpages.ca/bus/Ontario/Thornhill/New-Water-Plumbing/1126404.html) | 647-559-9278 | 34 Doncaster Ave, Thornhill, ON L3T 4S1 | Plumbers & Plumbing Contractors | http://www.newwaterplumbing.ca/ | 2 | 7 |

**Sample output (raw JSON):**

```json
[
  {
    "businessId": "101902936",
    "name": "Drain King Plumbers",
    "url": "https://www.yellowpages.ca/bus/Ontario/North-York/Drain-King-Plumbers/101902936.html",
    "phone": "647-362-2109",
    "address": "100 Saint Regis Crescent, North York, ON M3J 1Y8",
    "street": "100 Saint Regis Crescent",
    "city": "North York",
    "region": "ON",
    "postalCode": "M3J 1Y8",
    "categories": [
      "Plumbers & Plumbing Contractors"
    ],
    "website": "http://www.drainkingplumbers.ca/",
    "rating": 5,
    "ratingCount": 8,
    "snippet": "Drain King Plumbers is a locally-owned, 24/7 full-service plumbing and drain company, serving all of Toronto and the Greater Toronto Area.",
    "imageUrl": null,
    "searchUrl": "https://www.yellowpages.ca/search/si/1/plumber/Toronto+ON",
    "description": "Drain King is the premium choice when you're looking for quality craftsmanship, professionalism and superior customer service in the Greater Toronto Area. Experienced, licensed plumbing professionals are at your service anytime you need us – 24/7 - Get A Free Quote",
    "latitude": 43.7550621,
    "longitude": -79.4822464,
    "hours": "Mon: 00:00-23:59; Tue: 00:00-23:59; Wed: 00:00-23:59; Thu: 00:00-23:59; Fri: 00:00-23:59; Sat: 00:00-23:59; Sun: 00:00-23:59",
    "socialLinks": [
      "https://www.facebook.com/drainkingplumbers/",
      "http://twitter.com/drainkingGTA"
    ],
    "services": [
      "Plumbing Repairs",
      "Pipe Replacement"
    ],
    "brands": [
      "Moen",
      "American Standard"
    ],
    "specialties": [
      "Emergency Plumbing Service",
      "Residential"
    ],
    "languages": [
      "English"
    ],
    "leads": [
      {
        "name": "Gabrielle Preston",
        "email": "gabrielle@drainkingplumbers.ca",
        "emailType": "personal",
        "position": "Customer Service Representative",
        "department": "support",
        "seniority": null,
        "phoneNumber": null,
        "linkedinUrl": "https://www.linkedin.com/in/gabrielle-preston-9647361ab",
        "confidence": 98
      },
      {
        "name": "Support contact",
        "email": "info@drainkingplumbers.ca",
        "emailType": "generic",
        "position": null,
        "department": "support",
        "seniority": null,
        "phoneNumber": null,
        "linkedinUrl": null,
        "confidence": 96
      }
    ],
    "changeType": null,
    "scrapedAt": "2026-10-22T11:00:45.514Z"
  },
  {
    "businessId": "1126404",
    "name": "New Water Plumbing",
    "url": "https://www.yellowpages.ca/bus/Ontario/Thornhill/New-Water-Plumbing/1126404.html",
    "phone": "647-559-9278",
    "address": "34 Doncaster Ave, Thornhill, ON L3T 4S1",
    "street": "34 Doncaster Ave",
    "city": "Thornhill",
    "region": "ON",
    "postalCode": "L3T 4S1",
    "categories": [
      "Plumbers & Plumbing Contractors"
    ],
    "website": "http://www.newwaterplumbing.ca/",
    "rating": 2,
    "ratingCount": 7,
    "snippet": "A plumbing, heating & mechanical company dedicated to serving the condominium management sector exclusively. Services include: Domestic hot & cold water, Boiler / Mechanical Room, Backflow Prevention.",
    "imageUrl": null,
    "searchUrl": "https://www.yellowpages.ca/search/si/1/plumber/Toronto+ON",
    "description": "At New Water Plumbing, we specialize in plumbing and mechanical services for condominium property management. We install and repair boilers, pumps, riser replacement, kitchen stack, drains and catch basins, PMCs, DHW/DCW and more. Since 1991 we have grown with the ever-expanding condominium",
    "latitude": 43.8028418,
    "longitude": -79.4179628,
    "hours": "Mon: 08:00-16:30; Tue: 08:00-16:30; Wed: 08:00-16:30; Thu: 08:00-16:30; Fri: 08:00-16:30",
    "services": [
      "Domestic Water Riser",
      "Domestic Hot Water Boiler Room Re-pipes"
    ],
    "specialties": [
      "Highrise Maintenance",
      "Underground Parking Services"
    ],
    "languages": [
      "English"
    ],
    "leads": [
      {
        "name": "General contact",
        "email": "richard@newwaterplumbing.ca",
        "emailType": "personal",
        "position": null,
        "department": null,
        "seniority": null,
        "phoneNumber": null,
        "linkedinUrl": null,
        "confidence": 92
      },
      {
        "name": "General contact",
        "email": "davidg@newwaterplumbing.ca",
        "emailType": "personal",
        "position": null,
        "department": null,
        "seniority": null,
        "phoneNumber": null,
        "linkedinUrl": null,
        "confidence": 84
      }
    ],
    "changeType": null,
    "scrapedAt": "2026-10-22T11:00:45.739Z"
  }
]
```

### 📧 How to find Yellow Pages Canada business emails and employee contacts (email enrichment)

Switch on **Find employee contacts** and the actor looks up each business's website and adds a `leads` array with employee names, roles, departments, emails, phone numbers and LinkedIn links when they can be found. The `leads` field is always present on every record: it is an empty array when the business has no website or nothing was found. The contacts charge is applied only when the lookup successfully returns a list of contacts, so every charged business has at least one lead. It is charged once per business, not per contact, and never when `leads` is empty. The lookup runs once per business website.

| name | email | position |
| ---- | ----- | -------- |
| Jane Example | jane@example.com | Owner |
| John Sample | john@example.com | Office manager |

### 🔁 Scrape only new Yellow Pages Canada businesses with the cache

Set the same **Cache project name** on every scheduled run. Businesses already saved under that name and unchanged are skipped: they are not charged and do not count towards **Max items per search**. New businesses get `changeType: "new"` and businesses whose phone, address, website or rating changed get `changeType: "updated"`. Each name keeps its own separate cache. Add the actor to an Apify Schedule to track new businesses in a category and area automatically.

### 🐍 How to scrape Yellow Pages Canada with Python, JavaScript or the API

Run the actor programmatically with the official Apify clients. Replace `<YOUR_API_TOKEN>` with the token from your [Apify Console](https://console.apify.com/account/integrations).

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("confidential_gnat/yellowpages-canada-scraper").call(run_input={
        "searchTerms": [
            "plumber"
        ],
        "locations": [
            "Toronto ON"
        ],
        "maxItems": 20,
        "scrapeDetails": False,
        "enrichLeads": True
    })

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**JavaScript** (`npm install apify-client`):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('confidential_gnat/yellowpages-canada-scraper').call({
        "searchTerms": [
            "plumber"
        ],
        "locations": [
            "Toronto ON"
        ],
        "maxItems": 20,
        "scrapeDetails": false,
        "enrichLeads": true
    });

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**cURL** — start a run and wait for the dataset:

```bash
curl -X POST "https://api.apify.com/v2/acts/confidential_gnat~yellowpages-canada-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["plumber"], "locations": ["Toronto ON"], "maxItems": 20, "scrapeDetails": false, "enrichLeads": true}'
```

### 💡 What you can use Yellow Pages Canada business data for

- Lead generation: phone numbers, websites and emails of local businesses by category and area
- Sales prospecting with employee names, roles and emails from each company website
- Local market research and competitor mapping by category, city and rating
- Building and enriching CRM and mailing lists
- Monitoring new businesses and changes in a category with scheduled cached runs

Sales teams, marketing agencies, recruiters and market researchers typically use this data across services, trades, retail and hospitality.

### ⚠️ Limitations of the Yellow Pages Canada scraper

- **Result depth** — one search shows about 50 result pages; for more businesses use more search terms and locations.
- **Sponsored listings** — advertisers are marked in the directory and can appear first; they are included once.
- **Reviews and ratings** — ratings and counts are only present for businesses that have reviews.
- **Emails** — an email address is only present when the business lists one on its page; use employee contacts for more.
- **Login-required content** — nothing behind a login is collected.

### ❓ Yellow Pages Canada scraper FAQ

#### Can I scrape Yellow Pages Canada legally?

The actor only collects data that is already publicly visible on Yellow Pages Canada — no login, paywall or private content is accessed. Scraping publicly available data is generally considered lawful (see *hiQ Labs v. LinkedIn*), but you are responsible for complying with the site's Terms of Service and applicable laws such as GDPR or CCPA, since business listings can contain personal data such as names, phone numbers and emails.

#### What data does the Yellow Pages Canada scraper return?

Each record has the business name, phone, address, categories, website, rating and more. With business pages on you also get the full description, coordinates, opening hours, services, brands, specialties, languages and social links. With employee contacts on, each record also has a `leads` array with employee names, roles and emails: business emails where the page lists one, plus employee emails found on each business website.

#### How many businesses can I scrape from one Yellow Pages Canada search?

`maxItems` limits the businesses saved for each search URL, not the whole run. A search shows about 50 result pages (around 1,750 businesses at most); to collect more, use several search terms and locations.

#### Do I need a proxy to scrape yellowpages.ca?

No. Pages are loaded by the Actor's built-in service, so you leave the proxy off.

#### How do I find emails of businesses on Yellow Pages Canada?

Switch on **Find employee contacts**: the actor looks up each business's website and adds employee names, roles and emails to a `leads` array. It is charged separately and only when the lookup successfully returns contacts: once per business, with at least one lead in every charged record, and nothing when `leads` is empty.

#### How do I scrape Yellow Pages Canada with Python?

Use the Python example above: call the actor with the Apify client and iterate over the dataset items.

#### Can I run this Yellow Pages Canada scraper on a schedule?

Yes. Use Apify Schedules to run it daily or weekly. Set a **Cache project name** and each run returns only new and changed businesses; businesses already seen and unchanged are skipped and not charged.

#### What output formats are supported?

JSON, CSV, Excel, XML and RSS, either from the **Output** tab or through the Apify API.

### 🔗 Relevant actors for business directories and leads

| Scraper | Description |
| ------- | ----------- |
| [📒 Páginas Amarillas Spain (Yellow Pages) Business Scraper](https://apify.com/confidential_gnat/paginasamarillas-business-scraper) | Scrape business listings from Páginas Amarillas Spain: name, phone, address and more. |
| [🏢 BBB Emails & Info Scraper](https://apify.com/confidential_gnat/bbb-business-scraper) | Scrapes Better Business Bureau businesses: name, phone, rating, accreditation and contacts. |
| [⚖️ Martindale Lawyers Scraper](https://apify.com/confidential_gnat/martindale-lawyers-scraper) | Scrapes lawyer and law firm profiles from Martindale with optional contacts. |
| [📧 Decision Maker Email Finder](https://apify.com/confidential_gnat/decision-maker-email-finder) | Finds decision makers and emails from company websites. |
| [💰 Signal NFX Investors Email Scraper](https://apify.com/confidential_gnat/signal-nfx-investors-scraper) | Scrapes VC and angel investor profiles from Signal by NFX. |

### 🔗 Other actors you may find useful

| Scraper | Description |
| ------- | ----------- |
| [💼 XING Jobs Scraper](https://apify.com/confidential_gnat/xing-jobs-scraper) | Scrape job listings from XING Jobs: title, company, location and employment type. |
| [🍷 Vivino Wine Scraper](https://apify.com/confidential_gnat/vivino-wine-scraper) | Scrape wine data from Vivino: name, winery, vintage, region and rating. |
| [📈 Kalshi Markets Scraper](https://apify.com/confidential_gnat/kalshi-markets-scraper) | Scrape Kalshi prediction markets: yes/no prices, implied probability and volume. |
| [✈️ Kiwi.com Flight Scraper](https://apify.com/confidential_gnat/kiwi-flight-scraper) | Scrape flight prices and schedules from Kiwi.com, including airline and times. |
| [🛒 Craigslist Listings Scraper](https://apify.com/confidential_gnat/craigslist-listings-scraper) | Scrape Craigslist listings in any city and category: title, price and more. |

### 💬 Support & contact

If you encounter any issues or have questions, please [open an issue](https://apify.com/confidential_gnat/yellowpages-canada-scraper/issues/open) or reach out via the [Apify Community Forum](https://community.apify.com/).

You can also find more of our actors on the [Actor Flow](https://apify.com/confidential_gnat) page.

# Actor input Schema

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

Yellow Pages Canada search result pages or single business pages, for example https://www.yellowpages.ca/search/si/1/plumber/Toronto+ON or https://www.yellowpages.ca/bus/Ontario/North-York/Drain-King-Plumbers/101902936.html. Leave empty to use the search terms and locations below.

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

Maximum businesses saved for each search. A search shows up to about 50 result pages; for more, use narrower searches (more search terms or locations).

## `cacheProjectName` (type: `string`):

Use the same name on each scheduled run to get only new and changed businesses. Businesses already seen and unchanged are skipped and not charged. Each record gets a changeType: new or updated.

## `enrichLeads` (type: `boolean`):

Looks up each business's website for employee contacts (name, role, email, LinkedIn) and adds them as a 'leads' array. Needs the business to have a website. Adds a separate charge only for a business where the lookup successfully returns at least one contact (one charge per business, not per contact); nothing is charged when no contacts are found.

## `scrapeDetails` (type: `boolean`):

Open every business page for the full description, coordinates, opening hours, services, brands, specialties, languages and social links. Slower; off by default. Adds a separate charge per business page opened, on top of the normal result price.

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

What to search for, for example plumber, dentist or restaurant. Each term is searched in every location.

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

Where to search, for example Toronto ON or Vancouver BC. Each location is searched for every search term.

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

Not needed: pages are loaded by the Actor's built-in service. Leave proxies off.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.yellowpages.ca/search/si/1/plumber/Toronto+ON"
    }
  ],
  "maxItems": 5,
  "enrichLeads": false,
  "scrapeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://www.yellowpages.ca/search/si/1/plumber/Toronto+ON"
        }
    ],
    "maxItems": 5,
    "enrichLeads": false,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("confidential_gnat/yellowpages-canada-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 = {
    "startUrls": [{ "url": "https://www.yellowpages.ca/search/si/1/plumber/Toronto+ON" }],
    "maxItems": 5,
    "enrichLeads": False,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("confidential_gnat/yellowpages-canada-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 '{
  "startUrls": [
    {
      "url": "https://www.yellowpages.ca/search/si/1/plumber/Toronto+ON"
    }
  ],
  "maxItems": 5,
  "enrichLeads": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call confidential_gnat/yellowpages-canada-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,confidential_gnat/yellowpages-canada-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/tVhdlLDFTjip49Ogf/builds/DKBYtMXggohBmZ5hR/openapi.json
