Skip to content
    ↑↓ to choose · Enter to open

    · 14 min read

    Jobs.ac.uk Academic Jobs Scraper: 21 Data Fields per Record (2026)

    By CrawlerBros Engineering Team

    Each extracted record carries 21 output fields, including structured salaries, closing dates, and full text descriptions. This tool allows recruiters and researchers to track the UK's leading academic and higher-education job board without setting up custom proxies. You can search by keywords or filter by 20 academic disciplines and 19 professional-services job families. This is ideal for institutions modeling recruitment patterns or individuals tracking postgraduate funding. It is not for anyone who needs email addresses of hiring managers, as these records do not contain internal recruiter contact details.

    Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 1,000 results at $0.005 each before platform usage. Open Jobs.ac.uk Academic Jobs Scraper on Apify and run the prefilled example.

    How reliable is Jobs.ac.uk Academic Jobs Scraper in production?

    Across the last 30 days of public runs on the Apify platform, Jobs.ac.uk Academic Jobs Scraper recorded 69 runs with the following outcomes.

    Outcome Runs Share
    Succeeded 69 100.0%
    Failed 0 0.0%
    Aborted by the user 0 0.0%
    Timed out 0 0.0%
    Total 69 100.0%

    No run failed or timed out in the last 30 days. Keep a retry and an alert on scheduled runs all the same: a clean month is a record, not a guarantee.

    What does it cost to run Jobs.ac.uk Academic Jobs Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. No run failed or timed out in the last 30 days, so the list price is a fair budget; keep a retry in place all the same.

    The maxItems setting has the largest direct impact on your final result charges. The billing applies per result written to your dataset on top of Apify's standard platform usage fees. To test this scraper with minimal spend, run a targeted search with a small item cap and fetchFullDescription disabled before extracting complete job pages.

    How do you run Jobs.ac.uk Academic Jobs Scraper from the API?

    The schema marks 1 of its 20 controls as required: mode. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for Jobs.ac.uk Academic Jobs Scraper, so the request works once your token is in place.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~jobs-ac-uk-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"mode":"search","keywords":"research"}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "mode": "search",
      "keywords": "research"
    }
    
    run = client.actor("crawlerbros~jobs-ac-uk-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "mode": "search",
      "keywords": "research"
    }
    
    const run = await client.actor('crawlerbros~jobs-ac-uk-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.

    Which Jobs.ac.uk Academic Jobs Scraper inputs matter, and which can you skip?

    The mode control is the single required input, allowing you to alternate between broad keywords or specific job listings. Most users should start with the search mode and configure either academicDisciplines or nonAcademicDisciplines. Keep distanceMiles set to its default since jobs.ac.uk ignores numerical radius searches from server-side requests.

    • mode (string): What to fetch. Default: "search".
    • keywords (string): Free-text search terms (job title, skill, employer name). Leave empty to browse by discipline/filters only.
    • location (string): UK town/city, region, or country text to filter jobs by (e.g. London, Manchester, Scotland). Matched as a case-insensitive substring against each job's advertised location - jobs.ac.uk's own distance-radius search requires a browser-only autocomplete widget with no free server-side equivalent, so this is a text match rather than a precise mile radius.
    • locationFacet (string): A single jobs.ac.uk location facet, as a real working server-side filter (unlike location/distanceMiles above). Use a continent (Europe), country (United Kingdom, Ireland, United States), UK nation (England, Scotland, Wales, Northern Ireland) or UK county/city-region (Greater London, Oxfordshire, Greater Manchester, Cambridgeshire, etc.) - free text is auto-slugified (e.g. Greater London -> greater-london). Only ONE value is honored meaningfully: jobs.ac.uk ANDs multiple location facets together, and since a job only has one location, combining two different regions always yields 0 results - so pass a single region per run. An unrecognized value simply yields 0 results rather than erroring.
    • distanceMiles (integer): Sent to jobs.ac.uk alongside location, but the site only honors a mile-radius when location was resolved through its browser-side autocomplete widget (not available to a server-side scraper), so this has no effect on which jobs are returned. Kept for forward-compatibility only; use a broader/narrower location string to widen or narrow results instead. Default: 0.
    • sortOrder (string): Result ordering. Default: "relevance".
    • academicDisciplines (array): Filter to one or more academic subject areas. Default: [].
    • academicSubDisciplines (array): Filter to one or more narrower academic sub-fields (e.g. Cyber Security within Computer Sciences). Independent of academicDisciplines -- can be used alone or combined. Default: [].
    • nonAcademicDisciplines (array): Filter to one or more professional-services job families (HE administration, IT, HR, etc.). Default: [].
    • jobTypes (array): Restrict to Masters or PhD study opportunities instead of staff jobs. Default: [].
    • hoursTypes (array): Filter by working hours. Default: [].
    • contractTypes (array): Filter by contract type. Default: [].

    The other 8 controls, with their defaults, are listed in the input schema on Jobs.ac.uk Academic Jobs Scraper on Apify.

    Fixed-choice controls: mode accepts search (Search / browse jobs), byUrls (Fetch specific job URLs); sortOrder accepts relevance, datePlaced (newest first), closingDate (soonest first).

    What does Jobs.ac.uk Academic Jobs Scraper return?

    The dataset contains parsed job details such as jobReference, employer, locationCity, and salaryAmount. The full plain-text description is returned only if fetchFullDescription is enabled. The results do not include email addresses or direct candidate application tracking system links.

    • title, jobUrl, jobReference (jobs.ac.uk advert code, e.g. DSI921)
    • employer, employerLogoUrl, employerWebsite
    • department (when advertised)
    • location, locationCity, locationRegion, locationCountry
    • salaryRaw (as advertised), salaryAmount, salaryCurrency, salaryPeriod
    • employmentTypes[] (e.g. Full Time, Fixed-Term/Contract)
    • description (full plain-text job description)
    • datePosted, closingDate - ISO 8601
    • recordType: "job", scrapedAt

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Jobs.ac.uk Academic Jobs Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Select mode search and enter a single term in keywords, such as lecturer, along with a specific locationFacet such as England.
    2. Verify that the first returned dataset records contain a valid title, jobUrl, and the target employer.
    3. Toggle fetchFullDescription to true to ensure the scraper navigates to individual listing pages.
    4. Inspect the resulting dataset to confirm that the plain-text description and structured closingDate are present.
    5. Add a single academic subject area to the academicDisciplines array, leaving other filters blank to check result diversity.
    6. For postgraduate research tracking, set jobTypes to phds and choose a targeted option in fundingTypes.
    7. Set maxItems to a small limit like 25 to check your output format and fields without spending extra credits.
    8. Review the final parsed results for any missing optional fields before running a large-scale or scheduled extraction.

    How do you apply it? Three worked playbooks

    These are Jobs.ac.uk Academic Jobs Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: HE recruitment intelligence

    Outcome: Track hiring trends across UK universities and research institutes

    Configure: mode = "search", keywords = "researcher", academicDisciplines = ["biological-sciences"], employerSectors = ["universities-higher-education-institutions"], maxItems = 100

    Working method: Execute an initial baseline run to find active biology research vacancies. Run the scraper weekly with sortOrder set to datePlaced. Compare weekly volume spikes and shifts in contractTypes over consecutive weeks to map departmental hiring priorities.

    Deliverable: A structured weekly CSV export containing the parsed jobReference, employer, location, and employmentTypes to detect institutional workforce trends.

    Stop condition: The average number of records returned drops below 5 per scheduled weekly run with unchanged keyword inputs.

    Use case 2: PhD/Masters discovery

    Outcome: Surface funded postgraduate opportunities by subject and funding type

    Configure: mode = "search", jobTypes = ["phds"], fundingTypes = ["uk-students"], academicDisciplines = ["computer-sciences"], maxItems = 50

    Working method: Perform an initial search for computing doctorates eligible for domestic funding. Examine the closingDate on early listings. Track monthly openings by scheduling the extraction on the first day of every month to find newly funded student positions.

    Deliverable: A spreadsheet of open PhD postings detailing the funding eligibility, specific academicSubDisciplines, and the direct application jobUrl.

    Stop condition: The description field is completely empty in 5 consecutive records despite fetchFullDescription being active.

    Use case 3: Salary benchmarking

    Outcome: Aggregate advertised salary bands by discipline or sector

    Configure: mode = "search", academicDisciplines = ["mathematics-and-statistics"], salaryBands = ["40000-49999", "50000-59999"], fetchFullDescription = true, maxItems = 100

    Working method: Run separate parallel queries for mathematical subjects across different salary bands. Match the returned salaryAmount and salaryCurrency values against the broader sector fields to calculate median pay.

    Deliverable: A normalized dataset containing raw salary text side-by-side with parsed numerical limits, grouped by employer name and job title.

    Stop condition: More than 15% of the returned records lack both salaryRaw and salaryAmount fields.

    What breaks, and how do you design around it?

    • Over the last 30 days, 0.0% of public runs failed and 0.0% timed out. Build retries and alerting around those rates rather than assuming every run completes.

    Rely on the locationFacet control to target specific UK regions because free-text location filtering is only a substring match. If you must search across three distinct territories, configure three separate runs using single facets rather than combining them. When fields like department are empty, it means the hiring institution left them blank, so you should build fallback logic to use the employer name instead.

    When should you not use Jobs.ac.uk Academic Jobs Scraper?

    Do not use this Actor if you are trying to scrape non-academic UK job markets or healthcare vacancies. For those targets, specialized tools like the NHS Jobs Scraper or the Tes Jobs Scraper are much better suited. Do not use this tool if you need broad coverage across global hiring boards, where Jobbio Jobs Scraper or EURES Job Vacancy Scraper would be far more efficient alternatives. This scraper is also unsuitable if you require direct email addresses of university hiring teams, which are not part of the public web interface.

    What should you check before trusting the output?

    • Alert if the jobReference field is empty or missing in more than 1% of the extracted dataset rows.
    • Trigger an investigation if the average character length of the description field drops below 100 characters when fetchFullDescription is enabled.
    • Set up a validation rule to flag records where the parsed salaryAmount is zero but the raw salaryRaw text has numeric values.
    • Confirm that the datePosted field is populated with a valid ISO 8601 string for every single record in the dataset.
    • Halt execution if more than 10% of results return empty values for both locationCity and locationRegion.

    None of this proves a record is correct. It gives a scheduled Jobs.ac.uk Academic Jobs Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    What is the historical reliability of this scraper?

    No executions failed, timed out, or were aborted by users during this period, indicating that the scraper handles the site's public structure reliably.

    How much does it cost to scrape 10,000 jobs?

    At the free-plan price of $5.00 per 1,000 results, extracting 10,000 jobs would incur $50.00 in result charges.

    Why did my search return 0 results when combining locations?

    The jobs.ac.uk server uses strict AND logic when evaluating multiple geographical parameters. Because a job posting has only one location, passing more than one locationFacet value per run will result in zero matches. Run separate tasks for different counties or regions instead.

    Is a proxy or user account required?

    No. The scraper runs HTTP-only requests against public pages without requiring authentication, login cookies, or custom proxy configurations. This keeps your setup simple and lowers platform usage costs.

    Can I target specific professional-services roles instead of faculty positions?

    Yes. While academicDisciplines covers teaching and research roles, you can select from 19 professional-services job families inside nonAcademicDisciplines. This allows you to target university support roles like IT Services, HR, and Estates Management.

    Where to go next

    When you are ready to run it, open Jobs.ac.uk Academic Jobs Scraper on Apify; the free plan covers up to 1,000 results a month.

    Start with the Jobs.ac.uk Academic Jobs Scraper Actor page for the current input schema, pricing tier, and run history.

    Other Actors we maintain for related data:

    • HelloWork Jobs Scraper: Scrape live job listings from HelloWork.com, one of France's largest job boards.
    • NHS Jobs Scraper: Extract UK NHS job vacancies from jobs.nhs.uk including title, employer, salary, band, pay scheme, location, contract type, closing date, full description, and more.
    • Tes Jobs Scraper: Scrape teaching, school leadership and education-support job vacancies from Tes.com (Times Educational Supplement) - search by keyword, subject, position, workplace, contract type/term, or fetch exact vacancies by ID/URL.
    • EURES Job Vacancy Scraper: Scrape live job vacancies from EURES, the European Union's official cross-border job mobility portal.
    • Jobbio Jobs Scraper: Scrape global job listings from Jobbio - search by keyword, filter by contract type and experience level, paginate through thousands of openings.
    • Jobicy Remote Jobs Scraper: Scrape Jobicy.com - a curated remote job board with 1,000+ active listings.
    • Remote Jobs Scraper: Scrape remote job listings from Jobicy - a curated remote job board with 1,000+ active remote jobs.
    • jobs.ch Scraper: Scrape job listings from jobs.ch, Switzerland's largest job board.

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-10-02.

    • Actor last updated by its maintainers on 2026-08-05.

    • Run outcome figures cover the 30 day public window ending 2026-10-02.

    • Jobs.ac.uk Academic Jobs Scraper on Apify

    Featured actors

    Jobs.ac.uk Academic Jobs Scraper

    Scrape jobs.ac.uk - the UK's leading academic & higher-education job board. Search by keyword/location, browse by discipline, filter by contract type, hours, salary band, workplace and sector, or fetch specific job URLs.

    Run on Apify ↗