{
  "openapi": "3.0.1",
  "info": {
    "title": "jobs.ac.uk Academic Jobs Scraper - UK University Jobs",
    "description": "Scrape every live jobs.ac.uk vacancy - UK and overseas university, research and professional-services roles - with the employer's own ATS apply link, parsed salary, contact email, department and closing date. Filter by discipline, location, contract, salary band. New-vacancy monitor, no start fee.",
    "version": "0.1",
    "x-build-id": "swY8dreE0UockvRgx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~jobs-ac-uk-academic-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-jobs-ac-uk-academic-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/scrapersdelight~jobs-ac-uk-academic-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-jobs-ac-uk-academic-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/scrapersdelight~jobs-ac-uk-academic-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-jobs-ac-uk-academic-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",
        "properties": {
          "startUrls": {
            "title": "Paste jobs.ac.uk search URLs",
            "type": "array",
            "description": "Build the search you want on jobs.ac.uk, then paste the address bar here. Every filter on the URL is honoured verbatim — including facet values this schema does not list, and any new one the site adds. A <code>/job/&lt;ID&gt;/&lt;slug&gt;</code> link is treated as a single advert. This is the highest-leverage input: what you see in the browser is what you get in the dataset.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchTerms": {
            "title": "Search keywords",
            "type": "array",
            "description": "Free-text keywords, exactly as you would type them into the jobs.ac.uk search box (<code>keywords=</code>). Each term is crawled as its own search and the results are merged and de-duplicated on the job ID before anything is billed. Measured 2026-09-04: \"lecturer\" 399 vacancies, \"machine learning\" 129.",
            "items": {
              "type": "string"
            }
          },
          "jobUrls": {
            "title": "Direct advert URLs",
            "type": "array",
            "description": "Full <code>https://www.jobs.ac.uk/job/&lt;ID&gt;/&lt;slug&gt;</code> links. Each one is fetched as a single advert and enriched from its schema.org JobPosting block — use this to re-check or top up adverts you already have. Billed as one row each, plus the enrichment event.",
            "items": {
              "type": "string"
            }
          },
          "academicDiscipline": {
            "title": "Academic discipline",
            "uniqueItems": true,
            "type": "array",
            "description": "The site's top-level academic subject facet (<code>academicDisciplineFacet[]</code>). Several values are a union, not an intersection — measured: Computer Sciences 270 + Economics 54 returns 318 together, because 6 adverts sit in both.",
            "items": {
              "type": "string",
              "enum": [
                "agriculture-food-and-veterinary",
                "architecture-building-and-planning",
                "biological-sciences",
                "business-and-management-studies",
                "computer-sciences",
                "creative-arts-and-design",
                "economics",
                "education-studies-inc-tefl",
                "engineering-and-technology",
                "health-and-medical",
                "historical-and-philosophical-studies",
                "information-management-and-librarianship",
                "languages-literature-and-culture",
                "law",
                "mathematics-and-statistics",
                "media-and-communications",
                "physical-and-environmental-sciences",
                "politics-and-government",
                "psychology",
                "social-sciences-and-social-care",
                "sport-and-leisure"
              ],
              "enumTitles": [
                "Agriculture, Food & Veterinary",
                "Architecture, Building & Planning",
                "Biological Sciences",
                "Business & Management Studies",
                "Computer Sciences",
                "Creative Arts & Design",
                "Economics",
                "Education Studies (inc. TEFL)",
                "Engineering & Technology",
                "Health & Medical",
                "Historical & Philosophical Studies",
                "Information Management & Librarianship",
                "Languages, Literature & Culture",
                "Law",
                "Mathematics & Statistics",
                "Media & Communications",
                "Physical & Environmental Sciences",
                "Politics & Government",
                "Psychology",
                "Social Sciences & Social Care",
                "Sport & Leisure"
              ]
            },
            "default": []
          },
          "subDiscipline": {
            "title": "Sub-discipline",
            "uniqueItems": true,
            "type": "array",
            "description": "The narrower subject facet beneath the academic disciplines (<code>subDisciplineFacet[]</code>) — Artificial Intelligence, Cyber Security, Software Engineering, Nursing, Medicine & Dentistry and 84 more. Measured 2026-09-04: artificial-intelligence 158 vacancies.",
            "items": {
              "type": "string",
              "enum": [
                "agriculture",
                "food-science",
                "forestry",
                "veterinary-science",
                "architecture-and-building",
                "urban-and-rural-planning",
                "biochemistry",
                "biology",
                "botany",
                "genetics",
                "microbiology",
                "molecular-biology-and-biophysics",
                "other-biological-sciences",
                "zoology",
                "accountancy-and-finance",
                "business-studies",
                "hospitality-and-leisure",
                "human-resources-management",
                "management",
                "marketing",
                "other-business-and-management-studies",
                "real-estate-management",
                "artificial-intelligence",
                "computer-science",
                "cyber-security",
                "information-systems",
                "software-engineering",
                "design",
                "fine-art",
                "music",
                "other-creative-arts",
                "performing-arts",
                "education-studies-education",
                "research-methods",
                "teacher-training",
                "tefl-tesol",
                "aerospace-engineering",
                "biotechnology",
                "chemical-engineering",
                "civil-engineering",
                "electrical-and-electronic-engineering",
                "maritime-technology",
                "mechanical-engineering",
                "metallurgy-and-minerals-technology",
                "other-engineering",
                "production-engineering-and-manufacturing",
                "anatomy-physiology-and-pathology",
                "medical-technology",
                "medicine-and-dentistry",
                "nursing",
                "nutrition",
                "pharmacology-toxicology-and-pharmacy",
                "archaeology",
                "history",
                "history-of-art",
                "philosophy",
                "theology-and-religious-studies",
                "curatorial-studies",
                "information-science",
                "librarianship",
                "other-information-management-and-librarianship",
                "classics",
                "cultural-studies",
                "languages",
                "linguistics",
                "literature",
                "mathematics",
                "statistics",
                "communication-studies",
                "journalism",
                "media-studies",
                "publishing",
                "chemistry",
                "environmental-sciences",
                "geography",
                "geology",
                "materials-science",
                "ocean-sciences",
                "other-physical-sciences",
                "physics-and-astronomy",
                "anthropology",
                "human-and-social-geography",
                "other-social-sciences",
                "social-policy",
                "social-work",
                "sociology",
                "sports-and-leisure-management",
                "sports-coaching",
                "sports-science"
              ],
              "enumTitles": [
                "Agriculture",
                "Food Science",
                "Forestry",
                "Veterinary Science",
                "Architecture & Building",
                "Urban & Rural Planning",
                "Biochemistry",
                "Biology",
                "Botany",
                "Genetics",
                "Microbiology",
                "Molecular Biology & Biophysics",
                "Other Biological Sciences",
                "Zoology",
                "Accountancy & Finance",
                "Business Studies",
                "Hospitality & Leisure",
                "Human Resources Management",
                "Management",
                "Marketing",
                "Other Business & Management Studies",
                "Real Estate Management",
                "Artificial Intelligence",
                "Computer Science",
                "Cyber Security",
                "Information Systems",
                "Software Engineering",
                "Design",
                "Fine Art",
                "Music",
                "Other Creative Arts",
                "Performing Arts",
                "Education Studies",
                "Research Methods",
                "Teacher Training",
                "TEFL/TESOL",
                "Aerospace Engineering",
                "Biotechnology",
                "Chemical Engineering",
                "Civil Engineering",
                "Electrical & Electronic Engineering",
                "Maritime Technology",
                "Mechanical Engineering",
                "Metallurgy & Minerals Technology",
                "Other Engineering",
                "Production Engineering & Manufacturing",
                "Anatomy, Physiology & Pathology",
                "Medical Technology",
                "Medicine & Dentistry",
                "Nursing",
                "Nutrition",
                "Pharmacology, Toxicology & Pharmacy",
                "Archaeology",
                "History",
                "History of Art",
                "Philosophy",
                "Theology & Religious Studies",
                "Curatorial Studies",
                "Information Science",
                "Librarianship",
                "Other Information Management & Librarianship",
                "Classics",
                "Cultural Studies",
                "Languages",
                "Linguistics",
                "Literature",
                "Mathematics",
                "Statistics",
                "Communication Studies",
                "Journalism",
                "Media Studies",
                "Publishing",
                "Chemistry",
                "Environmental Sciences",
                "Geography",
                "Geology",
                "Materials Science",
                "Ocean Sciences",
                "Other Physical Sciences",
                "Physics & Astronomy",
                "Anthropology",
                "Human & Social Geography",
                "Other Social Sciences",
                "Social Policy",
                "Social Work",
                "Sociology",
                "Sports & Leisure Management",
                "Sports Coaching",
                "Sports Science"
              ]
            },
            "default": []
          },
          "nonAcademicDiscipline": {
            "title": "Professional-services discipline",
            "uniqueItems": true,
            "type": "array",
            "description": "The professional / non-academic side of a university's hiring (<code>nonAcademicDisciplineFacet[]</code>): IT Services, Estates & Facilities, Finance & Procurement, Fundraising & Alumni, Senior Management and more. This is where the university's own supplier-facing buyers sit.",
            "items": {
              "type": "string",
              "enum": [
                "administrative",
                "estates-and-facilities-management",
                "finance-and-procurement",
                "fundraising-alumni-bids-and-grants",
                "health-wellbeing-and-care",
                "hospitality-retail-conferences-and-events",
                "human-resources",
                "international-activities",
                "it-services",
                "laboratory-clinical-and-technician",
                "legal-compliance-and-policy",
                "library-services-data-and-information-management",
                "other",
                "pr-marketing-sales-and-communication",
                "project-management-and-consulting",
                "senior-management",
                "sports-and-leisure",
                "student-services",
                "sustainability",
                "web-design-and-development"
              ],
              "enumTitles": [
                "Administrative",
                "Estates & Facilities Management",
                "Finance & Procurement",
                "Fundraising, Alumni, Bids & Grants",
                "Health, Wellbeing & Care",
                "Hospitality, Retail, Conferences & Events",
                "Human Resources",
                "International Activities",
                "IT Services",
                "Laboratory, Clinical & Technician",
                "Legal, Compliance & Policy",
                "Library Services, Data & Information Management",
                "Other",
                "PR, Marketing, Sales & Communication",
                "Project Management & Consulting",
                "Senior Management",
                "Sports & Leisure",
                "Student Services",
                "Sustainability",
                "Web Design & Development"
              ]
            },
            "default": []
          },
          "jobType": {
            "title": "Studentship type",
            "uniqueItems": true,
            "type": "array",
            "description": "Restrict to studentships rather than jobs (<code>jobTypeFacet[]</code>). Measured 2026-09-04: PhDs 98, Masters 9.",
            "items": {
              "type": "string",
              "enum": [
                "masters",
                "phds"
              ],
              "enumTitles": [
                "Masters",
                "PhDs"
              ]
            },
            "default": []
          },
          "qualificationType": {
            "title": "Qualification type",
            "uniqueItems": true,
            "type": "array",
            "description": "Studentship qualification (<code>qualificationTypeFacet[]</code>). Only meaningful alongside a studentship type. Measured 2026-09-04: PhD 89, Integrated Masters/Doctorate 9, International Doctorate 0, Professional Doctorate 0.",
            "items": {
              "type": "string",
              "enum": [
                "integrated-masters-doctorate",
                "international-doctorate",
                "phd",
                "professional-doctorate"
              ],
              "enumTitles": [
                "Integrated Masters / Doctorate",
                "International Doctorate",
                "PhD",
                "Professional Doctorate"
              ]
            },
            "default": []
          },
          "fundingType": {
            "title": "Studentship funding",
            "uniqueItems": true,
            "type": "array",
            "description": "Who the studentship funding is open to (<code>fundingTypeFacet[]</code>). Measured 2026-09-04: UK students 92, EU students 35, international 32, self-funded 11.",
            "items": {
              "type": "string",
              "enum": [
                "eu-students",
                "international-students",
                "self-funded-students",
                "uk-students"
              ],
              "enumTitles": [
                "EU Students",
                "International Students",
                "Self-funded Students",
                "UK Students"
              ]
            },
            "default": []
          },
          "location": {
            "title": "Location",
            "uniqueItems": true,
            "type": "array",
            "description": "The site's hierarchical location facet (<code>locationFacet[]</code>) — continent, country, region/county, then city. Pick the level you want; picking two is a union. The list below is the live vocabulary read off the site on 2026-09-04, trimmed to the levels that persist (continent/country/region, plus every place with 4+ live vacancies). For anything finer, paste a search URL instead. <b>Note:</b> the free-text <code>location=</code> and <code>distance=</code> parameters do NOT work on this site — measured, <code>location=London&amp;distance=20</code> returns the full unfiltered corpus. Only this facet filters.",
            "items": {
              "type": "string",
              "enum": [
                "africa",
                "egypt",
                "cairo-governorate",
                "asia",
                "bahrain",
                "capital-governorate",
                "northern-governorate",
                "bangladesh",
                "dhaka-division",
                "china",
                "fujian",
                "guangdong-province",
                "hainan",
                "hunan",
                "jiangsu",
                "liao-ning-sheng",
                "liaoning",
                "shan-dong-sheng",
                "sichuan",
                "zhejiang",
                "hong-kong",
                "india",
                "gujarat",
                "japan",
                "aichi",
                "kazakhstan",
                "almaty-region",
                "macao",
                "malaysia",
                "johor",
                "pakistan",
                "punjab",
                "singapore",
                "vietnam",
                "ha-noi",
                "hanoi",
                "hung-yen",
                "europe",
                "austria",
                "tyrol",
                "cyprus",
                "limassol",
                "paphos",
                "czechia",
                "south-bohemian-region",
                "denmark",
                "france",
                "auvergne-rhone-alpes",
                "germany",
                "baden-wurttemberg",
                "bavaria",
                "berlin",
                "hamburg",
                "lower-saxony",
                "hungary",
                "ireland",
                "county-cork",
                "cork",
                "county-donegal",
                "county-dublin",
                "county-galway",
                "county-kildare",
                "county-limerick",
                "limerick",
                "italy",
                "lazio",
                "tuscany",
                "luxembourg",
                "malta",
                "spain",
                "catalonia",
                "switzerland",
                "vaud",
                "zurich",
                "united-kingdom",
                "england",
                "bath-and-north-east-somerset",
                "bath",
                "berkshire",
                "bournemouth",
                "brighton-and-hove",
                "bristol-city",
                "buckinghamshire",
                "buckingham",
                "cambridgeshire",
                "cambridge",
                "central-bedfordshire",
                "cranfield",
                "cornwall",
                "county-durham",
                "durham",
                "derby",
                "devon",
                "exeter",
                "dorset",
                "falmer",
                "essex",
                "chelmsford",
                "colchester",
                "gloucestershire",
                "gloucester",
                "greater-london",
                "greenwich",
                "kingston-upon-thames",
                "london",
                "south-kensington",
                "stratford",
                "tooting",
                "twickenham",
                "uxbridge",
                "greater-manchester",
                "manchester",
                "salford",
                "hertfordshire",
                "hatfield",
                "kent",
                "canterbury",
                "kingston-upon-hull",
                "lancashire",
                "lancaster",
                "ormskirk",
                "leicester",
                "leicestershire",
                "loughborough",
                "loughborough-university",
                "merseyside",
                "liverpool",
                "norfolk",
                "norwich",
                "oxfordshire",
                "oxford",
                "plymouth",
                "reading",
                "south-yorkshire",
                "sheffield",
                "southampton",
                "staffordshire",
                "keele",
                "dublin",
                "surrey",
                "egham",
                "guildford",
                "tyne-and-wear",
                "newcastle-upon-tyne",
                "warwickshire",
                "warwick",
                "west-midlands",
                "birmingham",
                "coventry",
                "west-yorkshire",
                "bradford",
                "huddersfield",
                "leeds",
                "york",
                "northern-ireland",
                "belfast",
                "scotland",
                "aberdeen-city",
                "aberdeen",
                "dundee-city-council",
                "edinburgh",
                "fife",
                "st-andrews",
                "glasgow-city",
                "glasgow",
                "wales",
                "cardiff",
                "gwynedd",
                "bangor",
                "swansea",
                "wrexham",
                "wrexham-principal-area",
                "north-america",
                "canada",
                "alberta",
                "ontario",
                "quebec",
                "trinidad-and-tobago",
                "tunapuna-piarco-regional-corporation",
                "united-states",
                "california",
                "illinois",
                "massachusetts",
                "new-jersey",
                "pennsylvania",
                "oceania",
                "australia",
                "new-south-wales",
                "queensland",
                "victoria",
                "new-zealand",
                "auckland",
                "canterbury-region",
                "otago-region",
                "waikato-region",
                "wellington",
                "wellington-region"
              ],
              "enumTitles": [
                "Africa",
                "  Egypt",
                "    Cairo Governorate",
                "Asia",
                "  Bahrain",
                "    Capital Governorate",
                "    Northern Governorate",
                "  Bangladesh",
                "    Dhaka Division",
                "  China",
                "    Fujian",
                "    Guangdong Province",
                "    Hainan",
                "    Hunan",
                "    Jiangsu",
                "    Liao Ning Sheng",
                "    Liaoning",
                "    Shan Dong Sheng",
                "    Sichuan",
                "    Zhejiang",
                "  Hong Kong",
                "  India",
                "    Gujarat",
                "  Japan",
                "    Aichi",
                "  Kazakhstan",
                "    Almaty Region",
                "  Macao",
                "  Malaysia",
                "    Johor",
                "  Pakistan",
                "    Punjab",
                "  Singapore",
                "  Vietnam",
                "    Ha Noi",
                "    Hanoi",
                "    Hung Yen",
                "Europe",
                "  Austria",
                "    Tyrol",
                "  Cyprus",
                "    Limassol",
                "    Paphos",
                "  Czechia",
                "    South Bohemian Region",
                "  Denmark",
                "  France",
                "    Auvergne-Rhône-Alpes",
                "  Germany",
                "    Baden-Württemberg",
                "    Bavaria",
                "    Berlin",
                "    Hamburg",
                "    Lower Saxony",
                "  Hungary",
                "  Ireland",
                "    County Cork",
                "      Cork",
                "    County Donegal",
                "    County Dublin",
                "    County Galway",
                "    County Kildare",
                "    County Limerick",
                "      Limerick",
                "  Italy",
                "    Lazio",
                "    Tuscany",
                "  Luxembourg",
                "  Malta",
                "  Spain",
                "    Catalonia",
                "  Switzerland",
                "    Vaud",
                "    Zurich",
                "  United Kingdom",
                "    England",
                "      Bath and North East Somerset",
                "        Bath",
                "      Berkshire",
                "      Bournemouth",
                "      Brighton and Hove",
                "      Bristol City",
                "      Buckinghamshire",
                "        Buckingham",
                "      Cambridgeshire",
                "        Cambridge",
                "      Central Bedfordshire",
                "        Cranfield",
                "      Cornwall",
                "      County Durham",
                "        Durham",
                "      Derby",
                "      Devon",
                "        Exeter",
                "      Dorset",
                "        Falmer",
                "      Essex",
                "        Chelmsford",
                "        Colchester",
                "      Gloucestershire",
                "        Gloucester",
                "      Greater London",
                "        Greenwich",
                "        Kingston upon Thames",
                "        London",
                "        South Kensington",
                "        Stratford",
                "        Tooting",
                "        Twickenham",
                "        Uxbridge",
                "      Greater Manchester",
                "        Manchester",
                "        Salford",
                "      Hertfordshire",
                "        Hatfield",
                "      Kent",
                "        Canterbury",
                "      Kingston upon Hull",
                "      Lancashire",
                "        Lancaster",
                "        Ormskirk",
                "      Leicester",
                "      Leicestershire",
                "        Loughborough",
                "        Loughborough University",
                "      Merseyside",
                "        Liverpool",
                "      Norfolk",
                "        Norwich",
                "      Oxfordshire",
                "        Oxford",
                "      Plymouth",
                "      Reading",
                "      South Yorkshire",
                "        Sheffield",
                "      Southampton",
                "      Staffordshire",
                "        Keele",
                "        Dublin",
                "      Surrey",
                "        Egham",
                "        Guildford",
                "      Tyne and Wear",
                "        Newcastle upon Tyne",
                "      Warwickshire",
                "        Warwick",
                "      West Midlands",
                "        Birmingham",
                "        Coventry",
                "      West Yorkshire",
                "        Bradford",
                "        Huddersfield",
                "        Leeds",
                "      York",
                "    Northern Ireland",
                "      Belfast",
                "    Scotland",
                "      Aberdeen City",
                "        Aberdeen",
                "      Dundee City Council",
                "      Edinburgh",
                "      Fife",
                "        St Andrews",
                "      Glasgow City",
                "        Glasgow",
                "    Wales",
                "      Cardiff",
                "      Gwynedd",
                "        Bangor",
                "      Swansea",
                "      Wrexham",
                "      Wrexham Principal Area",
                "North America",
                "  Canada",
                "    Alberta",
                "    Ontario",
                "    Quebec",
                "  Trinidad and Tobago",
                "    Tunapuna/Piarco Regional Corporation",
                "  United States",
                "    California",
                "    Illinois",
                "    Massachusetts",
                "    New Jersey",
                "    Pennsylvania",
                "Oceania",
                "  Australia",
                "    New South Wales",
                "    Queensland",
                "    Victoria",
                "  New Zealand",
                "    Auckland",
                "    Canterbury Region",
                "    Otago Region",
                "    Waikato Region",
                "    Wellington",
                "    Wellington Region"
              ]
            },
            "default": []
          },
          "workplace": {
            "title": "Workplace",
            "uniqueItems": true,
            "type": "array",
            "description": "On-site / hybrid / remote (<code>workplaceFacet[]</code>). Measured 2026-09-04: on-site 1,953, hybrid 278, remote 21.",
            "items": {
              "type": "string",
              "enum": [
                "hybrid",
                "remote",
                "on-site"
              ],
              "enumTitles": [
                "Hybrid",
                "Remote",
                "On Site"
              ]
            },
            "default": []
          },
          "salaryBand": {
            "title": "Advertised salary band",
            "uniqueItems": true,
            "type": "array",
            "description": "The site's own salary bands (<code>salaryBandFacet[]</code>), applied server-side. Faster and cheaper than filtering after the fact — but note it uses the advertised band, so adverts with no stated salary fall out. For a numeric filter on the parsed range, use Min/Max salary below.",
            "items": {
              "type": "string",
              "enum": [
                "up-to-9999",
                "10000-14999",
                "15000-19999",
                "20000-24999",
                "25000-29999",
                "30000-39999",
                "40000-49999",
                "50000-59999",
                "60000-69999",
                "70000-79999",
                "80000-89999",
                "90000-99999",
                "over-100000"
              ],
              "enumTitles": [
                "Up to £9,999",
                "£10,000 - £14,999",
                "£15,000 - £19,999",
                "£20,000 - £24,999",
                "£25,000 - £29,999",
                "£30,000 - £39,999",
                "£40,000 - £49,999",
                "£50,000 - £59,999",
                "£60,000 - £69,999",
                "£70,000 - £79,999",
                "£80,000 - £89.999",
                "£90,000 - £99,999",
                "Over £100,000"
              ]
            },
            "default": []
          },
          "hoursType": {
            "title": "Hours",
            "uniqueItems": true,
            "type": "array",
            "description": "Full time / part time (<code>hoursTypeFacet[]</code>). Measured 2026-09-04: full time 1,952, part time 376.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time"
              ],
              "enumTitles": [
                "Full Time",
                "Part Time"
              ]
            },
            "default": []
          },
          "contractType": {
            "title": "Contract type",
            "uniqueItems": true,
            "type": "array",
            "description": "Permanent / fixed-term / temporary (<code>contractTypeFacet[]</code>). Measured 2026-09-04: fixed-term 1,184, permanent 1,094, temporary 10.",
            "items": {
              "type": "string",
              "enum": [
                "permanent",
                "fixed-term-contract",
                "temporary"
              ],
              "enumTitles": [
                "Permanent",
                "Fixed-Term/Contract",
                "Temporary"
              ]
            },
            "default": []
          },
          "employerSector": {
            "title": "Employer sector",
            "uniqueItems": true,
            "type": "array",
            "description": "What kind of organisation is hiring (<code>employerSectorFacet[]</code>). Universities dominate (2,106 of 2,240 on 2026-09-04) — the other five values are the interesting ones if you sell to research institutes, FE colleges or academic charities.",
            "items": {
              "type": "string",
              "enum": [
                "charity-not-for-profit",
                "commercial-organisations",
                "further-education",
                "public-sector",
                "science-and-research-organisations",
                "universities-higher-education-institutions"
              ],
              "enumTitles": [
                "Charity / Not for profit",
                "Commercial Organisations",
                "Further Education",
                "Public Sector",
                "Science and Research Organisations",
                "Universities / Higher Education Institutions"
              ]
            },
            "default": []
          },
          "sortOrder": {
            "title": "Sort order",
            "enum": [
              "datePlaced",
              "relevance",
              "closingDate"
            ],
            "type": "string",
            "description": "How jobs.ac.uk orders the results. <b>Date placed</b> (the default) is a stable newest-first ordering, which is what makes contiguous paging lossless and is the right choice for monitoring.",
            "default": "datePlaced"
          },
          "maxResults": {
            "title": "Max vacancies to return",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on billed rows across the whole run — your spend guard rail. Set 0 for unlimited. The whole live board was 2,240 vacancies on 2026-09-04, so 0 costs about $2.90 at the per-row rate.",
            "default": 50
          },
          "maxResultsPerSearch": {
            "title": "Max vacancies per search term",
            "minimum": 0,
            "type": "integer",
            "description": "Per-search cap, so one broad keyword cannot eat the whole run budget. 0 = no per-search cap.",
            "default": 0
          },
          "maxPagesPerSearch": {
            "title": "Max pages per search term",
            "minimum": 0,
            "type": "integer",
            "description": "25 vacancies per page, fixed by the site (<code>pageSize=100</code> returns a byte-identical 25-row page — verified). 0 = no page cap.",
            "default": 0
          },
          "startIndex": {
            "title": "Start at result number",
            "minimum": 1,
            "type": "integer",
            "description": "Resume or offset a crawl. The site's own <code>startIndex</code> — 1 is the first result, 26 the second page, and so on. Paging is complete to the end of the corpus: startIndex 2,101 returned 25 rows and 2,251 returned 0 with the job count still present, so there is no hidden depth ceiling.",
            "default": 1
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only adverts placed in the last N days. <b>jobs.ac.uk has no date query parameter</b>, so this is applied by this actor after reading each row — it saves you billing, not requests. Combine with the \"Date placed\" sort so the newest adverts come first. 0 = no date filter.",
            "default": 0
          },
          "postedAfter": {
            "title": "Posted on or after",
            "type": "string",
            "description": "ISO date, e.g. <code>2026-08-01</code>. Client-side."
          },
          "postedBefore": {
            "title": "Posted on or before",
            "type": "string",
            "description": "ISO date. Client-side."
          },
          "closingAfter": {
            "title": "Closing on or after",
            "type": "string",
            "description": "ISO date. Client-side. Use it to drop adverts that are about to close."
          },
          "closingBefore": {
            "title": "Closing on or before",
            "type": "string",
            "description": "ISO date. Client-side. The \"closing soon\" prospecting filter — pair it with today's date + 14 days to find the roles a recruiter still has time to influence."
          },
          "onlyNewSince": {
            "title": "Only vacancies posted since",
            "type": "string",
            "description": "ISO date. Keeps only adverts posted on or after this date AND not already recorded in the monitor state store. Set this instead of Monitor mode when you want a one-off catch-up rather than a running diff."
          },
          "scrapeJobDetails": {
            "title": "Scrape job details (advert page)",
            "type": "boolean",
            "description": "Fetch each advert page for its schema.org JobPosting block, the advert table and — the one field a recruiter actually pays for — <b>the employer's own application URL</b>, the deep link into their ATS. Also unlocks the parsed salary range, ISO dates, the employer's website, the institution's internal job reference, the full description and any contact email. One extra request per vacancy, billed as a second event.",
            "default": false
          },
          "maxDetailPages": {
            "title": "Max advert pages to fetch",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on enrichment requests so the second event cannot outrun your budget. 0 = enrich every returned vacancy.",
            "default": 0
          },
          "extractContactEmails": {
            "title": "Extract contact emails",
            "type": "boolean",
            "description": "Harvest <code>mailto:</code> addresses from the advert — usually the named hiring manager or department administrator. Measured fill: 16 of 25 adverts carried at least one. These are named individuals: handling them is your responsibility under UK GDPR.",
            "default": true
          },
          "includeDescriptionText": {
            "title": "Include description (plain text)",
            "type": "boolean",
            "description": "The full advert body rendered to plain text. Taken from the schema.org block, not the page node — the on-page description container also holds the apply-button markup.",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Include description (HTML)",
            "type": "boolean",
            "description": "The advert body as the employer wrote it, with its original markup.",
            "default": false
          },
          "includeRawJsonLd": {
            "title": "Include the raw JobPosting object",
            "type": "boolean",
            "description": "Attach the untouched schema.org <code>JobPosting</code> JSON under <code>rawJsonLd</code>, for any field this actor does not map.",
            "default": false
          },
          "minSalary": {
            "title": "Minimum salary",
            "minimum": 0,
            "type": "integer",
            "description": "Numeric filter on the parsed salary range from the advert page (needs \"Scrape job details\"). An advert whose top of range is below this is dropped. Adverts with no parsed salary are kept unless \"Only vacancies with a salary range\" is on. 0 = off.",
            "default": 0
          },
          "maxSalary": {
            "title": "Maximum salary",
            "minimum": 0,
            "type": "integer",
            "description": "Numeric filter on the parsed salary range (needs \"Scrape job details\"). 0 = off.",
            "default": 0
          },
          "onlyWithSalaryRange": {
            "title": "Only vacancies with a parsed salary range",
            "type": "boolean",
            "description": "Drop \"Competitive\" / \"Not specified\" adverts. Needs \"Scrape job details\" — the numeric range only exists in the advert page's structured block. Measured fill on standard adverts: 17 of 25 carried a min and max.",
            "default": false
          },
          "onlyWithContactEmail": {
            "title": "Only vacancies with a contact email",
            "type": "boolean",
            "description": "The lead-generation quality gate: keep only adverts that expose a named contact address. Needs \"Scrape job details\" and \"Extract contact emails\". Measured: this keeps roughly 6 in 10 adverts.",
            "default": false
          },
          "countryFilter": {
            "title": "Country",
            "enum": [
              "any",
              "uk",
              "overseas"
            ],
            "type": "string",
            "description": "jobs.ac.uk carries overseas academic posts as well as UK ones (measured 2026-09-04: 1,984 UK of 2,240, plus China 68, Ireland 41, Denmark 25, New Zealand 20 and more). Reads the advert page's country, so it needs \"Scrape job details\" — to filter server-side instead, use the Location facet.",
            "default": "any"
          },
          "employerInclude": {
            "title": "Employer must contain",
            "type": "array",
            "description": "Keep only adverts whose employer name contains one of these (case-insensitive substring), e.g. <code>Russell</code>, <code>University of Manchester</code>. Applied on the search row, so it costs you nothing.",
            "items": {
              "type": "string"
            }
          },
          "employerExclude": {
            "title": "Employer must NOT contain",
            "type": "array",
            "description": "Drop adverts whose employer name contains one of these. Useful for excluding an agency or a client you already cover.",
            "items": {
              "type": "string"
            }
          },
          "titleIncludeKeywords": {
            "title": "Job title must contain",
            "type": "array",
            "description": "Case-insensitive substring filter on the job title, applied on the search row before anything is billed. Sharper than the site's keyword search, which also matches the advert body.",
            "items": {
              "type": "string"
            }
          },
          "titleExcludeKeywords": {
            "title": "Job title must NOT contain",
            "type": "array",
            "description": "Drop titles containing any of these, e.g. <code>PhD</code>, <code>Studentship</code>, <code>Casual</code>.",
            "items": {
              "type": "string"
            }
          },
          "excludeEnhancedListings": {
            "title": "Exclude employer campaign microsites",
            "type": "boolean",
            "description": "About 4% of adverts are an employer-branded campaign page with no structured data block and no standard version. They still yield a title, employer, apply link and emails, and are never charged the enrichment fee — turn this on if you only want rows with the full structured field set. Needs \"Scrape job details\" to be detectable.",
            "default": false
          },
          "excludeHighlighted": {
            "title": "Exclude promoted adverts",
            "type": "boolean",
            "description": "Drop the paid-promotion rows the site highlights (7 of 25 on the first page measured 2026-09-04). They are ordinary vacancies — this is only here if you are analysing organic posting behaviour.",
            "default": false
          },
          "deduplicateBy": {
            "title": "De-duplicate on",
            "enum": [
              "jobId",
              "advertId",
              "employer+title"
            ],
            "type": "string",
            "description": "What counts as the same vacancy. <b>Job ID</b> is the site's own stable advert code from the URL and is the right answer for almost everyone — verified unique and lossless over a 300-row contiguous crawl (300 rows, 300 unique, 0 duplicates). Advert ID is the numeric row attribute, 1:1 with the job ID. Employer + title collapses the same role re-advertised under a new ID.",
            "default": "jobId"
          },
          "fields": {
            "title": "Output fields (allow-list)",
            "type": "array",
            "description": "Return only these columns, in this order — e.g. <code>title, employer, location, salaryText, applyUrl, contactEmail, url</code>. Leave empty for every field. The job ID is always kept, because it is the de-duplication key.",
            "items": {
              "type": "string"
            }
          },
          "monitorMode": {
            "title": "Monitor mode — new vacancies only",
            "type": "boolean",
            "description": "Remember every job ID seen in previous runs and return ONLY the ones that are new. The state lives in a NAMED key-value store so it survives between scheduled runs. Monitoring itself is free — there is no per-run or per-alert charge on this actor; you pay only for the new rows it hands you. jobs.ac.uk adds roughly 124 vacancies per weekday, so a daily monitor bills around $0.16 a day at the per-row rate.",
            "default": false
          },
          "stateKeyValueStoreName": {
            "title": "Monitor state store name",
            "type": "string",
            "description": "Named key-value store holding the seen-job-ID state. Give each independent saved search its own name so they do not shadow each other.",
            "default": "jobs-ac-uk-monitor-state"
          },
          "notificationWebhookUrl": {
            "title": "Webhook URL for new vacancies",
            "type": "string",
            "description": "POSTed a JSON payload with the new vacancies whenever a run finds any. Not billed."
          },
          "slackWebhookUrl": {
            "title": "Slack incoming-webhook URL",
            "type": "string",
            "description": "Posts a formatted card per new vacancy to a Slack channel. Not billed."
          },
          "notificationEmail": {
            "title": "Email address for new vacancies",
            "type": "string",
            "description": "Sends a digest of the new vacancies through Apify's own mail actor. Not billed by this actor."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify <b>datacenter</b> proxies are enough and are the default — measured over 180+ calls with no CAPTCHA and no rate limiting. The site does randomly serve a JavaScript interstitial instead of the page (about 5% of requests); this actor detects it and re-requests on a fresh proxy session, which cleared every one of them. If you ever see persistent failures, switch to RESIDENTIAL with country GB.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrent requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Kept deliberately low — this is a small specialist job board, not a hyperscaler.",
            "default": 3
          },
          "maxRequestRetries": {
            "title": "Max retries per request",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Each retry uses a BRAND-NEW proxy session, which is what clears the interstitial. Leave at 4 or more: the interstitial arrives as an HTTP 200, so a build that does not retry it silently returns short pages.",
            "default": 4
          },
          "minDelayBetweenRequestsMs": {
            "title": "Minimum delay between requests (ms)",
            "minimum": 0,
            "maximum": 30000,
            "type": "integer",
            "description": "Politeness throttle. 0 = no artificial delay.",
            "default": 0
          },
          "maxRunTimeSecs": {
            "title": "Max run time (seconds)",
            "minimum": 0,
            "type": "integer",
            "description": "Stop cleanly after this many seconds and push whatever was collected. 0 = only the platform run timeout applies.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}