{
  "openapi": "3.0.1",
  "info": {
    "title": "Job Bank Canada LMIA Jobs Scraper & Employer Leads",
    "description": "Scrape LMIA jobs from Canada's Job Bank: employers who asked to hire foreign workers, with the employer's apply email, NOC code, wage, hours and vacancies. Filter by city, province, NOC or date. Schedule it to get only new, updated and expired LMIA jobs. Export JSON or CSV.",
    "version": "0.0",
    "x-build-id": "Qd3tSQYFGdXTIoiZc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~job-bank-canada-lmia-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-job-bank-canada-lmia-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/memo23~job-bank-canada-lmia-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-job-bank-canada-lmia-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/memo23~job-bank-canada-lmia-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-job-bank-canada-lmia-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": {
          "searchTerms": {
            "title": "Job keywords",
            "type": "array",
            "description": "Keywords, e.g. `cook`, `truck driver`, `welder`. Each keyword runs as its own search. Leave empty to get every LMIA job in the location.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, province or postal code, e.g. `Toronto`, `Surrey, BC`, `British Columbia`, `M5V`. Cities are resolved through Job Bank's own location service, so the search stays local. Leave empty for all of Canada."
          },
          "searches": {
            "title": "Batch searches",
            "type": "array",
            "description": "Separate keyword + location searches in one run, e.g. `[{\"keyword\": \"carpenter\", \"location\": \"Calgary\"}, {\"keyword\": \"welder\", \"location\": \"Alberta\"}]`. The filters below apply to every search."
          },
          "startUrls": {
            "title": "JobBank search / job URLs",
            "type": "array",
            "description": "Paste JobBank search-result URLs or direct `/jobposting/{id}` URLs — each is auto-routed. Scraped in addition to any keywords.",
            "items": {
              "type": "string"
            }
          },
          "lmia": {
            "title": "LMIA filter (immigration / foreign-worker jobs)",
            "enum": [
              "any",
              "requested",
              "approved",
              "requested_or_approved"
            ],
            "type": "string",
            "description": "Which LMIA postings to keep. 'Requested' = the employer applied for a Labour Market Impact Assessment to hire a temporary foreign worker; 'Approved' = the LMIA was granted. 'Any' turns the LMIA filter off and returns every job.",
            "default": "requested_or_approved"
          },
          "provinces": {
            "title": "Provinces and territories",
            "type": "array",
            "description": "Limit to one or more provinces or territories.",
            "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"
              ]
            }
          },
          "nocCodes": {
            "title": "NOC 2021 occupation codes",
            "type": "array",
            "description": "Five-digit NOC 2021 codes, e.g. `72310` (carpenters), `63200` (cooks), `21232` (software developers).",
            "items": {
              "type": "string"
            }
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "any",
              "48_hours",
              "30_days"
            ],
            "type": "string",
            "description": "Only jobs posted in this window.",
            "default": "any"
          },
          "employmentSchedules": {
            "title": "Full time / part time",
            "type": "array",
            "description": "Work schedule.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time"
              ],
              "enumTitles": [
                "Full time",
                "Part time"
              ]
            }
          },
          "employmentTerms": {
            "title": "Terms of employment",
            "type": "array",
            "description": "Permanent, contract, seasonal or casual.",
            "items": {
              "type": "string",
              "enum": [
                "permanent",
                "term",
                "seasonal",
                "casual"
              ],
              "enumTitles": [
                "Permanent",
                "Term or contract",
                "Seasonal",
                "Casual"
              ]
            }
          },
          "workplaceTypes": {
            "title": "Workplace",
            "type": "array",
            "description": "Where the work happens, as published on the posting.",
            "items": {
              "type": "string",
              "enum": [
                "on_site",
                "remote",
                "hybrid",
                "on_the_road"
              ],
              "enumTitles": [
                "On site",
                "Remote",
                "Hybrid",
                "On the road"
              ]
            }
          },
          "languages": {
            "title": "Language at work",
            "type": "array",
            "description": "Language requirement of the job.",
            "items": {
              "type": "string",
              "enum": [
                "english",
                "french",
                "english_and_french"
              ],
              "enumTitles": [
                "English",
                "French",
                "English and French"
              ]
            }
          },
          "annualSalaryRanges": {
            "title": "Annual salary",
            "type": "array",
            "description": "Job Bank's yearly salary bands (CAD).",
            "items": {
              "type": "string",
              "enum": [
                "20k_40k",
                "40k_60k",
                "60k_80k",
                "80k_100k",
                "100k_plus"
              ],
              "enumTitles": [
                "$20,000 to $39,999",
                "$40,000 to $59,999",
                "$60,000 to $79,999",
                "$80,000 to $99,999",
                "$100,000 +"
              ]
            }
          },
          "hourlySalaryRanges": {
            "title": "Hourly wage",
            "type": "array",
            "description": "Job Bank's hourly wage bands (CAD).",
            "items": {
              "type": "string",
              "enum": [
                "under_20",
                "20_30",
                "30_40",
                "40_50",
                "50_plus"
              ],
              "enumTitles": [
                "Minimum to $19.99",
                "$20.00 to $29.99",
                "$30.00 to $39.99",
                "$40.00 to $49.99",
                "$50.00 +"
              ]
            }
          },
          "sourceType": {
            "title": "Posting source",
            "enum": [
              "any",
              "job_bank",
              "external"
            ],
            "type": "string",
            "description": "Postings made on Job Bank itself (these carry the apply email), postings Job Bank imports from other boards such as Indeed, or both.",
            "default": "any"
          },
          "excludeStudentJobs": {
            "title": "Exclude student jobs",
            "type": "boolean",
            "description": "Drop jobs Job Bank marks as student jobs.",
            "default": false
          },
          "excludeApprenticeJobs": {
            "title": "Exclude apprentice jobs",
            "type": "boolean",
            "description": "Drop jobs Job Bank marks as apprentice jobs.",
            "default": false
          },
          "excludePlacementAgencies": {
            "title": "Exclude placement agencies",
            "type": "boolean",
            "description": "Drop jobs posted by recruitment and placement agencies.",
            "default": false
          },
          "internationalCandidatesOnly": {
            "title": "Only employers open to international candidates",
            "type": "boolean",
            "description": "Job Bank's 'Canadians and international candidates' facet.",
            "default": false
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "M",
              "D",
              "S"
            ],
            "type": "string",
            "description": "How JobBank sorts results. Use 'Date posted' with a small 'Maximum jobs' to get only the newest postings.",
            "default": "M"
          },
          "includeApplyInfo": {
            "title": "Include how to apply (employer email, mail, URL)",
            "type": "boolean",
            "description": "Reads the posting's 'How to apply' block: application email, mailing address, apply URL, required documents and screening questions. Adds one request per Job Bank posting. External postings return their source link.",
            "default": true
          },
          "enrichEmails": {
            "title": "Find employer contact emails (experimental, billed per email)",
            "type": "boolean",
            "description": "For jobs without an application email, discover the employer's website and read its contact/about pages to find one. Adds contactEmail + contactWebsite plus an emailEnrichment object. Billed only when an email is found.",
            "default": false
          },
          "monitoringMode": {
            "title": "Monitoring output",
            "enum": [
              "off",
              "new_and_updated",
              "all"
            ],
            "type": "string",
            "description": "'New and updated' saves only jobs that are new, changed, or expired since the previous run (unchanged jobs are not saved or charged). 'All' saves every job with a changeType field. The first run is the baseline and returns everything as new.",
            "default": "off"
          },
          "stateName": {
            "title": "Monitoring state name",
            "type": "string",
            "description": "Keeps one watchlist apart from another. Use a stable name per schedule, e.g. `toronto-nurses`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset monitoring state",
            "type": "boolean",
            "description": "Forget the saved jobs for this state name and search, and start a new baseline.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum jobs",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on jobs saved (and billed). Jobs dropped by a filter or skipped as unchanged do not count.",
            "default": 500
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Parallel requests. JobBank is a fast government site, so this can be high.",
            "default": 10
          },
          "proxy": {
            "title": "Proxy configuration (optional override)",
            "type": "object",
            "description": "Leave empty — the actor already routes through its own residential proxy at no extra cost. Only set this to use your own proxies."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}