# Job Bank Canada Scraper (`snappytools/jobbank-canada-scraper`) Actor

This Actor searches Job Bank (jobbank.gc.ca), the Government of Canada's public job board, and extracts structured job posting records from the public, server-rendered search result pages.

- **URL**: https://apify.com/snappytools/jobbank-canada-scraper.md
- **Developed by:** [Snappy](https://apify.com/snappytools) (community)
- **Categories:** Jobs
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.90 / 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

## Job Bank Canada Scraper – job postings, employers and wages from jobbank.gc.ca

Give it a job title or keywords, and optionally a city, province or postal code. You get back one row per job posting from Job Bank, the Government of Canada's public job board, with the title, employer, location, wage and posting date.

Wages come with the original text plus parsed minimum, maximum and pay period, so you can sort and chart them without cleaning. Each row also has a flag for LMIA postings and a direct link to the posting. Schedule it to run daily or weekly and you can track new openings by role and city.

### Why this one

- **Parsed wages.** Wage text is split into `wageMin`, `wageMax` and `wagePeriod`, so "$37.00 to $38.50 hourly" becomes 37, 38.5 and hourly.
- **LMIA flag.** The `isLmia` field shows whether a posting is LMIA-related.
- **Bounded runs.** You set the maximum results (1 to 500) and maximum pages (1 to 20), so cost stays predictable.
- **No login needed.** It reads the public search result pages only.
- **Direct links.** Every row has a stable posting `id` and the full `url` of the posting.
- **Cheap.** $1.90 per 1,000 results, and runs with no results cost nothing.

### Quick start

```json
{
  "searchTerm": "software developer",
  "location": "Toronto",
  "maxResults": 5,
  "maxPages": 1
}
```

In a test run on 5 Nov 2026 this returned 5 job postings, each with employer, location, wage and posting date.

### What you can use it for

| Who | What for |
| --- | --- |
| Recruiters and staffing agencies | Watch new openings by role and city |
| Labour-market analysts | Track advertised wages by occupation and region |
| Immigration consultants | Spot employers advertising LMIA-related positions |
| HR teams | Benchmark salary ranges against public Canadian postings |
| Researchers | Build a time series of job demand from a public government source |

### How to use it

1. Click **Try for free**.
2. In **Search keywords**, enter a job title or keywords, for example `nurse` or `software developer`.
3. In **Location**, optionally enter a city, province or postal code, for example `Toronto, ON`.
4. Set **Maximum results** (1 to 500, default 25).
5. Set **Maximum pages** (1 to 20, default 2). Each page holds roughly 25 postings.
6. Click **Start**.
7. To get fresh postings regularly, add a run to **Schedules**.

### What data you get

Each row is one job posting. Fields that Job Bank doesn't show on the result page come back as null.

| Field | What it is | Example |
| --- | --- | --- |
| `id` | Job Bank posting id | 50663650 |
| `url` | Link to the posting | https://www.jobbank.gc.ca/jobsearch/jobposting/50663650 |
| `title` | Job title | developer, software |
| `employer` | Employer name | Web Hosting Canada |
| `location` | City and province | Montréal (QC) |
| `wage` | Wage text as published | $37.00 to $38.50 hourly (to be negotiated) |
| `wageMin` | Parsed minimum wage | 37 |
| `wageMax` | Parsed maximum wage | 38.5 |
| `wagePeriod` | Pay period | hourly |
| `datePosted` | Date the job was posted | 2026-11-04 |
| `nocCode` | NOC occupation code, when shown | null |
| `isLmia` | Whether the posting is LMIA-related | false |
| `source` | Where the data came from | jobbank.gc.ca |
| `searchTerm` | The keywords you searched | software developer |
| `scrapedAt` | When the row was collected | 2026-11-05T00:50:23.314Z |

### Pricing

| Event | Price |
| --- | --- |
| Result (each row saved to the dataset) | $0.0019 |

There is no start fee. Runs with no results cost nothing.

| Run | Cost |
| --- | --- |
| 100 results | $0.19 |
| 1,000 results | $1.90 |
| 10,000 results | $19.00 |

### Good to know

- **Limits.** Up to 500 results and 20 pages per run, with a polite delay between requests.
- **Data source.** Public, server-rendered search result pages on jobbank.gc.ca. No login or cookies.
- **What's missing.** Only what Job Bank shows on result pages. Wage and NOC values are reproduced as published and may be incomplete.
- **Site changes.** If Job Bank changes its page markup, some fields may be null until the parser is updated.
- **Not affiliated.** This tool isn't affiliated with or endorsed by Job Bank or the Government of Canada.

### Getting the data out

Download results as Excel, CSV or JSON from the Output tab. Send them to Google Sheets, Slack, Zapier, Make or webhooks from the **Integrations** tab. Every run is also available through the Apify API, and you can schedule runs from **Schedules**.

### Questions or problems

Open an issue on the **Issues** tab and include the run link. I reply within one business day.

### Related tools

- [Workday Career Site Jobs Scraper](https://apify.com/snappytools/workday-jobs-monitor): jobs from company Workday career sites
- [Hacker News Search and Who-is-Hiring Extractor](https://apify.com/snappytools/hackernews-algolia-scraper): Hacker News search results and Who-is-Hiring posts
- [Government and Public Job Boards Aggregator (USAJobs API)](https://apify.com/snappytools/usajobs-public-job-search): US government job postings via the USAJobs API

# Actor input Schema

## `searchTerm` (type: `string`):

Job title or keywords to search on Job Bank, e.g. nurse or software developer.

## `location` (type: `string`):

Optional city, province or postal code to narrow the search, e.g. Toronto, ON.

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

Maximum number of job postings to save (1 to 500) to keep runs bounded and costs predictable.

## `maxPages` (type: `integer`):

Maximum number of search result pages to fetch (1 to 20), roughly 25 postings per page.

## Actor input object example

```json
{
  "searchTerm": "software developer",
  "location": "Toronto",
  "maxResults": 10,
  "maxPages": 1
}
```

# 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 = {
    "searchTerm": "software developer",
    "location": "Toronto",
    "maxResults": 10,
    "maxPages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("snappytools/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 = {
    "searchTerm": "software developer",
    "location": "Toronto",
    "maxResults": 10,
    "maxPages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("snappytools/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 '{
  "searchTerm": "software developer",
  "location": "Toronto",
  "maxResults": 10,
  "maxPages": 1
}' |
apify call snappytools/jobbank-canada-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,snappytools/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/Gewyhki4LNSciXC8B/builds/O3pB9hgRfAQGRqzAH/openapi.json
