# Canada LMIA Employers List (Positive LMIA) (`bigdws77/canada-lmia-employers`) Actor

Find Canadian employers approved to hire temporary foreign workers, from the official Positive LMIA Employers List (ESDC open data). Filter by province, city, NOC occupation, program stream or employer; get per-employer totals or only new employers this quarter.

- **URL**: https://apify.com/bigdws77/canada-lmia-employers.md
- **Developed by:** [Pulse Data](https://apify.com/bigdws77) (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 results

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 LMIA Employers List (Positive LMIA) — Tracker & Export

See which Canadian employers were approved to hire temporary foreign workers, straight from the Government of Canada's official **Positive LMIA Employers List** — cleaned up, filterable, and ready to export.

Built on the official open dataset published quarterly by Employment and Social Development Canada (ESDC) on open.canada.ca under the Open Government Licence – Canada. No scraping, no logins.

### What you can do

- **Filter** by province/territory, program stream (High Wage, Low Wage, Primary Agriculture, Global Talent Stream…), NOC 2021 occupation code or keyword, and employer name.
- **Aggregate by employer** across several quarters — total approved positions, occupations and streams per employer.
- **Spot new employers** — list only employers that appear in the latest quarter(s) but not in the previous four.
- Always uses the latest quarter ESDC has published.

### Output

| Field | Example |
|---|---|
| `quarter` | `2026Q1` |
| `province` / `provinceCode` | `Ontario` / `ON` |
| `programStream` | `High Wage` |
| `employer` | business name as published by ESDC |
| `city` / `postalFSA` | `Toronto` / `M5V` |
| `nocCode` / `occupation` | `21231` / `Software engineers and designers` |
| `incorporationStatus` | `Corporation` |
| `approvedLmias` / `approvedPositions` | `2` / `3` |
| `source` | licence attribution |

Export as JSON, CSV or Excel, or pull it via the Apify API and schedule it to run each quarter.

### Typical uses

- Labour-market and industry research: which sectors and regions rely on the TFW program, and how that changes quarter to quarter.
- HR, workforce-planning and consulting teams benchmarking hiring demand by occupation and province.
- Journalists and policy analysts tracking the program over time.

### Related

Want to see where these occupations are also being advertised? [Canada Job Bank Jobs vs LMIA Demand by Occupation](https://apify.com/bigdws77/canada-jobs-lmia-demand) puts Job Bank vacancies and posted wages next to LMIA approvals, by NOC occupation, province and city.

### FAQ

**What is the Positive LMIA Employers List?** A list ESDC publishes every quarter of employers that received a positive Labour Market Impact Assessment, meaning they were approved to hire temporary foreign workers for specific positions. It shows the province, program stream, employer, location, occupation and number of approved positions.

**How often is it updated?** ESDC publishes a new quarter a few months after the quarter ends. The Actor always finds and uses the latest quarter, so you don't need to change anything when a new one appears.

**How much does a run cost?** US$1 per 1,000 results. For example, every Ontario and British Columbia row for one quarter (about 4,100 rows) costs about US$4. Filters and "per-employer totals" mode return fewer rows and cost less.

**Can I see only employers that are new this quarter?** Yes. Choose the "new employers" output: it lists employers in the latest quarter(s) that did not appear in the previous four quarters.

**Can I filter by occupation?** Yes, by NOC code or prefix (e.g. `63200` for cooks, `2` for all natural and applied sciences occupations) or by keywords in the occupation name. Recent ESDC files use five-digit NOC 2021 codes.

**Does it include contact details?** No. There are no names of individuals, emails, phone numbers or street addresses: location is limited to city, province and the first three characters of the postal code.

**Is this immigration advice or a job list?** No. It is official statistics made easy to use. A positive LMIA is not a job posting and doesn't mean anyone was hired.

### Important notes

- **A positive LMIA is not a job posting or a hire.** It means ESDC confirmed an employer may hire a temporary foreign worker for the position(s). It says nothing about whether a worker was hired.
- **Personal information is excluded.** ESDC removes personal names (for example, employers of caregivers) before publishing. This Actor further limits location to city, province and the first three characters of the postal code — no full postal codes or street addresses.
- Employer names are entered manually by ESDC and may contain typos or inconsistent spellings; employer grouping is best-effort.
- **Not for unsolicited marketing.** Don't use this data to send unsolicited commercial messages; Canada's Anti-Spam Legislation (CASL) and privacy laws still apply to what you do with it.
- This Actor provides information only, not legal or immigration advice, and is not affiliated with or endorsed by the Government of Canada.

### Corrections and removal requests

If you believe a record should be corrected or removed, open an issue on this Actor's **Issues** tab. Requests are monitored and handled promptly; the underlying data is ESDC's, so corrections at source should also go to ESDC.

### Source and licence

Contains information licensed under the Open Government Licence – Canada. Source: Employment and Social Development Canada, *Temporary Foreign Worker Program (TFWP): Positive Labour Market Impact Assessment (LMIA) Employers List*, open.canada.ca.

# Actor input Schema

## `outputMode` (type: `string`):

How to shape the results.

## `quarters` (type: `integer`):

How many of the most recent published quarters to include (ESDC publishes quarterly).

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

Two-letter codes, e.g. ON, BC, AB, QC. Leave empty for all of Canada.

## `programStreams` (type: `array`):

e.g. High Wage, Low Wage, Primary Agriculture, Global Talent Stream. Leave empty for all.

## `nocCodes` (type: `array`):

Occupation codes or prefixes, e.g. 21231 (software engineers) or 2 (all natural and applied sciences).

## `occupationKeywords` (type: `array`):

Match words in the occupation title, e.g. cook, welder, nurse.

## `employerKeywords` (type: `array`):

Match words in the employer's business name.

## `minPositions` (type: `integer`):

Only return rows/employers with at least this many approved positions.

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

0 = no limit.

## Actor input object example

```json
{
  "outputMode": "rows",
  "quarters": 1,
  "provinces": [
    "ON",
    "BC"
  ],
  "minPositions": 0,
  "maxItems": 0
}
```

# 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 = {
    "provinces": [
        "ON",
        "BC"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("bigdws77/canada-lmia-employers").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 = { "provinces": [
        "ON",
        "BC",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("bigdws77/canada-lmia-employers").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 '{
  "provinces": [
    "ON",
    "BC"
  ]
}' |
apify call bigdws77/canada-lmia-employers --silent --output-dataset

```

## MCP server setup

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

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/G8Xkk1Jck5MI60v1g/builds/uWAEuGc43AriBebuX/openapi.json
