Canada Job Bank Postings & Wages - Open Data avatar

Canada Job Bank Postings & Wages - Open Data

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Canada Job Bank Postings & Wages - Open Data

Canada Job Bank Postings & Wages - Open Data

Job postings advertised on Canada's national Job Bank, from the monthly open data published by ESDC (Open Government Licence - Canada): title, NOC 2021, province, city, wage (hourly/annual), hours, employment type, posted date. Back to 2023. Unofficial; not affiliated with ESDC.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

JP Open Data

JP Open Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Canada Job Bank Postings & Wages — Open Data

Get the job postings advertised on Job Bank, Canada's national job board run by Employment and Social Development Canada (ESDC), from the monthly open-data files that ESDC publishes on the Government of Canada's Open Government Portal under the Open Government Licence – Canada (commercial use allowed, with attribution). Every row comes in one clean English schema: job title, NOC 2021 code and TEER, province, city, economic region, advertised wage with hourly and annual equivalents, weekly hours, work schedule, employment type and term, language requirement, education and experience, and the first posting date.

  • Open data, not website scraping. The Job Bank website's terms of use prohibit robots and scrapers, so this Actor never contacts jobbank.gc.ca. It reads only the monthly files ESDC publishes for reuse on open.canada.ca.
  • Comparable wages. Hourly, daily, weekly, bi-weekly, monthly and yearly salaries are converted to hourly and annual equivalents (using the posting's own weekly hours when it gives them), and implausible values (for example a yearly amount typed as hourly) are flagged.
  • History included. Every month since January 2023 — 50,000 to 100,000 postings per month, 45 months as of October 2026. Filter by keyword, province, city, NOC code, wage, posting date, language and posting source.
  • Privacy-safe by design. The files contain no employer names, contact people, e-mails, phone numbers or job descriptions. The Actor also leaves out the work-location postal code and any "as posted" title that embeds a street address or postal code.

Important: what this data is (and is not)

  • Monthly, not live. Each file holds the postings first posted in that month and is published a few days after the month ends. On any given day the newest posting is roughly 1 to 6 weeks old. Use it for analysis, not for applying to jobs.
  • No employer name, no link to the posting, no closing date, no job description. The open data does not contain them, so no row has them. If you need to apply, search jobbank.gc.ca yourself.
  • One row per posting and work location. jobId is the dataset's own row identifier ("WIC Job Location Snapshot ID"), not the job number shown on jobbank.gc.ca. A few older files have no identifier; their rows get "2024-06-row-123"-style ids.
  • Good for: wage benchmarks by occupation and region, labour-demand trends by NOC code or TEER level, immigration and Express Entry research, recruiting market sizing, and economics or HR dashboards.

Quick start — verified input

{
"months": ["latest"],
"maxItems": 100
}

This returns the first 100 postings of the newest monthly file. An empty input {} does exactly the same.

Software developers and programmers (NOC 2123x) in Ontario whose advertised pay reaches $40 an hour, first posted since July 2026:

{
"nocCodes": ["2123"],
"provinces": ["ON"],
"minHourlyWage": 40,
"postedFrom": "2026-07-01",
"maxItems": 1000
}

Nursing jobs in Montréal and Québec City posted directly by employers, from two chosen months:

{
"months": ["2026-09", "2026-08"],
"keywords": ["nurse", "infirmier", "infirmière"],
"cities": ["Montreal", "Quebec"],
"postingSource": "direct",
"maxItems": 500
}

What you get

One row per posting and work location, newest month first, in the file's own order within a month:

FieldDescription
jobId, jobIdSourceThe dataset's row id (snapshot-id), or a generated YYYY-MM-row-N id (row-number) for files without one
dataMonth, firstPostingDateThe monthly file (2026-09) and the date the posting was first published (2026-09-22)
title, titleAsPostedJob title as standardised by Job Bank, and the title as typed by the employer or partner board (when published and free of addresses)
nocCode, nocTitle, nocTeerNOC 2021 five-digit code, its occupation title, and the TEER level (0-5, the second digit)
noc2016Code, noc2016TitleThe older NOC 2016 code and title
postingSourcedirect (posted on Job Bank by the employer) or partner (shared by a partner job board through a feed; fewer fields)
province, provinceCode, city, economicRegionWork location down to the city and economic region (no street, no postal code). province is null for a few national postings
salaryText, salaryMin, salaryMax, salaryPeriodAdvertised salary as published ($19.00 hourly), its bounds and period (hour, day, week, biweekly, month, year)
hourlyWageMin/Max, annualSalaryMin/MaxHourly and annual equivalents (see below)
weeklyHoursUsed, weeklyHoursFromPosting, salaryPlausibleWeekly hours used for the conversion, whether they came from the posting (else 40), and whether the hourly equivalent is between $5 and $500
hoursMin, hoursMax, hoursPeriodHours of work as published (per week, bi-weekly, month or year)
employmentType, employmentTerm, termStartDate, termEndDateFull time / part time, permanent / term / seasonal / casual, and term dates
workScheduleAny of day, evening, night, weekend, shift, morning, early morning, on call, overtime, flexible hours, to be determined
workHoursFrom, workHoursToDaily start and end time when published (08:00)
languageRequirementOfficial language required: English, French, English or French, Bilingual (null when not published)
vacancies, education, experience, industry, employerSector, placementAgencyNumber of positions, education and experience required, NAICS sector, non-government / federal / provincial/territorial / municipal, and whether a placement agency posted it (direct postings only)
matchedKeywordsWhich of your keywords matched
dataFileThe open.canada.ca download link of the monthly file the row came from
source, sourceUrl, license, retrievedAtAttribution on every row (the licence's attribution statement included)

Example output

{
"jobId": "15894389",
"jobIdSource": "snapshot-id",
"dataMonth": "2026-09",
"title": "room attendant",
"titleAsPosted": null,
"nocCode": "65310",
"nocTitle": "Light duty cleaners",
"nocTeer": 5,
"noc2016Code": "6731",
"noc2016Title": "Light duty cleaners",
"postingSource": "direct",
"firstPostingDate": "2026-09-22",
"vacancies": 2,
"languageRequirement": "English",
"education": "No degree, certificate or diploma",
"experience": "No experience",
"employerSector": "non-government",
"placementAgency": false,
"industry": "Accommodation and food services",
"province": "British Columbia",
"provinceCode": "BC",
"city": "Westbank",
"economicRegion": "Thompson–Okanagan Region",
"employmentType": "Full time",
"employmentTerm": "Permanent employment",
"termStartDate": null,
"termEndDate": null,
"workSchedule": ["day", "evening", "weekend", "shift", "morning", "early morning"],
"salaryText": "$19.00 hourly",
"salaryMin": 19,
"salaryMax": 19,
"salaryPeriod": "hour",
"hourlyWageMin": 19,
"hourlyWageMax": 19,
"annualSalaryMin": 34580,
"annualSalaryMax": 34580,
"weeklyHoursUsed": 35,
"weeklyHoursFromPosting": true,
"salaryPlausible": true,
"hoursMin": 30,
"hoursMax": 40,
"hoursPeriod": "week",
"workHoursFrom": null,
"workHoursTo": null,
"dataFile": "https://open.canada.ca/data/dataset/ea639e28-c0fc-48bf-b5dd-b8899bd43072/resource/03523cbf-a005-40ee-81ad-aca5bb74cf03/download/job-bank-open-data-all-job-postings-en-sept2026.csv",
"matchedKeywords": [],
"source": "Job Postings Advertised on Canada's National Job Bank Website — Employment and Social Development Canada (ESDC), monthly open data on the Open Government Portal (open.canada.ca)",
"sourceUrl": "https://open.canada.ca/data/en/dataset/ea639e28-c0fc-48bf-b5dd-b8899bd43072",
"license": "Contains information licensed under the Open Government Licence – Canada. Licence: https://open.canada.ca/en/open-government-licence-canada. Source: Employment and Social Development Canada, Job Bank open data. Unofficial tool, not affiliated with or endorsed by ESDC, Job Bank or the Government of Canada.",
"retrievedAt": "2026-10-13T01:00:00.000Z"
}

Input

All fields are optional.

FieldTypeDescription
monthslist"latest" (default) or months as YYYY-MM ("2026-09"; "September 2026" also works). Up to 24 per run. Leave as "latest" with postedFrom / postedTo to read the months of that window automatically
keywordslistMatched at the start of a word in the job title, the title as posted and the NOC titles; accents and case are ignored. ANY keyword may match. "developer" also finds "developers"
provinceslistCodes or names, English or French: AB, BC, MB, NB, NL, NS, NT, NU, ON, PE, QC, SK, YT
citieslistExact city names; accents, case and St. / Saint spellings are ignored. Suburbs are separate cities
nocCodeslistNOC 2021 codes or their first digits: "21232", "2123", "3"
minHourlyWagenumberKeeps postings whose advertised range reaches this hourly wage (CAD)
minAnnualSalaryintegerKeeps postings whose advertised range reaches this annual salary (CAD)
postedFrom, postedTotextFirst posting date window, YYYY-MM-DD (or YYYY-MM for a whole month)
languageslistEnglish, French, English or French, Bilingual (en, fr, both work too)
postingSourcetextall (default), direct or partner
maxItemsintegerRows for the whole run (default 100, up to 500,000). A full month is 50,000 to 100,000 rows

Salary conversions

W = weekly hours from the posting (the midpoint of its minimum and maximum, converted from bi-weekly / monthly / yearly hours when needed), or 40 when the posting gives none.

Published perHourly equivalentAnnual equivalent
houras published× W × 52
day÷ 8÷ 8 × W × 52
week÷ W× 52
bi-weekly÷ (2 × W)× 26
month× 12 ÷ 52 ÷ W× 12
year÷ 52 ÷ Was published

The wage filters compare your threshold with the top of the advertised range and only keep rows with salaryPlausible: true.

Common input mistakes

WrongRightWhy
"provinces": ["Toronto"]"cities": ["Toronto"] or "provinces": ["ON"]Cities and provinces are separate filters
"cities": ["Ontario"]"provinces": ["ON"]A province in cities is rejected with this hint
"nocCodes": ["software developer"]"keywords": ["software developer"] or "nocCodes": ["21232"]NOC filters take codes; words go in keywords
"months": ["2026-10"] early in October"months": ["latest"]A month is published a few days after it ends; the run lists the available months
"postedFrom": "01/09/2026""postedFrom": "2026-09-01"Day/month orders are ambiguous and rejected
"minHourlyWage": "25 per hour""minHourlyWage": 25A plain amount in Canadian dollars

Empty results?

  • Posting dates outside the chosen months. Each file holds the postings first posted in its month. Leave months as "latest" and set postedFrom / postedTo, and the right months are read for you.
  • City spelling. Cities must match the posting's work location (accents optional). Suburbs such as Mississauga or Laval are separate cities — add them, or filter by province.
  • A NOC code nobody used that month, or a 5-digit code with a typo. Try its first 3 or 4 digits.
  • A wage above every advertised range, or postings without a salary (they are dropped when a wage filter is set).
  • Language or education filters on partner postings. Postings shared by partner job boards often publish no language, education or hours.
  • A run that finds nothing still succeeds with 0 rows; the log explains the typical causes.

How it works

  1. One request to the Open Government Portal's catalogue (CKAN package_show) lists the monthly files.
  2. For each chosen month, the open.canada.ca download link answers with a short-lived storage link, and the file (40-115 MB, UTF-16 or UTF-8, tab- or comma-separated) is streamed, parsed by column name, normalised and filtered on the fly.
  3. As soon as maxItems rows are found, the download is closed. The Quick start needs 3 requests and finishes in about 30 seconds (20 of them are the polite pause between the two open.canada.ca requests). Reading a whole month to the end takes about 1.5 to 2 minutes for a typical 45 MB file at the default 256 MB (the largest files, about 115 MB, take around 5 minutes).

Long ranges: Apify gives a run CPU in proportion to its memory, and parsing is CPU-bound, so for 6 months or more run with 1 GB of memory (up to about 4 times faster) and, beyond about 12 months, a longer timeout than the default hour. If the timeout is near, the run stops 90 seconds early and keeps every row found so far (complete: false).

Requests are strictly serial, at least 20 seconds apart on open.canada.ca (its robots.txt Crawl-delay) and 1.2 seconds apart otherwise, with retries and backoff for temporary errors. If a download fails after rows were delivered, the run still succeeds with those rows and complete: false in the RUN_SUMMARY record of the key-value store.

What is deliberately not included

  • Work-location postal codes (finer than the city level), and "as posted" titles that contain a street address, postal code, e-mail, phone number or web address.
  • The benefit flags and the telework flag of the files: in the September 2026 file every one of them is "No" or empty, so publishing them would mislead.
  • Employer names, posting links, closing dates and job descriptions: they are not in the open data.
  • Contains information licensed under the Open Government Licence – Canada (https://open.canada.ca/en/open-government-licence-canada). Source: Employment and Social Development Canada, "Job Postings Advertised on Canada's National Job Bank Website" (https://open.canada.ca/data/en/dataset/ea639e28-c0fc-48bf-b5dd-b8899bd43072).
  • Every row carries this attribution in its license field. If you republish the data, keep the attribution statement and, where possible, the link to the licence.
  • Unofficial tool. Not affiliated with, endorsed by or sponsored by ESDC, Job Bank or the Government of Canada. The licence does not allow suggesting official status or endorsement, and it does not cover the Government's names, crests, logos or other official symbols.
  • Only public open data is read; no login, no website scraping. You are responsible for using the data lawfully and in line with the licence.
  • GDPR / privacy: the output contains no personal data — no names, no contact details, no employer identities, no addresses.

FAQ

Why are there no employer names or links to the postings? ESDC's open-data files do not include them. The Job Bank website does, but its terms of use prohibit automated access, so this Actor does not read it.

How fresh is the data? The newest month appears a few days after it ends (September 2026 was published on 2 October 2026). The catalogue is checked on every run, so a new month is picked up automatically by "latest".

Is there a French version? ESDC also publishes French files with the same postings and translated labels. This Actor reads the English files, which already include French job titles as posted and French place names.

How many rows per month? Between about 50,000 and 100,000 (52,368 in September 2026, 102,939 in June 2024). In September 2026, 43% were posted directly by employers and 57% were shared by partner job boards.