jobs.ac.uk Scraper — UK Academic, Postdoc & Research Jobs
Pricing
from $1.50 / 1,000 job results
jobs.ac.uk Scraper — UK Academic, Postdoc & Research Jobs
Extract live UK academic & research jobs from jobs.ac.uk: lectureships, postdocs, fellowships and PhD studentships. Filter by discipline, location, contract & workplace; structured salary (min/max/currency), closing dates, optional full descriptions. Delta mode returns only new postings.
Pricing
from $1.50 / 1,000 job results
Rating
0.0
(0)
Developer
Nomad.Dev
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
3
Monthly active users
6 hours ago
Last modified
Categories
Share
jobs.ac.uk Scraper — UK Academic & Research Jobs
Scrape current academic and research vacancies from jobs.ac.uk — the UK and Europe's leading academic job board.
What jobs.ac.uk data does this scraper extract?
Each result is one flat JSON record per job posting:
| Field | Meaning |
|---|---|
advertId | Numeric jobs.ac.uk advert identifier from the listing card, or null. More stable than jobId for cross-run dedup |
jobId | Stable source-side job identifier, parsed from the posting URL (e.g. DSC994) |
id | Alias of jobId — same value, kept for field-name consistency across our Actors |
title | Job title as posted |
company | Hiring institution / organisation, or null if the listing omits it |
department | Hiring department / faculty, or null when the listing omits it |
location | Location / duty station; defaults to "United Kingdom" when the listing shows no city |
isRemote | true when the listing text (or an applied remote workplace filter) marks the role remote; null when the search card doesn't state a workplace type |
workplaceType | "remote", "hybrid" or "on-site" when stated by the listing text or a single applied workplace filter; null otherwise |
salary | Salary text as displayed on the listing, or "" when no salary is shown |
salaryMin | Lower salary figure parsed from the salary text, or null when the listing shows no numeric salary |
salaryMax | Upper salary figure parsed from the salary text, or null for a single-figure or non-numeric salary |
salaryCurrency | Currency of the parsed salary (GBP/EUR/USD), or null |
salaryPeriod | Pay period parsed from the salary text: "year", "month", "week", "hour", or null |
postedAt | ISO 8601 date (YYYY-MM-DD) the listing was placed, or null if it can't be parsed |
deadline | ISO 8601 date (YYYY-MM-DD) parsed from the listing's "Closes"/"Expires" chip, the raw text when it can't be parsed, or null when the listing shows no closing date |
isNew | true when the record was returned under delta mode (onlyNewSinceLastRun); present only on delta-mode runs |
description | Full advert text from the posting's detail page; present only with fetchDescriptions on, null when the detail page couldn't be read |
url | Direct link to the posting |
Note: jobs.ac.uk's search-results page shows title, department, employer, location, salary and dates only — no excerpt text. Turn on fetchDescriptions to also fetch each posting's detail page and get the full advert text in description. salaryMin/salaryMax/salaryCurrency/salaryPeriod are parsed from the displayed salary text.
How to scrape jobs.ac.uk with this Actor
- Click Try for free / Run — no login to the target site, no cookies, no proxies to configure.
- Adjust the input (keyword, filters,
maxItems) or keep the defaults. - Run it and export the dataset as JSON, CSV or Excel, or read it over the API.
Run it from your own code:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("nomad-agent/jobs-ac-uk-scraper").call(run_input={"maxItems": 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], "—", item["company"], item["url"])
Or a single HTTP call that runs the Actor and returns items in one response:
curl -X POST \"https://api.apify.com/v2/acts/nomad-agent~jobs-ac-uk-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"maxItems": 50}'
Input
| Field | Type | Default | Notes |
|---|---|---|---|
keywords | array | (built-in defaults) | List of keyword queries to fan across. Each keyword is searched separately and results are merged (deduped by URL). Leave empty to use the built-in defaults spanning both humanities/social-science and STEM/health: social science, politics, psychology, humanities, international development, research, computer science, engineering, biology, medicine. |
disciplines | array | (all) | Filter by discipline facet (server-side). See slug list below. Unknown values are ignored with a warning. |
location | array | (all) | Filter by location region/city facet slug (server-side), e.g. england, scotland, greater-london, manchester, edinburgh. Values are lowercased/hyphenated automatically. An unrecognised slug returns 0 results. |
studentshipType | array | (all) | Filter to studentships: phds, masters. |
contractType | array | (all) | Filter by contract: permanent, fixed-term-contract, temporary. |
hours | array | (all) | Filter by hours: full-time, part-time. |
workplace | array | (all) | Filter by workplace: remote, hybrid, on-site. A single value also fills each record's isRemote/workplaceType. |
employerSector | array | (all) | Filter by sector: universities-higher-education-institutions, further-education, science-and-research-organisations, public-sector, charity-not-for-profit, commercial-organisations. |
employer | string | (none) | Keep only postings whose employer name contains this text (case-insensitive). Applied locally — jobs.ac.uk has no server-side employer-name filter. |
maxItems | integer | 100 | Maximum number of job postings to return across all keyword queries. Each job returned is billed as one result event — see Pricing. Set to 0 for no limit. |
pageSize | integer | 25 | How many results to request per keyword search (portal maximum is 25). Increase if you are running with a large maxItems and few keywords. |
postedSince | integer | 0 | Only keep postings placed within this many days (max 365). Applied locally after fetching — jobs.ac.uk has no server-side date filter. Listings whose date can't be read are always kept. Set 0 to disable. |
fetchDescriptions | boolean | false | Also fetch each posting's detail page and return the full advert text in description. One extra page fetch per job; each enriched job bills one additional detail event (see Pricing). |
onlyNewSinceLastRun | boolean | false | Delta mode: return only postings not already delivered by a previous run of this Actor (remembered in a named key-value store). A scheduled run then pays only for genuinely-new postings; each returned record carries isNew=true. |
cacheTtlSeconds | integer | 1800 | (Advanced) How long to reuse a previous fetch instead of contacting jobs.ac.uk again, in seconds. Set to 0 to always fetch fresh data. |
Discipline slugs. Academic: 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. Professional-services: 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, pr-marketing-sales-and-communication, project-management-and-consulting, senior-management, sports-and-leisure, student-services, sustainability, web-design-and-development.
Location filtering: jobs.ac.uk's free-text "within N miles" radius search relies on Google geocoding, so this Actor filters by the region/city facet (
location) instead — pick a region (scotland,wales,greater-london) or city (manchester,oxford) slug.
Output example
{"advertId": "1080834","jobId": "DSC994","id": "DSC994","title": "Admissions & Student Recruitment Coordinator","company": "University of Strathclyde","department": "Student Recruitment & Admissions","location": "Glasgow","isRemote": null,"workplaceType": null,"salary": "£28,031 to £30,378 per annum","salaryMin": 28031,"salaryMax": 30378,"salaryCurrency": "GBP","salaryPeriod": "year","postedAt": "2026-07-02","deadline": "2026-07-08","url": "https://www.jobs.ac.uk/job/DSC994/admissions-and-student-recruitment-coordinator-828134"}
Integrations
Export the dataset as JSON, CSV or Excel from the Console, pull it over the Apify API (including run-sync-get-dataset-items for a single blocking call), wire it into Make/Zapier/n8n, or drive it from an AI agent via the Apify MCP server.
Pricing
Pay per event: $0.005 per Actor start and $0.002 per job returned (less on higher Apify subscription tiers, down to $0.0015), plus $0.002 per full description when fetchDescriptions is on.
100 jobs ≈ $0.21 (≈ $0.41 with full descriptions). No subscription, no rental — you pay only for what you fetch.
Use cases
- Academic job boards and PhD/postdoc alert bots
- University HR benchmarking
- Research-funding and hiring-trend analysis
- Career services for early-career researchers
FAQ
Is it legal to scrape jobs.ac.uk? This Actor reads only publicly available job postings — data any visitor can see without logging in. No personal data behind authentication is touched. Review the target site's terms and your local regulations for your specific use case.
Do I need an account on the target site? No. Postings are fetched from public pages/APIs — no login, cookies or session tokens.
How fresh is the data?
Every run fetches live listings. Results are cached for cacheTtlSeconds (default 30 min, set 0 to always hit the source live).
How many jobs can I get?
maxItems caps the run (set 0 where supported for no cap). Most sources paginate from newest to oldest.
Something broken or missing? Open an issue on the Actor's Issues tab — it is monitored and reliability fixes ship fast.
Is this Actor useful to you? A short review on the Store page genuinely helps other researchers and recruiters find it — it takes under a minute.
Is this Actor useful to you? A quick ⭐ review on the Actor's Reviews tab helps other academic-job seekers find it — and tells us what to build next.