# Canada Federal Corporations API — Corporations Canada Registry (`nexgensignal/ca-federal-corporation-records`) Actor

Federal corporations from Corporations Canada as data: 1.5M+ CBCA companies, not-for-profits and co-ops with corporation and business number, status, anniversary date, last filing and registered office. Filter by name and province. Part of NexGen Signal — official-source data products

- **URL**: https://apify.com/nexgensignal/ca-federal-corporation-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 federal corporation records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🇨🇦 Canada Federal Corporations API — Corporations Canada Registry

Get Corporations Canada's federal corporations open data as clean JSON — every federal business corporation (CBCA), not-for-profit, co-operative, board of trade and special act corporation, active and inactive, with corporation number, business number, name in both forms, governing act, status, anniversary date, last annual filing and registered office address.

Filter by status, corporation type, name words, province, city, postal code prefix, governing act, corporation or business number and anniversary date. Newest anniversary date first by default; file order is fastest.

The unit of output is one **corporation**. You pay per corporation delivered; a run that finds nothing costs nothing.

### Who buys this and for what job

- **KYB, onboarding and compliance teams** confirming a Canadian federal corporation's number, status and registered office.
- **Sales and market-research teams** listing new federal corporations by name, province and city.
- **Lenders and credit teams** checking annual-filing recency and dissolution status.
- **Data teams** keeping a copy of the federal register current.

Buyers usually search for this as **"canada corporation search"** or **"corporations canada data"**.

### 📊 Sample Output

![Table of Corporations Canada federal corporations with coffee in the name: name, anniversary date, city, province and status.](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/ca-federal-corporation-records.png)

| corporate_name | corporation_number | anniversary_date | city | province | status |
|---|---|---|---|---|---|
| Maqam Coffee Ltd. | 18290172 | 2026-10-05 | Toronto | ON | Active |
| Mocella Icecream and Coffee Ltd. | 18248656 | 2026-09-16 | Vancouver | BC | Active |
| BIBI Coffee Corp. | 18239584 | 2026-09-13 | Mississauga | ON | Active |
| Hole in One Bagels and Coffee Inc. | 18211892 | 2026-09-01 | Ottawa | ON | Active |
| Khuzain's Coffee INC. | 18186499 | 2026-08-22 | East York | ON | Active |
| Coffee Tech House Inc. | 18161089 | 2026-08-12 | Markham | ON | Active |

Rows from live run `05HMSa8oGY8f9Jf5e` on Apify (the Store example: name contains coffee, active, 10 records). Notice the newest anniversary dates first — mostly recent incorporations.

### ✅ What you get

Every field of each record:

- `record_id` — cA-CORP:<corporation number>; stable, use it to upsert.
- `corporation_number` — corporations Canada corporation number.
- `business_number` — cRA business number (BN), when published.
- `corporate_name` — corporate name (form 1).
- `corporate_name_other_language` — name in the other official language (form 2), if any.
- `governing_legislation` — e.g. Canada Business Corporations Act, Canada Not-for-profit Corporations Act.
- `status` — active, Inactive or Dissolved.
- `status_detail` — status detail as published, e.g. Inactive - Amalgamated.
- `anniversary_date` — anniversary date as published (sets the annual filing cycle).
- `last_annual_filing_year` — year of the last annual filing.
- `last_annual_meeting_date` — date of the last annual meeting.
- `street` — registered office street.
- `street_2` — registered office street, line 2.
- `city` — city or town.
- `province` — province or territory code.
- `country` — country code.
- `postal_code` — postal code.
- `min_directors` — minimum number of directors in the articles.
- `max_directors` — maximum number of directors in the articles.
- `source_file` — corporations Canada file read.
- `source` — publisher dataset.
- `source_url` — dataset page.
- `licence` — licence notice.
- `attribution` — source line.
- `observed_at` — when this run read it (UTC).

### ⚙️ Sample inputs

**1. The Store example — active corporations with "coffee" in the name**

```json
{
  "nameContains": ["coffee"],
  "maxRecords": 10
}
```

Read 696,553 active corporations, matched 427 and returned the 10 newest in run `05HMSa8oGY8f9Jf5e`; $0.50 on the Free plan.

**2. Software companies in British Columbia**

```json
{
  "provinces": ["BC"],
  "nameContains": ["software"],
  "maxRecords": 40
}
```

Matched 167 and returned 40 in run `2cn8VukB0VibOWsuT`.

**3. Look up one business number, any status**

```json
{
  "businessNumbers": ["835752437"],
  "status": "all",
  "maxRecords": 5
}
```

Read all four files (1.57 million corporations) and returned the one match in run `fM4jnxkDvSUnuawA8`.

Input fields:

| Field | Meaning |
|---|---|
| `status` | Which corporations to read. |
| `corporationType` | Which file family to read. |
| `nameContains` | Corporations whose name contains any of these words. |
| `provinces` | Two-letter codes, e.g. ON, QC, BC, AB. |
| `cities` | Exact city or town names, e.g. Toronto (any case). |
| `postalCodePrefixes` | e.g. M5V, H2X. |
| `legislationContains` | e.g. Not-for-profit, Cooperatives, Boards of Trade. |
| `corporationNumbers` | Exact Corporations Canada numbers. |
| `businessNumbers` | Nine-digit CRA business numbers. |
| `anniversaryFrom` | e.g. 2026-01-01. |
| `anniversaryTo` | e.g. 2026-06-30. |
| `order` | Sort order. |
| `maxRecords` | Stop after this many corporations (each is charged once). |

### 🧾 JSON sample record

```json
{
  "record_id": "CA-CORP:18290172",
  "corporation_number": "18290172",
  "business_number": "782043244",
  "corporate_name": "Maqam Coffee Ltd.",
  "corporate_name_other_language": null,
  "governing_legislation": "Canada Business Corporations Act",
  "status": "Active",
  "status_detail": null,
  "anniversary_date": "2026-10-05",
  "last_annual_filing_year": null,
  "last_annual_meeting_date": null,
  "street": "905-180 Mill St",
  "street_2": null,
  "city": "Toronto",
  "province": "ON",
  "country": "CA",
  "postal_code": "M5A 0V7",
  "min_directors": 1,
  "max_directors": 10,
  "source_file": "corporations-active-cbca-en.csv",
  "source": "Corporations Canada — Federal Corporations open data",
  "source_url": "https://open.canada.ca/data/en/dataset/0032ce54-c5dd-4b66-99a0-320a7b5e99f2",
  "licence": "Contains information licensed under the Open Government Licence – Canada (https://open.canada.ca/en/open-government-licence-canada). Source: Corporations Canada, Federal Corporations dataset.",
  "attribution": "Source: Corporations Canada (Innovation, Science and Economic Development Canada), Federal Corporations open data",
  "observed_at": "2026-10-12T04:08:52Z"
}
```

### 🔧 How it works

1. **Robots check.** The download host's `robots.txt` is requested on every run. It answers HTTP 403 (it is a file bucket), so no robots policy is readable; that is recorded. A readable robots file that disallowed the files would stop the run with nothing charged.

2. **Pick the files.** Corporations Canada splits the data into four CSVs: active business corporations (645,341 on 12 Oct 2026), other active corporations (51,212), inactive business corporations (832,935) and other inactive corporations. The actor reads the ones your status and type select.

3. **Stream and filter.** Each file is streamed and every row checked against your filters; the newest anniversary dates are kept (or, with `file_order`, reading stops at `maxRecords`).

4. **Deliver, then charge.** Records are pushed in batches, each charged after delivery, so records and charges always match.

5. **Receipt.** `RUN_RECEIPT` records the robots result, rows read per file and matched, and delivered and charged counts.

No login, API key, proxy or bot workaround.

### 💰 Pricing example

Per corporation delivered, no start fee, no monthly charge:

| Apify plan | Price per corporation |
|---|---|
| Free | $0.05 |
| Bronze | $0.045 |
| Silver | $0.04 |
| Gold, Platinum, Diamond | $0.0335 |

- 10 records (the Store example): $0.50 on the Free plan, $0.335 on Gold.
- 1,000 records (the default cap): $50 on Free, $45 on Bronze, $40 on Silver, $33.50 on Gold.

**Coverage and size.** Federal corporations only: CBCA business corporations, NFP Act not-for-profits, Canada Cooperatives Act co-operatives, Boards of Trade Act corporations and special act corporations, active and inactive. Corporations Canada states the data excludes financial-legislation corporations (banks, insurers, trust and loan companies) and provincial or territorial corporations. Files are typically updated daily. No director or officer names exist in this open data.

### ⚖️ Legal & ToS

Data: Corporations Canada (Innovation, Science and Economic Development Canada), "Federal Corporations" dataset on open.canada.ca, licensed under the Open Government Licence – Canada. Every record carries the licence notice in `licence` and a source line in `attribution`. Not affiliated with or endorsed by Corporations Canada.

Records describe corporations: names, numbers, status, filing dates and registered office addresses as published. The open data contains no director or officer names. The download host's robots file is unreadable (HTTP 403), recorded on every run. Public files only, declared User-Agent, no login, key, proxy or form.

### ❓ FAQ

**Does it include provincial companies?**
No. Only federal corporations; provincial registries are separate.

**Are directors included?**
No. The open data lists only the minimum and maximum number of directors in the articles.

**What is the anniversary date?**
The date Corporations Canada uses to set the corporation's annual filing cycle, as published.

**How fresh is it?**
Corporations Canada says the files are typically updated daily.

### 🆘 Troubleshooting

- **Slow run with status all** — the inactive business file is about 158 MB; set `status` to active when you can.
- **0 records for a city** — `cities` matches the exact name (any case); try `postalCodePrefixes` instead.
- **Business number not found** — give the 9-digit business number without the program suffix.
- **SOURCE UNAVAILABLE message** — the source did not answer after four tries; nothing was charged — run again later.
- **CAPPED message** — your maximum total charge was reached; raise it in the run options.
- **Run failed with "Invalid input"** — a filter value is malformed; the message names the field. Nothing was charged.

### 🔗 Related Actors

- [Companies House Company Search & Status — UK Register](https://apify.com/nexgensignal/uk-company-status-records) — UK Companies House company status.
- [France Company Registry Search — SIREN, SIRET & NAF Records](https://apify.com/nexgensignal/france-company-registry-search) — French company registry (SIREN/SIRET).
- [Secretary of State Business Search & Status — 7 US States](https://apify.com/nexgensignal/us-business-entity-status-check) — US Secretary of State business search.
- [LEI Lookup by Domain — Domain to Company Legal Entity (GLEIF)](https://apify.com/nexgensignal/company-data-enrichment-api) — LEI lookup by domain (GLEIF).
- [Norway Company Financials — Brønnøysund Accounts Key Figures](https://apify.com/nexgensignal/norway-company-financials-key-figures) — Norwegian company financials.

🏢 **About NexGen Signal** — official-source data products from government and regulator publications. Browse the catalog: [apify.com/nexgensignal](https://apify.com/nexgensignal)

### ⭐ Found this useful?

If this actor saved you time, a rating on its Apify Store page helps other buyers find it.

Part of NexGen Signal — official-source data products.

# Actor input Schema

## `status` (type: `string`):

Which corporations to read.

## `corporationType` (type: `string`):

Which file family to read.

## `nameContains` (type: `array`):

Corporations whose name contains any of these words.

## `provinces` (type: `array`):

Two-letter codes, e.g. ON, QC, BC, AB.

## `cities` (type: `array`):

Exact city or town names, e.g. Toronto (any case).

## `postalCodePrefixes` (type: `array`):

e.g. M5V, H2X.

## `legislationContains` (type: `array`):

e.g. Not-for-profit, Cooperatives, Boards of Trade.

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

Exact Corporations Canada numbers.

## `businessNumbers` (type: `array`):

Nine-digit CRA business numbers.

## `anniversaryFrom` (type: `string`):

e.g. 2026-01-01.

## `anniversaryTo` (type: `string`):

e.g. 2026-06-30.

## `order` (type: `string`):

Sort order.

## `maxRecords` (type: `integer`):

Stop after this many corporations (each is charged once).

## Actor input object example

```json
{
  "status": "active",
  "corporationType": "all",
  "nameContains": [
    "coffee"
  ],
  "provinces": [],
  "cities": [],
  "postalCodePrefixes": [],
  "legislationContains": [],
  "corporationNumbers": [],
  "businessNumbers": [],
  "order": "newest_first",
  "maxRecords": 10
}
```

# Actor output Schema

## `results` (type: `string`):

The delivered (and billed) records.

## `receipt` (type: `string`):

Robots result, source files, rows read, delivered and charged counts.

# 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 = {
    "nameContains": [
        "coffee"
    ],
    "maxRecords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/ca-federal-corporation-records").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 = {
    "nameContains": ["coffee"],
    "maxRecords": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/ca-federal-corporation-records").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "nameContains": [
    "coffee"
  ],
  "maxRecords": 10
}' |
apify call nexgensignal/ca-federal-corporation-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/ca-federal-corporation-records"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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