{
  "openapi": "3.0.1",
  "info": {
    "title": "Canada Job Bank Scraper: Jobs, LMIA, NOC Codes & Salary Monitor",
    "description": "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.",
    "version": "0.5",
    "x-build-id": "EyiHigpkPoeD8TLqs"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~jobbank-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-jobbank-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/getascraper~jobbank-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-jobbank-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/getascraper~jobbank-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-jobbank-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Job Bank search or posting URLs",
            "type": "array",
            "description": "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.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchKeyword": {
            "title": "Search keyword",
            "type": "string",
            "description": "A title, employer, skill, or occupation query, such as carpenter, nurse, or Python. This original field remains supported for saved tasks.",
            "default": ""
          },
          "keywords": {
            "title": "Several keywords",
            "maxItems": 25,
            "type": "array",
            "description": "Optional list of keywords, each run as its own search with the city above. Use it to cover several occupations in one run.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "searches": {
            "title": "Batch searches",
            "type": "array",
            "description": "Optional JSON list of separate searches, for example [{\"keyword\":\"carpenter\",\"location\":\"Toronto\"}]. The single keyword and city fields are added too when supplied.",
            "items": {
              "type": "object",
              "properties": {
                "keyword": {
                  "title": "Search keyword",
                  "description": "Title, employer, skill, or occupation query for this batch search.",
                  "type": "string"
                },
                "location": {
                  "title": "Canadian city",
                  "description": "Canadian city or town for this batch search.",
                  "type": "string"
                }
              }
            },
            "default": []
          },
          "location": {
            "title": "Canadian city",
            "type": "string",
            "description": "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.",
            "default": ""
          },
          "provinces": {
            "title": "Provinces and territories",
            "maxItems": 13,
            "uniqueItems": true,
            "type": "array",
            "description": "Optional territory-wide filter. Use this instead of the city field when you want a province or territory.",
            "items": {
              "type": "string",
              "enum": [
                "AB",
                "BC",
                "MB",
                "NB",
                "NL",
                "NS",
                "NT",
                "NU",
                "ON",
                "PE",
                "QC",
                "SK",
                "YT"
              ],
              "enumTitles": [
                "Alberta",
                "British Columbia",
                "Manitoba",
                "New Brunswick",
                "Newfoundland and Labrador",
                "Nova Scotia",
                "Northwest Territories",
                "Nunavut",
                "Ontario",
                "Prince Edward Island",
                "Quebec",
                "Saskatchewan",
                "Yukon"
              ]
            },
            "default": []
          },
          "nocCodes": {
            "title": "NOC codes",
            "maxItems": 20,
            "type": "array",
            "description": "Optional five-digit NOC 2021 occupation codes. Each code is sent to Job Bank's source search filter.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "any",
              "48_hours",
              "30_days"
            ],
            "type": "string",
            "description": "Limit the source search by Job Bank's published date facet.",
            "default": "any"
          },
          "sortBy": {
            "title": "Sort results",
            "enum": [
              "relevance",
              "newest"
            ],
            "type": "string",
            "description": "Choose Job Bank's best-match ordering or its most-recent ordering.",
            "default": "relevance"
          },
          "employmentSchedules": {
            "title": "Work schedule",
            "maxItems": 2,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep full-time, part-time, or both. The source search is narrowed first and each extracted posting is checked again.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time"
              ],
              "enumTitles": [
                "Full time",
                "Part time"
              ]
            },
            "default": []
          },
          "employmentTerms": {
            "title": "Terms of employment",
            "maxItems": 4,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep permanent, contract, seasonal, or casual postings using Job Bank's own terms facet.",
            "items": {
              "type": "string",
              "enum": [
                "permanent",
                "contract",
                "seasonal",
                "casual"
              ],
              "enumTitles": [
                "Permanent",
                "Term or contract",
                "Seasonal",
                "Casual"
              ]
            },
            "default": []
          },
          "annualSalaryRanges": {
            "title": "Annual salary bands",
            "maxItems": 5,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep postings in Job Bank's yearly salary bands (CAD). Select several to combine bands.",
            "items": {
              "type": "string",
              "enum": [
                "band_1",
                "band_2",
                "band_3",
                "band_4",
                "band_5"
              ],
              "enumTitles": [
                "$20,000 to $39,999",
                "$40,000 to $59,999",
                "$60,000 to $79,999",
                "$80,000 to $99,999",
                "$100,000 and above"
              ]
            },
            "default": []
          },
          "hourlySalaryRanges": {
            "title": "Hourly wage bands",
            "maxItems": 5,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep postings in Job Bank's hourly wage bands (CAD). Select several to combine bands.",
            "items": {
              "type": "string",
              "enum": [
                "band_1",
                "band_2",
                "band_3",
                "band_4",
                "band_5"
              ],
              "enumTitles": [
                "Minimum wage to $19.99",
                "$20.00 to $29.99",
                "$30.00 to $39.99",
                "$40.00 to $49.99",
                "$50.00 and above"
              ]
            },
            "default": []
          },
          "workplaceTypes": {
            "title": "Workplace type",
            "maxItems": 4,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep postings where Job Bank explicitly publishes the selected work location wording.",
            "items": {
              "type": "string",
              "enum": [
                "on_site",
                "remote",
                "hybrid",
                "on_the_road"
              ],
              "enumTitles": [
                "On site",
                "Remote",
                "Hybrid",
                "On the road"
              ]
            },
            "default": []
          },
          "languages": {
            "title": "Language at work",
            "maxItems": 3,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep postings with an explicit source language requirement.",
            "items": {
              "type": "string",
              "enum": [
                "english",
                "french",
                "english_and_french"
              ],
              "enumTitles": [
                "English",
                "French",
                "English and French"
              ]
            },
            "default": []
          },
          "lmiaStatus": {
            "title": "LMIA status",
            "enum": [
              "any",
              "requested",
              "approved",
              "requested_or_approved"
            ],
            "type": "string",
            "description": "Uses Job Bank's LMIA requested and approved facets. Select both to create two source-filtered searches and merge their unique jobs.",
            "default": "any"
          },
          "onlyLmiaRequested": {
            "title": "Legacy LMIA filter",
            "type": "boolean",
            "description": "Backward-compatible shortcut for existing tasks. When enabled, it returns both requested and approved LMIA postings unless a specific LMIA status is selected above.",
            "default": false
          },
          "internationalCandidatesOnly": {
            "title": "Open to international candidates",
            "type": "boolean",
            "description": "Keep only employers that accept both Canadians and international candidates, using Job Bank's own facet.",
            "default": false
          },
          "directApplyOnly": {
            "title": "Direct Apply only",
            "type": "boolean",
            "description": "Keep only postings that accept applications through Job Bank Direct Apply. Checked on each posting, so raise the maximum jobs for a wider scan.",
            "default": false
          },
          "sourceType": {
            "title": "Posting source",
            "enum": [
              "any",
              "job_bank",
              "external"
            ],
            "type": "string",
            "description": "Keep official Job Bank postings, external job-board postings, or both. The Actor verifies this from the individual posting.",
            "default": "any"
          },
          "excludePlacementAgencies": {
            "title": "Exclude placement agencies",
            "type": "boolean",
            "description": "Leave out postings published by recruitment and placement agencies, keeping direct employers.",
            "default": false
          },
          "excludeStudent": {
            "title": "Exclude student jobs",
            "type": "boolean",
            "description": "Applies Job Bank's source filter and checks the posting flag before a row is saved.",
            "default": false
          },
          "excludeApprentice": {
            "title": "Exclude apprentice jobs",
            "type": "boolean",
            "description": "Applies Job Bank's own apprenticeship filter so apprentice postings are left out.",
            "default": false
          },
          "enrichEmails": {
            "title": "Discover employer contact email",
            "type": "boolean",
            "description": "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.",
            "default": false
          },
          "monitoringMode": {
            "title": "Monitoring output",
            "enum": [
              "off",
              "new_and_updated",
              "all"
            ],
            "type": "string",
            "description": "For scheduled runs, save only new, updated, and expired jobs by default. Unchanged jobs are not written or charged in change-only mode.",
            "default": "off"
          },
          "stateName": {
            "title": "Monitoring state name",
            "type": "string",
            "description": "Separates one saved watchlist, customer, or schedule from another. Keep it stable for recurring runs.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset this monitoring state",
            "type": "boolean",
            "description": "Treat the next successful monitoring run as a fresh baseline. This affects only the current state name and search scope.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum unique jobs",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum unique job records collected across every supplied search. Monitoring expiry detection waits for an uncapped complete search.",
            "default": 25
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "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.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}