Enterprise Know Your Customer (KYC) processes and corporate compliance audits require verifying legal entity status directly against official registries. When dealing with federally incorporated entities in Canada, the source of truth is Corporations Canada, maintained by Innovation, Science and Economic Development Canada (ISED).
Manual lookups on the web interface do not scale when a compliance pipeline needs to cross-reference hundreds of counterparties. Building a custom scraper directly against the registry search interface requires maintaining scrapers against government table layouts, parsing complex legal histories, and normalizing fields across different federal acts.
The corporations-canada-scraper automates this pipeline by querying Corporations Canada directly and emitting structured JSON records for corporate filings.
Four Ways to Target Federal Corporate Filings
The scraper operates in four distinct lookup modes via the mode parameter:
-
search: Free-text search by legal entity name viacorpName, with optional filters. -
byCorporationNumber: Exact lookup using the federal corporation number viacorpNumbers(e.g.,426160-7). -
byBusinessNumber: Exact lookup using the 9-digit Canada Revenue Agency (CRA) Business Number viabusinessNumbers(e.g.,847871746). -
byCorporationId: Direct record fetch using the registry's internal identifier viacorporationIds.
When running broad entity searches, you can narrow results using corpProvince (e.g., ON, QC, BC), corpStatus (1 for Active), and corpAct (such as 6 for the Canada Business Corporations Act).
Setting includeFullDetails to true instructs the scraper to navigate from search results to individual entity profile pages to extract granular operational data, including directors, registered offices, and historical filings.
Structured Registry Outputs
A full entity detail extraction yields structured public filing fields. Key data points in each output record include:
-
Entity Identifiers:
corpId,corpName,corpNumber, andbusinessNumber(which includes program-account suffixes likeRC0001when published). -
Status & Governance:
status,statusDate,governingLegislation, andgoverningLegislationDate. -
Location:
registeredOfficeAddress, along with parsedregisteredOfficeProvinceandregisteredOfficePostalCode. -
Governance & Control:
directors[](containing individualnameandaddressentries) alongsidedirectorsMinanddirectorsMax. -
Significant Control Disclosures:
iscIndividuals[](reportingname,address,typeOfInterest, andstartDate) oriscExemptionReasonfor entities exempt from disclosing individuals with significant control (such as publicly traded corporations). -
Filing History:
annualFilings[](historical tracking of annual return compliance),corporateNameHistory[], andfilingHistory[](certificates of incorporation, amendments, revivals, and restated articles).
Empty fields are omitted from output records rather than filled with null assumptions, reflecting exactly what the registry has on file.
Running an Exact Lookup Pipeline in Python
You can trigger a batch run using the Apify Python client to verify corporate numbers against the registry.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run_input = {
"mode": "byCorporationNumber",
"corpNumbers": ["426160-7"],
"includeFullDetails": True,
"maxItems": 10,
}
# Run the actor and wait for completion
run = client.actor("crawlerbros/corporations-canada-scraper").call(run_input=run_input)
# Fetch results from the run's default dataset
dataset_items = client.dataset(run["defaultDatasetId"]).list_items().items
for record in dataset_items:
print(f"Legal Name: {record.get('corpName')}")
print(f"Status: {record.get('status')}")
print(f"BN: {record.get('businessNumber')}")
directors = record.get("directors", [])
print(f"Active Directors ({len(directors)}):")
for director in directors:
print(f" - {director.get('name')}: {director.get('address')}")
Running an Entity Search with Filters
For entity discovery or onboarding verification where the corporation number is unknown, run a name query filtered by jurisdiction and status:
run_input = {
"mode": "search",
"corpName": "Shopify",
"corpProvince": "ON",
"corpStatus": "1",
"includeFullDetails": True,
"maxItems": 5,
}
run = client.actor("crawlerbros/corporations-canada-scraper").call(run_input=run_input)
results = client.dataset(run["defaultDatasetId"]).list_items().items
for item in results:
print(f"Found: {item.get('corpName')} ({item.get('corpNumber')})")
print(f"Office: {item.get('registeredOfficeAddress')}")
Step-by-Step Actor Configuration
-
Select the Mode: Determine whether you are querying known IDs (
byCorporationNumber,byBusinessNumber,byCorporationId) or performing discovery (search). -
Define Search Scope: If using
search, populatecorpNameand optionally applycorpProvinceorcorpStatusto exclude dissolved or out-of-province entities. -
Configure Item Limits and Depth: Set
maxItemsto control the total records retrieved, and setincludeFullDetailstotrueif you require director names, registered addresses, and ISC records. - Execute and Ingest: Run the scraper via API or scheduler and stream items directly from the default dataset into your internal database.
Pricing and Event Charges
This scraper uses a PAY_PER_EVENT pricing model alongside standard platform usage.
The flat event charges published on the Apify Store are:
-
Actor Start (
apify-actor-start): $0.005 per GB of memory allocated to the run, charged once when the run begins. -
Result (
apify-default-dataset-item): Charged per emitted record in the default dataset based on your Apify discount tier:- FREE: $0.005 per result
- BRONZE: $0.00433 per result
- SILVER: $0.00367 per result
- GOLD: $0.003 per result
- PLATINUM: $0.003 per result
- DIAMOND: $0.003 per result
Platform usage incurred during the run is billed separately at your Apify plan's underlying rates.
Registry Limitations
This scraper only extracts entities registered under federal acts; it will not return records for companies incorporated strictly under provincial legislation (such as standard Ontario or British Columbia provincial corporations) unless they hold a federal charter.
Runs in this article used Corporations Canada Registry Scraper. Its README is the reference for input fields and output structure; this post is only one path through them.
Prices quoted above are this Actor's published pay-per-event rates on the Apify Store, read from the Apify platform API on 2026-09-26. Check the Actor page for the current rates.
Top comments (0)