# Job Bank Canada Scraper — jobbank.gc.ca Jobs & Salaries (`hipersoft/jobbank-canada-scraper`) Actor

Scrape Canada's Job Bank (jobbank.gc.ca): job title, employer, city, province, salary range, employment type, vacancies, NOC code, median wage, posting and expiry dates, full description and apply link. Filter by keyword, province and city.

- **URL**: https://apify.com/hipersoft/jobbank-canada-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.00075 / job

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Job Bank Canada Scraper: jobbank.gc.ca Jobs, Salaries & NOC Codes

**Job Bank Canada Scraper** extracts job postings from **Job Bank (jobbank.gc.ca)**, the Government of Canada's national job board. For every job you get the **title, employer, city, province, salary range, employment type, number of vacancies, NOC occupation code, regional median wage, posting and expiry dates, full description and apply link**. You can search by keyword, province and city, then export to **CSV, Excel or JSON**.

### What does Job Bank Canada Scraper do?

Job Bank lists jobs from employers across Canada, together with postings from partner job sites such as Talent.com and Jobillico. Many of these employers hire foreign workers through the LMIA program. This scraper turns the job board into a structured dataset:

- 🇨🇦 **All of Canada or one province/territory** (Ontario, BC, Alberta, Quebec…), with an optional city filter.
- 🔎 **Any keyword**: nurse, truck driver, cook, welder, software developer, early childhood educator…
- 💵 **Salary**: the text as shown plus parsed **salaryMin**, **salaryMax** and unit (hour, year…).
- 🧾 **NOC code and median wage** for the occupation and region, a unique Job Bank data point.
- 👥 **Vacancies, employment type and work location** (on site, hybrid, remote).
- 📝 **Full job description and apply link** to the original posting.

### What data can you scrape from Job Bank?

| Field | Description |
|---|---|
| Job ID and link | Job Bank posting ID and URL |
| Title and original title | Job Bank title and the employer's original title |
| Company | Employer |
| City and province | Job location |
| Salary | Salary text, min, max and unit |
| Employment type | e.g. Permanent employment, Full time |
| Work location | On site, hybrid or remote |
| Vacancies | Number of open positions |
| NOC code and occupation | National Occupational Classification |
| Median wage and region | Regional median wage for the occupation |
| Posted and expiry dates | Posting date and "advertised until" |
| Source | Job Bank or partner site, with its job number |
| Description | Full job description |
| Apply link | Link to the original posting |

### Use cases for Canadian job data

- **Immigration consultants and LMIA research**: find employers hiring in specific occupations and provinces.
- **Recruiting and staffing**: build lists of Canadian employers hiring nurses, drivers, trades and more.
- **Labour market analysis**: compare posted salaries with median wages by NOC code and region.
- **Job boards and newsletters**: feed fresh Canadian jobs into your site or community.
- **Sales prospecting**: hiring employers are growing businesses, so they make good B2B leads.
- **Academic and policy research**: track vacancies by occupation, province and time.

### How to scrape Job Bank Canada

1. Click **Try for free** to open Job Bank Canada Scraper in Apify Console.
2. Enter **job titles or keywords**, then pick a **province** and optionally a **city**.
3. Keep **Include job details** on for salary, NOC code, vacancies and description.
4. Set **Max jobs** and click **Start**.
5. Download the jobs as **CSV, Excel or JSON**.

### Input

#### Example input

```json
{
  "keywords": ["nurse", "truck driver"],
  "province": "ON",
  "cityContains": "Toronto",
  "sortBy": "date",
  "includeDetails": true,
  "maxItems": 300
}
```

| Field | Description |
|---|---|
| **Job titles or keywords** | One search per keyword. Leave empty for all jobs. |
| **Province or territory** | Limit to one province or territory. |
| **City contains** | Only jobs whose city contains this text. |
| **Sort by** | Newest first or best match. |
| **Include job details** | Adds salary range, NOC, vacancies, median wage, expiry, description and apply link. |
| **Max jobs** | Stop after this many jobs (0 = no limit). |

#### Get new Job Bank postings every day

Keep **Sort by** on "Newest first", set a small **Max jobs**, and create an Apify [schedule](https://docs.apify.com/platform/schedules). Compare runs by `jobId` to find new postings.

### Output

#### Job example

```json
{
  "jobId": "50419517",
  "title": "emergency nurse",
  "originalTitle": "Travel Emergency Registered Nurse – BC Assignment",
  "company": "HealthOPM",
  "city": "Toronto",
  "province": "ON",
  "salary": "$50.00 to $55.00 hourly",
  "salaryMin": 50,
  "salaryMax": 55,
  "salaryUnit": "HOUR",
  "employmentType": "Full time",
  "workLocation": "On site",
  "vacancies": 1,
  "nocCode": "31301",
  "occupation": "emergency nurse",
  "medianWage": "40.59 $/hour",
  "region": "Toronto Region",
  "postedDate": "2026-10-03",
  "validThrough": "2026-10-11",
  "source": "Talent.com",
  "url": "https://www.jobbank.gc.ca/jobsearch/jobposting/50419517",
  "description": "Travel + Housing: Provided …"
}
```

#### Output schema

| Field | Type | Description |
|---|---|---|
| `jobId` | string | Job Bank posting ID. |
| `url` | string (URL) | Job Bank posting. |
| `title` | string | Job title. |
| `originalTitle` | string | Employer's original title (partner postings). |
| `company` | string | Employer. |
| `city` | string | City. |
| `province` | string | Province or territory code. |
| `salary` | string | Salary as shown. |
| `salaryMin`, `salaryMax` | number | Parsed salary range. |
| `salaryUnit` | string | `HOUR`, `YEAR`, etc. |
| `employmentType` | string | Employment terms. |
| `workLocation` | string | On site, hybrid or remote. |
| `vacancies` | integer | Number of vacancies. |
| `nocCode` | string | NOC occupation code. |
| `occupation` | string | Occupation name. |
| `medianWage` | string | Regional median wage. |
| `region` | string | Economic region. |
| `postedDate` | string | Posting date (YYYY-MM-DD). |
| `validThrough` | string | Advertised until. |
| `source` | string | Job Bank or partner site. |
| `sourceJobNumber` | string | Job number on the source site. |
| `flags` | array | Labels such as `New`. |
| `description` | string | Full job description. |
| `applyUrl` | string (URL) | Link to the original posting. |
| `searchTerm` | string | Keyword that found the job. |
| `scrapedAt` | string (ISO date) | When the row was collected. |

### How much does it cost to scrape Job Bank?

Job Bank Canada Scraper uses **pay-per-job** pricing: a small fixed price per job, with automatic discounts on higher Apify plans. See the **Pricing** tab for the exact price.

### More job data

- [Indeed Scraper](https://apify.com/hipersoft/indeed-scraper): jobs from Indeed.
- [LinkedIn Jobs Scraper](https://apify.com/hipersoft/linkedin-jobs-scraper): jobs from LinkedIn.
- [Company Jobs Scraper](https://apify.com/hipersoft/company-jobs-scraper): jobs straight from company career pages.
- [Remote Jobs Aggregator](https://apify.com/hipersoft/remote-jobs-aggregator): remote jobs from many boards.

### FAQ

**How many jobs are on Job Bank?**
Usually tens of thousands of open jobs across Canada. Use keywords and the province filter to narrow it down.

**Does it include salaries?**
Yes. Most Job Bank postings show a salary, and you get both the text and parsed min/max values with the unit.

**What is the NOC code?**
The National Occupational Classification code Canada uses for occupations (e.g. `31301` for registered nurses). It's useful for immigration and labour market research.

**Can I scrape jobs in French?**
Job Bank is bilingual. Search with English or French keywords, and postings appear as published.

**How fresh is the data?**
Every run reads the live job board. Sort by newest to get the latest postings first.

**What formats can I export?**
CSV, Excel, JSON, XML, HTML and RSS, or read the results through the Apify API.

**Can I integrate Job Bank Canada Scraper with other apps?**
Job Bank Canada Scraper can be connected with almost any cloud service or web app thanks to [integrations on the Apify platform](https://apify.com/integrations). It works with [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JS/Python clients and MCP. Or use [webhooks](https://docs.apify.com/platform/integrations/webhooks) to trigger an action whenever a run finishes.

**Is it legal to scrape Job Bank?**
The scraper only collects publicly posted job offers. You are responsible for using the data in line with Job Bank's terms and Canadian privacy law.

### Related Actors

- [Indeed Scraper](https://apify.com/hipersoft/indeed-scraper)
- [StepStone Scraper](https://apify.com/hipersoft/stepstone-scraper)

### Notes

Original clean-room implementation. Returns only public data; you are responsible for compliance with Job Bank's terms. Not affiliated with the Government of Canada.

# Actor input Schema

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

What to search for, e.g. nurse, truck driver, cook, software developer. Each keyword is a separate search. Leave empty for all jobs.

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

Only jobs in this province or territory.

## `cityContains` (type: `string`):

Only jobs whose city contains this text, e.g. Toronto, Vancouver, Calgary. Combine with the province for best results.

## `sortBy` (type: `string`):

Newest postings first or best match.

## `includeDetails` (type: `boolean`):

Open each job to add salary range, employment type, vacancies, NOC code, median wage, expiry date, full description and apply link.

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

Stop after this many jobs. 0 means no limit.

## `proxyConfiguration` (type: `object`):

Not required for normal use.

## Actor input object example

```json
{
  "keywords": [
    "nurse"
  ],
  "province": "",
  "sortBy": "date",
  "includeDetails": true,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

The results as dataset items.

# 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 = {
    "keywords": [
        "nurse"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/jobbank-canada-scraper").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 = {
    "keywords": ["nurse"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/jobbank-canada-scraper").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 '{
  "keywords": [
    "nurse"
  ],
  "maxItems": 50
}' |
apify call hipersoft/jobbank-canada-scraper --silent --output-dataset

```

## MCP server setup

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

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/xbqfDLbb4OwVhmxeq/builds/ruV2EByKUzVVyqgK8/openapi.json
