Aurelix

Tools › Jobs

Job Bank Canada Scraper

Get Canada's official Job Bank postings in bulk (NOC, NAICS, wage, hours, schedule) with 46 months of history, for $0.50 per 1,000 jobs, no login.

For labour-market analysts, researchers and job boards. Official Government of Canada open data under a licence that allows commercial use; about 50,000 postings a month, filtered by province, city, NOC or wage.

$0.50 per 1,000 jobs ($0.35 on paid Apify plans)

At a glance

What the Job Bank Canada Scraper does

Search by
Month (latest or any of 46 published months back to 2023-01, as YYYY-MM) and number of recent months
Filters
Provinces, cities, NOC code prefix, title keywords, employment type, minimum hourly wage, posted after, Job Bank only
Output
42 fields per job; JSON, CSV, Excel, API
Freshness
Monthly: each month is published about one to five weeks after it ends
Automate
Schedules, webhooks, Zapier, Make, n8n, Google Sheets, MCP for AI agents

Who it is for

  • Labour-market researchers measuring demand by occupation, region and month
  • HR and compensation teams benchmarking posted wages by NOC code and province
  • Immigration consultants and economic developers tracking which occupations employers advertise where
  • Data teams loading a monthly feed of Canadian job postings into a warehouse

Output

What you get

  • Job title (standardised and as written), NOC 2021 code and occupation name, NOC 2016 code, NAICS industry
  • City, province name and code, economic region, work-location postal code where published
  • Wage min/max, pay period (hour/day/week/biweekly/month/year) and the wage text as published
  • Hours min/max and period, daily start and end time, schedule flags (day, evening, night, weekend, shift...)
  • Employment type and term, term start/end dates, telework flag, vacancies
  • Benefit flags as the file publishes them (every one was No or blank in each month we checked, so this list comes back empty), education, experience and language required
  • First posting date (ISO), source month, whether it came from Job Bank or a partner board

Example

Input and output

Input

{
  "month": "latest",
  "provinces": [
    "ON",
    "BC"
  ],
  "nocCodes": [
    "72"
  ],
  "minHourlyWage": 25,
  "maxResults": 500
}

One output record

{
  "job_id": "jobbank:15865721",
  "snapshot_id": "15865721",
  "title": "painter",
  "original_title": null,
  "noc_code": "73112",
  "noc_title": "Painters and decorators (except interior decorators)",
  "noc2016_code": "7294",
  "industry": "Construction",
  "city": "Bracebridge",
  "province": "Ontario",
  "province_code": "ON",
  "location": "Bracebridge, ON",
  "postal_code": "P1L2C5",
  "economic_region": "Muskoka–Kawarthas Region",
  "posted_date": "2026-09-11",
  "dataset_month": "2026-09",
  "vacancies": 2,
  "employment_type": "Full time",
  "employment_term": "Permanent employment",
  "term_start_date": "2027-03-08",
  "term_end_date": null,
  "telework": false,
  "work_schedule": [
    "day",
    "weekend",
    "morning",
    "… 1 more"
  ],
  "salary_min": 26,
  "salary_max": 26,
  "salary_per": "hour",
  "salary_text": "$26.00 hourly",
  "hours_min": 35,
  "hours_max": 40,
  "hours_per": "week",
  "work_hours_from": "08:00",
  "work_hours_to": "17:00",
  "benefits": [],
  "education": "Secondary (high) school graduation certificate",
  "experience": "5 years or more",
  "language": "English",
  "posted_via": "job_bank",
  "government_employer": false,
  "placement_agency": false,
  "dataset_url": "https://open.canada.ca/data/en/dataset/ea639e28-c0fc-48bf-b5dd-b8899bd43072",
  "source_url": "https://open.canada.ca/data/dataset/ea639e28-c0fc-48bf-b5dd-b8899bd43072/resource/03523cbf-a005-40ee-81ad-aca5bb74cf03/download/job-bank-open-data-all-job-po…",
  "scraped_at": "2026-11-04T11:18:35Z"
}

From a real run of this tool; long text and lists shortened here.

How to use it

Three steps

  1. Leave Month on 'latest' (or type a month like 2026-09) and set Number of recent months if you want more than one.
  2. Optionally narrow it: provinces, cities, NOC codes, title keywords, employment type, minimum hourly wage, posted-after date; turn on 'Only new jobs since last run' for a monthly feed.
  3. Click Start, then download JSON, CSV or Excel, or schedule it monthly and send results to Google Sheets, Zapier, Make or n8n.

API

Call it from Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("aurelix/job-bank-canada-scraper").call(run_input={'month': 'latest',
 'provinces': ['ON', 'BC'],
 'nocCodes': ['72'],
 'minHourlyWage': 25,
 'maxResults': 500})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

pip install apify-client. The same input works from the Apify console, a schedule, Make, n8n, Zapier or an AI agent through the Apify MCP server.

Pricing

Pay per result

Per 1,000 jobs, free plan$0.50
Per 1,000 jobs, paid plans$0.35
Start fee per run$0.0005

Live prices from the Apify Store; no subscription and no platform usage billed on top. See the Store page.

Honest limits

What it does not do

  • Monthly, not live: the newest data is the last month the government has published.
  • No employer name, job description or posting URL: they are not in the open dataset. Each record links to the open-data file it came from.
  • Partner-board postings carry fewer fields (no education, experience, NAICS or placement-agency flag).
  • City is missing on about 1% of postings and the postal code on about half; NOC 2021 is missing on about 3%.
  • A full month is a 46 MB file that every run downloads in full before filtering. In our tests a filtered run on Apify took about 4 to 7 seconds; returning a whole month of 52,368 jobs took about 55 seconds in a local run.
  • If open.canada.ca is down or rate-limits the run, the Actor retries with backoff; months it still cannot fetch are named in a 'Partial' status, and jobs already read are kept.

FAQ

Questions buyers ask

How much does the Job Bank Canada Scraper cost?

$0.50 per 1,000 jobs ($0.35 on paid Apify plans), billed through your Apify account; you pay only for results. Apify's free plan includes $5 of credit a month, enough for about 10,000 jobs.

Where does the data come from?

From 'Job Postings Advertised on Canada's National Job Bank Website', the monthly open dataset Employment and Social Development Canada publishes on open.canada.ca. Contains information licensed under the Open Government Licence - Canada.

Is this legal?

It reads only public data any logged-out visitor can see: the Job Bank open dataset ESDC publishes on open.canada.ca under the Open Government Licence - Canada; it does not scrape jobbank.gc.ca pages. It goes at a polite pace, never logs in and never solves CAPTCHAs. It returns job posting fields (title, location, wage, dates, link); the dataset carries no employer contact details. To have a record removed, open an issue on this Actor's Issues tab; if the publisher formally asks us to stop, this Actor will stop. You are responsible for using the data lawfully, incl. anti-spam and privacy laws; this is not legal advice.

How fresh is it?

Each month is published about one to five weeks after it ends (for example, September appeared in early October). This Actor is for monthly feeds, labour-market research and wage benchmarking, not for applying to jobs posted today.

Is this the live Job Bank site or the open data?

The open data. This Actor reads the government's monthly open data, not today's jobbank.gc.ca postings: whole months back to January 2023, typed NOC, NAICS and wage fields, and a licence that allows commercial reuse: best for labour-market analysis, wage benchmarking and trend studies.

Why is there no employer name or job link?

The government's open dataset does not include them. They exist only on the jobbank.gc.ca pages, whose terms do not allow commercial redistribution without permission, so this Actor does not scrape them.

What is a NOC code?

The National Occupational Classification, Canada's occupation code. NOC 2021 codes have five digits; the first digit is the broad category (7 = trades and transport, 6 = sales and service, 2 = natural and applied sciences). Filter with any prefix.

How does 'new since last run' work?

The Actor remembers the posting IDs it has returned for the same filters (or the state name you set) and skips them next time. IDs are forgotten 400 days after they were last seen.

Can I use it from an AI assistant?

Yes. Every input is described for agents, and an empty input returns the latest month. It works through Apify's MCP server and API.

What am I charged when nothing matches or the source is down?

Only the start fee. Jobs are charged one by one as they are saved, so a run that matches nothing costs just that fee. If open.canada.ca is down or rate-limits the run, the Actor retries with backoff; if it still fails, the run ends with a 'No jobs' status and no job is charged. When one of several months fails, the jobs already read are kept and charged, and the status starts with 'Partial' and names the missing month.

How does Max results work when I read several months?

It is one cap for the whole run, counted after filters. Months are read newest first, and the run stops as soon as the cap is reached, so older months can be cut off. For comparisons across months, set Max results to 0 and narrow the filters instead.

How do the province, city and employment type filters match?

Provinces accept two-letter codes or English names in any case, plus Québec with or without the accent; an unknown province stops the run with a clear message. Cities must match the published city name exactly, ignoring case, so accents count (Montréal, not Montreal). Employment types must be written as Job Bank publishes them: Full time, Part time, or Part time leading to full time.

How does the minimum hourly wage filter work?

It keeps only postings paid by the hour whose minimum wage is at least your figure in CAD. Postings paid by the day, week, month or year are dropped while the filter is set. In the month we tested, 43,170 of 52,368 postings were paid by the hour.

Why are benefits empty and telework always false?

The Actor returns the flags exactly as the government file publishes them. In every month we checked, old and recent, every benefit and telework flag was 'No' on direct Job Bank postings and blank on partner-board postings, so benefits came back as an empty list on every job. Work schedule flags (day, evening, weekend and so on) were filled on direct postings.

Which months can I get, and what if a month is missing?

Any published month, by YYYY-MM, or 'latest' with up to 12 recent months. If you ask for a month that has no file, the run stops with a message naming that month and nothing is charged per job. The newest month appears some weeks after it ends.

Can the same posting come back twice?

Not within one run: each posting ID is returned once, even if it appears in more than one monthly file. Across runs, switch on 'Only new jobs since last run' to skip IDs already returned for the same filters.

Which language is the data in?

The Actor reads the English edition of each monthly file, so field values such as province names, employment types and NOC occupation names are in English. Keywords match the title and NOC occupation name without regard to case.

How do I export jobs to Google Sheets?

Download the run's results as CSV or Excel and open them in Google Sheets, or add Apify's Google Sheets integration to the run or a schedule so every run's results land in a sheet.

Related

Related tools

Try the Job Bank Canada Scraper

Open it on the Apify Store, paste the example input above and click Start. Results download as CSV, Excel or JSON.