{
  "openapi": "3.0.1",
  "info": {
    "title": "Teaching Vacancies UK Scraper: DfE School Jobs and Change Feed",
    "description": "Scrape public England school vacancies from the DfE Teaching Vacancies service. Export typed salaries, closing dates, roles, schools, application links, and safe new/changed/removed records for Google Sheets, Make, Zapier, or scheduled hiring feeds. No login. $0.0025 per vacancy.",
    "version": "0.1",
    "x-build-id": "BvlHHkmhK9NI4FSr4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~teaching-vacancies-uk-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-teaching-vacancies-uk-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~teaching-vacancies-uk-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-teaching-vacancies-uk-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~teaching-vacancies-uk-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-teaching-vacancies-uk-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": "Public Teaching Vacancies URLs",
            "maxItems": 20,
            "type": "array",
            "description": "Use public Teaching Vacancies search pages or individual vacancy URLs. Radius URLs and private service paths are rejected. The default run uses the public jobs page.",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "title": "URL",
                  "description": "A public Teaching Vacancies search or vacancy URL.",
                  "type": "string"
                }
              },
              "required": [
                "url"
              ]
            },
            "default": [
              {
                "url": "https://teaching-vacancies.service.gov.uk/jobs"
              }
            ]
          },
          "searchQueries": {
            "title": "Search keywords",
            "maxItems": 10,
            "type": "array",
            "description": "Optional source search terms such as primary teacher, maths, SENCO, or teaching assistant. Each term is combined with the selected locations.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "locations": {
            "title": "UK locations or postcodes",
            "maxItems": 10,
            "type": "array",
            "description": "Optional city, county, town, or postcode values. Radius search is intentionally not added because the source disallows radius URLs in robots.txt.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "jobRoles": {
            "title": "Job roles",
            "maxItems": 10,
            "type": "array",
            "description": "Choose one or more teaching, leadership, or support roles. The readable labels below are mapped to the source's internal filter values.",
            "items": {
              "type": "string",
              "enum": [
                "teacher",
                "head_of_year_or_phase",
                "head_of_department_or_curriculum",
                "assistant_headteacher",
                "deputy_headteacher",
                "headteacher",
                "sendco",
                "other_leadership",
                "teaching_assistant",
                "higher_level_teaching_assistant",
                "education_support",
                "administration_hr_data_and_finance",
                "catering_cleaning_and_site_management",
                "it_support",
                "pastoral_health_and_welfare",
                "leadership_and_management",
                "business_support_administration_and_corporate_services",
                "student_support_learning_and_progress",
                "marketing_and_communications",
                "apprenticeships_and_commercial_services",
                "other_support"
              ],
              "enumTitles": [
                "Teacher",
                "Head of year or phase",
                "Head of department or curriculum",
                "Assistant headteacher",
                "Deputy headteacher",
                "Headteacher",
                "SENDCO",
                "Other leadership",
                "Teaching assistant",
                "Higher-level teaching assistant",
                "Education support",
                "Administration, HR, data and finance",
                "Catering, cleaning and site management",
                "IT support",
                "Pastoral, health and welfare",
                "Leadership and management",
                "Business support, administration and corporate services",
                "Student support, learning and progress",
                "Marketing and communications",
                "Apprenticeships and commercial services",
                "Other support"
              ]
            },
            "default": []
          },
          "phases": {
            "title": "Education phases",
            "maxItems": 5,
            "type": "array",
            "description": "Choose the education phase for the vacancy.",
            "items": {
              "type": "string",
              "enum": [
                "nursery",
                "primary",
                "secondary",
                "sixth_form_or_college",
                "through"
              ],
              "enumTitles": [
                "Nursery",
                "Primary",
                "Secondary",
                "Sixth form or college",
                "Through school"
              ]
            },
            "default": []
          },
          "subjects": {
            "title": "Subjects",
            "maxItems": 20,
            "type": "array",
            "description": "Enter public subject names accepted by the Teaching Vacancies search form.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "organisationTypes": {
            "title": "Organisation types",
            "maxItems": 3,
            "type": "array",
            "description": "Restrict results to source-published organisation types.",
            "items": {
              "type": "string",
              "enum": [
                "Academy",
                "Local authority maintained schools",
                "FE Colleges"
              ],
              "enumTitles": [
                "Academy",
                "Local authority maintained school",
                "Further education college"
              ]
            },
            "default": []
          },
          "schoolTypes": {
            "title": "School types",
            "maxItems": 2,
            "type": "array",
            "description": "Choose optional faith-school or special-school filters.",
            "items": {
              "type": "string",
              "enum": [
                "faith_school",
                "special_school"
              ],
              "enumTitles": [
                "Faith school",
                "Special school"
              ]
            },
            "default": []
          },
          "workingPatterns": {
            "title": "Working patterns",
            "maxItems": 3,
            "type": "array",
            "description": "Keep full-time, part-time, or job-share vacancies.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time",
                "job_share"
              ],
              "enumTitles": [
                "Full time",
                "Part time",
                "Job share"
              ]
            },
            "default": []
          },
          "ectStatus": {
            "title": "Early-career teacher status",
            "enum": [
              "any",
              "ectSuitable",
              "qtsNotNeeded"
            ],
            "type": "string",
            "description": "Use the source ECT or QTS suitability filter.",
            "default": "any"
          },
          "visaSponsorshipOnly": {
            "title": "Visa sponsorship available",
            "type": "boolean",
            "description": "Keep only vacancies whose source indicates that visa sponsorship can be provided.",
            "default": false
          },
          "quickApplyOnly": {
            "title": "Public application link required",
            "type": "boolean",
            "description": "Keep only vacancies with a public application or advert link. This automatically enables detail retrieval.",
            "default": false
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "expiringSoon",
              "newest"
            ],
            "type": "string",
            "description": "Choose expiring-soon results or newly published results first.",
            "default": "expiringSoon"
          },
          "postedWithinDays": {
            "title": "Posted within days",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Optional local date filter. Leave empty to include all published dates."
          },
          "closingWithinDays": {
            "title": "Closing within days",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Optional local date filter for vacancies closing between today and the selected number of days."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Direct HTTP is the default because the public source is currently accessible without a proxy. If you enable Apify Proxy, datacenter routing is the economical first option.",
            "default": {
              "useApifyProxy": false
            }
          },
          "includeDetails": {
            "title": "Fetch vacancy details",
            "type": "boolean",
            "description": "Fetch public vacancy pages for full descriptions, typed salary values, application links, school metadata, and dates. New or summary-changed vacancies are fetched by default on later runs.",
            "default": false
          },
          "detailRefreshMode": {
            "title": "Detail refresh mode",
            "enum": [
              "newOrChanged",
              "all"
            ],
            "type": "string",
            "description": "New or changed reuses saved detail data for unchanged vacancies. All refreshes every selected vacancy.",
            "default": "newOrChanged"
          },
          "includeOrganisationSnapshot": {
            "title": "Include public organisation snapshot",
            "type": "boolean",
            "description": "Fetch each distinct public Teaching Vacancies organisation page once to count and list currently visible related vacancies.",
            "default": false
          },
          "maxDetailRequests": {
            "title": "Maximum detail requests",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Bound optional vacancy and organisation detail requests for predictable runtime and cost.",
            "default": 20
          },
          "maxItems": {
            "title": "Maximum output rows",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of unique vacancies returned after filtering and deduplication.",
            "default": 20
          },
          "maxPages": {
            "title": "Maximum listing pages",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Maximum number of source search pages per URL. The Actor follows only pagination links discovered on the source.",
            "default": 2
          },
          "outputMode": {
            "title": "Output mode",
            "enum": [
              "snapshot",
              "snapshotAndChanges",
              "changesOnly"
            ],
            "type": "string",
            "description": "Snapshot emits current rows. Snapshot and changes also emits safe removals. Changes only omits unchanged rows.",
            "default": "snapshotAndChanges"
          },
          "stateName": {
            "title": "Monitoring state name",
            "minLength": 1,
            "maxLength": 40,
            "type": "string",
            "description": "Stable label for this recurring search. Different state names create independent watchlists.",
            "default": "default"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}