Canada Job Bank Scraper avatar

Canada Job Bank Scraper

Pricing

Pay per event

Go to Apify Store
Canada Job Bank Scraper

Canada Job Bank Scraper

🍁 Extract complete Canada Job Bank postings with employers, salaries, LMIA signals, qualifications, responsibilities, benefits, dates, and application details.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Share

Extract structured Canadian job listings from the public Government of Canada Job Bank.

Canada Job Bank Scraper turns keyword searches, locations, search-result URLs, and individual posting URLs into analysis-ready records. Each result includes the employer, pay, location, employment terms, qualifications, responsibilities, technologies, benefits, LMIA signals, and application details available on the source page.

Use the dataset in spreadsheets, ATS pipelines, labour-market dashboards, lead research, or scheduled monitors—without maintaining a crawler.

  • 🍁 Public Job Bank search and detail pages
  • 💵 Normalized salary values and currency
  • 🧭 City, province, postal code, and work-location status
  • 🛂 Requested and approved LMIA signals
  • 📋 Requirements, tasks, technologies, and benefits
  • 🔗 CSV, Excel, JSON, XML, API, webhooks, and integrations

What does Canada Job Bank Scraper do?

The Actor searches jobbank.gc.ca, follows posting links, and saves one normalized record per job.

It supports three practical routes:

  1. Search by one or more keywords.
  2. Preserve filters from complete Job Bank search URLs.
  3. Enrich individual Job Bank posting URLs.

The crawler removes temporary session identifiers from URLs and deduplicates postings by canonical ID. It stops when maxItems is reached.

By default, search workflows keep jobs posted directly on Job Bank. Enable includeExternalJobs when you also want externally sourced listings shown by Job Bank.

Who is it for?

Recruiters and staffing teams

Build current candidate-market and employer datasets by title, skill, and Canadian location.

Job aggregators and ATS vendors

Normalize Job Bank records into a stable schema for search, matching, enrichment, or ingestion.

Immigration and LMIA researchers

Monitor postings that show requested or approved Labour Market Impact Assessment signals.

Labour-market analysts

Track pay ranges, employment terms, demand, technologies, and geographic patterns over time.

Data and automation teams

Schedule repeatable exports and send fresh results to databases, queues, webhooks, or cloud storage.

Why use this Canada jobs scraper?

  • ✅ No Job Bank account is required for public listings.
  • ✅ Search and detail extraction are combined in one run.
  • ✅ Explicit URLs and discovery inputs share the same filters.
  • ✅ Numeric salary and hours fields are ready for analysis.
  • ✅ Arrays preserve tasks, technologies, benefits, and qualifications.
  • ✅ Conservative HTTP requests avoid a costly browser runtime.
  • maxItems gives predictable run size and spend.
  • ✅ Total extraction failure returns a failed run instead of silent empty data.

What Canada Job Bank data can I extract?

FieldDescription
jobBankIdPosting ID from the canonical URL
jobBankNumberPublic Job Bank job number
urlCanonical posting URL
titleJob title
employerHiring employer
employerWebsiteLinked employer website when present
datePostedDisplayed posting date
validThroughAdvertised-until date
city, province, postalCodeStructured location
workLocationOn site, remote, or hybrid
salaryMin, salaryMaxNumeric salary range
salaryCurrency, salaryUnitCurrency and period
hoursPerWeekWeekly hours when stated
employmentTypePermanent, temporary, full-time, or part-time terms
vacanciesNumber of openings
directApplyWhether Job Bank Direct Apply is available
lmiaRequested, lmiaApprovedLMIA signals
language, education, experienceCandidate requirements
workSettingWorkplace or industry settings
tasksResponsibilities listed by the employer
technologiesSoftware and technical knowledge
benefitsListed employee benefits
applicationMethodHow the posting directs candidates to apply
descriptionComplete structured source description
scrapedAtUTC extraction timestamp

Fields absent from a particular posting are omitted rather than filled with invented values.

How to scrape Canada Job Bank jobs

  1. Open the Actor input page.
  2. Enter one or more job keywords, such as software developer.
  3. Optionally enter a location such as Toronto, ON.
  4. Set a small maxItems for your first run.
  5. Choose Direct Apply, remote/hybrid, or LMIA filters if needed.
  6. Click Start.
  7. Preview results in the Dataset tab.
  8. Export to JSON, CSV, Excel, XML, or your integration.

For source-specific monitoring, paste a complete Job Bank search URL into searchUrls. Existing source filters and pagination parameters are preserved.

Input parameters

InputTypeDefaultPurpose
keywordsstring arraysoftware developerSearch title, skill, or employer terms
locationstringToronto, ONNarrow keyword searches geographically
searchUrlsURL arrayemptyJob Bank search or posting URLs
maxItemsinteger10Maximum saved postings
includeExternalJobsbooleanfalseInclude externally sourced listings
directApplyOnlybooleanfalseRequire Direct Apply
remoteOnlybooleanfalseRequire remote or hybrid work
lmiaStatusenumanyAny, requested, or approved LMIA
maxConcurrencyinteger5Parallel detail requests, maximum 10
proxyConfigurationobjectdisabledOptional Apify Proxy settings

Provide at least one keyword or URL. Only public www.jobbank.gc.ca/jobsearch/ URLs are accepted.

Example input: keyword and location

{
"keywords": ["software developer", "data engineer"],
"location": "Toronto, ON",
"maxItems": 25,
"includeExternalJobs": false
}

This discovers matching postings, follows detail pages, and saves up to 25 unique jobs.

Example input: LMIA lead research

{
"keywords": ["cook", "truck driver"],
"lmiaStatus": "approved",
"maxItems": 50
}

The filter is checked against the extracted posting. Unknown values do not pass a requested or approved LMIA filter.

Example input: specific posting URLs

{
"searchUrls": [
{ "url": "https://www.jobbank.gc.ca/jobsearch/jobposting/49875004" }
],
"maxItems": 1
}

Use this mode to enrich known posting IDs from an ATS, spreadsheet, or monitoring queue.

Output example

{
"jobBankId": "49875004",
"jobBankNumber": "3618826",
"url": "https://www.jobbank.gc.ca/jobsearch/jobposting/49875004",
"title": "software developer",
"employer": "Corinex",
"city": "Vancouver",
"province": "BC",
"postalCode": "V6E 3V7",
"workLocation": "On site",
"salaryMin": 96000,
"salaryMax": 100000,
"salaryCurrency": "CAD",
"salaryUnit": "YEAR",
"hoursPerWeek": 30,
"directApply": true,
"lmiaRequested": false,
"lmiaApproved": false,
"applicationMethod": "Direct Apply on Job Bank",
"source": "Government of Canada Job Bank"
}

The real record can also contain employment terms, vacancies, requirements, tasks, technologies, benefits, and a full description.

How much does it cost to scrape Canada Job Bank?

The Actor uses pay-per-event pricing:

  • one small Actor start charge per run;
  • one item charge for each complete job posting saved.

Your Apify plan tier determines the item rate and higher tiers receive volume discounts. The input page shows the current live price before a run starts.

Keep early tests inexpensive with maxItems: 10. A run that saves no records does not incur item charges, though the start event still covers setup and validation work.

Search filters and source behavior

Job Bank search URLs are useful when you need filters not represented as separate Actor fields. Configure the search on Job Bank, copy the resulting URL, and pass it through searchUrls.

The Actor applies these product filters after extraction:

  • Direct Apply only;
  • remote or hybrid only;
  • LMIA requested;
  • LMIA approved.

This means direct posting URLs cannot bypass a selected filter.

By default, externally aggregated results are excluded from search pages. Individual posting URLs remain extractable when they are valid public Job Bank detail pages.

Pagination, limits, and deduplication

Keyword and search-URL workflows request additional result pages until:

  • maxItems candidates are collected;
  • no new posting IDs appear; or
  • the source returns no result cards.

Temporary jsessionid segments and tracking queries are stripped from posting URLs. Duplicate IDs from multiple keywords or search URLs are fetched once.

If you supply overlapping searches, set maxItems to the total unique jobs you need, not the sum of each search page.

Tips for reliable job data workflows

  • 🎯 Start with precise titles rather than very broad words.
  • 📍 Include a city or province when geography matters.
  • 🔁 Schedule searches daily for incremental monitoring.
  • 🆔 Store jobBankId as your external deduplication key.
  • 📅 Use validThrough to remove expired opportunities.
  • 💰 Compare salaries only after grouping by salaryUnit.
  • 🛂 Treat LMIA indicators as source signals, not legal advice.
  • 🧪 Test a copied search URL with 10 items before scaling.
  • ⚙️ Keep concurrency conservative for this public service.

Integrations and automation workflows

ATS enrichment

Send newly discovered posting URLs from your ATS, then merge results by jobBankId.

LMIA lead monitor

Schedule approved-LMIA searches and trigger a webhook when a new employer or posting appears.

Salary intelligence warehouse

Export numeric salary fields to BigQuery, Snowflake, PostgreSQL, or a spreadsheet. Normalize annual and hourly units downstream.

Job alert pipeline

Use Zapier or Make to notify Slack, email, or Microsoft Teams when records match title, location, pay, or technology rules.

Labour-market dashboard

Connect the dataset API to Power BI, Tableau, Looker Studio, or a notebook for time-series and geographic analysis.

Use Canada Job Bank Scraper with the API

Replace <APIFY_TOKEN> with your token. Actor ID paths use automation-lab/canada-job-bank-scraper.

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/canada-job-bank-scraper').call({
keywords: ['software developer'],
location: 'Toronto, ON',
maxItems: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/canada-job-bank-scraper').call(run_input={
'keywords': ['software developer'],
'location': 'Toronto, ON',
'maxItems': 10,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~canada-job-bank-scraper/runs?token=<APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"keywords":["software developer"],"location":"Toronto, ON","maxItems":10}'

Use with MCP and AI agents

Expose the Actor to Claude Code with Apify MCP:

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

For Claude Desktop, Cursor, or VS Code, add this server configuration:

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

Example prompts for MCP usage:

  • “Use the Canada Job Bank Scraper MCP tool to find 20 software jobs in Toronto and compare annual salary ranges.”
  • “Extract this Job Bank posting and summarize required technologies.”
  • “Find approved-LMIA cook postings and group employers by province.”
  • “Monitor remote data engineer jobs and return only new posting IDs.”

Data quality and limitations

Results reflect public Job Bank pages at extraction time.

Some employers do not provide every optional field. Missing values are omitted rather than guessed. The Actor does not infer salary periods, immigration eligibility, remote status, or LMIA approval.

Application instructions can be interactive on Job Bank. The Actor reports Direct Apply availability and points users to the canonical posting for the current application process.

Postings may expire or be removed between search discovery and detail fetching. One removed record is skipped; if every candidate fails extraction, the run fails visibly.

The Actor accesses public pages without logging in or bypassing access controls. Users remain responsible for their use of the data, applicable website terms, privacy law, employment rules, and downstream communications.

Do not use job data for discrimination, spam, misrepresentation, or automated employment decisions without appropriate safeguards.

Collect only what your workflow needs, respect source capacity, and define retention periods. For legal questions, consult qualified counsel.

FAQ

Does this require a Job Bank account?

No. Public searches and posting details are available anonymously. Account-only features such as saved favourites are outside this Actor.

Yes. Paste its full URL into searchUrls. The Actor preserves source query parameters and handles pagination.

Can I extract one job posting?

Yes. Pass its /jobsearch/jobposting/<id> URL and set maxItems to 1.

How do I find LMIA jobs?

Set lmiaStatus to requested or approved. The Actor fails closed when that signal is not present.

Why did my run return fewer records than maxItems?

The source may have fewer unique matching postings, filters may exclude records, or a posting may have expired between discovery and extraction.

Why did my no-results run fail?

A failed status prevents scheduled pipelines from treating total extraction failure as successful fresh data. Check spelling, URLs, location, and restrictive filters.

Are salaries always annual?

No. Read salaryUnit before comparing values. Job Bank may report hourly, weekly, monthly, or annual pay.

Does the Actor contact employers or apply for jobs?

No. It extracts public listing data only.

Build broader recruiting and labour-market workflows with other automation-lab Actors:

Use Canada Job Bank Scraper when the official Canadian source, Job Bank numbers, LMIA signals, and detailed Canadian location and employment fields are essential.

Support

If a public Job Bank page works in your browser but the Actor cannot extract it, open an issue from the Actor page and include:

  • the input used;
  • the affected public URL;
  • the run ID;
  • the field or behavior you expected.

Do not include private credentials or candidate personal data. Reproducible examples help us investigate source changes quickly.