Job Bank Canada Scraper
Pricing
from $0.59 / 1,000 job scrapeds
Job Bank Canada Scraper
Scrape Canadian job postings from Job Bank (jobbank.gc.ca) by keyword and location. Get salary, employer, experience, education, and LMIA sponsorship status as JSON, CSV, or Excel.
Pricing
from $0.59 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Job Bank Canada Scraper
Scrape Canadian job postings from Job Bank (jobbank.gc.ca), the Government of Canada's national employment service. Search by job title, skill, or business name and by any Canadian city, town, or province, then export job titles, salaries, employers, weekly hours, education and experience requirements, vacancies, LMIA sponsorship status, and apply instructions as clean JSON, CSV, or Excel.
| Search Job Bank by keyword and by city or province, filter out student jobs or keep only postings with a requested LMIA, and get 20+ structured fields per job — salary, hours, education, experience, vacancies, LMIA status, postal code, expiry date, and how to apply. |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this Actor.
Actor: parsebird/jobbank-canada-scraper (Apify). Scrapes Canadian job postings from Job Bank (jobbank.gc.ca). Call it with ApifyClient.Input: {"searchKeyword": "carpenter", // job title, skill, or business name; optional"location": "Ontario", // Canadian city, town, or province; optional; a city also returns nearby postings"excludeStudent": false, // skip student-only jobs"onlyLmiaRequested": false, // keep only jobs with a requested LMIA (foreign worker sponsorship)"maxItems": 100,"proxyConfiguration": { "useApifyProxy": true }}Output: one dataset item per job — job_id, internal_id, title, url, employer, posted_date, location, zip_code, salary,hours, employment_type, vacancies, education, experience, lmia_status, work_type, apply_instructions, apply_url,expiry_date, noc_code, description, source, scraped_at.Pricing: pay-per-result. API docs: https://apify.com/parsebird/jobbank-canada-scraper/api Token: https://console.apify.com/account/integrations
What does Job Bank Canada Scraper do?
This Actor extracts job postings from Job Bank, which aggregates openings posted directly by Canadian employers alongside listings from partner job boards. It reads Job Bank's own server-rendered search results and job posting pages, so results are structured and complete — no login, no API key.
- 🔎 Keyword search — match a job title, a skill, or a specific employer's name (for example,
carpenterorTim Hortons). - 📍 Location search — enter a Canadian city, town, or province; a city search also returns postings within commuting distance, exactly like Job Bank's own site.
- 🎓 Exclude student jobs — drop postings restricted to student employment in one toggle.
- 🛂 LMIA filter — keep only postings where the employer is requesting or has obtained a Labour Market Impact Assessment (LMIA) for foreign worker sponsorship.
- 💰 Structured job details — salary rate, weekly hours, employment type, number of vacancies, required education and experience, work type (on site / hybrid / remote).
- 🧾 Application data — full "how to apply" instructions (email, phone, online, in person), the external apply URL, screening questions, posting date, and advertised-until date.
- 🇨🇦 Immigration insight — every job carries its LMIA status (
LMIA requested,LMIA approved, or none), useful for newcomers and immigration consultants.
How is this different from copying Job Bank by hand?
Job Bank shows 25 jobs per page behind a "Show more results" button and hides hours, education, experience, vacancies, LMIA status, and apply instructions inside each posting. This Actor paginates the whole result set and opens every posting, returning hundreds of fully structured jobs per run — ready for a spreadsheet, a database, or a model.
Input parameters
Every field is optional. With no keyword and no location, the Actor scrapes the newest Canadian job postings across the whole country.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| searchKeyword | string | No | — | Job title, skill keyword, or business name, e.g. carpenter. |
| location | string | No | — | Canadian city, town, or province, e.g. Brampton or Ontario. A city search also returns nearby postings. |
| excludeStudent | boolean | No | false | Skip job postings restricted to student employment. |
| onlyLmiaRequested | boolean | No | false | Keep only postings with a requested LMIA (foreign worker sponsorship). |
| maxItems | integer | No | 100 | Maximum number of job postings to retrieve. |
| proxyConfiguration | object | No | Apify Proxy | Proxy settings. Apify Proxy on the automatic setting is recommended and sufficient. |
Input example
{"searchKeyword": "carpenter","location": "Brampton","excludeStudent": false,"onlyLmiaRequested": false,"maxItems": 100,"proxyConfiguration": { "useApifyProxy": true }}
Output example
{"job_id": "3658656","internal_id": "50178439","title": "carpenter","url": "https://www.jobbank.gc.ca/jobsearch/jobposting/50178439","employer": "CFN Construction Ltd","posted_date": "August 28, 2026","location": "Saskatoon, SK S7R 0B4","zip_code": "S7R 0B4","salary": "$50,000 to $85,000 annually (To be negotiated)","hours": "80 hours bi-weekly","employment_type": "Permanent employment Full time","vacancies": 1,"education": "Registered Apprenticeship certificate","experience": "5 years or more","lmia_status": null,"work_type": "On site","apply_instructions": "By email jobs@cfnconstruction.ca Include this reference number in your application: JB-3658656","apply_url": null,"expiry_date": "2026-09-11","noc_code": "72310","description": "Languages: English. Education: Registered Apprenticeship certificate. Tasks: Read blueprints and drawings ...","source": "Job Bank","scraped_at": "2026-08-29T10:00:00.000Z"}
What data can you extract from Job Bank?
| Field | Type | Description |
|---|---|---|
| job_id | string | Public job number displayed on Job Bank, or the partner board's ID for aggregated listings. |
| internal_id | string | Job Bank database ID used in the posting URL. |
| title | string | Official job title. |
| url | string | Canonical Job Bank job posting URL. |
| employer | string | Name of the hiring company or employer. |
| posted_date | string | Date the job was posted. |
| location | string | City, province, and postal code where available. |
| zip_code | string | Canadian postal code, when the employer provides one. |
| salary | string | Listed salary rate, e.g. $36.25 hourly or $50,000 to $85,000 annually. |
| hours | string | Weekly or bi-weekly hours, e.g. 35 hours per week. |
| employment_type | string | Employment conditions, e.g. Permanent employment Full time. |
| vacancies | integer | Number of open positions. |
| education | string | Required education level or credential. |
| experience | string | Required work experience. |
| lmia_status | string | LMIA requested, LMIA approved, or null when the posting is not tied to an LMIA. |
| work_type | string | Work arrangement — On site, Hybrid, or Remote. |
| apply_instructions | string | How to apply (email, phone, online, in person) plus any screening questions and reference number. |
| apply_url | string | External apply or "learn more" URL for partner-sourced listings. |
| expiry_date | string | Advertised-until / closing date (YYYY-MM-DD). |
| noc_code | string | National Occupational Classification (NOC 2021) code for the role. |
| description | string | Full job description or the structured overview (languages, education, tasks, requirements). |
| source | string | Where the listing originated — Job Bank or a partner board such as indeed.com, Talent.com, ZipRecruiter. |
| scraped_at | string | ISO 8601 extraction timestamp. |
How to scrape Job Bank Canada
- Open the Actor and click Try for free.
- In Search keyword, enter a job title, skill, or employer name — for example,
welder. Leave it blank to scrape every posting for the location. - In Location, enter a Canadian city or province — for example,
CalgaryorAlberta. Leave it blank to search all of Canada. - Optionally turn on Exclude student jobs or Only jobs with a requested LMIA.
- Set Max items to the number of jobs you want. Start with 50 for a fast, cheap test.
- Click Start. When the run finishes, open the Storage tab and download the results as JSON, CSV, or Excel — or pull them from the API.
How much does it cost to scrape Job Bank?
This Actor uses the pay-per-result pricing model — you are charged per job posting scraped, regardless of compute time.
| Plan | Price per job | Price per 1,000 jobs |
|---|---|---|
| Free | $0.00079 | $0.79 |
| Bronze | $0.00069 | $0.69 |
| Silver | $0.00069 | $0.69 |
| Gold | $0.00059 | $0.59 |
A job is counted when it is pushed to the dataset. Scraping 1,000 jobs on the Free plan costs about $0.79. Runs that return no data cost nothing beyond a few seconds of platform usage. Your monthly Apify platform credits typically cover thousands of jobs at no extra cost.
How it works
- You provide a keyword, a location, and optional filters.
- The Actor resolves the location to Job Bank's own city or province identifier so a city search includes nearby postings.
- It loads the Job Bank search results and pages through them until
maxItemsis reached. - For every posting it opens the job page and extracts salary, hours, education, experience, vacancies, LMIA status, work type, postal code, and the advertised-until date.
- It retrieves the full "how to apply" instructions and screening questions for each posting.
- Records are deduplicated, structured, and pushed to your dataset for export as JSON, CSV, Excel, XML, or RSS.
Using the Actor via API
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run_input = {"searchKeyword": "registered nurse","location": "British Columbia","onlyLmiaRequested": False,"maxItems": 200,}run = client.actor("parsebird/jobbank-canada-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], "—", item["employer"], "—", item.get("salary"))
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const input = {searchKeyword: 'welder',location: 'Calgary',maxItems: 200,};const run = await client.actor('parsebird/jobbank-canada-scraper').call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
The Actor runs on the Apify platform, so you also get scheduling, a full REST API, webhooks, and native integrations with Make, Zapier, Google Sheets, Slack, and more. Results export as JSON, CSV, Excel, XML, or RSS.
Use cases
- Immigration and LMIA research — find Canadian employers actively sponsoring foreign workers by filtering for requested or approved LMIAs.
- Recruiting and sourcing — monitor competitor openings, vacancies, and salary ranges by role, city, or province.
- Labour market analysis — track hiring demand, wage levels, and required credentials by NOC code and region.
- Job boards and aggregators — ingest fresh, structured Canadian listings for a niche vertical.
- Newcomer job search tools — surface postings open to temporary residents with a valid work permit.
- Alerting — schedule the Actor and get notified when new jobs match a saved search.
FAQ
Do I need a Job Bank account or API key? No. The Actor only reads publicly available job postings. You just need an Apify account.
What does the LMIA filter do?
Job Bank marks postings that are tied to a Labour Market Impact Assessment — the document an employer needs to hire a temporary foreign worker. Turn on Only jobs with a requested LMIA to keep just those postings; every job in the output also carries an lmia_status field.
Does a city search only return jobs in that exact city? No — like Job Bank's own site, a city search also returns postings in surrounding areas within commuting distance. Use a province name for a wider search, or leave the location blank for all of Canada.
Why are some fields empty?
Job Bank collects full structured details (hours, education, experience, LMIA status, how to apply) for jobs posted directly by employers. Listings that come from partner boards such as Indeed or Talent.com carry fewer fields; the source field tells you where each listing originated.
How fresh are the results? Live — every run reads Job Bank directly at the moment it runs.
Can I schedule recurring runs? Yes. Use Apify's scheduler to run the Actor daily, weekly, or on any cron expression, and route new jobs onward with a webhook or integration.
How large can a run be? Job Bank caps a single search at a few thousand results. For more coverage, split the work by location or role and schedule multiple runs. Found a problem? Open an issue on the Issues tab.
Related Actors
- Indeed Jobs Scraper — job listings and company data from 60+ Indeed country editions.
- Eluta Jobs Scraper — jobs from Canadian employer career sites.
- AutoTrader.ca Scraper — Canadian vehicle listings.
- Hiring.cafe Scraper — aggregated tech and startup jobs with 20+ filters.
- Browse the full ParseBird publisher page for more scrapers.
Is it legal to scrape Job Bank?
This Actor collects only publicly available job postings from Job Bank — data that any visitor can view without logging in. It does not access private data or bypass authentication. Job Bank content is published by the Government of Canada and by employers for the purpose of recruitment. You are responsible for using the scraped data lawfully, including under Canada's privacy legislation (PIPEDA) and the GDPR or CCPA where relevant, and for respecting the purpose limitations that apply to personal data. Do not use the output to spam candidates or employers. If you plan to scrape at scale or redistribute the data commercially, seek legal advice first. See Apify's guide on the legality of web scraping.