# Canada Federal Corporations Search – CBCA Company Data & Leads (`gazidev/canada-corporations-search`) Actor

Search all Canadian federal corporations (CBCA, not-for-profit, co-op) from Corporations Canada open data: corporation & business number, status, incorporation date, address, directors range. Find new companies by province or city. $1 per 1,000 records.

- **URL**: https://apify.com/gazidev/canada-corporations-search.md
- **Developed by:** [Cemal Atakli](https://apify.com/gazidev) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 corporation returneds

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 Corporations Search – CBCA Company Data & New Company Leads

Search **every Canadian federal corporation** registered with **Corporations Canada**: business corporations (CBCA), not-for-profits, co-operatives and others. Each record has the **corporation number**, **Business Number (BN)**, corporate name (English/French form), governing act, **status and status detail**, incorporation/anniversary date, last annual filing year, last annual meeting, **registered office address** (street, city, province, postal code) and the minimum/maximum number of directors.

Find **newly incorporated companies** in a province or city, companies whose name contains a keyword, corporations **flagged for dissolution (annual returns not filed)**, or look up thousands of corporation numbers or BNs in one run.

The data comes from the official **Federal Corporations** open dataset published daily by Innovation, Science and Economic Development Canada (ISED) on open.canada.ca. No scraping, no login, no API key.

**$1 per 1,000 corporations.** You pay only for records saved.

### Who uses it

- **Accountants, bookkeepers, lawyers, banks, insurers and payroll/SaaS vendors**: a daily list of **new Canadian companies** by province, city or postal code, ready for outreach.
- **Compliance and corporate-services firms**: active corporations with **"Dissolution Pending (non-compliance)"** status, which usually means the annual return was not filed.
- **KYC / due diligence / data teams**: bulk check corporation numbers or Business Numbers: is the company active, dissolved or amalgamated, and where is its registered office?
- **Market researchers and journalists**: incorporation trends by province, keyword (e.g. `AI`, `cannabis`, `holdings`) or legislation.

### Input examples

Business corporations incorporated in Ontario in the last 30 days (the default prefill):

```json
{ "incorporatedWithinDays": 30, "provinces": ["ON"], "corporationTypes": ["business"], "maxResults": 20 }
```

New AI companies in Montréal in the last year, without numbered companies:

```json
{
  "cities": ["Montréal"],
  "nameContains": ["AI", "artificial intelligence", "intelligence artificielle"],
  "excludeNumberedCompanies": true,
  "incorporatedWithinDays": 365,
  "maxResults": 0
}
```

Quebec corporations flagged for dissolution for non-compliance:

```json
{ "provinces": ["QC"], "statusDetails": ["dissolution-pending"], "maxResults": 500 }
```

Bulk lookup by corporation number or Business Number (searches active, inactive and dissolved records):

```json
{ "corporationNumbers": ["8660115", "7286139"], "businessNumbers": ["118965557RC0001"] }
```

Daily feed of new British Columbia corporations (schedule it daily):

```json
{ "provinces": ["BC"], "incorporatedWithinDays": 7, "onlyNew": true, "stateKey": "bc-feed", "maxResults": 0 }
```

#### Filters

| Field | Meaning |
|---|---|
| `incorporatedWithinDays` / `incorporatedAfter` / `incorporatedBefore` | Anniversary date range (date of incorporation, amalgamation or continuance) |
| `provinces`, `cities`, `postalCodePrefixes` | Registered office location (city match ignores case and accents) |
| `nameContains` | Keywords matched at the start of a word in the English or French name |
| `excludeNumberedCompanies` | Skip `1234567 CANADA INC.`-style names |
| `statuses` | `active` (default), `inactive`, `dissolved` |
| `statusDetails` | e.g. `dissolution-pending`, `intent-to-dissolve`, `dissolved-non-compliance`, `amalgamated`, `discontinued` (replaces `statuses` when set) |
| `corporationTypes` | `business` (CBCA), `not-for-profit`, `cooperative`, `other` |
| `corporationNumbers`, `businessNumbers` | Bulk lookup (other filters are ignored) |
| `sortNewestFirst` | Most recently incorporated first (default on) |
| `onlyNew` + `stateKey` | Monitoring: skip corporations returned by earlier runs |
| `maxResults` | Stop after N corporations (0 = all). You pay per corporation saved |

### Output

One record per corporation:

```json
{
  "corporationNumber": "18327505",
  "businessNumber": "744972977",
  "name": "J2G AUTO CUSTOMS INC.",
  "nameOtherForm": null,
  "corporationType": "business",
  "governingLegislation": "Canada Business Corporations Act",
  "status": "Active",
  "statusDetail": null,
  "anniversaryDate": "2026-10-21",
  "yearOfLastAnnualFiling": null,
  "lastAnnualMeetingDate": null,
  "street": "243 Thorndale Rd",
  "street2": null,
  "city": "Brampton",
  "province": "ON",
  "postalCode": "L6P 3H2",
  "country": "CA",
  "fullAddress": "243 Thorndale Rd, Brampton, ON L6P 3H2",
  "minDirectors": 1,
  "maxDirectors": 10,
  "numberedCompany": false,
  "corporationsCanadaUrl": "https://ised-isde.canada.ca/cc/lgcy/fdrlCrpDtls.html?corpId=18327505",
  "sourceFile": "active-business",
  "source": "Corporations Canada (ISED) - Federal Corporations open data",
  "licence": "Open Government Licence - Canada"
}
```

The run summary (`OUTPUT` in the key-value store) shows rows scanned, matches, corporations saved, numbers not found and the `Last-Modified` date of each source file.

### Pricing

Pay per event: **$0.001 per corporation saved** ($1 per 1,000), plus a tiny Actor start fee. Error rows are free. Set **Max corporations** or a maximum cost per run, and the run stops cleanly at that limit.

| | This Actor | Other Canada corporation Actors on the Store (Oct 2026) |
|---|---|---|
| Price per record | $0.001 | $0.002 – $0.021 |
| Source | official daily bulk file, all ~1.57M federal records | mostly search pages / API per query |
| New-company feed | date filter + newest first + `onlyNew` | varies |
| Bulk lookup by corp. number / BN | yes | varies |

### Use with AI agents (Apify MCP)

Add this Actor to Claude, ChatGPT or any MCP client through the [Apify MCP server](https://mcp.apify.com) and ask, for example: *"List the companies incorporated in Calgary this week"* or *"Is Business Number 835752437 still active?"*

### FAQ

**How fresh is the data?** Corporations Canada regenerates the files every day. Each run downloads the current file, so newly incorporated companies usually show up within a day or two.

**Does it include provincially incorporated companies?** No. Only **federal** corporations (CBCA, Canada Not-for-profit Corporations Act, Canada Cooperatives Act and older federal acts). Companies incorporated only in a province (e.g. an Ontario-only "1234567 Ontario Inc.") are not in this dataset.

**Does it include director names, emails or phone numbers?** No. The open dataset has no director names or contact details, only the minimum/maximum number of directors. Director names are visible on the Corporations Canada page linked in `corporationsCanadaUrl`.

**Is `anniversaryDate` the incorporation date?** It is the date of incorporation, amalgamation or continuance (the date annual returns are based on). For most new companies it is the incorporation date.

**How long does a run take?** About 5–10 seconds for active corporations and 15–20 seconds when inactive/dissolved records are included (the Actor streams ~280 MB of CSV and never stores it).

**Why are some Business Numbers empty?** Older corporations and some not-for-profits have no BN in the registry.

### Data source and licence

Contains information licensed under the [Open Government Licence – Canada](https://open.canada.ca/en/open-government-licence-canada). Source: Innovation, Science and Economic Development Canada – Corporations Canada, [Federal Corporations dataset](https://open.canada.ca/data/en/dataset/0032ce54-c5dd-4b66-99a0-320a7b5e99f2). This Actor is not affiliated with or endorsed by the Government of Canada.

# Actor input Schema

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

New-company leads: only corporations whose anniversary date (date of incorporation, amalgamation or continuance) is in the last N days. 0 = any date.

## `incorporatedAfter` (type: `string`):

YYYY-MM-DD. Overrides *last N days*.

## `incorporatedBefore` (type: `string`):

YYYY-MM-DD. Optional upper bound.

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

Province of the registered office address. Empty = all of Canada.

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

Exact city names, case- and accent-insensitive, e.g. `Toronto`, `Montreal`, `Vancouver`, `Mississauga`.

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

E.g. `M5V` (downtown Toronto), `H3`, `V6B`. Spaces are ignored.

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

Keywords matched against the English and French corporate names, e.g. `holdings`, `tech`, `construction`. Case- and accent-insensitive.

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

Skip names like `1234567 CANADA INC.` (useful for lead lists).

## `statuses` (type: `array`):

Default: active only. Inactive and dissolved corporations come from a separate, larger file.

## `statusDetails` (type: `array`):

Finer filter. When set, it replaces the *Status* filter.

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

Empty = all types.

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

Bulk lookup, e.g. `8660115`. Lookups search active, inactive and dissolved records and ignore the other filters.

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

9-digit CRA Business Number, e.g. `835752437` (a 15-character program account like `835752437RC0001` also works).

## `sortNewestFirst` (type: `boolean`):

Return the most recently incorporated matches first (needs a full scan; applies when *Max corporations* is 1-50,000). Off = file order, which can stop early and is faster for big exports.

## `onlyNew` (type: `boolean`):

Skip corporation numbers returned by earlier runs with the same *State key*. Schedule daily for a feed of newly incorporated companies.

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

Separate 'already seen' lists for different searches.

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

Stop after this many corporations (0 = all matching). You pay per corporation saved.

## Actor input object example

```json
{
  "incorporatedWithinDays": 30,
  "provinces": [
    "ON"
  ],
  "excludeNumberedCompanies": false,
  "statuses": [
    "active"
  ],
  "corporationTypes": [
    "business"
  ],
  "sortNewestFirst": true,
  "onlyNew": false,
  "stateKey": "default",
  "maxResults": 20
}
```

# Actor output Schema

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

No description

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

No description

## `summary` (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 = {
    "incorporatedWithinDays": 30,
    "provinces": [
        "ON"
    ],
    "statuses": [
        "active"
    ],
    "corporationTypes": [
        "business"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("gazidev/canada-corporations-search").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 = {
    "incorporatedWithinDays": 30,
    "provinces": ["ON"],
    "statuses": ["active"],
    "corporationTypes": ["business"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("gazidev/canada-corporations-search").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 '{
  "incorporatedWithinDays": 30,
  "provinces": [
    "ON"
  ],
  "statuses": [
    "active"
  ],
  "corporationTypes": [
    "business"
  ],
  "maxResults": 20
}' |
apify call gazidev/canada-corporations-search --silent --output-dataset

```

## MCP server setup

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

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/4ki4QLGVFKjPa8Voo/builds/sUb0TgYfBF4epMPfM/openapi.json
