{
  "openapi": "3.0.1",
  "info": {
    "title": "Job Bank Canada Jobs Scraper",
    "description": "Canadian job postings from the Government of Canada's Job Bank: title, employer, city and province, salary with its unit, work arrangement and apply method. Includes LMIA status and employment-equity tags that commercial job boards do not carry.",
    "version": "0.1",
    "x-build-id": "AysqaHXlWxLNrwZzs"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapyx~jobbank-canada-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapyx-jobbank-canada-jobs-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/scrapyx~jobbank-canada-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapyx-jobbank-canada-jobs-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/scrapyx~jobbank-canada-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapyx-jobbank-canada-jobs-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",
        "required": [
          "queries"
        ],
        "properties": {
          "queries": {
            "title": "Search terms",
            "type": "array",
            "description": "Job titles or keywords, one run each with its own summary row. A term matching nothing honestly reports zero rather than falling back to everything.",
            "default": [
              "developer"
            ],
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "A Canadian city or postal code (Toronto, M5V). Leave empty to search all of Canada, or use the province list below."
          },
          "provinces": {
            "title": "Provinces / territories",
            "type": "array",
            "description": "Restrict to these provinces and territories. Combines with the location field.",
            "items": {
              "type": "string",
              "enum": [
                "AB",
                "BC",
                "MB",
                "NB",
                "NL",
                "NT",
                "NS",
                "NU",
                "ON",
                "PE",
                "QC",
                "SK",
                "YT"
              ],
              "enumTitles": [
                "Alberta",
                "British Columbia",
                "Manitoba",
                "New Brunswick",
                "Newfoundland and Labrador",
                "Northwest Territories",
                "Nova Scotia",
                "Nunavut",
                "Ontario",
                "Prince Edward Island",
                "Quebec",
                "Saskatchewan",
                "Yukon"
              ]
            }
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "dateDesc"
            ],
            "type": "string",
            "description": "Result ordering.",
            "default": "relevance"
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Pages of 25 postings per search.",
            "default": 5
          },
          "maxItems": {
            "title": "Max jobs (all searches)",
            "minimum": 1,
            "type": "integer",
            "description": "Optional overall cap on job rows across every search. Summary rows are always emitted and do not count against it."
          },
          "lmia": {
            "title": "LMIA status",
            "enum": [
              "any",
              "requested",
              "approved"
            ],
            "type": "string",
            "description": "A Labour Market Impact Assessment is what a Canadian employer needs before hiring a foreign worker, so this is the single most consequential filter for anyone applying from outside Canada. Note it shares an upstream parameter with Work location, so only one of the two can be applied per search.",
            "default": "any"
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "any",
              "48h",
              "30d",
              "olderThan30d"
            ],
            "type": "string",
            "description": "Note the last option means jobs OLDER than 30 days, not within them - that is Job Bank's own wording.",
            "default": "any"
          },
          "workHours": {
            "title": "Hours",
            "enum": [
              "any",
              "fullTime",
              "partTime"
            ],
            "type": "string",
            "description": "Full or part time.",
            "default": "any"
          },
          "workTerm": {
            "title": "Employment term",
            "enum": [
              "any",
              "permanent",
              "termOrContract",
              "seasonal",
              "casual"
            ],
            "type": "string",
            "description": "How long the job runs for.",
            "default": "any"
          },
          "workLanguage": {
            "title": "Language of work",
            "enum": [
              "any",
              "english",
              "french",
              "both"
            ],
            "type": "string",
            "description": "The language the role is performed in.",
            "default": "any"
          },
          "workLocation": {
            "title": "Work location",
            "enum": [
              "any",
              "remote",
              "hybrid",
              "onTheRoad"
            ],
            "type": "string",
            "description": "Remote, hybrid or on-the-road roles. Shares an upstream parameter with LMIA status, so only one of the two can be applied per search.",
            "default": "any"
          },
          "salaryBand": {
            "title": "Annual salary band",
            "enum": [
              "any",
              "20k-40k",
              "40k-60k",
              "60k-80k",
              "80k-100k",
              "100k+"
            ],
            "type": "string",
            "description": "For roles quoted per year.",
            "default": "any"
          },
          "hourlyBand": {
            "title": "Hourly wage band",
            "enum": [
              "any",
              "under20",
              "20-30",
              "30-40",
              "40-50",
              "50plus"
            ],
            "type": "string",
            "description": "For roles quoted per hour, which is most trades and service work on this board.",
            "default": "any"
          },
          "jobSource": {
            "title": "Job source",
            "enum": [
              "any",
              "jobBank",
              "externalBoards"
            ],
            "type": "string",
            "description": "Whether the employer posted directly on Job Bank or the posting was syndicated in from an external board.",
            "default": "any"
          },
          "equityGroups": {
            "title": "Employment equity groups",
            "type": "array",
            "description": "Job Bank tags postings that explicitly welcome these groups, which commercial boards do not publish. Selecting several requires a posting to match all of them.",
            "items": {
              "type": "string",
              "enum": [
                "indigenous",
                "personsWithDisabilities",
                "newcomers",
                "matureWorkers",
                "veterans",
                "youth",
                "visibleMinority"
              ],
              "enumTitles": [
                "Indigenous people",
                "Persons with disabilities",
                "Newcomers to Canada",
                "Mature workers",
                "Veterans",
                "Youth",
                "Visible minority"
              ]
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "Parallel requests. Kept at 1 by default out of respect for the crawl delay this public service asks for.",
            "default": 1
          },
          "minRequestInterval": {
            "title": "Min seconds between requests",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Seconds between request starts. 5 is Job Bank's own requested crawl delay and is enforced as a floor - a lower value is raised back to 5.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy on the shared datacenter pool. This is the default because it is included in your plan at no extra cost and this target works through it. If you start seeing blocks, challenges or empty results, switch the group here to Residential -- it uses real consumer IPs and gets through more, but Apify bills residential traffic per gigabyte, so leave it off unless you need it.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}