Job Bank Scraper — Canada Postings, Salary & Employers avatar

Job Bank Scraper — Canada Postings, Salary & Employers

Pricing

from $1.75 / 1,000 results

Go to Apify Store
Job Bank Scraper — Canada Postings, Salary & Employers

Job Bank Scraper — Canada Postings, Salary & Employers

Scrape postings from Job Bank, the Government of Canada's official job board: title, employer, location, published salary with the pay period and an annualised figure, telework flag and apply method. Keyless, no login. JSON, CSV or Excel.

Pricing

from $1.75 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

21

Total users

3

Monthly active users

3 days ago

Last modified

Share

Export postings from Job Bank, the Government of Canada's official job board — employer, location and published salary — to JSON, CSV or Excel. Keyless, no login.

What does Job Bank Scraper do?

Job Bank is run by Employment and Social Development Canada and renders its results server-side with semantic class names, which makes it one of the most stable job sources anywhere. This Actor parses those cards and walks the pagination. No API key, no account, no cookies.

Canada is unusual in that employers must publish pay, so almost every posting carries a salary — but they publish it in whatever period suits the role: $38.50 hourly, $1,600 weekly, $65,000 annually. Sorting that column raw is meaningless, because an hourly rate always sorts below an annual one. This Actor keeps the original label, extracts the amount and the period, and emits an annualised figure so rows are genuinely comparable.

Two smaller details matter for clean data: the posting URL carries a rotating jsessionid, which is stripped so links stay stable, and each card's "Job number" is used as the de-duplication key rather than that URL.

Who is it for?

  • Recruitment agencies tracking Canadian hiring by province and occupation.
  • Salary researchers who need comparable pay data across pay periods.
  • Immigration and relocation services sourcing roles by region.
  • Job boards and aggregators that need a Canadian feed.
  • Labour-market analysts measuring demand in official government data.

Use cases

  • Compare annualised pay for electricians across BC, Alberta and Ontario.
  • List every employer hiring in a trade this month, with job numbers.
  • Filter to telework-eligible postings across the country.
  • Track posting volume by province, month over month.
  • Feed a niche board with fresh, official Canadian listings.

Why use this Actor?

  • Keyless — nothing to sign up for.
  • 19 structured fields, including a properly annualised salary.
  • Pay period preserved alongside the normalised figure.
  • Official government source — stable markup, no anti-bot walls.
  • Stable URLs — session IDs stripped from every link.
  • Telework and apply-method flags straight from the card.

What data can you extract?

FieldTypeDescription
jobNumberstringJob Bank job number (stable ID)
postingIdstringInternal posting ID from the URL
titlestringOccupation title
jobUrlstringPublic posting page, session ID removed
employerNamestringHiring employer
locationstringCity and province
salaryLabelstringSalary exactly as published
salaryAmountnumberNumeric amount as published
salaryPeriodstringhourly, weekly, biweekly, monthly, annually
salaryAnnualisednumberAmount converted to a yearly figure
currencystringCAD when pay is published
postedDatestringPublication date
isNewbooleanFlagged as new
teleworkLabelstringTelework note, e.g. "On the road"
applicationMethodstringe.g. "Direct Apply"
postedOnJobBankbooleanPosted directly by the employer
countrystringCanada
sourcestringAlways jobbank_gc_ca
scrapedAtstringRun timestamp (ISO 8601)

Example output

{
"jobNumber": "3639411",
"title": "stucco plasterer",
"jobUrl": "https://www.jobbank.gc.ca/jobsearch/jobposting/50024389",
"employerName": "PJD Developments Ltd",
"location": "Surrey (BC)",
"salaryLabel": "$38.50 hourly",
"salaryAmount": 38.5,
"salaryPeriod": "hourly",
"salaryAnnualised": 80080,
"currency": "CAD",
"postedDate": "August 06, 2026",
"applicationMethod": "Direct Apply",
"country": "Canada",
"source": "jobbank_gc_ca"
}

How to use it

  1. Enter a keyword, or leave it empty to walk the newest postings.
  2. Optionally filter by location or telework.
  3. Set Maximum results and run, then export JSON, CSV or Excel.

Input example

{
"query": "electrician",
"location": "Vancouver, BC",
"maxResults": 2000
}

Notes and limits

  • salaryAnnualised assumes 2 080 working hours a year for hourly roles, which is the standard full-time basis. Part-time roles will therefore read high relative to actual earnings — the raw salaryAmount and salaryPeriod are kept so you can apply your own assumption.
  • Where a posting gives a range, salaryAmount is the lower bound.
  • Job Bank rotates a session ID into every posting URL; this Actor strips it, so links stay valid.
  • This Actor exports listing cards, not full descriptions, which is what keeps bulk runs cheap. Open jobUrl for requirements and duties.
  • Data is published by the Government of Canada; you are responsible for how you use it.

FAQ

Do I need a Job Bank account? No. Postings are public and this Actor needs nothing from you.

Why is there an annualised salary column? Because Job Bank mixes hourly, weekly and annual pay in one field. Without normalising, any sort or comparison is wrong.

Is the salary always present? Nearly always — Canadian rules push employers to publish pay, which is what makes this source unusually good for benchmarking.

Are French-language postings included? Yes, they appear as published; this Actor requests the English interface but employer text stays as written.

How am I charged? Pay per result — you pay for the postings delivered.


*Maintained: last verified 2026-09-01 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).


This Actor collects only publicly available data — the same content any visitor to Job Bank can see without logging in. It does not bypass authentication and does not gather private information. How you use the output is your responsibility: respect the source's terms, applicable copyright, and data-protection law such as GDPR where personal data is involved.

Other Actors from the same collection:

Scheduling and integrations

Run this Actor on a schedule — hourly, daily or weekly — and have every run append to the same dataset, which is how you turn a one-off export into a time series. Results can be pushed straight into Google Sheets, Slack, Zapier, Make, Airtable or any Webhook.

How much Job Bank data can you extract in one run?

A single run returned 170 job ads in 22 seconds on the example input. That example is deliberately narrow; the result limit and the input list are both yours to widen. That is roughly 463 job ads a minute.

There is no hard ceiling built into this Actor. What bounds a run is the result limit you set, the breadth of the input you give it, and how much Job Bank itself publishes. Because billing is per result, a wider run costs proportionally more and a narrow one costs almost nothing — so it is worth starting small and scaling once the output looks right.

Job Bank scraping — frequently asked questions

Do I need a Job Bank API key, account or login?

No. This Actor reads publicly available pages and feeds, so there is nothing to register for and no credentials to manage.

How do I export Job Bank data to CSV, Excel, JSON or Google Sheets?

Open the Storage tab after a run and pick the format you want — CSV, Excel, JSON, XML or an HTML table. For Google Sheets, Airtable or a database, use the dataset URL or the Apify API so the sheet refreshes itself on every run.

Can I schedule this Job Bank scraper to run daily or hourly?

Yes. Use the Schedules tab and pick a cadence. Daily is enough for most tracking work; pick hourly only if the job ads you care about really do change that fast.

How many job ads can I get, and what does it cost?

See the volume section above for a measured figure. Billing is per result, so you pay for the rows you actually receive and a run that finds nothing costs nothing.

This Actor collects only information that Job Bank publishes publicly. It does not log in, does not defeat access controls and does not touch private data. You remain responsible for how you use the output, including under GDPR and similar rules where personal data is involved.

What happens if Job Bank blocks the run or changes its layout?

A refused exit IP is swapped for a fresh one within a quarter of a second and retried, and rate limiting is waited out rather than fought. If nothing gets through, the run fails with the reason instead of reporting success with zero rows — so an empty result always means "no matches", never "the source would not answer".

Can I use this with an AI agent, LangChain or an MCP client?

Yes. The Actor is callable over the Apify API and through Apify's MCP server, so an agent can run it and read the dataset back as a tool call.