A brand-new company is a brand-new buyer. The week a business incorporates, it starts shopping for banking, insurance, accounting, payroll, a website, and software. If you sell any of that B2B, a feed of just-incorporated companies is one of the highest-intent lead sources there is.
The good news: Corporations Canada publishes the entire federal register as open data, updated daily. This post shows how to turn it into a fresh-incorporations lead feed — the files, the one field that matters, and a hosted option you can call from code or an AI agent.
The source
The Federal Corporations dataset on Canada's Open Government Portal (Open Government Licence) covers every federal corporation created under the Canada Business Corporations Act (CBCA), plus not-for-profits, cooperatives and boards of trade. As of 2026 it's split into four CSV subsets — active/inactive × business/other — and the files are refreshed daily.
The one you want for lead-gen is Active business corporations (corporations-active-cbca-en.csv). Its columns:
Corporation number | Business number (BN) | Corporate name - form 1 |
Corporate name - form 2 | Governing legislation | Status | Anniversary date |
Year of last annual filing | Date of last annual meeting | Street | Street 2 |
City/town | Province/territory | Country | Postal code |
Minimum number of directors | Maximum number of directors
The field that makes this a new-company feed is Anniversary date. For a CBCA corporation that's the incorporation/continuance date, and it doesn't roll forward each year — a company incorporated in 1963 still shows 1963-11-18. So filtering Anniversary date >= (today − N days) gives you exactly the businesses formed in the last N days.
Pulling it with Python
Download the active-business CSV, keep rows incorporated recently, done:
import io, csv, requests
from datetime import date, timedelta
URL = "https://d4bf66bykfyaf.cloudfront.net/corporations-active-cbca-en.csv"
cutoff = (date.today() - timedelta(days=30)).isoformat()
raw = requests.get(URL, timeout=300).content.decode("utf-8-sig")
reader = csv.DictReader(io.StringIO(raw))
for row in reader:
inc = (row.get("Anniversary date") or "")[:10]
if inc < cutoff:
continue
print(inc, "|", row["Corporate name - form 1"], "|",
row["City/town"], row["Province/territory"], "|",
row["Business number (BN)"])
A few things worth knowing:
- The file is large (~100 MB) — stream it or give the download a generous timeout.
- Filter on
Anniversary datewhile you read; don't load the whole thing into memory. - The registered-office address (
Street,City/town,Province/territory,Postal code) is right there in the bulk file, so you get a mailing address for every company. - Director names are not in the bulk data (only min/max counts). They're available per corporation via the Corporations Canada API if you need them.
- Freshness caveat: the file updates daily, but new incorporations take a week or two to land in the bulk dump — the newest rows are typically ~1–2 weeks old, not same-day. Still plenty warm for outreach.
The hosted option
If you'd rather not download 100 MB and maintain the filter, I built an Apify Actor that resolves the daily file, filters by incorporation date, and returns one clean record per company:
Canada New Incorporations — Fresh Federal Company Leads
{
"incorporatedWithinDays": 30,
"provinces": ["ON", "BC"],
"keywords": ["holdings", "consulting"],
"onlyNewSinceLastRun": true,
"maxResults": 500
}
Output — one record per corporation:
{
"corporationNumber": "18026041",
"businessNumber": "706483435",
"name": "VINYR SOLUTIONS INC.",
"status": "Active",
"incorporationDate": "2026-06-17",
"address": "407-25 Carlton St",
"city": "Toronto",
"province": "ON",
"postalCode": "M5B 1L4",
"id": "corp-18026041"
}
The killer flag is onlyNewSinceLastRun: schedule the Actor daily and each run returns only companies you haven't seen before — an automatic feed of net-new incorporations straight into your CRM. Pricing is per record ($6 per 1,000), so a daily provincial feed costs cents.
Call it from an AI agent (MCP)
The Actor is exposed over the Model Context Protocol:
https://mcp.apify.com?tools=truenorthdata/canada-new-incorporations
Point a Claude / MCP client at it and ask "companies incorporated in Ontario in the last two weeks" — the agent runs the Actor and filters for you.
Use cases
- Financial services — banks, insurers and payment processors targeting new businesses before a competitor does.
- Accounting & legal — firms offering setup, bookkeeping and compliance to fresh incorporations.
- B2B SaaS & agencies — website, branding, payroll and software vendors reaching founders in week one.
- Data & research — tracking federal business formation by province and month.
FAQ
Is this legal? Yes — it's official open data under the Open Government Licence – Canada, published for reuse.
Federal only? The dataset covers federally incorporated companies (CBCA), plus NFPs/cooperatives/boards of trade. Provincial incorporations (Ontario, BC, etc.) are separate registries.
How fresh is it? Updated daily; the newest rows are usually a week or two old due to processing lag.
Contact info? Registered office mailing address for every company. Personal phone/email are not published; director names are available per corporation via the API.
Building with Canadian public data — company registrations, charities, permits, tenders? I write about turning open registries into products. Questions welcome in the comments.
Top comments (0)