JobBank Scraper - Canada Jobs, Salaries & Employers avatar

JobBank Scraper - Canada Jobs, Salaries & Employers

Pricing

from $0.99 / 1,000 results

Go to Apify Store
JobBank Scraper - Canada Jobs, Salaries & Employers

JobBank Scraper - Canada Jobs, Salaries & Employers

Scrape jobs from Canada's Job Bank (jobbank.gc.ca), the federal government job board. Get job title, employer, location, salary (min/max/unit), employment type, posting date and full description. Search by keyword + location, or paste job URLs. No proxy setup needed. JSON or CSV, pay per result.

Pricing

from $0.99 / 1,000 results

Rating

5.0

(1)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

39

Total users

11

Monthly active users

2 days ago

Last modified

Share

JobBank Scraper: Canada Jobs, Employer Apply Emails, LMIA & NOC

Scrape Canada's federal Job Bank (jobbank.gc.ca) by keyword, city, province or NOC code, or from pasted job and search URLs. Every row carries the posting's "How to apply" block straight from Job Bank: the employer's application email, mailing address, apply URL, required documents and screening questions. Add LMIA status, NOC 2021 code, vacancies, hours, parsed salary, the median wage for the occupation, and a change-only monitoring mode for scheduled runs.

Built for recruiters, immigration consultants and RCICs, lead-generation teams and labour-market analysts who want Job Bank as clean rows instead of paging through the government site.

Why use this scraper

  • The employer's own application email, at no extra charge. Job Bank hides contact details behind a "Show how to apply" button. The actor clicks it for you, so most Job Bank postings come back with applyEmail filled in, plus mail and in-person addresses, apply links, the job reference number, required documents and screening questions.
  • LMIA leads. Filter to LMIA requested, Approved LMIA, or both, and every row says which one (lmiaStatus). These are the employers hiring temporary foreign workers.
  • Searches that stay local. A city such as Calgary or Surrey, BC is resolved through Job Bank's own location service, so you get that city and its area, not all of Canada. Province names, codes and postal codes work too.
  • Every Job Bank filter. Province, NOC code, date posted, full or part time, permanent / contract / seasonal / casual, on site / remote / hybrid / on the road, language, salary band, Job Bank vs external boards, placement agencies, student and apprentice jobs, international candidates.
  • Monitoring for schedules. Run the same input daily and get only new, updated and expired jobs. Unchanged jobs are not saved and not charged.
  • Structured fields, not text blobs. Salary as numbers (min, max, unit), hours per week as numbers, vacancies as a number, tasks and requirements as lists.

Overview

Job Bank is the Government of Canada's official job board. It lists postings made directly on Job Bank and postings imported from other boards (Indeed, Talent.com, CareerBeacon and more). This actor reads the public search results, opens each posting, parses its structured data and its "How to apply" block, and returns one row per job. Batch searches are merged and deduplicated.

Supported inputs

InputWhat it does
searchTermsKeywords, e.g. developer, nurse, truck driver. Each keyword runs as its own search.
locationCity, province or postal code: Toronto, Surrey, BC, British Columbia, M5V. Empty = all of Canada.
searchesA batch of separate searches, e.g. [{"keyword": "carpenter", "location": "Calgary"}, {"keyword": "welder", "location": "Alberta"}].
startUrlsJob Bank search-result or /jobposting/{id} URLs, auto-routed. Pasted job URLs are returned even if they fail a filter.
lmiaAny, LMIA requested, Approved LMIA, or Requested or approved.
provincesOne or more provinces or territories.
nocCodesFive-digit NOC 2021 codes, e.g. 72310 carpenters, 63200 cooks.
datePostedAny time, last 48 hours, last 30 days.
employmentSchedules, employmentTermsFull / part time; permanent, term or contract, seasonal, casual.
workplaceTypesOn site, remote, hybrid, on the road.
languagesEnglish, French, English and French.
annualSalaryRanges, hourlySalaryRangesJob Bank's salary bands.
sourceTypeJob Bank postings only, external boards only, or both.
excludeStudentJobs, excludeApprenticeJobs, excludePlacementAgencies, internationalCandidatesOnlyJob Bank's yes/no facets.
sortBest match, or date posted (newest first).
includeApplyInfoOn by default. Reads the "How to apply" block of each Job Bank posting.
enrichEmailsOpt-in: for jobs without an application email, look for one on the employer's website (billed per email found).
monitoringMode, stateName, resetStateChange-only output for scheduled runs (see below).
maxItemsCap on rows saved and billed. Jobs dropped by a filter or skipped as unchanged do not count.

Values inside one filter are OR-combined (provinces: ["AB", "BC"] = Alberta or British Columbia); different filters are AND-combined. Job Bank's facets are not always exact (its "external boards" facet still returns some Job Bank postings), so workplace, schedule, language, source and LMIA are checked again on every posting before it is saved.

Use cases

  • Immigration and foreign-worker sourcing. Pull every LMIA-requested posting in a province with the employer's application email, NOC code and wage.
  • Recruitment and staffing outreach. Contact employers hiring in your trades, using the email and reference number they published.
  • Job-board feeds. Schedule a daily monitoring run per city or NOC code and ingest only new, changed and closed postings.
  • Labour-market research. Compare posted wages with Job Bank's median wage per occupation and region, by province, NOC code and employment term.

Monitoring scheduled runs

Set monitoringMode to New, updated and expired only, pick a stateName such as alberta-cooks, and schedule the actor.

  • The first run is the baseline: every job comes back with changeType: "new".
  • Later runs return jobs that are new, jobs whose content changed (changeType: "updated", with changedFields such as ["salary", "validThrough"]), and jobs that disappeared from the search (changeType: "expired").
  • A job is marked expired only when every search ran to its last page in that run. If maxItems stopped the run early or a page failed, nothing is marked expired.
  • State is kept in a named key-value store in your own account (jobbank-monitor-<stateName>), one record per set of searches. resetState starts a new baseline.
  • All jobs with changeType saves every job and labels each one, which is handy for a full daily snapshot.

How it works

  1. Each keyword and location becomes a Job Bank search URL. Cities and postal codes are resolved to Job Bank's city id; your filters become Job Bank's own facets.
  2. Search pages are read 25 jobs at a time, up to the real result count, and job links are fanned out in parallel.
  3. Each posting is parsed from its structured data. For Job Bank postings the "How to apply" block is requested the way the button does it; imported postings keep the link to their source board.
  4. Rows that fail a filter are dropped; in monitoring mode unchanged rows are skipped.
  5. If enrichEmails is on, jobs that still have no email get a website and email lookup.

Output sample

A real row for an LMIA-requested cook posting (lists and description shortened, email replaced):

{
"jobId": "50437444",
"url": "https://www.jobbank.gc.ca/jobsearch/jobposting/50437444",
"title": "cook",
"employer": "Harveys/Swiss Chalet",
"postedBy": "licensed third-party",
"location": "Smiths Falls, ON",
"streetAddress": "119 Lombard Street",
"postalCode": "K7A 5B8",
"salary": { "value": "19.00 hourly", "min": 19, "max": null, "currency": "CAD", "unit": "HOUR" },
"workHours": "30 to 35 hours per week",
"hoursPerWeekMin": 30,
"hoursPerWeekMax": 35,
"employmentTerm": "Term or contract",
"employmentSchedule": "Full time",
"workSchedule": ["Early morning", "Morning", "Day", "Evening", "Night", "Weekend", "Shift", "Overtime available"],
"workLocation": "On site",
"startDate": "Starts as soon as possible",
"vacancies": 2,
"nocCode": "63200",
"nocTitle": "cook",
"lmiaStatus": "requested",
"postingSource": "Job Bank",
"sourceType": "job_bank",
"jobBankNumber": "3689898",
"languages": "English",
"education": ["Secondary (high) school graduation certificate"],
"experience": "1 year to less than 2 years",
"workSetting": ["Restaurant"],
"tasks": ["Prepare and cook complete meals or individual dishes and foods", "Supervise kitchen staff and helpers", "..."],
"requirements": { "Personal suitability": ["Dependability", "Flexibility", "Team player"] },
"whoCanApply": ["a Canadian citizen", "a permanent resident of Canada", "a temporary resident of Canada with a valid work permit"],
"medianWage": "19.00 $/hour",
"medianWageRegion": "Ottawa Region",
"datePosted": "October 06, 2026",
"validThrough": "2026-10-27",
"applyEmail": "hiring@example.ca",
"apply": {
"directApply": true,
"emails": ["hiring@example.ca"],
"mailAddress": null,
"inPerson": null,
"urls": [],
"mustInclude": [],
"screeningQuestions": [],
"referenceNumber": null
},
"description": "Education: Secondary (high) school graduation certificate. Work setting: Restaurant. Tasks: ...",
"scrapedAt": "2026-10-18T16:34:55.536Z"
}

Imported postings (sourceType: "external") have postingSource set to the source board, externalUrl and apply.urls pointing to the original ad, and no application email.

Key output fields

  • Job: title, employer, postedBy, nocCode, nocTitle, lmiaStatus, vacancies, startDate, datePosted, validThrough, description, descriptionHtml.
  • Place: location, streetAddress, locality, region, postalCode, workLocation.
  • Pay and hours: salary (min, max, currency, unit), workHours, hoursPerWeekMin, hoursPerWeekMax, medianWage, medianWageRegion.
  • Terms: employmentTerm, employmentSchedule, employmentType, workSchedule.
  • Requirements: languages, education, experience, workSetting, tasks, requirements, whoCanApply.
  • Apply: applyEmail, apply (emails, mail address, phone, in person, URLs, documents, screening questions, reference number).
  • Source: sourceType, postingSource, jobBankNumber, externalUrl, url, jobId.
  • Monitoring: changeType, changedFields.
  • Enrichment (opt-in): contactEmail, contactWebsite, emailEnrichment.

Pricing

Pay per event:

  • $0.99 per 1,000 jobs saved. The "How to apply" data is included.
  • $0.05 per contact email found by the opt-in enrichEmails lookup. Jobs that already have an application email from Job Bank are not looked up, so they are never charged for it.
  • A small start fee per run, as standard on Apify.

In monitoring mode only the rows saved are charged: unchanged jobs cost nothing.

FAQ

Do I need a proxy? No. The actor routes through residential proxy by default at no extra cost. You can supply your own under the proxy input.

Why do some jobs have no applyEmail? The employer chose another route: Direct Apply only, mail, in person, or an apply URL. Those are in apply. Postings imported from other boards link to the original ad instead.

Why did my location search return nearby towns? Job Bank's city search covers the city's area (Toronto includes North York, Etobicoke and similar). Use provinces for a whole province.

How fresh is the data? It reads Job Bank live at run time.

Can I monitor several searches? Yes. Give each schedule its own stateName, or keep one name: each set of searches gets its own record.

Explore more scrapers

For AI agents & LLM apps

Rows are typed JSON with a stable schema: numbers for salary, hours and vacancies, lists for tasks and requirements, and a changeType field in monitoring mode. Point an MCP-enabled agent at this actor to pull live Canadian job postings and employer application contacts on demand, or feed the dataset to a retrieval pipeline without post-processing.

Disclaimer

This actor collects only publicly available information from jobbank.gc.ca. Use the data in compliance with applicable laws and the site's terms of use. You are responsible for making sure your use of the data, including employer contact emails, complies with PIPEDA, CASL, GDPR and other applicable rules.

SEO keywords

Canada Job Bank scraper, jobbank.gc.ca scraper, Job Bank API, Canadian jobs API, LMIA jobs scraper, LMIA employer list, temporary foreign worker jobs, NOC code jobs, employer apply email Canada, Canada job postings data, Job Bank monitoring, new jobs alert Canada, Canadian salary data, immigration job leads, Job Bank Canada export.