# Canada Job Bank Scraper: Jobs, LMIA, NOC Codes & Salary Monitor (`getascraper/jobbank-scraper`) Actor

Canada Job Bank scraper for jobbank.gc.ca. Search by keyword, city, province, NOC code or salary band, filter LMIA, direct apply, remote and contract roles, and get clean job rows with employer, wage and apply route. Schedule it to receive only new, updated and expired postings.

- **URL**: https://apify.com/getascraper/jobbank-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 184 total users, 46 monthly users, 99.9% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.67 / 1,000 job leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🇨🇦 Canada Job Bank Scraper: Jobs, LMIA, NOC Codes & Salary Monitor

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#FCF2F2;border:1px solid #F5C6C2;border-top:4px solid #D52B1E;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Turn public Canadian job listings into an organised hiring feed.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Collect current Job Bank postings with salary, employer, NOC, LMIA, location, and genuine application details. Schedule it to receive only meaningful hiring changes.</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F5C6C2;border-top:none;vertical-align:top;color:#1C1917;border-radius:0 0 0 10px">
<span style="font-size:15px;font-weight:800;color:#D52B1E">🎯 Find the right roles</span><br>
<span style="font-size:12px;color:#57534E">Search by keyword, city, province, NOC, salary band, date, and work arrangement.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F5C6C2;border-top:none;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#D52B1E">🛂 Focus on LMIA</span><br>
<span style="font-size:12px;color:#57534E">Separate requested and approved LMIA postings when Job Bank publishes that status.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F5C6C2;border-top:none;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#D52B1E">🔔 Watch for change</span><br>
<span style="font-size:12px;color:#57534E">Save new, updated, and expired postings while leaving unchanged jobs out of the feed.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F5C6C2;border-top:none;border-left:none;vertical-align:top;color:#1C1917;border-radius:0 0 10px 0">
<span style="font-size:15px;font-weight:800;color:#D52B1E">✅ Keep data genuine</span><br>
<span style="font-size:12px;color:#57534E">Empty source fields stay empty. This Actor never invents employer contacts or job details.</span>
</td>
</tr>
</table>

### 🔍 What does this Actor do?

Canada Job Bank Scraper collects public Canadian jobs from jobbank.gc.ca into a structured, ready-to-use feed. It is built for job boards, recruitment operations, immigration services, and labour-market teams that need current roles without repeatedly sorting through the same listings.

Each record keeps the source's job title, employer, location, salary, NOC classification, published application route, and other details Job Bank makes available. Give it a keyword and city, provide an existing Job Bank search, or check a specific posting.

### ✨ Why teams choose it

- Keep a Canadian jobs feed current with stable job IDs and clear source links.
- Filter precisely by province, NOC code, date, LMIA status, salary and wage bands, terms of employment, work schedule, workplace type, language, direct employers, international candidates, and source.
- Run several keywords in one go, and keep keyword searches strictly on topic even when sorted newest first.
- Preserve the real application route, including an email only when the posting explicitly publishes one.
- Optionally add a contact email for each employer, taken from the company's own public website, to build outreach lists next to the job data.
- Schedule a watchlist and receive only new, updated, or expired jobs in change-only mode.
- Review Job Bank and partner-board jobs separately, instead of mixing them without a source label.

### 🧭 How it works

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#FCF2F2;border:1px solid #F5C6C2;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#D52B1E;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick your search</span><br>
<span style="font-size:12px;color:#57534E">Enter a keyword and Canadian location, or paste Job Bank links.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FCF2F2;border:1px solid #F5C6C2;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#D52B1E;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Add your filters</span><br>
<span style="font-size:12px;color:#57534E">Narrow by province, NOC code, LMIA status and salary, then set a job cap.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FCF2F2;border:1px solid #F5C6C2;border-left:none;border-radius:0 10px 10px 0;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#D52B1E;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export or monitor</span><br>
<span style="font-size:12px;color:#57534E">Run once for an export, or schedule change-only updates.</span>
</td>
</tr>
</table>

1. Choose a keyword and optional Canadian location, or paste public Job Bank search and posting links.
2. Add the filters that matter to your audience, then set the maximum number of unique jobs to collect.
3. Run once for a current export, or schedule the same search with change-only monitoring for a focused update feed.

### ⚙️ Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `searchKeyword`, `keywords`, `location` | Text and list | No | Create keyword searches with an optional Canadian city or town. Add several keywords to run each as its own search. |
| `searches` | List of search objects | No | Run several keyword and city searches together. |
| `startUrls` | List of URLs | No | Use public Job Bank search pages or individual posting pages you already know. |
| `provinces`, `nocCodes`, `datePosted` | Lists and selection | No | Narrow the source search by territory, five-digit NOC 2021 code, and posting age. |
| `annualSalaryRanges`, `hourlySalaryRanges` | Lists | No | Keep postings in Job Bank's yearly salary bands or hourly wage bands. |
| `employmentTerms`, `employmentSchedules` | Lists | No | Keep permanent, contract, seasonal, or casual roles, and full-time or part-time work. |
| `lmiaStatus`, `onlyLmiaRequested` | Selection and toggle | No | Return any job, LMIA requested jobs, approved jobs, or both LMIA categories. |
| `excludeStudent`, `excludeApprentice`, `excludePlacementAgencies` | Toggles | No | Leave out student jobs, apprentice jobs, or postings from placement agencies. |
| `internationalCandidatesOnly`, `directApplyOnly` | Toggles | No | Keep employers open to international candidates, or postings that accept Job Bank Direct Apply. |
| `sourceType`, `workplaceTypes`, `languages` | Selections and lists | No | Choose Job Bank or external-board postings, workplace arrangement, and source-published language requirements. |
| `enrichEmails` | Toggle | No | Optional. Finds a contact email on each employer's own public website and adds it to the job row. Off by default. |
| `sortBy`, `maxItems` | Selection and number | No | Choose best match or newest first, then cap the total number of unique jobs. |
| `monitoringMode`, `stateName`, `resetState` | Selection, text, and toggle | No | Create an independent saved watchlist and decide whether to return only changes or all current jobs. |
| `proxyConfiguration` | Connection setting | No | Uses the prefilled Apify Proxy setting unless you provide another valid configuration. |

### 📦 Data you receive

Fields are created only from details that Job Bank or the linked partner posting publishes. Missing information remains empty rather than being replaced with placeholders.

| Field | Type | Description |
| --- | --- | --- |
| `stable_id`, `job_id`, `source_job_id` | Text | Stable identifiers for deduplication and monitoring. |
| `source`, `source_name`, `url` | Text and link | Whether the role is on Job Bank or an external board, plus its original posting link. |
| `title`, `original_title`, `employer` | Text | The published role and employer details. |
| `location`, `city`, `province`, `postal_code` | Text | Published Canadian location information. |
| `description`, `description_html` | Text | Job description in readable and source-markup forms when available. |
| `noc_code`, `noc_title`, `lmia_status` | Text | NOC classification and published LMIA status. |
| `date_posted`, `expiry_date`, `valid_through` | Date | Job posting and validity dates when the source provides them. |
| `salary`, `salary_min`, `salary_max`, `salary_currency`, `salary_unit` | Text and number | Published compensation details. |
| `employment_type`, `hours`, `hours_per_week`, `vacancies` | Text and number | Published work arrangement, hours, and vacancy count. |
| `workplace_type`, `languages`, `education`, `experience` | Text and list | Workplace, language, education, and experience requirements. |
| `tasks`, `skills`, `benefits`, `credentials` | Lists | Responsibilities, skills, benefits, and credentials from the listing. |
| `application_url`, `application_method`, `application_email`, `apply_instructions` | Link and text | The published application route. Email is included only when explicitly listed. |
| `employer_email`, `employer_email_kind`, `employer_email_domain`, `employer_email_source`, `employer_email_source_url`, `email_enrichment_status` | Text | Only with `enrichEmails`. The email, whether it is a company mailbox (`generic`) or looks like a person (`named`), where it was found, and the lookup result (`found`, `not_found`, `failed`, `skipped`). Fields are left out when no email is found. |
| `change_type`, `changed_fields`, `first_seen_at`, `last_seen_at`, `expired_at` | Text and date | Change-only monitoring context for new, updated, and expired jobs. |

### 🔔 Change-only monitoring

The first run with `new_and_updated` establishes a baseline and labels current records as `NEW`. Later runs save only `NEW`, `UPDATED`, and verified `EXPIRED` records. Unchanged jobs are kept in the saved watchlist state but are not written to the dataset in this mode.

Use the same `stateName` and the same search scope for every scheduled run. A failed or capped run does not advance expiry checks, helping prevent false expired signals.

### 💰 Pricing

This Actor uses pay-per-result pricing. You pay for records saved to the dataset, with the current event rates shown on the Apify Store page. In change-only monitoring, unchanged jobs are not saved as results. Optional employer email discovery is a separate charge, billed only on jobs where an email is actually found; an email already listed in the posting is never billed. There is no separate subscription required to get started. Free Apify plans can collect up to 100 jobs per run and 10 runs per day; paid plans have no such limit.

### ⭐ Enjoying Canada Job Bank Scraper?

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:20px 24px 14px;background:#FCF2F2;border:1px solid #FCF2F2;border-left:5px solid #D52B1E;border-radius:10px 10px 0 0;color:#1C1917">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Source live Canadian job postings with salary, employer, and LMIA sponsorship status for immigration-ready leads.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other immigration consultants and recruiters find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#D52B1E;border:1px solid #D52B1E;border-left:5px solid #D52B1E;border-top:none;border-radius:0 0 10px 10px;text-align:center;color:#FFFFFF">
<a href="https://apify.com/getascraper/jobbank-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ Frequently asked questions

#### Can I track a single city or occupation?

Yes. Use the keyword and Canadian city fields, or create several city and keyword searches in one run. You can also target a province or NOC code.

#### What does the LMIA filter include?

Choose LMIA requested, LMIA approved, or both. The Actor keeps the source-published status on each result so you can keep those groups separate after collection.

#### How do recurring updates work?

Schedule the Actor with `new_and_updated`, retain the same state name and search scope, and use the resulting change feed in your workflow. A first monitoring run establishes the starting point; later successful runs save meaningful changes.

#### How does employer email discovery work?

Turn on `enrichEmails`. For each employer, the Actor uses the apply email from the posting when there is one. Otherwise it reads the employer website linked in the posting, or finds the company's own website and confirms it matches the employer, then reads its contact pages. Only addresses the company itself publishes are returned, for example info@ or careers@. A few small businesses publish a personal-looking address on their site; those are labelled `named`. It is best effort: in our test about 4 in 10 jobs got an email, and some employers publish none. Lookups run once per employer, so several jobs from the same company share one result.

#### Why is an employer contact or salary empty?

Some listings do not publish every detail. Empty fields indicate the source did not make that information available. The Actor does not create generic contacts, salaries, or job attributes.

### 🔗 Other actors

- [HigherEdJobs Scraper: Academic & University Listings](https://apify.com/getascraper/higheredjobs-com-scraper)
- [CWJobs scraper: UK tech jobs, salaries & geo](https://apify.com/getascraper/cwjobs-scraper)
- [EdJoin Scraper: K-12 Teaching, Certificated and Classified Job Listings](https://apify.com/getascraper/edjoin-scraper)
- [HN Who is Hiring Scraper](https://apify.com/getascraper/hn-hiring-scraper)
- [AllJobs.co.il Scraper](https://apify.com/getascraper/alljobs-scraper)

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/jobbank-scraper/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

Optional public Job Bank search or individual posting URLs. They are added alongside search-builder inputs, so use this for a precise saved search or a direct job check.

## `searchKeyword` (type: `string`):

A title, employer, skill, or occupation query, such as carpenter, nurse, or Python. This original field remains supported for saved tasks.

## `keywords` (type: `array`):

Optional list of keywords, each run as its own search with the city above. Use it to cover several occupations in one run.

## `searches` (type: `array`):

Optional JSON list of separate searches, for example \[{"keyword":"carpenter","location":"Toronto"}]. The single keyword and city fields are added too when supplied.

## `location` (type: `string`):

A Canadian city or town, such as Toronto or Brampton. The Actor resolves it through Job Bank's official location service so the search stays city-specific.

## `provinces` (type: `array`):

Optional territory-wide filter. Use this instead of the city field when you want a province or territory.

## `nocCodes` (type: `array`):

Optional five-digit NOC 2021 occupation codes. Each code is sent to Job Bank's source search filter.

## `datePosted` (type: `string`):

Limit the source search by Job Bank's published date facet.

## `sortBy` (type: `string`):

Choose Job Bank's best-match ordering or its most-recent ordering.

## `employmentSchedules` (type: `array`):

Keep full-time, part-time, or both. The source search is narrowed first and each extracted posting is checked again.

## `employmentTerms` (type: `array`):

Keep permanent, contract, seasonal, or casual postings using Job Bank's own terms facet.

## `annualSalaryRanges` (type: `array`):

Keep postings in Job Bank's yearly salary bands (CAD). Select several to combine bands.

## `hourlySalaryRanges` (type: `array`):

Keep postings in Job Bank's hourly wage bands (CAD). Select several to combine bands.

## `workplaceTypes` (type: `array`):

Keep postings where Job Bank explicitly publishes the selected work location wording.

## `languages` (type: `array`):

Keep postings with an explicit source language requirement.

## `lmiaStatus` (type: `string`):

Uses Job Bank's LMIA requested and approved facets. Select both to create two source-filtered searches and merge their unique jobs.

## `onlyLmiaRequested` (type: `boolean`):

Backward-compatible shortcut for existing tasks. When enabled, it returns both requested and approved LMIA postings unless a specific LMIA status is selected above.

## `internationalCandidatesOnly` (type: `boolean`):

Keep only employers that accept both Canadians and international candidates, using Job Bank's own facet.

## `directApplyOnly` (type: `boolean`):

Keep only postings that accept applications through Job Bank Direct Apply. Checked on each posting, so raise the maximum jobs for a wider scan.

## `sourceType` (type: `string`):

Keep official Job Bank postings, external job-board postings, or both. The Actor verifies this from the individual posting.

## `excludePlacementAgencies` (type: `boolean`):

Leave out postings published by recruitment and placement agencies, keeping direct employers.

## `excludeStudent` (type: `boolean`):

Applies Job Bank's source filter and checks the posting flag before a row is saved.

## `excludeApprentice` (type: `boolean`):

Applies Job Bank's own apprenticeship filter so apprentice postings are left out.

## `enrichEmails` (type: `boolean`):

Optional add-on. For each employer, finds a contact email on the company's own public website (for example info@ or careers@) and adds it to the job row. If the posting itself lists an apply email, that one is used and costs nothing extra. Not guaranteed: many employers publish no email. Billed only on rows where an email is found.

## `monitoringMode` (type: `string`):

For scheduled runs, save only new, updated, and expired jobs by default. Unchanged jobs are not written or charged in change-only mode.

## `stateName` (type: `string`):

Separates one saved watchlist, customer, or schedule from another. Keep it stable for recurring runs.

## `resetState` (type: `boolean`):

Treat the next successful monitoring run as a fresh baseline. This affects only the current state name and search scope.

## `maxItems` (type: `integer`):

Maximum unique job records collected across every supplied search. Monitoring expiry detection waits for an uncapped complete search.

## `proxyConfiguration` (type: `object`):

Leave the default. The Actor connects directly first, which is fastest and cheapest, and switches to the Apify datacenter proxy only if Job Bank blocks a request. Choose proxy groups or a country to force a specific proxy.

## Actor input object example

```json
{
  "startUrls": [],
  "searchKeyword": "",
  "keywords": [],
  "searches": [],
  "location": "",
  "provinces": [],
  "nocCodes": [],
  "datePosted": "any",
  "sortBy": "relevance",
  "employmentSchedules": [],
  "employmentTerms": [],
  "annualSalaryRanges": [],
  "hourlySalaryRanges": [],
  "workplaceTypes": [],
  "languages": [],
  "lmiaStatus": "any",
  "onlyLmiaRequested": false,
  "internationalCandidatesOnly": false,
  "directApplyOnly": false,
  "sourceType": "any",
  "excludePlacementAgencies": false,
  "excludeStudent": false,
  "excludeApprentice": false,
  "enrichEmails": false,
  "monitoringMode": "off",
  "stateName": "default",
  "resetState": false,
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Structured current jobs or meaningful monitoring changes.

## `runSummary` (type: `string`):

Discovery, filtering, failure, and monitoring counts for the run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [],
    "searchKeyword": "",
    "keywords": [],
    "searches": [],
    "location": "",
    "provinces": [],
    "nocCodes": [],
    "datePosted": "any",
    "sortBy": "relevance",
    "employmentSchedules": [],
    "employmentTerms": [],
    "annualSalaryRanges": [],
    "hourlySalaryRanges": [],
    "workplaceTypes": [],
    "languages": [],
    "lmiaStatus": "any",
    "onlyLmiaRequested": false,
    "internationalCandidatesOnly": false,
    "directApplyOnly": false,
    "sourceType": "any",
    "excludePlacementAgencies": false,
    "excludeStudent": false,
    "excludeApprentice": false,
    "enrichEmails": false,
    "monitoringMode": "off",
    "stateName": "default",
    "resetState": false,
    "maxItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/jobbank-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [],
    "searchKeyword": "",
    "keywords": [],
    "searches": [],
    "location": "",
    "provinces": [],
    "nocCodes": [],
    "datePosted": "any",
    "sortBy": "relevance",
    "employmentSchedules": [],
    "employmentTerms": [],
    "annualSalaryRanges": [],
    "hourlySalaryRanges": [],
    "workplaceTypes": [],
    "languages": [],
    "lmiaStatus": "any",
    "onlyLmiaRequested": False,
    "internationalCandidatesOnly": False,
    "directApplyOnly": False,
    "sourceType": "any",
    "excludePlacementAgencies": False,
    "excludeStudent": False,
    "excludeApprentice": False,
    "enrichEmails": False,
    "monitoringMode": "off",
    "stateName": "default",
    "resetState": False,
    "maxItems": 25,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/jobbank-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [],
  "searchKeyword": "",
  "keywords": [],
  "searches": [],
  "location": "",
  "provinces": [],
  "nocCodes": [],
  "datePosted": "any",
  "sortBy": "relevance",
  "employmentSchedules": [],
  "employmentTerms": [],
  "annualSalaryRanges": [],
  "hourlySalaryRanges": [],
  "workplaceTypes": [],
  "languages": [],
  "lmiaStatus": "any",
  "onlyLmiaRequested": false,
  "internationalCandidatesOnly": false,
  "directApplyOnly": false,
  "sourceType": "any",
  "excludePlacementAgencies": false,
  "excludeStudent": false,
  "excludeApprentice": false,
  "enrichEmails": false,
  "monitoringMode": "off",
  "stateName": "default",
  "resetState": false,
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/jobbank-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/jobbank-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/QujUhE42pEQwAQbvR/builds/EyiHigpkPoeD8TLqs/openapi.json
