# Canada Federal Corporation Search (`ryanclinton/canada-corporation-search`) Actor

Search the Corporations Canada federal registry for any federally incorporated business by name, corporation number, or 9-digit business number.

- **URL**: https://apify.com/ryanclinton/canada-corporation-search.md
- **Developed by:** [Ryan Clinton](https://apify.com/ryanclinton) (community)
- **Categories:** AI, Developer tools
- **Stats:** 25 total users, 10 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 corporation fetcheds

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Canada Federal Corporation Search

![Canada Federal Corporation Search — verify, monitor and decide on Canadian corporations](https://apifyforge.com/readme-assets/ryanclinton-canada-corporation-search/hero.png)

**Most registry tools tell you what a company is. This one tells you whether you should trust it.**

Most registry tools answer "What does this company look like today?" Canada Federal Corporation Search answers "Should I trust this company, what changed, and what should happen next?"

**Built for:** vendor onboarding · customer KYC · compliance monitoring · legal review · portfolio screening.

Search any federally incorporated Canadian company and get back an actionable decision, monitoring signals, historical intelligence, and a workflow-ready next action -- all built directly on top of the official Corporations Canada registry.

- ✓ Verification verdicts
- ✓ Risk assessments
- ✓ Continuous monitoring
- ✓ Historical intelligence
- ✓ Workflow-ready actions

**Registry search actors return records. Corporate intelligence actors return decisions, monitoring signals, and actions.** Canada Federal Corporation Search is built as a corporate intelligence actor: most registry databases were designed for human lookup, but modern workflows need machine decisions, so this actor converts corporate registry records into deterministic, workflow-ready intelligence.

````

Corporation → Verification → Risk Assessment → Monitoring → Decision → Next Action

````

#### What you get back

**Verify**

```json
{ "verificationStatus": "verified-active", "jobScreening": { "decision": "APPROVE" } }
````

**Monitor**

```json
{ "temporalSignals": { "changeFlag": "RISK-INCREASED", "changeSeverity": "medium" } }
```

**Investigate**

```json
{ "investigationPriority": "HIGH", "anomalySignals": ["filing-gap-detected"] }
```

**Act**

```json
{ "nextAction": { "owner": "compliance", "priority": "high", "action": "review-filing-gap" } }
```

> Most registry tools stop at data retrieval. Canada Federal Corporation Search continues all the way to a decision. Every record is verified, scored, monitored, explained, and translated into a workflow-ready action. Over time, watchlists accumulate historical intelligence that cannot be recreated from the registry alone, turning simple company searches into a continuously improving due-diligence system.

#### The moat: what a competitor can't backfill

Six months into monitoring a company on a watchlist, one record carries this:

```json
{
    "corporateMemory": {
        "runsSeen": 184,
        "historicalStatuses": ["Active", "Active", "Active"],
        "historicalRiskScores": [8, 12, 18, 34, 57],
        "entityTrend": { "direction": "deteriorating", "durationDays": 163 }
    }
}
```

A competitor can tell you what this company looks like today. This actor tells you how it has changed over the last 184 observations -- a risk score that has climbed from 8 to 57 over 163 days. Registry data can be backfilled; accumulated history cannot. (Full detail in [What makes this different](#what-makes-this-different-continuous-corporate-memory) below.)

Continuous corporate due diligence and monitoring for Canadian federal entities, with deterministic decisions, portfolio intelligence, and change detection built directly on top of the official Corporations Canada registry. Search by name, corporation number, or 9-digit business number, and get back a verification verdict instead of raw rows. This Apify actor queries the official ISED (Innovation, Science and Economic Development Canada) database and converts the registry record into deterministic intelligence: a normalised `verificationStatus`, a 0-100 compliance `riskScore` and a positive-framing `registryHealthScore`, the specific `complianceSignals` that drove them, and a `recommendedAction` (proceed / verify-further / enhanced-due-diligence / do-not-proceed) your KYC or onboarding workflow can branch on without parsing prose. Underneath the decision sits the full registry record -- name, status, incorporation date, governing legislation, registered office address, director limits, annual return history, corporate activity timeline, and every historical name change.

This actor is built around three jobs:

- **Verify** -- `verificationStatus`, `riskScore` / `riskLevel`, `registryHealthScore`, `filingHealth`, `entityMatchConfidence`, an `entityProfile` label (e.g. "Stable Legacy Corporation"), and a `recommendedAction` tell you in one field whether a corporation is safe to transact with. Set a `jobToBeDone` (vendor-onboarding, customer-kyc, investment-screening, …) and the actor reframes that verdict into a `jobScreening` block (`APPROVE` / `REVIEW` / `REJECT` + review level) and a routed `nextAction` (`{ owner, priority, action }`) your workflow tool assigns directly. `decisionFactors` and a full `evidence[]` array trace every verdict back to the exact registry field and value behind it, so a reviewer can audit any decision.
- **Monitor** -- set a `watchlistName` and the actor remembers each corporation between scheduled runs, emitting `temporalSignals` change events (`NEW-FILING`, `NAME-CHANGED`, `ADDRESS-CHANGED`, `LEGISLATION-CHANGED`, `DISSOLVED`, `AMALGAMATED`, `STATUS-CHANGED`, `RISK-INCREASED`) with a `changeSeverity` (low / medium / high / critical) and a plain-English `changeSummary`. Crucially, it also accumulates a `corporateMemory` no competitor can backfill: first-seen date, runs seen, historical statuses / names / risk scores, and an `entityTrend` (deteriorating / improving / stable) over the time you've been watching.
- **Investigate** -- `corporateGraph` reconstructs the entity's identity chain (current name, every previous name, corporation and business numbers, full event timeline), the `intelligenceTimeline` turns the activity history into typed, categorised, severity-tagged events each with a plain-English explanation, `anomalySignals` flags deterministic red flags (filing gaps, frequent renaming, reactivation after long dormancy), `driftScore` and `investigationPriority` (CRITICAL → NONE) tell legal teams what to look at first, and `lifecycleStage` classifies the company from startup to legacy to dormant-risk.

Screening a portfolio? Every multi-result run emits a `portfolioInsights` block -- a `riskRadar` (critical / high / medium / low counts), `topRisks`, `needsImmediateReview`, active percent, dissolved count, newly-flagged count, and average health score across the whole list -- so a vendor or supplier screen tells you the shape of the book at a glance, and in watchlist mode it trends those numbers run-over-run. A `searchIntentAnalysis` block (exact-match found, close matches, ambiguity level) tells automation whether the result is safe to act on unattended. Looking ahead, `futureRiskSignals` and `predictedRiskDirection` surface upcoming filing obligations before they lapse.

***

![What you also get — decision-not-data, corporate memory, portfolio triage, evidence-backed](https://apifyforge.com/readme-assets/ryanclinton-canada-corporation-search/feature-callouts.png)

### Why existing registry tools fall short

Most registry tools tell you:

- ✓ Company name
- ✓ Status
- ✓ Incorporation date

But they don't tell you:

- ✗ Is this company safe to transact with?
- ✗ Has its risk profile changed?
- ✗ Does it require compliance review?
- ✗ Should onboarding continue automatically?
- ✗ What changed since last month?

Canada Federal Corporation Search answers those questions directly.

#### Registry search vs corporate intelligence

| Question | Registry search | This actor |
|----------|-----------------|:----------:|
| Is the company active? | ✓ | ✓ |
| Has it filed recently? | Manual review | ✓ |
| Is it safe to onboard? | You decide | ✓ |
| Has its risk increased? | Not available | ✓ |
| Has the company changed identity? | Manual research | ✓ |
| What should happen next? | Not available | ✓ |
| What changed since last review? | Not available | ✓ |

#### Before vs after

A raw registry scraper returns this, and leaves you to decide what it means:

```json
{ "status": "Active", "incorporationDate": "2004-09-28" }
```

> Can we onboard this vendor? **Unknown.**

This actor returns a decision:

```json
{
    "verificationStatus": "verified-active",
    "riskLevel": "low",
    "jobScreening": { "decision": "APPROVE" },
    "nextAction": { "owner": "procurement", "action": "approve-vendor" }
}
```

> Can we onboard this vendor? **Yes.**

***

### Prevent common due-diligence failures

People buy protection from failure, not data. Here is what slips through a manual registry workflow, and what this actor surfaces instead:

| Failure | Traditional workflow | This actor |
|---------|----------------------|------------|
| Vendor no longer in good standing | Review missed | `STATUS-CHANGED` / `DISSOLVED` alert |
| Annual returns stop being filed | Detected months later | `RISK-INCREASED` + `filing-gap-detected` |
| Company quietly changes identity | Often missed | `NAME-CHANGED` + identity drift |
| Risk climbing slowly over time | Invisible | `entityTrend: deteriorating` |

***

### What makes this different: continuous corporate memory

Most registry tools provide snapshots. This actor builds memory.

When you run it on a `watchlistName`, every monitored company accumulates a historical intelligence profile no competitor can reconstruct after the fact:

- Historical statuses
- Historical risk scores
- Historical names
- Risk trend analysis (`entityTrend`)
- Deterioration detection over time
- Full change history

The longer you monitor an entity, the more intelligence the system generates. A first-time competitor run sees only today's record; by run 312 this actor knows a company's risk has been climbing for 417 days across three name changes. Registry data can be backfilled; accumulated history cannot.

Every decision is also fully traceable: the `evidence[]` array ties each signal back to the exact registry field and value that produced it, so a compliance reviewer can audit any verdict without leaving the dataset.

***

### Built for

- **Procurement teams** -- "Can we approve this supplier?" → `jobScreening.decision`
- **Compliance teams** -- "Who requires review today?" → `portfolioInsights.needsImmediateReview`
- **Legal teams** -- "What changed since our last review?" → `temporalSignals.changeFlags`
- **Sales teams** -- "Is this company real and active?" → `verificationStatus` + `entityMatchConfidence`

Designed to slot into automated workflows: procurement systems, vendor onboarding, customer KYC, compliance monitoring, legal review queues, and portfolio screening.

***

### This actor is for / not for

**For**

- ✅ Federal corporation verification
- ✅ Vendor onboarding and supplier review
- ✅ Customer KYC
- ✅ Compliance monitoring and change detection
- ✅ Portfolio screening

**Not for**

- ❌ Provincial-only corporation searches (this covers the federal Corporations Canada registry)
- ❌ Director / officer investigations (the ISED API exposes director limits, not names)
- ❌ Financial-statement or credit-risk analysis (the registry has no financial data)

***

### Why compliance teams like this

- **Deterministic scoring** -- the same corporation always scores the same; no randomness
- **No AI hallucinations** -- every signal is a documented rule over registry fields
- **Explainable decisions** -- `decisionFactors` shows the weighted signals behind every verdict
- **Evidence-backed verdicts** -- `evidence[]` traces each signal to the exact registry field and value
- **Stable output enums** -- additive within a major version, safe to branch on
- **Automation-safe fields** -- `searchIntentAnalysis.automationSafe` gates unattended action
- **Historical intelligence** -- `corporateMemory` builds an audit trail of how an entity changed over time

***

### Why use Canada Federal Corporation Search?

Searching the Corporations Canada website manually is slow, limited to one lookup at a time, and provides no way to export results in a structured format. The search interface requires navigating HTML forms, clicking through individual corporation pages, and manually copying data. This actor eliminates all of that friction. Provide a search query, click Start (or call the API), and receive clean, structured JSON with every field normalized and ready for analysis. No HTML parsing, no manual data entry, no infrastructure to maintain.

Running on Apify's cloud platform gives you scheduled runs for continuous corporate monitoring, built-in dataset storage with export to JSON, CSV, and Excel, and one-click integrations with Google Sheets, Slack, Zapier, Make, and hundreds of other services. For compliance teams, this means automated daily or weekly verification of corporation status. For research workflows, it means bulk corporation discovery by name that would take hours through the government website completed in seconds.

The actor uses a two-phase approach for maximum data richness: it first searches the Corporations Canada HTML form to discover matching corporations, then fetches full details for each match through the official ISED JSON API. This delivers far more data than the search results page alone -- including annual return history, activity timelines, director limits, and historical name changes. No API keys or paid subscriptions are required. The actor queries the freely accessible Corporations Canada government database directly.

***

### Capabilities

- **Verification verdict, not raw rows** -- Every result carries a normalised `verificationStatus` (verified-active / inactive-amalgamated / inactive-discontinued / dissolved / unknown) and an `isActive` boolean your workflow can route on directly
- **Deterministic compliance risk score** -- A 0-100 `riskScore` and `riskLevel` band (low / medium / high / critical) computed from registry signals, with the exact `complianceSignals` that produced it attached for audit. No LLM, no black box -- the same corporation always scores the same
- **Recommended action for KYC and onboarding** -- A `recommendedAction` of proceed / verify-further / enhanced-due-diligence / do-not-proceed, plus a plain-English `summary` and `whyThisMatters` your reviewers can read in seconds
- **Search by name, number, or business number** -- Enter a company name like "Shopify", a corporation number like "8048894", or a 9-digit CRA business number to find matching corporations instantly
- **Smart query detection** -- Automatically determines whether your query is a numeric lookup (1-9 digits) or a name search based on the input format, routing to the optimal search strategy
- **Corporate monitoring across runs** -- Set a `watchlistName` and the actor remembers each corporation between scheduled runs, emitting `temporalSignals` (NEW / STATUS-CHANGED / RISK-INCREASED / RISK-DECREASED) so you catch a dissolution or lapsed filing the day it happens
- **Output profiles for every consumer** -- Pick `minimal` (decision + identity for Zapier/Make rules), `standard` (decision layer + full registry detail), `full`, or `llm` (agent-optimised) so each downstream tool gets exactly the payload it needs
- **Cohort summary record** -- Multi-result runs emit a summary row with counts by verification status, risk level, and recommended action, so a bulk screen tells you the shape of the list at a glance
- **Filter by status, legislation, and province** -- Narrow to Active corporations only, search specific federal statutes, or restrict to any of Canada's 13 provinces and territories
- **Full registry detail underneath** -- Corporation number, business number, name, status, incorporation date, corporation type, registered office address, director limits, annual returns, activity timeline, and complete historical name list
- **Direct government source** -- All data comes straight from the ISED Corporations Canada database, ensuring accuracy and currency
- **Batch processing with rate limiting** -- Fetches up to 100 corporations per run in batches of 5 with built-in delays to respect government server resources

***

### How to use Canada Federal Corporation Search

#### Using Apify Console

1. Navigate to the [Canada Federal Corporation Search](https://apify.com/ryanclinton/canada-corporation-search) actor page on the Apify Store and click **Try for free**.
2. On the Input tab, enter your search query -- a corporation name (e.g., `Shopify`), corporation number (e.g., `8048894`), or 9-digit business number.
3. Optionally select filters for **Corporation Status**, **Governing Legislation**, or **Province of Registered Office**.
4. Set **Maximum Results** to control how many records to return (default is 25, maximum is 100).
5. Click **Start** to run the actor.
6. Once the run finishes, open the **Dataset** tab to view, filter, and export results as JSON, CSV, or Excel.

#### Using the API

Call the actor programmatically using the Apify REST API, official client libraries, or cURL:

**cURL:**

```bash
curl "https://api.apify.com/v2/acts/qRm91UGwsbhpvnEyu/runs" \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
    "query": "Shopify",
    "status": "1",
    "maxResults": 10
  }'
```

***

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `query` | String | Yes | -- | Corporation name, corporation number (1-9 digits), or 9-digit CRA business number to search for. |
| `status` | Select | No | Any | Filter by corporation status. Options: Any, Active (`1`), Inactive - Amalgamated (`9`), Inactive - Discontinued (`10`), Dissolved (`11`). |
| `governingLegislation` | Select | No | Any | Filter by governing legislation. Options include: Canada Business Corporations Act (`6`), Canada Not-for-profit Corporations Act (`14`), Canada Corporations Act Part II (`3`), Special Act of Parliament (`9`), Boards of Trade Act Part I (`7`) and Part II (`8`), Canada Cooperatives Act (`12`), Pension Fund Societies Act (`5`), Other (`13`). |
| `province` | Select | No | Any | Filter by province of registered office. All 13 Canadian provinces and territories are supported: AB, BC, MB, NB, NF, NT, NS, NU, ON, PE, QC, SK, YT. |
| `maxResults` | Integer | No | `25` | Maximum number of results to return (1--100). Only applies to name searches. Direct number lookups always return a single result. |
| `jobToBeDone` | Select | No | `general` | Reframes the verdict for your workflow into a `jobScreening` decision (APPROVE / REVIEW / REJECT + review level). Options: `general`, `vendor-onboarding`, `customer-kyc`, `supplier-review`, `sales-lead-validation`, `investment-screening`, `acquisition-target`, `nonprofit-review`. Investment/acquisition jobs are strict; sales-lead-validation mainly checks the company is real and active. |
| `analysisProfile` | Select | No | `standard` | Job-named output shape. `verification` = KYC decision fields (verdict, risk, health, filing, match confidence, fingerprint); `monitoring` = change events + anomalies + timeline for scheduled runs; `investigation` = corporate graph + identity chain + full event timeline; `compliance` / `full` = everything; `minimal` = decision + identity (for Zapier/Make rules); `standard` (default) = decision layer + full registry detail; `llm` = decision blocks + plain-English summary for AI agents. |
| `outputProfile` | Select | No | -- | Legacy alias for `analysisProfile` (verbosity values only: `minimal` / `standard` / `full` / `llm`). Still accepted; new integrations should use `analysisProfile`. If both are set, `analysisProfile` wins. |
| `watchlistName` | String | No | -- | Set a name to enable cross-run corporate monitoring. The actor remembers each corporation between runs and emits `temporalSignals`. Leave blank for a one-off lookup. The first run on a new watchlist marks every record as NEW. |

#### Example input

```json
{
    "query": "Shopify",
    "status": "1",
    "province": "",
    "governingLegislation": "",
    "maxResults": 25
}
```

#### Query detection rules

The actor uses the following logic to determine the search strategy:

- **1-9 digits** (e.g., `8048894` or `818338881`) -- treated as a numeric lookup. Tries direct JSON API first, falls back to HTML form search for partial matches.
- **Anything else** (e.g., `Shopify`, `Air Canada`) -- treated as a corporation name search via the Corporations Canada HTML form.

***

### Output

![Sample output — corporation name, verification status, risk level, recommended action, lifecycle stage, registry health score](https://apifyforge.com/readme-assets/ryanclinton-canada-corporation-search/output-table.png)

Each corporation record leads with the decision layer, then the full registry detail. Here is a `standard`-profile example:

```json
{
    "schemaVersion": "2.5.0",
    "recordType": "corporation",
    "verificationStatus": "verified-active",
    "isActive": true,
    "riskScore": 0,
    "riskLevel": "low",
    "registryHealthScore": 96,
    "identityStabilityScore": 82,
    "entityMatchConfidence": 100,
    "lifecycleStage": "legacy",
    "investigationPriority": "NONE",
    "driftScore": 5,
    "entityProfile": {
        "label": "Stable Legacy Corporation",
        "category": "stable",
        "ageBand": "20+ years",
        "filingBehaviour": "consistent",
        "identityStability": "moderate",
        "statusHealth": "excellent"
    },
    "jobScreening": {
        "job": "vendor-onboarding",
        "decision": "APPROVE",
        "reviewLevel": "NONE",
        "rationale": "Job \"vendor-onboarding\": approve (none review) — status verified-active, risk low, investigation none."
    },
    "nextAction": { "owner": "procurement", "priority": "none", "action": "approve-vendor" },
    "anomalySignals": [],
    "filingHealth": {
        "status": "current",
        "lastReturnYear": 2024,
        "expectedReturnYear": 2025,
        "daysSinceExpectedFiling": 0
    },
    "timelineInsights": {
        "yearsActive": 21,
        "annualReturnCount": 19,
        "longestFilingGapYears": 1,
        "lastActivityAgeDays": 85
    },
    "recommendedAction": "proceed",
    "complianceSignals": [
        { "code": "active-good-standing", "detail": "Active with a current annual return filing." },
        { "code": "long-established", "detail": "Established for 21 years." }
    ],
    "confidence": {
        "score": 1,
        "level": "high",
        "components": [
            { "name": "corporationNumber", "populated": true },
            { "name": "annualReturns", "populated": true }
        ]
    },
    "corporationAgeYears": 21,
    "yearsSinceLastFiling": 0,
    "mostRecentFilingYear": "2024",
    "nameChangeCount": 1,
    "summary": "SHOPIFY INC. (verified-active, incorporated 21 years ago) is in good standing — safe to proceed. Risk level: low.",
    "whyThisMatters": "Confirming active good standing is the baseline KYC check before contracts, credit, or onboarding.",
    "dataGaps": [
        { "field": "directors", "reason": "The ISED registry does not expose individual director names.", "suggestedFix": "ryanclinton/company-deep-research" }
    ],
    "actorGraph": {
        "previous": null,
        "current": "ryanclinton/canada-corporation-search",
        "next": ["ryanclinton/gleif-lei-lookup", "ryanclinton/company-deep-research"]
    },
    "corporationNumber": "8048894",
    "businessNumber": "818338881",
    "corporationName": "SHOPIFY INC.",
    "status": "Active",
    "governingLegislation": "Canada Business Corporations Act",
    "incorporationDate": "2004-09-28",
    "corporationType": "Distributing corporation with 50 or more shareholders",
    "registeredOfficeAddress": "126 York Street, Suite 200, Ottawa, Ontario K1N 5T5, Canada",
    "registeredOfficeCity": "Ottawa",
    "registeredOfficeProvince": "Ontario",
    "registeredOfficePostalCode": "K1N 5T5",
    "registeredOfficeCountry": "Canada",
    "directorLimits": {
        "minimum": 3,
        "maximum": 15
    },
    "annualReturns": [
        {
            "annualMeetingDate": "2024-05-29",
            "yearOfFiling": "2024",
            "typeOfCorporation": "Distributing corporation with 50 or more shareholders"
        }
    ],
    "activities": [
        {
            "activity": "Incorporation",
            "date": "2004-09-28"
        },
        {
            "activity": "Annual return",
            "date": "2024-07-15"
        }
    ],
    "corporationNames": [
        {
            "name": "SHOPIFY INC.",
            "nameType": "Primary",
            "current": true,
            "effectiveDate": "2011-11-15"
        },
        {
            "name": "JADED PIXEL TECHNOLOGIES INC.",
            "nameType": "Primary",
            "current": false,
            "effectiveDate": "2004-09-28",
            "expiryDate": "2011-11-15"
        }
    ],
    "canadaUrl": "https://ised-isde.canada.ca/cc/lgcy/fdrlCrpDtls.html?lang=eng&corpId=8048894"
}
```

#### Output fields

**Decision layer** (on every `corporation` record):

| Field | Type | Description |
|-------|------|-------------|
| `verificationStatus` | String | Normalised status: `verified-active`, `inactive-amalgamated`, `inactive-discontinued`, `dissolved`, `unknown`. The routing primitive |
| `isActive` | Boolean | True when the corporation is in active good standing |
| `riskScore` | Number | Deterministic 0-100 due-diligence caution score |
| `riskLevel` | String | Risk band: `low`, `medium`, `high`, `critical` |
| `registryHealthScore` | Number | 0-100 positive-framing health score (active status + filing currency + longevity + identity stability). Answers "how healthy?" where `riskScore` answers "how dangerous?" |
| `identityStabilityScore` | Number | 0-100, higher = more stable. Penalises frequent and recent name changes |
| `entityMatchConfidence` | Number or null | 0-100 confidence that the result matches your query (100 on exact number lookups). Critical when screening ambiguous names like "Shopify" vs "Shopify Technologies" |
| `lifecycleStage` | String | `startup`, `growth`, `established`, `legacy`, `dormant-risk`, `inactive`, `unknown` — from age, filing history, and status |
| `entityProfile` | Object | Merged profile: `{ label (e.g. "Stable Legacy Corporation" / "High-Churn Entity" / "Dormant Shell Risk"), category (stable/growth/churn/dormant/filing-risk/inactive/standard), ageBand, filingBehaviour, identityStability, statusHealth }` |
| `nextAction` | Object | Routed workflow task: `{ owner (compliance/procurement/legal/sales/none), priority, action (e.g. approve-vendor / review-filing-gap / reject-and-escalate) }` |
| `reviewReason` | String | Short human reason for the review queue (e.g. "Annual return overdue.") |
| `corporateMemory` | Object | Watchlist mode only. Cross-run history: `{ firstSeen, runsSeen, historicalStatuses[], historicalNames[], historicalRiskScores[], entityTrend { direction (deteriorating/improving/stable/new), durationDays } }` |
| `anomalySignals` | Array | Deterministic red-flag codes: `recent-name-change`, `unusually-frequent-renaming`, `filing-gap-detected`, `long-dormant`, `reactivated-after-long-inactivity`, `overdue-filings`, `dissolved-with-recent-activity`, `newly-incorporated`. Empty array when none |
| `driftScore` | Number | 0-100 corporate-drift score (identity churn + filing irregularity + reactivation) |
| `investigationPriority` | String | Legal/investigator triage: `CRITICAL`, `HIGH`, `MEDIUM`, `LOW`, `NONE`. Distinct from transaction risk |
| `decisionFactors` | Array | Explainability — weighted signals behind the verdict: `[{ signal, weight, direction }]` |
| `evidence` | Array | Receipts — every signal traced to the registry field + value: `[{ signal, sourceField, sourceValue, explanation }]`. Makes every verdict auditable |
| `futureRiskSignals` | Array | Deterministic upcoming-obligation flags (`annual-return-due-within-90-days`, `annual-return-overdue`, `administrative-dissolution-risk`) |
| `predictedRiskDirection` | String | `increase`, `stable`, `decrease`, `unknown` — directional from filing obligations, not a probabilistic forecast |
| `jobScreening` | Object | Job-framed verdict: `{ job, decision (APPROVE/REVIEW/REJECT), reviewLevel (NONE/STANDARD/ENHANCED), rationale }` |
| `filingHealth` | Object | `{ status (current / due-soon / overdue / no-filings / not-applicable), lastReturnYear, expectedReturnYear, daysSinceExpectedFiling }` — is the corporation keeping up with its annual-return obligations? |
| `timelineInsights` | Object | `{ yearsActive, annualReturnCount, longestFilingGapYears, lastActivityAgeDays }` — BI-ready activity summary |
| `intelligenceTimeline` | Array | Activity + name history as intelligence events — each with `type`, `category`, `severity`, `impact`, and a plain-English `explanation`, sorted by date |
| `corporateGraph` | Object | Identity chain: `{ currentName, previousNames[], corporationNumber, businessNumber, timeline[] }` — what this entity used to be |
| `recommendedAction` | String | KYC verdict: `proceed`, `verify-further`, `enhanced-due-diligence`, `do-not-proceed` |
| `complianceSignals` | Array | Stable signal codes with detail (e.g. `dissolved`, `filing-overdue`, `recently-incorporated`, `multiple-name-changes`) that drove the score |
| `confidence` | Object | Data-completeness confidence: `{ score, level, components[] }` |
| `corporationAgeYears` | Number or null | Whole years since incorporation |
| `yearsSinceLastFiling` | Number or null | Whole years since the most recent annual return |
| `nameChangeCount` | Number | Count of historical primary-name changes |
| `summary` | String | Plain-English one-line verdict |
| `whyThisMatters` | String | Plain-English rationale for the recommended action |
| `dataGaps` | Array | Fields the registry does not expose, with the sibling actor that fills them |
| `actorGraph` | Object | Suite navigation: `{ previous, current, next[] }` |
| `temporalSignals` | Object | Present only in watchlist mode: `{ changeFlag (primary), changeFlags[] (all detected: NEW-FILING / NAME-CHANGED / ADDRESS-CHANGED / LEGISLATION-CHANGED / DISSOLVED / AMALGAMATED / STATUS-CHANGED / RISK-INCREASED / RISK-DECREASED / UNCHANGED), changeSummary (plain-English), previousStatus, statusChanged, riskDelta, firstSeenAt, lastSeenAt, runsSeen }` |

**Registry detail:**

| Field | Type | Description |
|-------|------|-------------|
| `corporationNumber` | String | The unique Corporations Canada corporation number |
| `businessNumber` | String | The 9-digit Canada Revenue Agency (CRA) business number |
| `corporationName` | String | Current primary name of the corporation |
| `status` | String | Registration status -- typically `Active`, `Amalgamated`, `Discontinued`, or `Dissolved` |
| `governingLegislation` | String | The federal act under which the corporation is governed (e.g., "Canada Business Corporations Act") |
| `incorporationDate` | String | Date the corporation was incorporated (YYYY-MM-DD) |
| `corporationType` | String | Classification from the most recent annual return (e.g., "Distributing corporation with 50 or more shareholders") |
| `registeredOfficeAddress` | String | Full formatted registered office address including street, city, province, postal code, and country |
| `registeredOfficeCity` | String | City of the registered office |
| `registeredOfficeProvince` | String | Full province or territory name of the registered office (e.g., "Ontario", "British Columbia") |
| `registeredOfficePostalCode` | String | Canadian postal code of the registered office |
| `registeredOfficeCountry` | String | Country of the registered office (typically "Canada" or "United States") |
| `directorLimits` | Object or null | Minimum and maximum number of directors allowed, or null if not specified |
| `annualReturns` | Array | Filing history with annual meeting dates, filing years, and corporation type classifications |
| `activities` | Array | Timeline of corporate events -- incorporation, annual returns, amendments, name changes, and other milestones |
| `corporationNames` | Array | All current and historical corporation names with name type, effective dates, and expiry dates |
| `canadaUrl` | String | Direct URL to the corporation's detail page on the Corporations Canada website |

***

### Use cases

- **Business verification** -- Confirm that a Canadian federal corporation is in active standing before entering into a business relationship, signing a contract, or extending credit
- **Due diligence** -- Research potential partners, suppliers, or acquisition targets by retrieving their full registration details, incorporation date, and governing legislation
- **Compliance screening** -- Automate corporation status verification as part of KYC (Know Your Customer) and vendor onboarding workflows across Canadian jurisdictions
- **Lead generation** -- Search by industry-related keywords to discover federally incorporated businesses for sales prospecting and outreach campaigns
- **Corporate monitoring** -- Schedule daily or weekly runs to track status changes, new annual return filings, or corporate activity events for a portfolio of companies
- **Competitive intelligence** -- Research competitors' corporate structure, incorporation history, registered office locations, and director configurations
- **Legal research** -- Look up corporations by number for litigation support, corporate governance analysis, or regulatory compliance investigations
- **Name change tracking** -- Use the corporationNames array to trace a company's full naming history, useful for brand research and historical corporate analysis
- **Cross-border research** -- Combine with UK Companies House, Australia ABN Lookup, or NZ Companies Search for multi-jurisdiction corporate due diligence
- **Nonprofit research** -- Filter by the Canada Not-for-profit Corporations Act to find and analyze federally registered Canadian nonprofits

***

### API & Integration

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run_input = {
    "query": "Shopify",
    "status": "1",
    "maxResults": 10,
}

run = client.actor("qRm91UGwsbhpvnEyu").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['corporationName']} -- #{item['corporationNumber']} -- {item['status']} -- {item['incorporationDate']}")
```

#### JavaScript

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

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("qRm91UGwsbhpvnEyu").call({
    query: "Shopify",
    status: "1",
    maxResults: 10,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
    console.log(`${item.corporationName} -- #${item.corporationNumber} -- ${item.status} -- ${item.incorporationDate}`);
}
```

#### cURL

```bash
## Start a run
curl "https://api.apify.com/v2/acts/qRm91UGwsbhpvnEyu/runs" \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{"query": "Shopify", "status": "1", "maxResults": 10}'

## Fetch dataset results (use defaultDatasetId from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
```

#### Integrations

Connect Canada Federal Corporation Search to your existing tools and workflows:

- **Google Sheets** -- Automatically export corporation data to a spreadsheet for team review, compliance tracking, and record-keeping
- **Slack / Email** -- Get notified when monitored corporations change status using Apify webhooks
- **Zapier / Make** -- Route corporation data to CRMs, compliance systems, databases, or hundreds of other third-party apps
- **REST API** -- Fetch results programmatically from any language or platform using the Apify dataset API
- **Scheduled runs** -- Set up Apify schedules to run daily, weekly, or monthly corporation verification checks automatically
- **Webhooks** -- Trigger downstream actions (notifications, database writes, compliance alerts) whenever a run completes

***

### Use in Dify

Drop this actor into [Dify](https://docs.apify.com/platform/integrations/dify) workflows via the Apify plugin's Run Actor node. Each corporation returns verified, scored, and recommended as structured JSON -- `verified-active` / `dissolved` / `inactive-discontinued` plus the `riskLevel` and `recommendedAction` your downstream node branches on. A raw registry scraper pointed at Corporations Canada returns the HTML of a government search form; this returns a due-diligence decision.

- **Actor ID:** `ryanclinton/canada-corporation-search`
- **Sample input** (verify a counterparty before onboarding):

```json
{
    "query": "Shopify",
    "status": "1",
    "jobToBeDone": "vendor-onboarding",
    "analysisProfile": "verification"
}
```

A Dify **if/else** node routes on the stable enums without parsing any prose. The cleanest single branch is `jobScreening.decision`:

- `jobScreening.decision == "REJECT"` → block onboarding, escalate to compliance
- `jobScreening.decision == "REVIEW"` → branch to a manual-review task (`jobScreening.reviewLevel` tells you standard vs enhanced)
- `jobScreening.decision == "APPROVE"` → continue the automated flow

Or branch on the universal `recommendedAction` (`do-not-proceed` / `enhanced-due-diligence` / `verify-further` / `proceed`), `verificationStatus` (`dissolved` / `inactive-amalgamated` / `verified-active`), `riskLevel` (`critical` / `high` / `medium` / `low`), or `investigationPriority` for a legal-review queue. For scheduled monitoring flows, set a `watchlistName` and branch on `temporalSignals.changeFlag` (`STATUS-CHANGED` / `RISK-INCREASED`) to fire an alert only when a corporation's standing actually moves. The `complianceSignals[]` codes (`filing-overdue`, `multiple-name-changes`, etc.) are stable strings usable verbatim in a notification body -- no LLM rewriting needed. Use `outputProfile: "llm"` to hand an agent only the decision blocks plus the plain-English `summary`.

***

### How it works

![Intelligence stack — from a company name or number through verification, scoring, anomalies, decision, memory and portfolio triage to a decision output](https://apifyforge.com/readme-assets/ryanclinton-canada-corporation-search/intelligence-layers.png)

The actor follows a two-phase pipeline to retrieve corporation data from the Corporations Canada registry:

1. **Query analysis** -- Parses the input query and determines the search strategy. Numeric queries (1-9 digits) are routed to direct lookup; all other queries are treated as name searches.
2. **Direct number lookup** -- For numeric queries, attempts a direct JSON API call to `corporations/{id}.json` for instant results. If the direct lookup fails (partial number or business number format), falls back to the HTML form search.
3. **Name search via HTML form** -- For name queries, constructs a POST request to the Corporations Canada search form with the query, status, governing legislation, and province filters. Parses the HTML response using regex to extract corporation IDs and basic metadata.
4. **Batch detail fetching** -- For each matched corporation ID, fetches full details from the ISED JSON API endpoint. Processes in batches of 5 with 500ms delays between batches to respect server resources.
5. **Data transformation** -- Raw API responses (which arrive as `[data, null]` arrays) are normalized into a clean 17-field output schema. Province codes are mapped to full names, country codes to full names, and the current primary corporation name is identified from the names array.
6. **Dataset push** -- Results are pushed to the Apify dataset for export and integration. Logging tracks search progress, batch processing, and final result counts.

```
Input Query
     |
     v
[Detect Query Type] ---> Numeric (1-9 digits)? or Name?
     |                          |
     |                    [Direct JSON API Lookup]
     |                          |
     |                    Success? ---> Transform + Push
     |                          |
     |                    Fail? ---> Fall back to HTML Form
     |                          |
     v                          v
[POST HTML Search Form] ---> Parse corporation IDs from HTML
     |
     v
[Batch Fetch Details] ---> 5 concurrent requests, 500ms delay
     |
     v
[Transform to 17-field Schema] ---> Normalize names, addresses, dates
     |
     v
[Push to Apify Dataset] ---> JSON, CSV, Excel export
```

***

### Performance & cost

| Scenario | Results | Approx. duration | Memory | Estimated cost |
|----------|---------|-------------------|--------|----------------|
| Direct number lookup | 1 | 2--5 seconds | 256 MB | < $0.001 |
| Name search (10 results) | 10 | 5--10 seconds | 256 MB | ~$0.001 |
| Name search (25 results) | 25 | 10--20 seconds | 256 MB | ~$0.002 |
| Name search (50 results) | 50 | 15--30 seconds | 256 MB | ~$0.003 |
| Name search (100 results) | 100 | 30--60 seconds | 256 MB | ~$0.005 |

- The actor makes lightweight HTTP requests only -- no browser rendering or heavy crawling.
- No API keys or paid subscriptions are required. The Corporations Canada database is freely accessible.
- Apify's free tier includes $5/month of platform credits, which covers thousands of typical runs.
- Cost scales primarily with the number of detail API calls (one per matched corporation).
- Scheduled runs for daily monitoring of a corporation portfolio are extremely economical.

***

### Limitations

- **Federal corporations only** -- This actor searches the Corporations Canada federal registry. Corporations registered only at the provincial level (e.g., Ontario Business Registry, Registraire des entreprises du Quebec) are not included.
- **Maximum 100 results per run** -- Name searches are capped at 100 results per execution. For broader coverage, run multiple searches with different query terms, province filters, or status filters.
- **No director names** -- The ISED JSON API returns director minimum/maximum limits but does not expose individual director or officer names.
- **No financial data** -- The registry contains registration and filing data only. Revenue, assets, employee counts, and other financial metrics are not available.
- **HTML parsing dependency** -- The search results page is parsed using regex patterns. If ISED changes the HTML structure of the search results page, the name search may need updating. Direct number lookups use the stable JSON API and are unaffected.
- **Rate limiting** -- The actor respects government server resources by processing in batches of 5 with 500ms delays. Large searches of 100 results may take up to 60 seconds to complete.
- **No address history** -- Only the current registered office address is returned. Historical address changes are not available through the API.

***

### Responsible use

- **Respect government resources** -- The actor includes built-in rate limiting (batches of 5, 500ms delays) to avoid overloading the Corporations Canada servers. Do not modify these settings to bypass rate limits.
- **Public data only** -- All data returned by this actor is publicly available on the Corporations Canada website. No private, confidential, or restricted information is accessed.
- **Comply with applicable laws** -- Ensure your use of corporate registry data complies with Canadian privacy legislation (PIPEDA) and any applicable provincial privacy laws, particularly when combining corporate data with personal information.
- **No scraping circumvention** -- This actor accesses the publicly available Corporations Canada search form and JSON API in the same manner as any web browser would. It does not bypass access controls, CAPTCHAs, or authentication.
- **Attribute the source** -- When publishing or redistributing data obtained through this actor, attribute the source as Corporations Canada / Innovation, Science and Economic Development Canada (ISED).

***

### FAQ

**What corporations are included in this database?**
This actor searches the Corporations Canada federal registry, which contains all corporations incorporated under federal legislation -- primarily the Canada Business Corporations Act (CBCA) and the Canada Not-for-profit Corporations Act (CNCA). Provincial corporations registered only at the provincial level are not included.

**Can I search by business number?**
Yes. Enter a 9-digit CRA business number as your query, and the actor will detect it as a numeric query and look it up directly via the JSON API.

**Can I search by corporation number?**
Yes. Enter a corporation number (typically 6-8 digits) and the actor will attempt a direct JSON API lookup. If the direct lookup fails, it falls back to the HTML form search.

**How current is the data?**
All data comes directly from the live Corporations Canada database maintained by ISED. It reflects the most recent filings and updates submitted to the federal registry at the time of the API call.

**What does the status field mean?**

- **Active** -- The corporation is in good standing and currently registered.
- **Inactive - Amalgamated** -- The corporation has merged with another corporation under an amalgamation.
- **Inactive - Discontinued** -- The corporation has been voluntarily discontinued by its directors or shareholders.
- **Dissolved** -- The corporation has been dissolved, either voluntarily or by the Director for non-compliance (such as failure to file annual returns).

**What is the difference between corporation number and business number?**
The corporation number is assigned by Corporations Canada when a federal corporation is created. The business number (BN) is a 9-digit number assigned by the Canada Revenue Agency (CRA) for tax purposes. Both can be used to look up a corporation.

**Do I need an API key?**
No. The Corporations Canada database is freely accessible. No API keys, registration, or paid subscriptions are required to use this actor.

**Can I use this actor on a schedule?**
Yes. Use Apify's built-in scheduler to run the actor daily, weekly, or at any custom interval. This is useful for monitoring status changes, new filings, or corporate events for specific corporations over time.

**Is there a rate limit?**
The actor self-limits by processing corporation detail requests in batches of 5 with 500ms delays between batches. The maximum of 100 results per run is sufficient for most use cases and keeps request volume within responsible limits.

**Can I find provincial corporations?**
No. This actor only searches the federal Corporations Canada registry. For provincial corporations, you would need to search the relevant provincial registry (e.g., Ontario Business Registry, BC Corporate Registry). The OpenCorporates Search actor may help for cross-jurisdictional searches.

**What is the governing legislation field?**
This indicates which federal act a corporation is registered under. The most common is the Canada Business Corporations Act (CBCA) for for-profit companies. Nonprofits are typically under the Canada Not-for-profit Corporations Act (CNCA). Other options include the Canada Cooperatives Act, Boards of Trade Act, and Special Acts of Parliament.

**What information is in the annual returns array?**
Each annual return entry contains the annual meeting date, filing year, and the corporation type classification at the time of filing. Gaps in filing years may indicate compliance issues or a dissolved corporation.

***

### Related actors

| Actor | Description | Link |
|-------|-------------|------|
| UK Companies House | Search the UK Companies House register for company details, officers, directors, and filing history. Pairs with this actor for UK-Canadian cross-border business research. | [apify.com/ryanclinton/uk-companies-house](https://apify.com/ryanclinton/uk-companies-house) |
| OpenCorporates Search | Search the world's largest open database of company information covering 140+ jurisdictions, including Canada. Useful for cross-referencing federal registry data with international corporate records. | [apify.com/ryanclinton/opencorporates-search](https://apify.com/ryanclinton/opencorporates-search) |
| Australia ABN Lookup | Search the Australian Business Register for businesses by ABN, ACN, or name. Ideal for multi-country corporate due diligence workflows alongside Canadian federal data. | [apify.com/ryanclinton/australia-abn-lookup](https://apify.com/ryanclinton/australia-abn-lookup) |
| NZ Companies Office | Search the New Zealand Companies Office register for company details and status. Combine with this actor for Commonwealth-wide business research. | [apify.com/ryanclinton/nz-companies-search](https://apify.com/ryanclinton/nz-companies-search) |
| GLEIF LEI Lookup | Search the Global Legal Entity Identifier (LEI) database for corporate entity identifiers. Useful for cross-referencing Canadian corporations in global financial regulatory contexts. | [apify.com/ryanclinton/gleif-lei-lookup](https://apify.com/ryanclinton/gleif-lei-lookup) |

# Actor input Schema

## `query` (type: `string`):

Corporation name, corporation number, or 9-digit business number to search for

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

Filter by corporation status

## `governingLegislation` (type: `string`):

Filter by governing legislation (act)

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

Filter by province where the registered office is located

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

Maximum number of results to return (1-100)

## `jobToBeDone` (type: `string`):

Reframes the verdict for your workflow. Each job maps the universal recommended action to an APPROVE / REVIEW / REJECT decision plus a review level (none / standard / enhanced), tuned per job. 'investment-screening' and 'acquisition-target' are strict; 'sales-lead-validation' mainly cares whether the company is real and active. Leave as 'general' for the unframed verdict.

## `analysisProfile` (type: `string`):

Job-named output shape. 'verification' = the decision fields for KYC/onboarding (verdict, risk, health, filing, match confidence). 'monitoring' = change events + anomalies + timeline for scheduled watch runs. 'investigation' = the corporate graph, identity chain, and full event timeline. 'compliance' = everything. 'minimal'/'standard'/'full'/'llm' are verbosity levels. Defaults to standard when unset; full/compliance return all fields.

## `outputProfile` (type: `string`):

Legacy alias for Analysis Profile. Still accepted for back-compatibility; new integrations should use analysisProfile. If both are set, analysisProfile wins.

## `watchlistName` (type: `string`):

Optional. Set a name to enable cross-run monitoring. The actor remembers each corporation between runs and emits temporalSignals (NEW / STATUS-CHANGED / RISK-INCREASED / RISK-DECREASED). Leave blank for a one-off lookup. The first run on a new watchlist marks every record as NEW.

## Actor input object example

```json
{
  "query": "Shopify",
  "status": "",
  "governingLegislation": "",
  "province": "",
  "maxResults": 25,
  "jobToBeDone": "general",
  "watchlistName": ""
}
```

# Actor output Schema

## `results` (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 = {
    "query": "Shopify"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ryanclinton/canada-corporation-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 = { "query": "Shopify" }

# Run the Actor and wait for it to finish
run = client.actor("ryanclinton/canada-corporation-search").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 '{
  "query": "Shopify"
}' |
apify call ryanclinton/canada-corporation-search --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Canada Federal Corporation Search",
        "description": "Search the Corporations Canada federal registry for any federally incorporated business by name, corporation number, or 9-digit business number.",
        "version": "2.0",
        "x-build-id": "nggHZoqDieNevkqp0"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ryanclinton~canada-corporation-search/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ryanclinton-canada-corporation-search",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ryanclinton~canada-corporation-search/runs": {
            "post": {
                "operationId": "runs-sync-ryanclinton-canada-corporation-search",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ryanclinton~canada-corporation-search/run-sync": {
            "post": {
                "operationId": "run-sync-ryanclinton-canada-corporation-search",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "query"
                ],
                "properties": {
                    "query": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Corporation name, corporation number, or 9-digit business number to search for",
                        "default": "Shopify"
                    },
                    "status": {
                        "title": "Corporation Status",
                        "enum": [
                            "",
                            "1",
                            "9",
                            "10",
                            "11"
                        ],
                        "type": "string",
                        "description": "Filter by corporation status",
                        "default": ""
                    },
                    "governingLegislation": {
                        "title": "Governing Legislation",
                        "enum": [
                            "",
                            "6",
                            "14",
                            "3",
                            "9",
                            "7",
                            "8",
                            "12",
                            "5",
                            "13"
                        ],
                        "type": "string",
                        "description": "Filter by governing legislation (act)",
                        "default": ""
                    },
                    "province": {
                        "title": "Province of Registered Office",
                        "enum": [
                            "",
                            "124-AB",
                            "124-BC",
                            "124-MB",
                            "124-NB",
                            "124-NF",
                            "124-NT",
                            "124-NS",
                            "124-NU",
                            "124-ON",
                            "124-PE",
                            "124-QC",
                            "124-SK",
                            "124-YT"
                        ],
                        "type": "string",
                        "description": "Filter by province where the registered office is located",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "Maximum Results",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of results to return (1-100)",
                        "default": 25
                    },
                    "jobToBeDone": {
                        "title": "Job To Be Done",
                        "enum": [
                            "general",
                            "vendor-onboarding",
                            "customer-kyc",
                            "supplier-review",
                            "sales-lead-validation",
                            "investment-screening",
                            "acquisition-target",
                            "nonprofit-review"
                        ],
                        "type": "string",
                        "description": "Reframes the verdict for your workflow. Each job maps the universal recommended action to an APPROVE / REVIEW / REJECT decision plus a review level (none / standard / enhanced), tuned per job. 'investment-screening' and 'acquisition-target' are strict; 'sales-lead-validation' mainly cares whether the company is real and active. Leave as 'general' for the unframed verdict.",
                        "default": "general"
                    },
                    "analysisProfile": {
                        "title": "Analysis Profile",
                        "enum": [
                            "verification",
                            "monitoring",
                            "investigation",
                            "compliance",
                            "minimal",
                            "standard",
                            "full",
                            "llm"
                        ],
                        "type": "string",
                        "description": "Job-named output shape. 'verification' = the decision fields for KYC/onboarding (verdict, risk, health, filing, match confidence). 'monitoring' = change events + anomalies + timeline for scheduled watch runs. 'investigation' = the corporate graph, identity chain, and full event timeline. 'compliance' = everything. 'minimal'/'standard'/'full'/'llm' are verbosity levels. Defaults to standard when unset; full/compliance return all fields."
                    },
                    "outputProfile": {
                        "title": "Output Profile (legacy alias for Analysis Profile)",
                        "enum": [
                            "minimal",
                            "standard",
                            "full",
                            "llm"
                        ],
                        "type": "string",
                        "description": "Legacy alias for Analysis Profile. Still accepted for back-compatibility; new integrations should use analysisProfile. If both are set, analysisProfile wins."
                    },
                    "watchlistName": {
                        "title": "Watchlist Name (corporate monitoring)",
                        "type": "string",
                        "description": "Optional. Set a name to enable cross-run monitoring. The actor remembers each corporation between runs and emits temporalSignals (NEW / STATUS-CHANGED / RISK-INCREASED / RISK-DECREASED). Leave blank for a one-off lookup. The first run on a new watchlist marks every record as NEW.",
                        "default": ""
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
