Job Bank Canada LMIA Monitor avatar

Job Bank Canada LMIA Monitor

Pricing

from $5.00 / 1,000 job founds

Go to Apify Store
Job Bank Canada LMIA Monitor

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

22 days ago

Last modified

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. lmiaStatus targets requested, approved, or both, using Job Bank's own TFW filters.
  • Pay ready to compare. salaryText keeps the posted wage, and salaryMin, salaryMax, salaryCurrency and salaryPeriod turn it into numbers.
  • Regional targeting. searchKeyword, location and provinces narrow the search to an occupation and region.
  • Change-only monitoring. monitoringMode set to new_and_updated saves only new, updated and expired jobs, tagged in changeType.
  • Named watchlists. stateName keeps separate schedules apart, and resetState starts a fresh baseline.
  • Optional detail enrichment. enrichDetails opens each posting for NOC code, description, languages, hours and vacancies where Job Bank publishes them.

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

  1. 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.
  2. Choose LMIA status, Workplace type and Sort results, and set Maximum unique jobs.
  3. 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
}
FieldTypeWhat it controls
searchKeywordstringTitle, employer, skill or occupation, such as cook or nurse.
locationstringCanadian city or town, such as Toronto or Brampton.
provincesarrayProvince and territory filters; each becomes its own search.
startUrlsarrayPublic jobbank.gc.ca search or /jobpostingtfw/ URLs.
lmiaStatusstringrequested_or_approved, requested, approved or any.
onlyLmiaRequestedbooleanShortcut kept for older saved inputs.
excludeStudentbooleanDrop jobs flagged as student jobs.
workplaceTypesarrayKeep jobs whose workplace type matches.
sortBystringnewest or relevance. Default newest.
enrichDetailsbooleanOpen each posting for deeper fields. Default false.
monitoringModestringoff, new_and_updated or all. Default off.
stateNamestringName of the saved watchlist for scheduled runs.
resetStatebooleanStart a fresh baseline for this watchlist.
maxItemsintegerUnique jobs saved and billed across the run. Default 10.
proxyConfigurationobjectApify Proxy with Canadian residential routing by default.

Output

One dataset row per unique job.

FieldWhat it contains
jobId, postingId, jobNumberStable ID, Job Bank posting ID and job number
title, employerJob title and employer name
location, provinceLocation text and province code
postedDatePosting date as shown on Job Bank
salaryText, salaryMin, salaryMax, salaryCurrency, salaryPeriodPosted wage and parsed amounts
lmiaStatusrequested or approved
workplaceType, applyMethodFor example On site and Direct Apply
postedOnJobBank, isStudent, isNewJob Bank flags
jobUrl, applyUrlJob Bank posting and apply links
changeTypenew, updated or expired in monitoring mode
source, sourceType, searchUrl, collectedAtProvenance 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 ApifyClient
client = 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 situationHelpful actionExpected outcome
A broad occupationAdd provinces or a locationJobs in the regions you serve
Approved jobs onlySet lmiaStatus to approvedPostings with an approved LMIA flag
A daily alertUse monitoringMode set to new_and_updated and a stable stateNameOnly new, updated and expired jobs
NOC matchingTurn on enrichDetailsNOC code, hours and languages where published
Adult worker programsSet excludeStudent to trueStudent-flagged postings removed
A saved Job Bank searchPaste the URL in startUrlsExactly 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.