# Canada Company Data — Federal & BC Corporation Search (`foxlabs/canada-company-data`) Actor

Search Canadian federal corporations by name or number. Returns corporation status, registered office, directors, and governing legislation from ISED Corporations Canada.

- **URL**: https://apify.com/foxlabs/canada-company-data.md
- **Developed by:** [Berkan Kaplan](https://apify.com/foxlabs) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

<p align="center"><a href="https://apify.com/foxlabs/canada-company-data"><img src="https://data.foxlabs.com.tr/img/canada-company-data-banner.svg" alt="Canada Company Data" width="100%" /></a></p>

## Canada Company Data — Federal + British Columbia (Corporations Canada, OrgBook BC)

Need **authoritative, official-registry data on Canadian companies** — for KYC, due diligence, or building a lead list? This Actor turns Canada's **official open-data registries** into clean, flat firmographic records: **Corporations Canada (ISED)** at the federal level — hundreds of thousands of active **CBCA** corporations plus not-for-profits, cooperatives and boards of trade — and **OrgBook BC** for British Columbia. Search by name, corporation / registration number, or browse a whole organisation type.

Built on **official government open data** (Open Government Licence – Canada / – British Columbia) — free to reuse. **No API key, no login, no fragile HTML scraping** — so it doesn't break when a website changes.

- 🇨🇦 **Federal + British Columbia** — Corporations Canada (CBCA + non-CBCA: not-for-profits, cooperatives, boards of trade) and OrgBook BC, merged in one run
- 🔢 **Business Number (BN9)** — the 9-digit CRA number for record-matching and KYC, on federal records and (with enrichment) BC records
- 🗂️ **Browse by organisation type** — list every federal not-for-profit, cooperative or board of trade, optionally narrowed by province — no name needed
- ⚡ **One run → one clean, flat dataset** (JSON / CSV / Excel / API) — no proxies or third-party keys required

### Quick start (API)

Get up to 100 federal not-for-profits registered in Ontario, in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/foxlabs~canada-company-data/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "category": "nonprofit", "province": "ON", "maxResults": 100 }'
```

Prefer no code? Open the **Input** tab, set your filters, and click **Start** — then download the results.

### What you get

One clean, flat record per company. Federal records carry the full firmographics; British Columbia records are leaner (OrgBook does not expose address or director data).

| Field | Type | Description |
|---|---|---|
| `jurisdiction` | string | `Federal (CBCA)` or `British Columbia` |
| `corporateName` | string | Current registered legal name |
| `corporateNameSecondary` | string | Secondary name form, if any *(federal)* |
| `corporationNumber` | string | Federal corporation number, or BC registration number |
| `businessNumber` | string | 9-digit CRA business number (BN9); the BC value is fetched per entity when enrichment is on |
| `governingLegislation` | string | CBCA, CNCA, Cooperatives Act, …, or `British Columbia` |
| `status` | string | `Active` / `Inactive` / `Dissolved` (normalised to English) |
| `anniversaryDate` | string | Anniversary / coming-into-existence date, ISO *(federal)* |
| `yearOfLastFiling` | string | Year of the last annual filing *(federal)* |
| `lastAnnualMeeting` | string | Date of the last annual meeting, ISO *(federal)* |
| `registrationDate` | string | BC registration date, ISO *(BC)* |
| `street` / `city` / `province` / `postalCode` / `country` | string | Registered address (BC exposes `province` + `country` only) |
| `directorsMin` / `directorsMax` | number | Min / max directors permitted by the articles *(federal)* |
| `source` / `sourceUrl` | string | Provenance label and link to the official record |
| `scrapedAt` | string | ISO 8601 timestamp of retrieval |
| `searchQuery` | string | The name/number you searched that matched this record *(BC)* |

Missing values are returned as `null` — never guessed.

#### Sample output

**Federal** (Corporations Canada):

```json
{
  "jurisdiction": "Federal (CBCA)",
  "corporateName": "SHOPIFY STUDIOS HOLDINGS INC.",
  "corporateNameSecondary": null,
  "corporationNumber": "11125885",
  "businessNumber": "721968915",
  "governingLegislation": "Canada Business Corporations Act",
  "status": "Active",
  "anniversaryDate": "2018-12-03",
  "yearOfLastFiling": "2025",
  "lastAnnualMeeting": "2025-12-03",
  "street": "151 O'Connor Street, Ground Floor",
  "city": "Ottawa",
  "province": "ON",
  "country": "CA",
  "postalCode": "K2P 2L8",
  "directorsMin": 1,
  "directorsMax": 10,
  "source": "Corporations Canada (ISED) — Open Government Licence – Canada",
  "sourceUrl": "https://ised-isde.canada.ca/cc/lgcy/fdrlCrpDtls.html?corpId=11125885",
  "scrapedAt": "2026-06-28T11:55:38.593Z"
}
```

**British Columbia** (OrgBook BC):

```json
{
  "jurisdiction": "British Columbia",
  "corporateName": "LULULEMON ATHLETICA CANADA INC.",
  "corporationNumber": "BC0578072",
  "businessNumber": "872184155",
  "governingLegislation": "British Columbia",
  "status": "Active",
  "registrationDate": "1999-01-12",
  "province": "BC",
  "country": "CA",
  "source": "OrgBook BC — Open Government Licence – British Columbia",
  "sourceUrl": "https://orgbook.gov.bc.ca/entity/BC0578072",
  "scrapedAt": "2026-06-28T11:55:49.137Z",
  "searchQuery": "Lululemon"
}
```

### Input & filters

- **Company names** — substring search across Federal + BC (e.g. `Shopify` → `SHOPIFY INC.`, `Shopify Studios Holdings Inc.`, …). One per line.
- **Corporation / registration numbers** — a federal corporation number or a BC registration number for an exact, instant lookup.
- **Category (organisation type)** — browse/list federal corporations by corporate form: business corporation (CBCA), not-for-profit (CNCA), cooperative, board of trade, or other. Works with no name/number. *Federal only.*
- **Province / territory** — narrow federal results (e.g. all not-for-profits in Ontario), or filter a name search.
- **Jurisdiction** — `Both` (Federal + BC), `Federal only`, or `British Columbia only`.
- **Include inactive / dissolved** — federal: also stream the dissolved/inactive corporations file (larger, slower).
- **Fetch BC business number (BN9)** — one extra OrgBook call per BC result to retrieve the CRA business number (on by default; turn off for faster BC runs).
- **Max results** — hard cap on records, up to 50,000.

> **Why "category" = organisation type?** The Canadian federal open data has **no industry / NAICS codes**, so the category filter is the corporate form (CBCA business corp vs not-for-profit vs cooperative, etc.). Category / province browse is **federal only**.

### Example inputs (copy & paste)

```jsonc
// 1) Name lookup across Federal + BC
{ "companyNames": ["Shopify", "Lululemon"], "jurisdiction": "both", "maxResults": 50 }

// 2) Browse: every federal not-for-profit registered in Ontario
{ "category": "nonprofit", "province": "ON", "maxResults": 5000 }

// 3) Exact, instant lookup by corporation number
{ "corporationNumbers": ["8660115", "11125885"] }

// 4) Lead list: federal business corporations in Alberta
{ "category": "business", "province": "AB", "jurisdiction": "federal", "maxResults": 2000 }

// 5) Cooperatives nationwide (federal), including dissolved
{ "category": "cooperative", "includeInactive": true, "maxResults": 1000 }

// 6) BC-only name search, skipping the extra BN9 call for speed
{ "companyNames": ["Lululemon"], "jurisdiction": "bc", "bcBusinessNumber": false }

// 7) Boards of trade across Canada (niche federal category)
{ "category": "board-of-trade", "jurisdiction": "federal", "maxResults": 500 }
```

### Use cases

- **KYC / KYB & due diligence.** Onboarding a Canadian counterparty? Pass its `corporationNumbers` (or name) and get the verified legal identity, **business number (BN9)**, status, governing legislation, registered address and filing recency — the fields your compliance checks require, from the official register, in one call.
- **Outbound sales & lead lists.** Build a targeted federal list by organisation type and province — e.g. `category: "nonprofit"` + `province: "ON"` — to get a CRM-ready roster of entities with identity, status and address, no manual list-building.
- **Market sizing & sector research.** Pull every federal corporation of a given form (business / not-for-profit / cooperative / board of trade) to count the players, their status mix and legal forms and size a segment.
- **CRM enrichment & cleanup.** Already have Canadian names or corporation numbers? Feed them in to append BN9, current status, legislation, address and filing dates. Missing fields return `null`, never a guess.
- **Grant, membership & non-profit research.** The federal not-for-profit and cooperative registers are first-class here — list and profile CNCA not-for-profits and cooperatives by province for grant screening or membership vetting.
- **Cross-jurisdiction matching.** Set **Jurisdiction = Both** to catch a company registered federally *and* in British Columbia, and reconcile the two records by name and business number.

### Performance & throughput

- **Number lookup** is instant and cheap — one official JSON call per corporation number, no CSV scan.
- **Name search & category browse** stream the official bulk CSV(s) once and stop as soon as your `maxResults` cap is reached, so they are fast for typical caps. A rare name with no match scans the full active dataset (~100 MB) once.
- **BC** adds one lightweight OrgBook call per result, plus one more per company when **Fetch BC business number** is on (turn it off for faster BC runs).

Throughput is bounded only by your Apify plan — there are no external API keys, no required proxies, and no third-party rate limits. Datacenter proxy is sufficient; the official open-data sources don't block.

### Integrations

**JavaScript** (`apify-client`):

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('foxlabs/canada-company-data').call({
  companyNames: ['Shopify'], jurisdiction: 'both', maxResults: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**Python** (`apify-client`):

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("foxlabs/canada-company-data").call(run_input={
    "companyNames": ["Shopify"], "jurisdiction": "both", "maxResults": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["corporateName"], item.get("businessNumber"))
```

Also works with **Make / n8n / Zapier** (Apify app → run this Actor, map the input), scheduled runs, webhooks, and the **Apify MCP server** for AI agents.

### Data quality

Measured across the full active CBCA dataset (~643k corporations):

| Field | Fill / validity |
|---|---|
| Corporate name, number, legislation, status, address, director counts | **~100%** (federal active) |
| Business number (BN9) | **99.8%**, all valid 9-digit (federal active) |
| Postal code format | **100%** valid |
| Year of last filing / last annual meeting | **~65–75%** (newer corporations haven't filed yet) |
| BC business number (with enrichment on) | **~90%** |

British Columbia records are leaner by design — identity, status and registration date are complete; some BC firms/partnerships have no CRA business number. Contacts and financials come **only** from the official registers — never fabricated; missing values are `null`.

### Pricing

**Pay per result** — you're billed per company record returned (**$2.50 / 1,000 results**). Number lookups are instant and cheap; name search and category browse stop as soon as your `maxResults` cap is reached. There's an Apify **free tier** ($5 monthly platform credit covers roughly your first ~2,000 results) to evaluate the full feature set before you scale. No proxies or third-party costs.

### FAQ

**Can I use this data commercially / resell it?** Yes — the sources are published under the **Open Government Licence – Canada** and **– British Columbia**, which permit commercial reuse and redistribution *with attribution*. Records carry a `source` provenance label.

**Do I need an API key or a government account?** No. No key, no login — it reads official open data.

**Which provinces are covered?** Federal corporations Canada-wide (CBCA + non-CBCA), plus **British Columbia** via OrgBook. Other provincial registries (Ontario, Quebec, Alberta, …) are **not** included yet.

**What is the "category" filter?** Organisation **type** (business corporation, not-for-profit, cooperative, board of trade, other). The federal open data has no industry / NAICS codes, so category is the corporate form. Category / province browse is federal only.

**Are director names included?** No — this version returns director **counts** (min/max permitted by the articles). Individual federal director *names* live behind a separate free-account API and are a planned later phase.

**How do I look up one specific company?** Put its federal corporation number or BC registration number in `corporationNumbers` — that's the exact, instant path.

**Is the business number (BN9) included?** Yes — on federal records (measured 99.8% of active corporations), and on BC records when **Fetch BC business number** is on (search results alone rarely carry it).

**How fresh is the data?** It reads the registries' official open-data drops, refreshed by ISED / the Province of BC. Each run pulls the current data.

**What export formats are available?** JSON, CSV, Excel, HTML, XML, or via the Apify API / integrations.

**How many companies can I get in one run?** Up to 50,000 via `maxResults`.

### Troubleshooting

- **0 results from a category / province browse** → category and province browse is **federal only**. Set **Jurisdiction** to `Federal only` or `Both`.
- **A name search returns too many entities** → it's a substring match, so common words (e.g. `Holdings`) match many companies. Set `maxResults` to control volume, or use a corporation number for a single guaranteed match.
- **No results at all** → your filters are too narrow, or you provided neither a name/number nor a category/province. Widen the filters or add a browse dimension.
- **A BC record has no `businessNumber`** → some BC firms and partnerships have no CRA business number, and enrichment must be on (default). That's the register, not a miss — the value is `null`, never fabricated.

### Notes, limits & legal (honest)

- **Sources & licences.** Federal data is from **Corporations Canada (ISED)** under the **Open Government Licence – Canada**; British Columbia data is from **OrgBook BC** under the **Open Government Licence – British Columbia**. Both permit commercial reuse and redistribution with attribution; records carry a `source` label.
- **Coverage limits.** Federal (CBCA + non-CBCA, optionally dissolved) plus **British Columbia only** — other provincial registries are not included. No industry / NAICS codes exist in the federal source. **Director names are not included** (counts only).
- **Personal data.** This version exposes no individual director/officer names — only director *counts* on federal records. There is no personal-name data to redistribute in this release.
- **Not affiliated** with ISED / Corporations Canada or the Government of British Columbia; this Actor redistributes their public open data.

### Support

Questions, a field you'd like added, or a custom build (another province, industry codes, director names)? Open the **Issues** tab on this Actor, or email **info@foxlabs.com.tr**. We reply fast.

*If this Actor saves you time, a ⭐ review really helps.*

### Changelog

#### 0.2 — 2026-07-05

- Reworked docs: API quick-start, `Field | Type | Description` table, real sample output (Federal + BC), integration snippets (JS / Python / Make / MCP), data-quality table, FAQ & troubleshooting.
- Documented the `searchQuery` field emitted on British Columbia records.
- Store metadata: SEO title, keyword-rich description, categories.

#### 0.1 — 2026-06-28

- **Federal** lookup by corporation **number** (official legacy JSON) and by **name** (official bulk CSVs), English-normalized status & legislation, director counts.
- **Number lookups now include filing dates** (anniversary, year of last filing, last annual meeting) from the corporation's annual-return history.
- **British Columbia** search via OrgBook BC, with **per-entity business-number (BN9) enrichment** (search results alone rarely carry it).
- **Category / province browse** — list federal corporations by organisation type (business / not-for-profit / cooperative / board of trade) and/or province, no name required.
- Robust bulk-CSV streaming that settles correctly on early abort when the result cap is reached.

***

Part of the **[foXLabs data platform](https://data.foxlabs.com.tr/)** — official public-data company, contact, ownership, jobs, charity, location & AI-search intelligence scrapers. Browse the full suite at **[data.foxlabs.com.tr](https://data.foxlabs.com.tr/)**.

# Actor input Schema

## `companyNames` (type: `array`):

Search by company name across Federal + BC registries. Substring match (e.g. "Shopify" finds Shopify Inc.).

## `corporationNumbers` (type: `array`):

Federal corporation number (e.g. 8660115) or BC registration number. Most precise lookup.

## `category` (type: `string`):

Browse/list federal corporations by organisation TYPE. The federal open data has no industry/NAICS codes, so this is the corporate form. Works without a name/number — combine with Province to narrow. Federal only.

## `province` (type: `string`):

Filter federal results to a province/territory. Use with Category to browse (e.g. all not-for-profits in Ontario), or alongside a name search.

## `jurisdiction` (type: `string`):

Which registry to search. Federal = Corporations Canada (CBCA). BC = British Columbia (OrgBook). Both = merge. Category/Province browse is federal only.

## `includeInactive` (type: `boolean`):

Federal: also stream the dissolved/inactive corporations file (larger, slower). BC already excludes historical.

## `bcBusinessNumber` (type: `boolean`):

For BC results, make one extra OrgBook call per company to retrieve the 9-digit business number (the search result alone rarely includes it). Turn off for faster, lighter BC runs.

## `maxResults` (type: `integer`):

Hard cap on records (1–50000).

## `proxyConfiguration` (type: `object`):

Apify Proxy. Datacenter is fine — official open-data sources don't block.

## Actor input object example

```json
{
  "companyNames": [
    "Shopify",
    "Lululemon"
  ],
  "corporationNumbers": [],
  "category": "any",
  "province": "any",
  "jurisdiction": "both",
  "includeInactive": false,
  "bcBusinessNumber": true,
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "companyNames": [
        "Shopify",
        "Lululemon"
    ],
    "corporationNumbers": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("foxlabs/canada-company-data").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "companyNames": [
        "Shopify",
        "Lululemon",
    ],
    "corporationNumbers": [],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("foxlabs/canada-company-data").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "companyNames": [
    "Shopify",
    "Lululemon"
  ],
  "corporationNumbers": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call foxlabs/canada-company-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=foxlabs/canada-company-data",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/MtuvJeojWBcCfuywX/builds/J465SnwNbv9Zp8q8V/openapi.json
