# Canada New Corporations Feed: Federal Incorporations Daily (`moment-data/canada-new-corporations-feed`) Actor

Daily feed of newly incorporated Canadian federal corporations from official Corporations Canada open data: CBCA business corporations, not-for-profits and co-operatives with corporation number, BN, city, province and postal FSA. Filter by province, city, name. Entity-level only.

- **URL**: https://apify.com/moment-data/canada-new-corporations-feed.md
- **Developed by:** [Luke Miller](https://apify.com/moment-data) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 New Corporations Feed: Federal Incorporations Daily

Get **every newly incorporated Canadian federal corporation** from the official **Corporations Canada (ISED) open data**: CBCA business corporations, not-for-profit corporations, co-operatives and boards of trade, with corporation number, CRA Business Number (BN), name in both official languages, city, province, postal FSA, status and a link to the official registry page. Filter by **province, city, postal code prefix, name keyword or corporation type**, drop numbered companies, and schedule it with **"new since last run"** mode to receive only corporations you have not seen.

**New in v0.2 (opt-in):** a **status-change feed** of federal corporations that were **dissolved**, flagged **"Dissolution Pending (non-compliance)"**, filed an intent to dissolve, **amalgamated**, continued out or were **revived**, plus a stateless **current list** of the ~31,000 corporations now in Dissolution Pending. The default run is unchanged (new incorporations).

Uses the free official Federal Corporations open-data files (refreshed daily): no API key, no login, no scraping of search pages.

### Who it's for

- **Accountants, bookkeepers and tax firms**: every new corporation needs a first-year financial statement and T2 return. Get a daily list of new corporations in your city.
- **Business banks, payment processors, insurers and payroll / HR SaaS**: reach new businesses in the first weeks, when they choose providers.
- **B2B sales teams and agencies** (web design, branding, signage, office fit-out, telecom): new-company trigger lists by province or postal area.
- **Lawyers, KYC / AML and risk teams**: monitor new incorporations that match a brand or keyword, spot look-alike names.
- **Researchers and journalists** tracking business formation in Canada by province or sector keyword.
- **Credit, collections, supplier-risk and KYC teams** (with `eventType: statusChange`): a daily distress / churn signal when a customer, supplier or counterparty is flagged for dissolution, dissolved or amalgamated.
- **Insolvency practitioners, business brokers and accountants**: corporations that just fell into non-compliance (missed annual returns) are prospects for catch-up filings, revival or wind-down help.

### What you get

Each record is one new federal corporation:

- **Identity**: corporation number, Business Number (BN, when assigned), corporate name (form 1) and other-language name (form 2), numbered-company flag.
- **Type and status**: business / nonProfit / cooperative / boardOfTrade / other, governing legislation, status and status detail.
- **Dates**: incorporation date, whether a first annual return has been filed yet.
- **Where (entity level)**: registered-office city, province (code and name), country and postal **FSA** (first 3 characters of the postal code).
- **Governance**: minimum and maximum number of directors in the articles.
- **Link** to the official Corporations Canada record (directors and full address are visible there).

By design, **no personal data is output**: the source files contain no director names, and this Actor never outputs street address lines (many small corporations use a home address as registered office) or the full postal code.

### Quick start

1. Click **Try for free** and run the default input `{}`: the 30 newest federal incorporations from the last 3 days, all provinces.
2. Narrow it down, for example new non-numbered business corporations in Toronto and Montréal:

```json
{ "corporationTypes": ["business"], "cities": ["Toronto", "Montréal"], "excludeNumberedCompanies": true, "maxItems": 200 }
```

3. For alerts, set `"mode": "sinceLastRun"` and **schedule** the Actor daily (after 12:00 UTC, when the new file is out). Each run returns only corporations you have not received before (per `stateKey`).

#### More recipes

- New tech companies in British Columbia: `{ "provinces": ["BC"], "nameKeywords": ["tech", "software", "AI", "digital", "data"] }`
- New not-for-profits nationwide in the last month: `{ "corporationTypes": ["nonProfit"], "daysBack": 30, "maxItems": 1000 }`
- Calgary postal area, newest week: `{ "postalCodePrefixes": ["T2", "T3"], "daysBack": 7, "maxItems": 500 }`
- Construction start-ups in Quebec: `{ "provinces": ["QC"], "nameKeywords": ["construction", "rénovation", "renovation", "toiture"] }`

### Status changes: dissolutions, Dissolution Pending, amalgamations (opt-in)

Corporations Canada's files show each corporation's **current** status but **no date of dissolution or status change**. This Actor therefore detects changes the honest way: with `"eventType": "statusChange"` it saves a compact snapshot of the status of all ~1.58 million federal corporations (active + inactive/dissolved files, ~280 MB read with range requests) and, on every later run with the same `stateKey`, reports each corporation whose status changed since the previous run.

- **First run = baseline**: saves the snapshot and returns **0 records** (you only pay the start event). Schedule it daily (after 12:00 UTC); from the second run on you get the changes between the two file dates.
- `changeType` values: `dissolutionPending` (Active - Dissolution Pending (non-compliance)), `intentToDissolve`, `discontinuancePending`, `dissolved` (by the corporation, for non-compliance, by court order, by Corporations Canada), `amalgamated`, `discontinued` (continued to another jurisdiction), `revived` (dissolved/inactive back to Active), `backToActive` (pending flag cleared), `statusChanged` (anything else).
- Each record has `previousStatus` / `previousStatusDetail`, the current `status` / `statusDetail`, all the usual entity fields and filters (province, city, FSA, type, name, numbered), `previousSourceFileDate` / `sourceFileDate` (the change happened between these file dates) and `detectedAt`.
- Filter with `changeTypes`, e.g. `["dissolved", "dissolutionPending"]`. Changes over `maxItems` (or your max cost) are **held and reported by the next run**, never lost; changes that do not match your filters are skipped, so use one `stateKey` per filter set. A corporation missing from one day's files (it is moving between the active and inactive files) keeps its previous status until it reappears.
- New incorporations are not repeated here: use the default event type for those.

Example (daily schedule):

```json
{ "eventType": "statusChange", "changeTypes": ["dissolutionPending", "dissolved"], "provinces": ["ON", "QC"], "excludeNumberedCompanies": true, "maxItems": 2000, "stateKey": "on-qc-distress" }
```

#### Stateless current list

`"eventType": "currentStatus"` lists corporations that are **currently** in `dissolutionPending` (default, ~31k), `intentToDissolve` (~1k) or `discontinuancePending` (~150) (`listStatuses`), with all filters; sorted by the latest annual filing year (most recently compliant first), then newest incorporation. No snapshot needed, but there is no "since when" date. Example: `{ "eventType": "currentStatus", "cities": ["Calgary"], "excludeNumberedCompanies": true, "maxItems": 500 }`

### Input

| Field | Default | Description |
|---|---|---|
| `eventType` | `newCorporation` | `newCorporation` (default), `statusChange` (since last run, first run = baseline) or `currentStatus` (stateless list) |
| `changeTypes` | all | statusChange only: `dissolutionPending`, `intentToDissolve`, `discontinuancePending`, `dissolved`, `amalgamated`, `discontinued`, `revived`, `backToActive`, `statusChanged` |
| `listStatuses` | `dissolutionPending` | currentStatus only: `dissolutionPending`, `intentToDissolve`, `discontinuancePending` |
| `mode` | `window` | `window` = stateless lookback; `sinceLastRun` = only corporations not delivered before (per `stateKey`) |
| `daysBack` | 3 | incorporation-date window (1-365 days) ending on the latest file date |
| `corporationTypes` | all | `business`, `nonProfit`, `cooperative`, `boardOfTrade`, `other` |
| `provinces` | all | `ON`, `QC`, `BC`, `AB`, ... or names |
| `cities` | all | exact city names, case/accents ignored |
| `postalCodePrefixes` | all | FSA prefixes like `M`, `V6`, `H2X` |
| `nameKeywords` / `excludeNameKeywords` | none | name contains any / none of these |
| `excludeNumberedCompanies` | false | drop "12345678 Canada Inc." style names |
| `onlyWithBusinessNumber` | false | keep only records with a BN |
| `onlyNoAnnualReturnYet` | false | drop corporations that already filed an annual return |
| `autoExtend` | true | widen a short window (weekends, narrow filters) by up to 14 days |
| `maxItems` | 30 | max records per run |
| `stateKey` | `default` | separate saved state per saved search (sinceLastRun and statusChange) |

### Output (example, real records from Oct 2026)

```json
[
  {
    "eventType": "newCorporation",
    "corporationNumber": "18347638",
    "businessNumber": "742874779",
    "name": "Takhtenard Inc.",
    "nameOtherLanguage": null,
    "isNumberedCompany": false,
    "corporationType": "business",
    "governingLegislation": "Canada Business Corporations Act",
    "status": "Active",
    "statusDetail": null,
    "incorporationDate": "2026-10-30",
    "firstAnnualReturnFiled": false,
    "lastAnnualFilingYear": null,
    "city": "Toronto",
    "province": "ON",
    "provinceName": "Ontario",
    "country": "CA",
    "postalCodeFsa": "M5A",
    "minDirectors": 1,
    "maxDirectors": 10,
    "registryUrl": "https://ised-isde.canada.ca/cc/lgcy/fdrlCrpDtls.html?corpId=18347638",
    "source": "Corporations Canada (ISED) Federal Corporations open data",
    "firstSeenAt": "2026-10-31T11:11:39.101Z"
  },
  {
    "eventType": "newCorporation",
    "corporationNumber": "18341192",
    "businessNumber": "776613846",
    "name": "Lindsay Geddes Coaching Inc.",
    "nameOtherLanguage": null,
    "isNumberedCompany": false,
    "corporationType": "business",
    "governingLegislation": "Canada Business Corporations Act",
    "status": "Active",
    "statusDetail": null,
    "incorporationDate": "2026-10-30",
    "firstAnnualReturnFiled": false,
    "lastAnnualFilingYear": null,
    "city": "Vancouver",
    "province": "BC",
    "provinceName": "British Columbia",
    "country": "CA",
    "postalCodeFsa": "V5P",
    "minDirectors": 1,
    "maxDirectors": 8,
    "registryUrl": "https://ised-isde.canada.ca/cc/lgcy/fdrlCrpDtls.html?corpId=18341192",
    "source": "Corporations Canada (ISED) Federal Corporations open data",
    "firstSeenAt": "2026-10-31T11:11:39.101Z"
  }
]
```

A run summary is saved to the `OUTPUT` record: window, source file dates, counts by type, province and date, rows scanned, filters dropped.

### Data source, timing and fair use

- **Corporations Canada (Innovation, Science and Economic Development Canada) Federal Corporations dataset** on open.canada.ca, published under the **Open Government Licence - Canada**. Contains information licensed under the Open Government Licence - Canada. This Actor is not affiliated with or endorsed by the Government of Canada.
- Files are refreshed daily (around 11:00 UTC). New incorporations usually appear 1-2 days after the incorporation date, and the newest day fills in over the next few days; `sinceLastRun` re-reads the last 14 days so late records are not missed.
- Covers federal corporations only (CBCA, NFP Act, Coop Act, Boards of Trade, Special Acts). Provincially incorporated companies (e.g. Ontario OBCA, BC, Quebec REQ) are not in this dataset.
- `incorporationDate` is the source's "anniversary date": the date of incorporation, amalgamation or continuance.
- Each run downloads the official CSV files (about 104 MB for business corporations, 9 MB for the others) with a handful of polite parallel range requests; choose only `nonProfit` / `cooperative` types for a much smaller download.

### Pricing

Pay per event (Apify takes care of billing; you only pay for what is delivered):

| Event | Price | Charged |
|---|---|---|
| `apify-actor-start` | $0.005 | once per run |
| `corporation-record` | $0.003 | per corporation delivered (new incorporations and `currentStatus` lists) |
| `status-change-record` | $0.003 | per status change delivered (`eventType: statusChange`) |

A default test run (30 corporations) costs about $0.095. A daily city alert (~10 new corporations/day) costs about $0.035/day (~$1/month). The full national firehose (~200 new corporations per working day) costs about $0.60/day. `maxItems` and Apify's *max cost per run* cap your spend; the Actor stops delivering when your budget is reached, so you are never charged for more than you set. A daily national status-change run (volume varies; non-compliance dissolutions can come in large batches, so set `maxItems`) costs about $0.005 + $0.003 per change; the baseline run costs only the start event. No separate platform-usage charges: compute is included in the event prices.

### FAQ

**Why are there no director names or street addresses?** This is an entity-level feed. The source has no director data, and we deliberately drop street lines and the full postal code because many small corporations use a home address. Follow `registryUrl` for the full official record.

**Why do I see only a few records for yesterday?** Corporations Canada publishes new incorporations with a 1-2 day lag, and the newest day fills in over the next files. Use `daysBack` 3+ or `sinceLastRun` mode.

**Does it include Ontario / BC / Quebec provincial companies?** No, only federally incorporated corporations (federal incorporation is popular with businesses that operate in several provinces or want name protection across Canada).

**What is a numbered company?** A corporation named after its corporation number, e.g. "18322741 Canada Inc." (often holding companies). About 40% of new CBCA corporations; drop them with `excludeNumberedCompanies`.

**Is there a dissolution date?** No. The open data has no date for dissolutions or status changes, so `statusChange` reports changes between two file dates (daily if scheduled daily). For history before your first run, use `currentStatus` or the registry page.

**Can I backfill?** Yes, up to 365 days with `daysBack` and a higher `maxItems` (only corporations still active are in the active files).

# Actor input Schema

## `eventType` (type: `string`):

newCorporation = newly incorporated corporations (default, uses Mode / Days back). statusChange = corporations whose status changed since the previous statusChange run with the same State key (the source has no dissolution date, so the first run only saves a baseline snapshot and returns 0 records; schedule it daily). currentStatus = stateless list of active corporations currently flagged Dissolution Pending (non-compliance) or similar.

## `mode` (type: `string`):

window = every matching corporation incorporated in the last Days back days (stateless, default). sinceLastRun = only corporations not delivered by a previous run with the same State key (re-reads the last 14 days because Corporations Canada adds some records a few days late). Applies to eventType newCorporation; statusChange is always since-last-run.

## `daysBack` (type: `integer`):

Incorporation-date window ending on the date of the latest Corporations Canada file (refreshed daily around 11:00 UTC). Roughly 150-300 new federal business corporations are incorporated per working day.

## `corporationTypes` (type: `array`):

business (Canada Business Corporations Act), nonProfit (Canada Not-for-profit Corporations Act), cooperative (Canada Cooperatives Act), boardOfTrade (Boards of Trade Act), other (Special Acts etc.). Empty = all. Only business = smaller download.

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

Registered-office province: 2-letter codes (ON, QC, BC, AB, MB, SK, NS, NB, NL, PE, YT, NT, NU) or names. Empty = all.

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

Registered-office city/town, exact match ignoring case and accents (Toronto, Montréal, Vancouver, Calgary). Empty = all.

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

Postal code prefixes, 1-3 characters: M (Toronto), H (Montreal), V6 (Vancouver), T2 (Calgary), K1A. Empty = all.

## `nameKeywords` (type: `array`):

Keep corporations whose name (English or French form) contains any of these words, e.g. tech, construction, holdings, consulting, restaurant.

## `excludeNameKeywords` (type: `array`):

Drop corporations whose name contains any of these words, e.g. holdings, gestion.

## `excludeNumberedCompanies` (type: `boolean`):

Drop numbered companies like '18322741 Canada Inc.' (about 40% of new CBCA incorporations).

## `onlyWithBusinessNumber` (type: `boolean`):

Keep only corporations that already have a CRA Business Number.

## `onlyNoAnnualReturnYet` (type: `boolean`):

Drop records that already filed an annual return (useful with long windows to focus on brand-new incorporations).

## `changeTypes` (type: `array`):

statusChange only. Any of: dissolutionPending, intentToDissolve, discontinuancePending, dissolved, amalgamated, discontinued, revived, backToActive, statusChanged. Empty = all.

## `listStatuses` (type: `array`):

currentStatus only. Any of: dissolutionPending (about 31k corporations), intentToDissolve (~1k), discontinuancePending (~150). Empty = dissolutionPending.

## `autoExtend` (type: `boolean`):

In window mode, walk back day by day (max 14 days) when fewer than about 25 records match (weekends, holidays, narrow filters). Turn off to get exactly the Days back window.

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

Hard cap on delivered records (also caps your spend). newCorporation: newest first in window mode, oldest first in sinceLastRun mode. statusChange: changes over the cap are held and reported by the next run. currentStatus: most recent annual filers first.

## `stateKey` (type: `string`):

sinceLastRun and statusChange: separate saved state per saved search (e.g. 'toronto-tech'). newCorporation and statusChange states are stored separately.

## Actor input object example

```json
{
  "eventType": "newCorporation",
  "mode": "window",
  "daysBack": 3,
  "excludeNumberedCompanies": false,
  "onlyWithBusinessNumber": false,
  "onlyNoAnnualReturnYet": false,
  "autoExtend": true,
  "maxItems": 30,
  "stateKey": "default"
}
```

# Actor output Schema

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

One record per newly incorporated federal corporation (or per status change / listed corporation with the opt-in event types).

## `summary` (type: `string`):

Window, filters, counts by type/province/date, source file dates.

## `statusChanges` (type: `string`):

eventType statusChange: one record per detected status change.

# 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("moment-data/canada-new-corporations-feed").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("moment-data/canada-new-corporations-feed").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 moment-data/canada-new-corporations-feed --silent --output-dataset

```

## MCP server setup

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

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/7OFoPo4PV8n9ULflD/builds/G88W2fORU2cSgouf1/openapi.json
