Job Bank Canada LMIA Monitor
Pricing
from $5.00 / 1,000 job founds
Job Bank Canada LMIA Monitor
Scrape and monitor Job Bank Canada temporary foreign worker jobs with LMIA requested or approved status, salaries, employers and change alerts, for immigration recruiters sourcing TFW openings. Each job has title, employer, location, salary, LMIA status and URL.
Pricing
from $5.00 / 1,000 job founds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
22 days ago
Last modified
Categories
Share
What is Job Bank Canada LMIA Monitor?
Job Bank Canada LMIA Monitor extracts public Job Bank Canada temporary foreign worker (TFW) job postings flagged as LMIA requested or approved LMIA, and returns them as a dataset with one row per unique job. Each row includes the job title, employer, location, province, posting date, salary text with parsed hourly or annual amounts in CAD, LMIA status, workplace type, apply method, student flag and the Job Bank job URL. Immigration consultants, TFW recruiters, settlement agencies and AI agents use it to source LMIA-linked openings and to set up scheduled, change-only alerts on new and updated jobs.
Why recruiters use this LMIA job monitor
- LMIA-linked jobs only.
lmiaStatustargets requested, approved, or both, using Job Bank's own TFW filters. - Pay ready to compare.
salaryTextkeeps the posted wage, andsalaryMin,salaryMax,salaryCurrencyandsalaryPeriodturn it into numbers. - Regional targeting.
searchKeyword,locationandprovincesnarrow the search to an occupation and region. - Change-only monitoring.
monitoringModeset tonew_and_updatedsaves only new, updated and expired jobs, tagged inchangeType. - Named watchlists.
stateNamekeeps separate schedules apart, andresetStatestarts a fresh baseline. - Optional detail enrichment.
enrichDetailsopens each posting for NOC code, description, languages, hours and vacancies where Job Bank publishes them.
Best fit and related Actors
Best fit for public Job Bank Canada postings in the TFW pool: sourcing LMIA-supported roles for clients, tracking employers that request LMIAs, or a daily alert on new LMIA jobs for an occupation such as cook, truck driver or caregiver.
- For visa-sponsoring roles in other countries, continue with Visa Sponsored Jobs Scraper for a wider sponsorship search.
- When you also want general Canadian listings from Indeed, use Indeed Job Scraper alongside this monitor.
Example workflow: from an occupation to a daily LMIA alert
An immigration consultancy starts with searchKeyword set to cook, provinces set to Alberta and British Columbia, lmiaStatus set to requested_or_approved and maxItems set to 50. The first run returns each job's title, employer, location, salaryMin, salaryPeriod, lmiaStatus and jobUrl. They then switch monitoringMode to new_and_updated with stateName set to cooks-west, schedule the input every morning, and feed only the rows tagged new into their client-matching sheet.
How to monitor Job Bank LMIA jobs
- Enter a Search keyword such as
cook, or leave it empty for the newest TFW pool. Optionally add a Canadian city or Provinces and territories. - Choose LMIA status, Workplace type and Sort results, and set Maximum unique jobs.
- For alerts, set Monitoring output to
new_and_updated, give the watchlist a Monitoring state name, and attach a schedule.
Input
{"searchKeyword": "cook","lmiaStatus": "requested_or_approved","sortBy": "newest","enrichDetails": false,"monitoringMode": "off","maxItems": 10}
Scheduled change-only monitor:
{"searchKeyword": "truck driver","lmiaStatus": "approved","monitoringMode": "new_and_updated","stateName": "truck-approved","excludeStudent": true,"maxItems": 100}
| Field | Type | What it controls |
|---|---|---|
searchKeyword | string | Title, employer, skill or occupation, such as cook or nurse. |
location | string | Canadian city or town, such as Toronto or Brampton. |
provinces | array | Province and territory filters; each becomes its own search. |
startUrls | array | Public jobbank.gc.ca search or /jobpostingtfw/ URLs. |
lmiaStatus | string | requested_or_approved, requested, approved or any. |
onlyLmiaRequested | boolean | Shortcut kept for older saved inputs. |
excludeStudent | boolean | Drop jobs flagged as student jobs. |
workplaceTypes | array | Keep jobs whose workplace type matches. |
sortBy | string | newest or relevance. Default newest. |
enrichDetails | boolean | Open each posting for deeper fields. Default false. |
monitoringMode | string | off, new_and_updated or all. Default off. |
stateName | string | Name of the saved watchlist for scheduled runs. |
resetState | boolean | Start a fresh baseline for this watchlist. |
maxItems | integer | Unique jobs saved and billed across the run. Default 10. |
proxyConfiguration | object | Apify Proxy with Canadian residential routing by default. |
Output
One dataset row per unique job.
| Field | What it contains |
|---|---|
jobId, postingId, jobNumber | Stable ID, Job Bank posting ID and job number |
title, employer | Job title and employer name |
location, province | Location text and province code |
postedDate | Posting date as shown on Job Bank |
salaryText, salaryMin, salaryMax, salaryCurrency, salaryPeriod | Posted wage and parsed amounts |
lmiaStatus | requested or approved |
workplaceType, applyMethod | For example On site and Direct Apply |
postedOnJobBank, isStudent, isNew | Job Bank flags |
jobUrl, applyUrl | Job Bank posting and apply links |
changeType | new, updated or expired in monitoring mode |
source, sourceType, searchUrl, collectedAt | Provenance and collection time |
With enrichDetails on, rows also carry nocCode, nocTitle, descriptionSnippet, descriptionText, languages, employmentTerms, hoursPerWeek, vacancies and expiresOn where the posting publishes them; with enrichment off these stay null.
{"jobId": "jobbank:50389145","postingId": "50389145","jobNumber": "3683938","title": "cook","employer": "Les Résidences Trois Ormes","location": "Location Québec (QC)","province": "QC","postedDate": "September 29, 2026","salaryText": "$22.83 hourly","salaryMin": 22.83,"salaryMax": 22.83,"salaryCurrency": "CAD","salaryPeriod": "hourly","lmiaStatus": "requested","workplaceType": "On site","applyMethod": "Direct Apply","postedOnJobBank": true,"isStudent": false,"isNew": true,"jobUrl": "https://www.jobbank.gc.ca/jobsearch/jobpostingtfw/50389145","applyUrl": "https://www.jobbank.gc.ca/jobsearch/jobpostingtfw/50389145","source": "jobbank","sourceType": "job_bank","searchUrl": "https://www.jobbank.gc.ca/jobsearch/jobsearch?fsrc=32&page=1&sort=D&searchstring=cook","changeType": null,"nocCode": null,"nocTitle": null,"descriptionSnippet": null,"descriptionText": null,"languages": [],"employmentTerms": null,"hoursPerWeek": null,"vacancies": null,"expiresOn": null,"collectedAt": "2026-10-01T01:47:27.059Z"}
Pricing
This Actor uses Pay per event with Apify platform usage included in the event price. You pay one Job found event for each unique job saved to the dataset and one Actor Start event per run. In change-only monitoring, unchanged jobs are skipped and never charged, and maxItems caps the job events.
Worked example in words: a first run that saves fifty cook jobs costs fifty Job found events plus one Actor Start event. A later daily monitoring run that finds four new jobs costs four Job found events plus one Actor Start event. Check the live Pricing tab on this page for current event prices.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~monitor-jobbank-canada-lmia/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"searchKeyword": "cook", "lmiaStatus": "requested", "maxItems": 10}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/monitor-jobbank-canada-lmia").call(run_input={"searchKeyword": "caregiver","lmiaStatus": "approved","monitoringMode": "new_and_updated","stateName": "caregiver-approved","maxItems": 50,})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["changeType"], job["title"], job["employer"], job["salaryText"], job["jobUrl"])
Use with AI agents (MCP)
Connect the Actor to Claude, ChatGPT, Cursor or any MCP client through Apify MCP and ask:
Search Job Bank Canada for LMIA-requested cook jobs in Alberta and return up to 10 rows with title, employer, location, hourly wage, LMIA status and job link.
The agent sets searchKeyword, provinces, lmiaStatus and maxItems, reads rows from the dataset, and cites each job by jobUrl and collectedAt. maxItems sets the cost scope before the run starts, and monitoring mode keeps repeat runs to changed jobs only.
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| A broad occupation | Add provinces or a location | Jobs in the regions you serve |
| Approved jobs only | Set lmiaStatus to approved | Postings with an approved LMIA flag |
| A daily alert | Use monitoringMode set to new_and_updated and a stable stateName | Only new, updated and expired jobs |
| NOC matching | Turn on enrichDetails | NOC code, hours and languages where published |
| Adult worker programs | Set excludeStudent to true | Student-flagged postings removed |
| A saved Job Bank search | Paste the URL in startUrls | Exactly the filters you set on Job Bank |
Builder's note
I built this monitor on Job Bank's public TFW search, using the same LMIA filters the site offers, so every row is a posting Job Bank itself flags. I designed monitoring around named states because consultants run several watchlists at once, one per occupation or region. I kept detail enrichment optional since search cards already answer the first question, which employer is hiring and at what wage, and enrichment is there when you need NOC codes.
FAQ
Do I need a Job Bank or IRCC account?
No. The Actor reads public Job Bank postings.
What does monitoring mode return?
With new_and_updated, each run saves only jobs that are new, changed or expired since the last run for the same stateName, tagged in changeType.
How do I get the NOC code?
Turn on enrichDetails. The Actor then opens each posting and adds NOC and description fields where Job Bank publishes them.
Which proxy should I use?
Keep the default Apify Proxy with Canadian residential routing.
Responsible use
This Actor collects public job postings from Job Bank Canada. Use it for lawful recruitment and research, in line with Job Bank's terms of use and applicable privacy laws. This independent Actor is not affiliated with ESDC, IRCC or the Government of Canada.