Yellow Pages CA Scraper — Canadian Business Leads
Pricing
from $3.00 / 1,000 business listing scrapeds
Yellow Pages CA Scraper — Canadian Business Leads
Scrape Canadian business listings from YellowPages.ca. Extract names, phones, emails, addresses, websites, ratings, reviews, hours, social links, and coordinates. Search by keyword+location or paste direct URLs.
Pricing
from $3.00 / 1,000 business listing scrapeds
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Canadian business listings from YellowPages.ca — the largest business directory in Canada. Extract business names, phone numbers, emails, addresses, websites, ratings, reviews, operating hours, social media links, and geo-coordinates. Search by keyword + location or paste direct URLs.
Use Cases
- B2B Lead Generation: Build targeted prospect lists of Canadian SMBs by category and city for outbound sales
- Local SEO Analysis: Audit client listings against top-ranked competitors across Canadian markets
- Market Research: Map business density, compare ratings, and track competitor coverage across provinces
- CRM Enrichment: Enrich existing business databases with verified phone, website, address, and social handles
- Recruiting: Find trades and skilled-trade employers (plumbers, electricians, contractors) for sourcing
- Directory Building: Build structured local-business corpora for RAG, LLM training, or data products
Features
- Multi-input mode: Search by keyword + location OR paste direct YellowPages.ca URLs
- Detail page enrichment: Optional visit to each business detail page for email, hours, social links, services, photos, coordinates
- Customer reviews: Optional review extraction (author, rating, text, date)
- Anti-bot handling: Residential CA proxies + session rotation + stealth browser args
- Pagination: Automatic pagination through search results (configurable max pages)
- Sort options: Default, distance, name, or rating
- MCP-optimized: Semantic field names, structured output, AI-agent-ready schema
- Pay-per-event: Only charged for results actually extracted
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchTerms | string[] | ["plumber"] | Keywords/categories to search (cross-joined with locations) |
locations | string[] | ["Toronto, ON"] | Canadian locations in "City, Province" format |
startUrls | array | [] | Direct YellowPages.ca URLs (search, category, or detail pages) |
maxResults | integer | 100 | Hard cap on total business records (0 = unlimited) |
maxPagesPerSearch | integer | 10 | Max result pages to crawl per search term × location |
extractDetails | boolean | true | Visit detail pages for richer fields (email, hours, social, etc.) |
includeReviews | boolean | false | Extract customer reviews (requires extractDetails) |
maxReviewsPerBusiness | integer | 30 | Max reviews per business (0 = all, ~500 cap) |
sortBy | enum | "default" | Sort: default, distance, name, or rating |
proxyConfiguration | object | CA residential | Proxy settings (CA residential required) |
maxConcurrency | integer | 5 | Concurrent browser pages |
Output Data
Each record contains:
| Field | Type | Description |
|---|---|---|
businessName | string | Business name |
phone | string|null | Phone number |
email | string|null | Email address (from detail page) |
website | string|null | Business website URL |
address | object | {street, city, province, postalCode} |
addressFormatted | string|null | Full address as single string |
coordinates | object|null | {lat, lng} geo-coordinates |
categories | string[] | Business categories |
primaryCategory | string|null | First category |
rating | number|null | Star rating (1-5) |
reviewCount | number|null | Total review count |
hours | object|null | Day-by-day operating hours |
socialLinks | object | {facebook, instagram, linkedin, twitter, youtube} |
logo | string|null | Logo image URL |
photos | string[] | Photo image URLs |
services | string[] | Services offered |
paymentMethods | string[] | Accepted payment methods |
yearsInBusiness | number|null | Years in operation |
claimed | boolean|null | Whether listing is owner-claimed |
profileUrl | string | YellowPages.ca profile URL |
yellowPagesId | string|null | Internal YP listing ID |
searchTerm | string|null | Search keyword used |
searchLocation | string|null | Search location used |
sourceUrl | string | Page URL where data was extracted |
scrapedAt | string | ISO 8601 timestamp |
reviews | array|undefined | Customer reviews (if enabled) |
Sample Output
{"businessName": "Joe's Plumbing Inc","phone": "+1 416-555-0123","email": "info@joesplumbing.ca","website": "https://joesplumbing.ca","address": {"street": "123 Main Street","city": "Toronto","province": "ON","postalCode": "M1M 1M1"},"addressFormatted": "123 Main Street, Toronto, ON, M1M 1M1","coordinates": { "lat": 43.6532, "lng": -79.3832 },"categories": ["Plumbing", "Contractor"],"primaryCategory": "Plumbing","rating": 4.5,"reviewCount": 127,"hours": { "Monday": "8:00-17:00", "Tuesday": "8:00-17:00" },"socialLinks": {"facebook": "https://facebook.com/joesplumbing","instagram": null,"linkedin": null,"twitter": null,"youtube": null},"logo": "https://...","photos": ["https://..."],"services": ["Drain cleaning", "Pipe repair"],"paymentMethods": ["Visa", "Mastercard"],"yearsInBusiness": 15,"claimed": true,"profileUrl": "https://www.yellowpages.ca/bus/Ontario/Toronto/Joes-Plumbing/12345.html","yellowPagesId": "12345","searchTerm": "plumber","searchLocation": "Toronto, ON","sourceUrl": "https://www.yellowpages.ca/search/si/1/plumber/Toronto+ON","scrapedAt": "2026-07-02T10:30:00.000Z"}
Pricing
This actor uses pay-per-event pricing:
| Event | Price | Description |
|---|---|---|
| Actor Start | $0.00005 | Charged once per run start |
| Business Scraped | $0.003 | Per business listing extracted |
Cost Examples
- Scrape 100 businesses → $0.30
- Scrape 1,000 businesses → $3.00
- Scrape 10,000 businesses → $30.00
Code Examples
JavaScript
const { ApifyClient } = require('apify-client');const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('muhammadafzal/yellow-pages-ca-scraper').call({searchTerms: ['plumber'],locations: ['Toronto, ON', 'Montreal, QC'],maxResults: 200,extractDetails: true});const dataset = await client.dataset(run.defaultDatasetId).listItems();console.log(dataset.items);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("muhammadafzal/yellow-pages-ca-scraper").call(run_input={"search_terms": ["dentist"],"locations": ["Vancouver, BC"],"max_results": 500,"extract_details": True})dataset = client.dataset(run["defaultDatasetId"]).list_items()for item in dataset:print(item["businessName"], item["phone"], item["email"])
Technical Notes
- Proxy: Canadian residential proxies are required — YellowPages.ca uses CloudFront geo-blocking that blocks datacenter IPs and non-CA traffic
- Crawler: PlaywrightCrawler with stealth browser args and session rotation
- Speed: ~2-5 seconds per search page, ~3-8 seconds per detail page
- Limits: YellowPages.ca returns up to ~500 results per search term × location pair
FAQ
Q: Why am I getting 0 results? A: Ensure proxy is set to Canadian residential (CA). YellowPages.ca geo-blocks non-Canadian IPs. Check that your search terms and locations are valid Canadian locations.
Q: Can I scrape all of Canada?
A: Yes — leave locations empty (defaults to Toronto, ON). For comprehensive coverage, specify multiple cities: ["Toronto, ON", "Montreal, QC", "Vancouver, BC", "Calgary, AB", "Ottawa, ON"].
Q: Why is email null for some businesses?
A: Email is only available on the business detail page. Ensure extractDetails is true. Some businesses don't list emails publicly.
Q: How do I get reviews?
A: Enable both extractDetails and includeReviews. Reviews increase runtime significantly.