Canpages Canada Business Leads Scraper: Phone & Address
Pricing
from $17.00 / 1,000 results
Canpages Canada Business Leads Scraper: Phone & Address
Scrape Canadian business directory listings by keyword and city. Get each business name, phone, full address (street, city, province, postal code), category, website, email when published and a short description. Export to JSON, CSV or Excel.
Pricing
from $17.00 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Canpages Canada Business Leads Scraper: Phone & Address
Here is one real result, with every field the actor returns (long description and attributes lists are trimmed with an ellipsis, every value real):
{"businessId": "101902936","name": "Drain King Plumbers","phone": "647-362-2109","email": null,"website": "http://www.drainkingplumbers.ca","category": "North York Plumbing Contractors","addressStreet": "100 Saint Regis Crescent","city": "North York","province": "ON","postalCode": "M3J 1Y8","addressFull": "100 Saint Regis Crescent North York, ON, M3J 1Y8","description": "Drain King is the premium choice when you're looking for quality craftsmanship, professionalism and superior customer service in the Greater Toronto Area ...","rating": 5,"reviewCount": 8,"imageUrl": "https://ssmscdn.yp.ca/image/resize/8bfbcba8-0a3e-48d3-b64b-16df5995779c/yp-serp-thumbnail/1.jpg","openingHours": {"Monday": "12:00 am - 11:59 pm","Tuesday": "12:00 am - 11:59 pm"},"attributes": {"Specialities": ["Emergency Plumbing Service", "Residential", "Commercial", "Drain Cleaning / Repair"],"Methods of Payment": ["American Express", "Cash", "Cheque", "MasterCard", "Visa"],"Languages Spoken": ["English"],"Brands Carried": ["Moen", "American Standard", "Grohe", "Delta", "Kohler"]},"latitude": null,"longitude": null,"listingUrl": "https://www.canpages.ca/page/ON/north-york/drain-king-plumbers/101902936","aiProfileSummary": null,"aiLeadScore": null,"aiLeadTier": null,"aiLeadRationale": null,"searchQuery": "plumber","searchCity": "Toronto","source": "Canpages","observedAt": "2026-08-14T07:05:30.788Z","error": null}
The most complete Canpages Canada business leads scraper available. It returns every field the Canpages listing exposes for each business, including phone, full address, category, website, email when published, opening hours, ratings and a rich attributes block, plus optional contact-finder and AI add-ons, and gives you keyword and city inputs to target exactly the leads you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches the Canpages Canada business directory for each of your search queries in each of your cities, and writes one normalized record per business to the run's dataset. Every search query is combined with every city, so more queries and more cities mean more leads per run. Each record carries the business name, phone, full address (street, city, province, postal code), category, listing image, rating and review count. With withDetails on, the actor opens each business page to add the website, published email, a description, opening hours and a structured attributes block (specialities, products and services, payment methods, languages, brands). Missing source values are returned as null.
Optional add-ons: enrichContacts tries to find a public contact email and person for results that lack an email, and withAiProfileSummary / withAiLeadScore add an AI summary and a B2B lead score. All add-ons are paid and charge only when they return usable output.
Quickstart
Open the actor, paste this into the input, and press Run. It returns three plumbers in Toronto with full details.
{"searchQueries": ["plumber"],"cities": ["Toronto"],"withDetails": true,"maxBusinesses": 3}
Add more queries and cities to expand the run. With withDetails off you still get name, phone, address and category from the listing, faster and lighter.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchQueries | string[] | no | ["restaurant"] | Categories, keywords or business names to search, for example restaurant, plumber, dentist, law firm. |
cities | string[] | no | ["Toronto"] | Canadian cities or postal codes to search in, for example Toronto, Vancouver, BC, M5V 2T6. |
maxBusinesses | integer | no | 10 | Maximum businesses to collect across all queries and cities (1 to 100000). |
withDetails | boolean | no | true | Open each business page to add website, published email, description, hours and attributes. |
enrichContacts | boolean | no | false | Contact-finder add-on. For each result without an email, attempt to find a public contact email and name. Billed per attempt, plus an extra charge only when an email is found. |
enrichContactsMax | integer | no | 50 | Cap how many results the contact add-on tries to enrich. Free Apify accounts are capped at 3. |
withAiProfileSummary | boolean | no | false | AI plain-English business summary per record. Paid add-on, billed only when a summary is produced. |
withAiLeadScore | boolean | no | false | AI B2B lead score (0 to 100, hot/warm/cold). Paid add-on, billed only when a score is produced. |
Output reference
One dataset item per business. Types: string, integer, number, object, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
businessId | string | Canpages listing ID. |
name | string | Business name. |
phone | string | Business phone, or null. |
email | string | Published email, or null. |
website | string | Business website URL, or null. |
category | string | Listing category. |
addressStreet | string | Street address. |
city | string | City. |
province | string | Province code, for example ON. |
postalCode | string | Postal code. |
addressFull | string | Full single-line address. |
description | string | Business description text, or null. |
rating | number | Average rating, or null. |
reviewCount | integer | Number of reviews, or null. |
imageUrl | string | Listing image URL, or null. |
openingHours | object | Day-to-hours map, when published. |
attributes | object | Structured attributes (specialities, products and services, payment methods, languages, brands, categories). |
latitude | number | Latitude, or null. |
longitude | number | Longitude, or null. |
listingUrl | string | Canpages listing URL. |
aiProfileSummary | string | AI profile summary, or null unless withAiProfileSummary is on. |
aiLeadScore | integer | AI lead score 0 to 100, or null unless withAiLeadScore is on. |
aiLeadTier | string | AI lead tier (hot, warm, cold), or null. |
aiLeadRationale | string | AI reasoning for the lead score, or null. |
enrichedEmail | string | Contact email found by the add-on, or null. Present only when enrichContacts is on. |
enrichedContactName | string | Contact person found by the add-on, or null. |
enrichedJobTitle | string | Contact job title, or null. |
enrichedEmailStatus | string | Confidence status (verified, likely, guessed, not_found), or null. |
enrichedSource | string | Where the contact was found, or null. |
enrichedConfidence | number | Confidence score for the found contact, or null. |
searchQuery | string | The query that produced this record. |
searchCity | string | The city that produced this record. |
source | string | Data source. Canpages. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
The enriched* fields appear only when the enrichContacts add-on is enabled.
Example output record
Real record from a live run (input {"searchQueries":["plumber"],"cities":["Toronto"],"maxBusinesses":3,"withDetails":true,"withAiProfileSummary":true,"withAiLeadScore":true}). The AI fields are populated because this run enabled them, and long text is trimmed with an ellipsis:
{"businessId": "101902936","name": "Drain King Plumbers","phone": "647-362-2109","email": null,"website": "http://www.drainkingplumbers.ca","category": "North York Plumbing Contractors","addressStreet": "100 Saint Regis Crescent","city": "North York","province": "ON","postalCode": "M3J 1Y8","addressFull": "100 Saint Regis Crescent North York, ON, M3J 1Y8","description": "Drain King is the premium choice for quality craftsmanship, professionalism and superior customer service in the Greater Toronto Area ...","rating": 5,"reviewCount": 8,"imageUrl": "https://ssmscdn.yp.ca/image/resize/8bfbcba8-0a3e-48d3-b64b-16df5995779c/yp-serp-thumbnail/1.jpg","attributes": {"Specialities": ["Emergency Plumbing Service", "Residential", "Commercial", "Drain Cleaning / Repair"],"Methods of Payment": ["American Express", "Cash", "Cheque", "MasterCard", "Visa"]},"listingUrl": "https://www.canpages.ca/page/ON/north-york/drain-king-plumbers/101902936","aiProfileSummary": "Drain King Plumbers is a locally-owned, 24/7 plumbing and drain service in North York, ON, offering free quotes and industry-leading warranties across the Greater Toronto Area.","aiLeadScore": 90,"aiLeadTier": "hot","aiLeadRationale": "The business has a complete listing with a phone number, website, high rating and positive reviews, indicating strong reachability and value.","searchQuery": "plumber","searchCity": "Toronto","source": "Canpages","observedAt": "2026-08-14T07:05:30.788Z"}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~canpages-canada-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["plumber"],"cities":["Toronto"],"withDetails":true,"maxBusinesses":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~canpages-canada-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["dentist","law firm"],"cities":["Vancouver, BC","Calgary"],"maxBusinesses":200}'
Apify CLI:
apify call scrapers_lat/canpages-canada-scraper \--input '{"searchQueries":["restaurant"],"cities":["M5V 2T6"]}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per business record returned (
resultevent). See the pricing tab for the current per-result price. - Add-ons are billed separately. The
detailsfetch,enrichContacts(per attempt plus per email found),withAiProfileSummaryandwithAiLeadScoreeach charge only when they return usable output. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records per run, and the contact add-on to 3 results. Upgrade for higher
maxBusinesses.
FAQ and troubleshooting
Does it include email addresses?
Each record includes the published email when Canpages lists one. For results without one, enable enrichContacts to attempt finding a public contact email and name.
How do I get more leads per run?
Add more values to searchQueries and cities. Every query is combined with every city.
A run returned 0 records. Why? The keyword may not match any listing in that city. Try a broader category or a larger city. Zero-result runs are not charged.
Why are the AI or enriched fields null?
They only populate when you enable the matching add-on (withAiProfileSummary, withAiLeadScore, enrichContacts). Otherwise they stay null.
Is this an official Canpages tool? No. This actor is independent and has no affiliation with Canpages. It reads only data that is publicly available on Canpages listings. Use the results in accordance with the source's terms and applicable anti-spam law (CASL).
Related scrapers
- Canada Corporations Registry Scraper: Canadian federal and provincial companies.
- Yelp Business Scraper: US local businesses with reviews and contacts.
- Google Maps Business Scraper: Places with address, phone and rating.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Canpages. Accesses only publicly available directory data. Use in accordance with the source's terms.
