Yellow Pages Canada Scraper
Pricing
from $2.50 / 1,000 listings
Yellow Pages Canada Scraper
Scrape yellowpages.ca and pagesjaunes.ca (Canada, not PagesJaunes.fr): business name, phone, email when listed, website, address, hours, rating, and categories. Keyword + city or a .ca search/profile URL. Mobile JSON, no browser. JSON or CSV out. $2.50 per 1,000 listings.
Pricing
from $2.50 / 1,000 listings
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share

Turn a yellowpages.ca or pagesjaunes.ca search into structured Canadian business rows: name, phone, email when listed, website, address, hours, categories, rating, and profile link.
Keyword + city, or a .ca URL. JSON or CSV out.
This is Yellow Pages Canada (YP Group). It is not PagesJaunes.fr and not Canada411 (people / white pages).
Why Use This Scraper?
- Phone on every listing in the pizza/Toronto sample
- Native email when Yellow Pages publishes one (about 1 in 4 restaurants; lower on trades)
- Website and social links on the search row
- Hours, categories, rating, neighbourhood, coordinates
- English (yellowpages.ca) and French (pagesjaunes.ca) from the same mobile JSON
- HTTP only. No browser
Overview
Built for sales teams, agencies, and researchers who need Canadian business leads from yellowpages.ca / pagesjaunes.ca.
Every start type becomes one dataset row per merchant. A keyword search, a pretty /search/si/ URL, and a /bus/ profile URL all emit the same flat shape. Rows are de-duplicated by Yellow Pages merchant id.
pagesjaunes.ca is the French Canadian twin of yellowpages.ca. It is not PagesJaunes.fr (Solocal, France).
Supported Inputs
Search terms and locations
| Field | Example |
|---|---|
searchTerms | ["pizza"], ["plumber", "dentist"] |
locations | ["Toronto, ON"], ["Montreal"], ["Vancouver"] |
Every term is searched in every location. ["pizza","plumber"] × ["Toronto","Montreal"] is four searches. A term with no location is skipped.
Set language to fr to hit pagesjaunes.ca for keyword searches.
URL types
| URL type | Pattern | Example |
|---|---|---|
| Pretty search | /search/si/{page}/{what}/{where}/ | https://www.yellowpages.ca/search/si/1/pizza/Toronto/ |
| Query-string search | /search/?stype=si&what=&where= | https://www.pagesjaunes.ca/search/?stype=si&what=plombier&where=Montreal |
| Business profile | /bus/{Province}/{City}/{Slug}/{id}.html | https://www.yellowpages.ca/bus/Ontario/Toronto/Pizzaville/100363770.html |
A pagesjaunes.ca URL forces French regardless of language. Search URLs are paginated automatically.
Unsupported: canada411.ca people pages, yellowpages.com (US), pagesjaunes.fr (France).
Use Cases
| Audience | What they take from a run |
|---|---|
| Sales and outreach | Phone + website + email (when listed) by category and city |
| Agencies | Cross-joined term × city lists in one dataset |
| Local SEO | Categories, rating, neighbourhood, and the Yellow Pages profile URL |
| Researchers | Hours, coordinates, and out-of-business flags for a trade in a city |
How It Works
- Cross-join
searchTerms×locations, plus any yellowpages.ca / pagesjaunes.ca URLs. - Call the mobile keyword search at 15 businesses per page (
pg=N). - Fan out remaining pages in parallel, stopping at
maxItemsormaxPages. - Read email, website, hours, and categories from the search row.
- Optionally load
/merchant/{id}for extra phones (toll-free). - De-duplicate by merchant id and push one row per business.

Input Configuration
| Field | Type | Required | Notes |
|---|---|---|---|
searchTerms | array | one of the start types | What you would type into Yellow Pages |
locations | array | with searchTerms | City or City, PV |
startUrls | array | one of the start types | Search or /bus/ URLs on .ca |
maxItems | integer | no | Default 50. Free users capped at 50. |
language | string | no | en (yellowpages.ca) or fr (pagesjaunes.ca) |
scrapeDetails | boolean | no | Default true. Extra phones only. |
maxPages | integer | no | Default 20 (300 rows per search). |
maxConcurrency | integer | no | Default 5. |
proxy | object | no | Optional. Default is no Apify proxy. |
Example input
{"searchTerms": ["pizza"],"locations": ["Toronto, ON"],"maxItems": 50}
French Canadian twin:
{"searchTerms": ["plombier"],"locations": ["Montreal"],"language": "fr","maxItems": 50}
Output Overview
One flat row per business. Contact and address fields sit at the top level. searchTerm tells you which input produced the row. Email and website are present only when Yellow Pages lists them.
Output Samples
Search: pizza in Toronto, ON.
{"listingId": "100363770","name": "Pizzaville","phone": "4167363636","phones": ["4167363636"],"email": "info@pizzaville.ca","website": "https://www.pizzaville.ca/","social": [{ "type": "FACEBOOK", "url": "http://www.facebook.com/pizzavilleinc" }],"street": "796 College St","city": "Toronto","province": "ON","postalCode": "M6G 1C6","neighbourhood": "Little Italy","latitude": 43.6548587,"longitude": -79.4214047,"categories": ["Pizza & Pizzerias", "Restaurants"],"rating": null,"reviewCount": null,"hours": [{ "day": 1, "open": "11:00", "close": "23:00" }],"isOpen": true,"outOfBusiness": false,"yellowPagesUrl": "http://www.yellowpages.ca/bus/Ontario/Toronto/Pizzaville/100363770.html","language": "en","searchTerm": "pizza in Toronto, ON"}
Key Output Fields
Identity: listingId, name, yellowPagesUrl, language
Contact: phone (digits), phones (includes toll-free when scrapeDetails is on), email, website, social
Place: address, street, city, province, postalCode, neighbourhood, latitude, longitude
Directory: categories, rating, reviewCount, hours, isOpen, outOfBusiness
Provenance: searchTerm, scrapedAt
Phone is present on every row in a pizza/Toronto sample. Email is not: Yellow Pages only publishes an inbox on some merchants.
Pricing
| Event | When | Rate |
|---|---|---|
| Actor start | Once per run, per GB of memory | $0.005 |
| Listing | Each unique business in the dataset | $0.0025 ($2.50 / 1k) |
| Contact phone | Row has a phone | $0.002 |
| Contact email | Row has an email | $0.05 |
Phone and email are billed only when Yellow Pages publishes that field. A miss is free.
FAQ
Is this PagesJaunes.fr? No. pagesjaunes.ca is the French Canadian twin of yellowpages.ca. For France use PagesJaunes Scraper.
Does it scrape Canada411 people? No. Use Canada411 Scraper.
Will every row have an email? No. Same as the US directory: phone is common, inbox is not. Phone and email are billed as extra events only when the field is present.
What does scrapeDetails add? Extra phone types (toll-free). Email and website are already on the search row when Yellow Pages has them.
Do I need a proxy? No.
French results? Set language to fr, or paste a pagesjaunes.ca URL.
Support
- Issues: Actor Issues
- Author site: https://muhamed-didovic.github.io/
- Email: muhamed.didovic@gmail.com
Additional Services
Bulk province sweeps, scheduled refreshes, or a private API wrapper: muhamed.didovic@gmail.com
Explore More Scrapers
Directory cousins: Yellow Pages US Scraper, Canada411 Scraper, and PagesJaunes.fr Scraper. More actors on memo23 and didovic.
🤖 For AI Agents & LLM Apps
Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/yellowpages-ca-scraper).
Purpose: Extract yellowpages.ca / pagesjaunes.ca business listings (name, phone, email when listed, website, split address, hours, categories) by keyword + city or URL.
Minimal input:
{"searchTerms": ["pizza"],"locations": ["Toronto, ON"],"maxItems": 10}
Output: one dataset row per business — listingId, name, phone, phones, email, website, social, address, street, city, province, postalCode, neighbourhood, latitude, longitude, categories, rating, reviewCount, hours, isOpen, outOfBusiness, yellowPagesUrl, language, searchTerm, scrapedAt.
Behaviors an agent should know:
- Always set
maxItems. Free users are capped at 50. searchTermsneeds at least one entry inlocations.startUrlswork on their own (yellowpages.ca or pagesjaunes.ca only).language: "fr"hits pagesjaunes.ca. A pagesjaunes.ca URL forces French.- Email is often empty. Do not assume a contact-email field exists on every row.
- Each listing is $0.0025. A phone on the row is $0.002. An email is $0.05. Start is $0.005 per GB.
- Canada business directory only. Not Canada411 people, not PagesJaunes.fr, not yellowpages.com.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Yellow Pages Digital & Media Solutions Limited, Yellow Pages Group, or Pages Jaunes. All trademarks mentioned are the property of their respective owners.
The scraper reads publicly listed Canadian business data from Yellow Pages Canada's mobile search API. Users are responsible for ensuring their use complies with yellowpages.ca and pagesjaunes.ca Terms of Service, PIPEDA and provincial privacy law, CASL if they send outreach, and any contractual obligations of their own organization.
SEO Keywords
yellow pages canada scraper, yellowpages.ca scraper, pagesjaunes.ca scraper, scrape yellow pages canada, Yellow Pages Canada API, Canadian business listings scraper, Canada phone email scraper, pagesjaunes canada scraper, Apify yellow pages canada, Canadian restaurant leads, plumber leads Canada, local SEO Canada data, yellowpages.ca email scraper, Canadian directory scraper, pagesjaunes.ca leads