# Canada Federal Corporation Search: Open Registry Data (`jp-data-lab/canada-federal-corporations`) Actor

Verify Canadian federal corporations by number or list new ones from the government's daily open data: status, legislation, filing year, city and province. 1.5M+ corporations, licence-checked. No director names, street addresses, phones or emails.

- **URL**: https://apify.com/jp-data-lab/canada-federal-corporations.md
- **Developed by:** [JP Data Lab](https://apify.com/jp-data-lab) (community)
- **Categories:** Business, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 corporations

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/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 Corporation Search: Open Registry Data

Verify Canadian federal corporations by number, or list new ones, from the [Federal Corporations](https://open.canada.ca/data/en/dataset/0032ce54-c5dd-4b66-99a0-320a7b5e99f2) open dataset that Corporations Canada publishes daily under the Open Government Licence – Canada. It covers more than 1.5 million active, dissolved and inactive corporations. The Actor reads only the published data files. It never scrapes the corporation search pages.

Use it to check that a customer, vendor or grantee exists and is in good standing, to catch corporations heading for dissolution, to find newly formed companies and not-for-profits, or to give an AI agent a way to answer "is this corporation active?". This is a list of corporations, not of people: it has no director names, street addresses, phones or emails.

### Two ways to use it

**Verify numbers.** Put corporation numbers or business numbers in `numbers`. All other filters are ignored, and dissolved corporations are included:

```json
{ "numbers": ["866011-5", "100094283"] }
```

Numbers with no match are listed under `numbersNotFound` in `RUN_SUMMARY` and are not charged.

**List corporations.** Leave `numbers` empty and filter by name, province, kind or date. Results are newest first:

```json
{ "provinces": ["QC"], "kinds": ["business"], "incorporatedWithinDays": 30, "maxItems": 200 }
```

### Output

One item per corporation:

```json
{
  "id": "ca-corp:8660115",
  "source": "corporations-canada",
  "corporationNumber": "8660115",
  "name": "MINDANGLER CAPITAL INC.",
  "nameConfirmed": true,
  "kind": "business",
  "active": true,
  "url": "https://open.canada.ca/data/en/dataset/0032ce54-c5dd-4b66-99a0-320a7b5e99f2",
  "attribution": "Contains information licensed under the Open Government Licence – Canada. Source: Corporations Canada, Federal Corporations, https://open.canada.ca/data/en/dataset/0032ce54-c5dd-4b66-99a0-320a7b5e99f2",
  "alternateName": null,
  "businessNumber": "835752437",
  "status": "Active",
  "statusDetail": null,
  "dissolutionPending": false,
  "governingLegislation": "Canada Business Corporations Act",
  "anniversaryDate": "2013-10-10",
  "lastAnnualFilingYear": 2026,
  "lastAnnualMeetingDate": "2023-10-10",
  "city": "Ottawa",
  "province": "ON",
  "postalArea": "K2K",
  "minDirectors": 1,
  "maxDirectors": 12,
  "scrapedAt": "2026-11-01T09:00:00+00:00"
}
```

| Field | Meaning |
|---|---|
| `id` | Stable key. Use it to remove repeats between runs |
| `source` | Always `corporations-canada` |
| `corporationNumber` | The number on the official record, without the hyphen and with no leading zeros. `866011-5` is `8660115` |
| `businessNumber` | The 9-digit Canada Revenue Agency number when the source has one. The same number can appear on more than one corporation, for example after an amalgamation |
| `name`, `alternateName` | The two registered forms of the name, often English and French. `null` when `nameConfirmed` is `false`, see "Personal data" |
| `nameConfirmed` | `true` if the name was confirmed as an organisation's name |
| `kind` | `business`, `not-for-profit`, `cooperative`, `board-of-trade` or `other`, from the governing act |
| `active` | `true` if `status` is `Active` |
| `status`, `statusDetail` | The source's own wording, such as `Dissolved` and `Dissolved for non-compliance` |
| `dissolutionPending` | `true` if the status detail says dissolution is pending, which usually follows missed annual filings |
| `governingLegislation` | The act the corporation is under |
| `anniversaryDate` | The date the corporation incorporated, amalgamated or continued under its act. It is not always the date the business began. An older company that moved under federal law shows the date it moved |
| `lastAnnualFilingYear`, `lastAnnualMeetingDate` | From the source. `null` if not published |
| `city`, `province` | Registered office. Old codes are updated, so `NF` becomes `NL`. A city that contains a street or box number is `null` |
| `postalArea` | The first 3 characters of the postal code |
| `minDirectors`, `maxDirectors` | The range in the corporation's articles. The number of directors, not their names |
| `url` | The official dataset page |
| `attribution` | The credit line to keep when you pass the data on |
| `scrapedAt` | When this run produced the item |

### Input

| Field | Default | |
|---|---|---|
| `numbers` | none | Up to 1,000 corporation or business numbers. Other filters are then ignored |
| `keywords` | none | Name contains any keyword, as registered. `societe` does not match `Société`, so try both spellings |
| `provinces` | all | Province or territory of the registered office |
| `kinds` | all | Any of the `kind` values |
| `activeOnly` | `true` | Leave out dissolved and inactive corporations |
| `incorporatedWithinDays` | 0 | Anniversary date in the last N days. 0 means no limit |
| `maxItems` | 100 | Total for the run, newest first. You pay per result |

The default run lists the 100 newest active corporations in about 5 seconds. Reading all four source files, which is what `activeOnly: false` and lookups can do, takes about 6 seconds.

### Personal data

Corporations Canada's own record pages show directors and their addresses. This Actor leaves all of that out:

- **No people.** The published files contain no director names, and the Actor does not call the API or pages that do.
- **No street addresses.** A small corporation's registered office is often a home, so the street columns are never read and location stops at city, province and postal area. A full Canadian postal code can point to a single block, so only the first 3 characters are returned.
- **No links to record pages.** `url` is the dataset page, because the record pages list directors. To see a record, search the corporation number on the Corporations Canada website.
- **Names must look like an organisation.** The source lists only incorporated bodies, but a not-for-profit's name needs no legal word, so an unusual one could be a person's name. A name is returned only if it contains a legal word such as `Inc` or `Ltée` or an organisation word such as `Society` or `Fondation`. A name that itself contains a person's name, such as `Jane Doe Holdings Inc.`, is still returned as the registered name of the corporation.
- **Lists leave out unconfirmed names.** All but a handful of business corporations pass, and about 80 percent of not-for-profits. In a list they are counted as `nameNotConfirmed` in `RUN_SUMMARY`. Many of those left out are ordinary organisations with plain names, such as a charity named `Go Play Outside`.
- **Lookups keep the status only.** When you ask for a number and its name cannot be confirmed, you get the status, dates and kind with `nameConfirmed: false`, and `name`, `alternateName`, `city`, `province` and `postalArea` set to `null`.

### Limitations

- **Federal corporations only.** Companies incorporated under a provincial or territorial law are not in this source, and neither are sole proprietorships or partnerships. A missing number is not proof that a business does not exist.
- **`incorporatedWithinDays` is not only new companies.** Amalgamations and continuances also get a new date.
- **Status is what the file shows.** The files are typically updated daily and can trail the live registry. `RUN_SUMMARY` gives each file's date. Confirm with Corporations Canada before relying on a status for a legal or payment decision.
- **`keywords` looks at the two registered name forms only.** The source has no industry field.
- If one file cannot be read, the run still succeeds with the others and `RUN_SUMMARY` shows `incomplete: true` with the error. Treat `numbersNotFound` from such a run as unconfirmed.
- Not affiliated with or endorsed by the Government of Canada or Corporations Canada.

### Data source and attribution

Contains information licensed under the [Open Government Licence – Canada](https://open.canada.ca/en/open-government-licence-canada). Source: Corporations Canada, [Federal Corporations](https://open.canada.ca/data/en/dataset/0032ce54-c5dd-4b66-99a0-320a7b5e99f2). Each item carries this in its `attribution` field, so you can keep the credit when you pass the data on.

***

### 日本語

カナダ政府（Corporations Canada）が毎日公開する公式オープンデータから、連邦法人の情報を取得します。法人番号・事業者番号での照合と、新しい順の一覧の 2 通りで使えます。許諾は Open Government Licence – Canada です。登記検索の画面は巡回しません。出力は法人名・種類・状態・根拠法・記念日（設立・合併・継続の日）・最終届出年・市・州・郵便番号の先頭 3 文字までで、取締役の氏名、番地、メール、電話は出力しません。

# Actor input Schema

## `numbers` (type: `array`):

Optional, up to 1,000. Corporation numbers (866011-5) or 9-digit business numbers (835752437, or 835752437RC0001). When set, the other filters below are ignored and dissolved corporations are included. Numbers with no match are listed in RUN_SUMMARY and are not charged.

## `keywords` (type: `array`):

Keep corporations whose name contains any of these words, e.g. solar, logistique. Case-insensitive. Checks the English and French forms exactly as registered, including accents.

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

Province of the registered office. Leave empty for all of Canada.

## `kinds` (type: `array`):

Taken from the governing act. Leave empty for all kinds.

## `activeOnly` (type: `boolean`):

Leave out dissolved and inactive corporations.

## `incorporatedWithinDays` (type: `integer`):

Only corporations whose anniversary date falls in the last N days, to find new corporations. That date also covers amalgamations and continuances. 0 = no date limit.

## `maxItems` (type: `integer`):

Total for the run, newest first. You are charged per result. Not used when verifying numbers.

## Actor input object example

```json
{
  "numbers": [],
  "keywords": [],
  "provinces": [],
  "kinds": [],
  "activeOnly": true,
  "incorporatedWithinDays": 0,
  "maxItems": 100
}
```

# Actor output Schema

## `corporations` (type: `string`):

One item per corporation: corporation and business numbers, name, kind, status, governing act, anniversary date, last filing year, city, province and postal area, dataset URL and attribution.

## `runSummary` (type: `string`):

Rows read and matched per file in this run, file dates, any file errors and any numbers that were not found.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("jp-data-lab/canada-federal-corporations").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("jp-data-lab/canada-federal-corporations").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 '{}' |
apify call jp-data-lab/canada-federal-corporations --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jp-data-lab/canada-federal-corporations"
        }
    }
}
```

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/5ZICZswgox76Ou1KI/builds/7cpPaLgc1wWePIrfx/openapi.json
