Every building permit is a public announcement that someone is about to spend money on construction. A new roof, an addition, a pool, a basement, a full teardown — before any of it happens, a permit gets filed with the city. If you sell to homeowners or property owners who are building, that permit is the earliest, highest-intent signal you can get. This is a practical recipe for pulling fresh Canadian building-permit data and turning it into a lead list for outreach.
Why permits are the best trigger for the trades
Most contractor lead-gen is either expensive (pay-per-lead marketplaces taking a cut of every job) or a guessing game (blanket ads to people who aren't building anything). Permit data flips that. A filed permit tells you: this specific address, in this specific city, is doing this specific type of work, right now. You're not hoping someone needs a roofer — you're looking at a list of properties that just pulled a roofing permit.
The trades this works for: roofing, HVAC, solar, windows/doors, landscaping, pools, foundations, remodelers, and every supplier who sells into those jobs (materials, equipment, financing).
The data source
Canadian cities publish building permits as open data, but each city does it differently — different portals, different formats, different fields. Instead of wrangling five municipal APIs yourself, you can pull them through one Apify actor that normalizes them into a single clean dataset: Building Permits Canada. It currently covers Toronto, Vancouver, Calgary, Edmonton, and Montréal. Output is JSON/CSV.
Honesty first, because it affects how you use it: this is municipal open data, and freshness varies by city. Some cities publish within days; others lag (Calgary, for example, runs several weeks behind). So treat it as a steady prospecting feed, not a real-time race — filter to recent permits and work the list.
The recipe: permits to a working lead list
- Pull the data. Run the Building Permits Canada actor, scoped to the city or cities you serve.
- Filter to your job type. Building permits carry a work type / description field (new construction, alteration, demolition, roofing, plumbing, etc.). Filter to the ones that match what you sell — a roofer wants re-roof and new-build permits, not plumbing alterations.
- Filter to recent + your service area. Keep permits from the last few weeks in the postal codes / neighbourhoods you actually cover. A tight, local list beats a huge one.
- Turn addresses into outreach. You now have property addresses with a known, dated intent. Direct mail still works extremely well for the trades (a postcard to "the owner of [address] who just pulled a permit" converts). For B2B (suppliers selling to the GC or developer named on the permit), enrich the company name in a tool like Clay to find contacts.
- Automate it. Wire the actor into Make or n8n, or a scheduled Apify run, drop new permits into a Google Sheet or CRM each week, and work the fresh rows. Set it once, get a weekly list.
Who buys this kind of data
- Contractors and trades — roofing, HVAC, solar, windows, pools, landscaping, remodeling: permit lists = local, dated, high-intent leads.
- Building-material and equipment suppliers — sell to the builders named on new-construction permits.
- Proptech and real-estate investors — permit activity signals renovations, flips, and development before it's visible on the market.
- Market analysts and lenders — permit volume is a leading indicator of local construction demand.
The mistake to avoid
Don't buy "all permits, all cities" and blast everyone. The power of permit data is precision: right city, right work type, right recency, right service area. A roofer working three suburbs wants this week's re-roof permits in those three suburbs — nothing else. Narrow the list hard, personalize the outreach to the actual job, and the response rate takes care of itself.
The dataset used here is the Building Permits Canada actor — Toronto, Vancouver, Calgary, Edmonton, and Montréal permits normalized into one JSON/CSV feed. Questions about filtering it for a specific trade or city? Happy to help in the comments.
Top comments (0)