Job Bank Canada Scraper API | Canadian Job Postings, NOC avatar

Job Bank Canada Scraper API | Canadian Job Postings, NOC

Pricing

from $0.35 / 1,000 job results

Go to Apify Store
Job Bank Canada Scraper API | Canadian Job Postings, NOC

Job Bank Canada Scraper API | Canadian Job Postings, NOC

Extract Job Bank Canada labour-market data at $0.50 per 1,000 jobs, cheaper than the leading tools, with 46 months of history back to 2023 under a licence allowing commercial use. Official Government of Canada open data: job title, NOC 2021, NAICS, city, province, wage, hours, schedule.

Pricing

from $0.35 / 1,000 job results

Rating

0.0

(0)

Developer

Aurelix

Aurelix

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Security

Limited permissions

Share

What is 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. Your first run with the example input costs about $0.051 (100 jobs in our test run).

Job Bank Canada Scraper: example output from a real run

Job Bank Canada Scraper: 75-second demo video

▶ Watch the 75-second demo

Search byMonth (latest or any of 46 published months back to 2023-01, as YYYY-MM) and number of recent months
FiltersProvinces, cities, NOC code prefix, title keywords, employment type, minimum hourly wage, posted after, Job Bank only
Output42 fields per job; JSON, CSV, Excel, API
FreshnessMonthly: each month is published about one to five weeks after it ends
AutomateSchedules, webhooks, Zapier, Make, n8n, Google Sheets, MCP for AI agents
Price$0.50 per 1,000 jobs ($0.35 per 1,000 jobs on paid Apify plans)
Free to tryRuns on Apify's free plan: the $5 monthly credit covers about 9,900 jobs
Login neededNo

Why Job Bank Canada Scraper users pick this one

  • History back to 2023. 46 published months, from January 2023.
  • Cheaper than the leading tools. $0.50 per 1,000 jobs, $0.35 on paid plans.
  • Licensed for commercial use. The Open Government Licence - Canada allows reuse.
  • Nothing to block. No page scraping: the official monthly file is read.
  • Monthly feed mode. Each new month once, with a Slack or webhook digest.

Get started in 3 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.

▶ Try it with the example input

The form opens with an example input already filled in: that run costs about $0.051 on the free plan.

How much does it cost to scrape Job Bank Canada?

Pay per event: you pay only for what the run returns, plus a small start fee. Bronze, Silver, Gold and higher Apify plans pay less per result.

JobsFree planPaid plans (Bronze, Silver, Gold)
100$0.0505$0.0355
1,000$0.50$0.35
10,000$5.00$3.50

Totals include the $0.0005 start fee per run, rounded to the cent (amounts under $0.10 to four decimals). Apify's free plan includes $5 of credit a month, enough for about 9,900 jobs.

Each run's start fee covers downloading the monthly file even when your filters match nothing.

Billing events

EventFree planPaid plans (Bronze, Silver, Gold)
job-result$0.50 per 1,000 jobs$0.35 per 1,000 jobs
apify-actor-start$0.0005 per run$0.0005 per run

Benchmarks: how we compare

TestInputResult
One province on Apifyprovinces ON, maxResults 20002,000 jobs in 5.4 s
Run that matches nothing on Apifykeyword that matches no job0 jobs in 4.1 s; only the start fee charged
Whole monthmaxResults 052,368 jobs, equal to the 52,368 rows in the government file, in 55 s
Field accuracy10 sampled jobs10 of 10 matched the raw rows of the government file
Provinces and territories presentwhole month13 of 13; Ontario largest with 15,346 jobs
Jobs with a wagewhole month52,358 of 52,368; 43,170 paid by the hour, 8,146 by the year
Jobs from partner job boardswhole month30,108 of 52,368 (57%); these carry no NAICS or education fields
Missing location detailwhole monthcity 322 (0.6%), postal code 25,863 (49%), NOC 2021 code 1,485 (2.8%)
Mixed-language, mixed-case filterskeywords cook, Cuisinier, ÉLECTRICIEN; provinces Ontario, qc, NL1,163 jobs
Second incremental runincremental on, provinces PE and NLfirst run 1,029 jobs, second run 0 repeats
One month unavailablemonths 2, province PE273 jobs from the month that loaded; 'Partial' status names the missing month
Source down or rate-limitedempty inputRun ends cleanly with a 'No jobs' status; no job charged
First run from the Storeprefilled input100 jobs for $0.051

Measured by our own test runs of this Actor against one published monthly file: run times marked 'on Apify' on the platform, the rest from local runs of the same code, one run per row. The unavailable and rate-limited rows simulate failed requests. Counts differ from month to month.

What data you get

Job Bank Canada Scraper turns the Job Bank monthly open dataset that the Government of Canada publishes on open.canada.ca into clean rows: job title, NOC 2021 and NOC 2016 codes, NAICS industry, city, province, wage range and pay period, hours, employment type and term, schedule, vacancies and posted date. Pick the latest month or a past one and filter by province, city, NOC code prefix, title keyword, employment type, minimum hourly wage or posted date. The data is published under the Open Government Licence - Canada, which allows commercial use.

  • 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
titlenoc_codelocationsalary_minsalary_maxsalary_peremployment_typeposted_date
grill cook63200Shelburne, ON20.025.0hourFull time2026-09-21
licensed cook63200AB15.017.5hourFull time2026-09-02
general director - non-profit organization00013BC100000.0120000.0yearFull time2026-09-02

One full job record, exactly as a real run returned it (long text and lists shortened here). From a real run:

{
"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/d... [59 more characters]",
"scraped_at": "2026-11-04T11:18:35Z"
}

Use cases

  • 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

Use-case recipes

Wage benchmark for one occupation in one province

HR and compensation teams pick a NOC code and a province. Keep rows where salary_per is hour, then average salary_min and salary_max by city or economic_region in a spreadsheet. Use vacancies to weight each posting by the number of openings.

{
"nocCodes": [
"63200"
],
"provinces": [
"ON"
],
"maxResults": 500
}

Monthly feed into a data warehouse

Data teams schedule the Actor once a month with 'Only new jobs since last run' on. Each run returns only postings not delivered before, so loads stay small. Use job_id as the primary key and dataset_month as the load partition.

{
"month": "latest",
"provinces": [
"NS"
],
"incremental": true,
"maxResults": 2000
}

Three-month trend for one trade

Labour-market researchers read the last three months for one occupation. Set Max results to 0, because the cap counts across all months, newest first, and would cut older months off. Count rows by dataset_month and city to see where demand moves.

{
"month": "latest",
"months": 3,
"nocCodes": [
"72310"
],
"provinces": [
"BC"
],
"maxResults": 0
}

Which industries advertise which occupations

Immigration consultants and economic developers keep only direct Job Bank postings, which carry the NAICS industry. Count noc_title by industry and economic_region to see who is hiring for what, and filter employment_term for permanent roles.

{
"provinces": [
"SK"
],
"jobBankOnly": true,
"maxResults": 1000
}

Input

FieldTypeWhat it doesDefault
month (Month)stringWhich monthly file to read: 'latest' (newest published month) or a month as YYYY-MM, e.g. '2026-09'."latest"
provinces (Provinces / territories)arrayKeep only jobs in these provinces or territories, as codes or names, e.g. ['ON', 'QC', 'British Columbia'].
maxResults (Max results)integerUpper limit of jobs returned in this run, after filters. 0 = no limit (a full month is about 50,000...1000
months (Number of recent months)integerWith month = 'latest', read this many of the newest monthly files, e.g. 3 for the last three months.1
cities (Cities)arrayKeep only jobs in these cities (exact name, case-insensitive), e.g. ['Toronto', 'Montréal', 'Calgary'].
nocCodes (NOC 2021 codes)arrayKeep only jobs whose NOC 2021 code starts with one of these, e.g. ['63200'] for cooks, ['7'] for all trades...

All 15 fields, with examples: see the Input tab.

Use with AI agents (MCP)

MCP (Model Context Protocol) is the open standard that lets AI assistants such as Claude, ChatGPT and Cursor call outside tools. Apify's hosted MCP server at https://mcp.apify.com/?tools=aurelix/job-bank-canada-scraper gives your assistant this Actor only: it fills in the input from your request, runs it and reads the jobs back, at the same per-result price as a run started by hand.

Example prompts

  • "Get last month's Job Bank Canada postings for cooks in Ontario with their hourly wages and give me the average wage by city"
  • "Pull Job Bank postings for skilled trades, NOC codes starting with 72, in British Columbia and Alberta that pay at least 30 dollars an hour"
  • "How many carpenter jobs were posted on Job Bank in British Columbia in each of the last three months?"

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector, name it Apify, paste https://mcp.apify.com/?tools=aurelix/job-bank-canada-scraper, keep the detected OAuth settings, select Add and sign in to Apify.

Claude Code

$claude mcp add --transport http apify "https://mcp.apify.com/?tools=aurelix/job-bank-canada-scraper"

Cursor and VS Code

Add this to ~/.cursor/mcp.json (Cursor); in VS Code's .vscode/mcp.json put the same entry under "servers" with "type": "http". Sign in to Apify when asked.

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=aurelix/job-bank-canada-scraper"
}
}
}

ChatGPT

Turn on Developer mode, open Settings > Apps & Connectors > Create, paste the URL above as the MCP server URL, choose OAuth and authorize Apify.

Clients without sign-in send Authorization: Bearer <YOUR_APIFY_TOKEN> instead. No Apify account? This Actor supports Apify's agentic payments: an agent can pay per run with a prepaid, spend-capped token, bought with x402 stablecoin payments.

n8n AI agent

Give an AI Agent node an MCP Client Tool with the endpoint https://mcp.apify.com/?tools=aurelix/job-bank-canada-scraper and a Bearer credential holding your Apify token.

Use it from AI agents (MCP), the API or no-code

Copy this to your AI assistant

Use the Apify Actor aurelix/job-bank-canada-scraper (Job Bank Canada Scraper) through Apify's MCP server or API. Main input: month (Month); provinces (Provinces / territories). Example input: {"month": "latest", "provinces": ["ON", "BC"], "nocCodes": ["72"], "minHourlyWage": 25, "maxResults": 500}. Each result is one job with fields such as job_id, snapshot_id, title, original_title, noc_code, noc_title, noc2016_code, industry. It costs $0.50 per 1,000 jobs on Apify's free plan plus a $0.0005 start fee per run, and needs no login.

MCP server URL for this Actor: https://mcp.apify.com/?tools=aurelix/job-bank-canada-scraper (setup for each client in the section above).

API

Start a run and read the dataset with Apify's REST API or the Python and JavaScript clients:

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)

No-code: schedule it in 3 clicks

Send the results to Google Sheets, Zapier, Make, n8n, Slack or any webhook URL.

  1. Fill in the input, then click Save as a new task.
  2. In the task, click Schedule and pick daily or weekly (Apify Schedules).
  3. Turn on Only new jobs since last run so each run returns only what is new, and paste a Slack or webhook URL into Slack webhook URL / Webhook URL to get a digest of the new items (count plus the top 10) after every run.

Prefer n8n or Make? Ask in the Issues tab and we will share a ready-made workflow for it.

FAQ

Can I scrape Job Bank Canada without login?

Yes. It never logs in, so you need no Job Bank account, password or cookies; only a free Apify account to run it.

Is there a Job Bank Canada API?

You can use this Actor as one. Start it with Apify's REST API or the Python and JavaScript clients and read the results as JSON (see the code above), or call it from an AI agent through MCP.

How much does it cost to scrape Job Bank Canada?

About $0.50 for 1,000 jobs on Apify's free plan and $0.35 on paid plans, start fee included. The free $5 monthly credit covers about 9,900 jobs.

Can I export Job Bank Canada data to Excel or Google Sheets?

Yes. Download the results as Excel, CSV, JSON, XML or HTML from the run's Storage tab, or send them to Google Sheets with Apify's Google Sheets integration or the API.

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.

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.

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.

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.

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.

Limits (stated honestly)

  • 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.

Public Aurelix Actors, grouped by the data they collect. All are pay-per-result and need no login.

Jobs and hiring data

E-commerce and product data

Leads and company data

  • Contact Page Scraper: Published company emails, phones, addresses, social pages and team members from a list of company websites.
  • Decision Maker Finder: Founders, CEOs, VPs and department heads from company team pages, with title, seniority and function.
  • Newly Funded Companies Hiring: Companies that just raised money (SEC Form D), with their open roles and business contacts, as a new-only monitor.
  • Google Maps Phone Scraper: Local business lists from Google Maps: phones, websites, ratings, hours, coordinates; optional website emails and socials.
  • Recently Funded Companies API: US companies that just filed an SEC Form D: amount raised, industry, state, executives, confirmed website.
  • Tech Stack API: CMS, e-commerce platform, analytics, ad pixels, chat, CDN and email provider for each domain you enter.

Ad intelligence

  • Competitor Watch: One report per competitor with only what is new: Meta and TikTok ads, page changes, Shopify products and prices, jobs.
  • Facebook Ad Library Search & API: Facebook and Instagram business ads from the Meta Ad Library: copy, creatives, landing pages, dates, optional EU reach.
  • TikTok Ads Library API: TikTok Ads Library ads for Europe, UK, Switzerland and Turkey with targeting, reach, ad text and landing pages.

Canada and government data

  • Canada Building Permits: Building permits and development applications from 7 Canadian cities: address, type, status, dates, value, applicant, contractor and Toronto planner contact.
  • Government Tenders Scraper: Open tenders from SAM.gov, CanadaBuys and EU TED in one table: buyer, codes, value, deadline, contact and link.
  • USPTO Trademark API: US trademark search and watch from USPTO: mark, owner or number lookups, new filings, owner, attorney, goods.

AI, content and SEO

More data tools

  • Agoda API (Unofficial): Scrape Agoda guest reviews at $0.50 per 1,000 with this unofficial Agoda API, cheaper than the leading tools: Agoda and...
  • Tennis Betting Odds Scraper: Tennis results and upcoming matches with opening and closing odds per bookmaker and implied probabilities.

Recent changes

  • 0.1: Store page: positioned as bulk monthly open data for labour-market analysis; past months back to January 2023 confirmed.

The full history is on the Changelog tab.

Tested daily

An automated health check runs this Actor every day on a fixed input and checks that at least 20 jobs come back with job_id, snapshot_id, title, province_code, posted_date, dataset_month filled in; a failed check alerts the maintainer straight away.

Your feedback

Missing a field, found a bug or need another filter? Open an issue on the Issues tab; we aim to answer within a day. If this Actor saved you time, a short review helps other people find it.