UK Public Sector Jobs Scraper: NHS Jobs & Teaching Vacancies
Pricing
Pay per event
UK Public Sector Jobs Scraper: NHS Jobs & Teaching Vacancies
Scrape UK public-sector vacancies from NHS Jobs and Teaching Vacancies (official OGL APIs), plus optional DWP Find a Job. One schema with annual GBP salary, NHS Agenda for Change bands, teacher pay scales, region, closing-soon filter, new-job monitoring and employer hiring summaries.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Signal Scout
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Share
Get UK public-sector vacancies from NHS Jobs and Teaching Vacancies (DfE) in one clean dataset, with UK pay normalised. Every salary is turned into an annual GBP figure. NHS jobs are tagged with their exact Agenda for Change band and teaching jobs with their pay scale (MPS, UPS, leadership). Each job also gets its region and local authority. You can filter for jobs closing in the next few days, and run it on a schedule to get only new jobs.
✅ NHS Jobs + Teaching Vacancies in one schema · ✅ annual GBP salary min/max · ✅ exact NHS AfC band (2–9, 8a–8d) · ✅ teacher pay scales (MPS / UPS / leadership / unqualified) · ✅ region + local authority from postcode · ✅ "closing soon" filter · ✅ "new jobs only" monitoring · ✅ hiring summary per trust or school · ✅ official open-licence APIs, no proxies, no browser
By signalscouter: reliable, low-cost data scrapers for hiring and market signals.
What does UK Public Sector Jobs Scraper do?
It reads the official public APIs behind two of the UK's biggest public-sector job boards:
| Source | What it covers | Access | Licence |
|---|---|---|---|
| NHS Jobs (NHS Business Services Authority) | ~12,000 live NHS vacancies in England & Wales: trusts, GP practices, ICBs, hospices | Official public XML search API | Open Government Licence v3.0 |
| Teaching Vacancies (Department for Education) | ~5,000 live school jobs in England: teachers, leaders, teaching assistants, support staff | Official public JSON API (schema.org JobPosting) | Open Government Licence v3.0 |
It then normalises both into one schema and adds the things UK recruiters actually filter on:
- Pay: "£28,392 to £31,157 a year", "£13.45 per hour" and "G6 SCP 20-24 £28,153-£31,015 FTE" all become
salaryAnnualMin/salaryAnnualMaxin GBP. Pro-rata and FTE adverts are flagged. - NHS Agenda for Change band: taken from NHS Jobs' own pay-band filter, so it's exact. When an advert gives no figures (e.g. "Negotiable"), the band's 2026/27 pay range is used and flagged.
- Teacher pay scales: MPS / M1–M6, UPS / U1–U3, leadership (L-points), unqualified and lead practitioner, read from the advert text or matched against national pay ranges.
- Location: postcode → region and local authority (postcodes.io, ONS open data).
- Contract and hours: permanent / fixed-term / bank / locum / apprenticeship / training…, full-time / part-time, and hours per week where stated.
- Dates: posted date, closing date and
daysUntilClosing.
What data do you get?
Per job (recordType: "job"):
source,jobId, stableuid,reference,title,jobRole(Teaching Vacancies)employer,employerType(nhs_trust, gp_practice, nhs_icb, school, academy_trust, local_authority…),employerId(school URN),employerWebsitelocation,postcode,region,localAuthority,countrysalaryText,salaryMin,salaryMax,salaryInterval,salaryAnnualMin,salaryAnnualMax,salaryIsProRata,salarySourcenhsBand,nhsBandSource,payScheme,teacherPayScales,teacherPayPointscontractType,workingPattern,hoursPerWeek,isRemotepostedAt,closingDate,daysUntilClosingurl,applyUrl,description(+descriptionHtmloptional),isNew(monitoring mode),attribution,scrapedAt
Per employer (recordType: "employerSummary", optional):
- Open roles; roles posted in the last 7 and 30 days; roles closing within 7 days
- NHS band mix, teacher pay-scale mix, contract-type mix
- Median annual salary, top titles, regions, local authorities
newSinceLastRunin monitoring mode
Use cases
- 🏥 Healthcare recruitment and staffing agencies: get every new Band 5–7 nursing role in your region each morning, grouped by trust.
- 🍎 Education recruitment agencies: track new teaching and TA roles by local authority, and see which schools are hiring repeatedly.
- 🧑💻 Niche job boards: power a nurse, teacher or public-sector board with clean, attributed, openly licensed data.
- 📈 Sales to the NHS and schools: a trust posting 30 roles this month, or a school replacing its business manager, is a buying signal. Feed the employer summaries into your CRM.
- 📊 Labour-market research and journalism: count vacancies by band, region, trust or local authority over time.
- ⏰ "Closing soon" alerts: catch roles before the deadline. Public-sector adverts have hard closing dates.
How to use it
- Click Try for free. Choose your sources (NHS Jobs, Teaching Vacancies or both) and, optionally, add Keywords and Locations.
- Add filters: region, minimum annual salary, NHS bands, teacher pay scales, job roles, contract type, working pattern, posted within N days, or closing within N days.
- Click Start. Download the results as JSON, CSV or Excel, or read them through the API.
Input example: Band 5–6 nursing jobs in Yorkshire closing within 7 days
{"sources": ["nhs"],"keywords": ["nurse"],"nhsBands": ["5", "6"],"regions": ["Yorkshire and The Humber"],"closingWithinDays": 7,"includeEmployerSummary": true}
Input example: daily feed of new MPS/UPS teaching jobs in London (monitoring mode)
{"sources": ["teaching"],"teachingJobRoles": ["teacher"],"teacherPayScales": ["MPS", "UPS"],"regions": ["London"],"onlyNewJobs": true}
Schedule the Actor (for example, daily at 07:00) with Only new jobs since last run on. Each run then outputs only jobs that weren't there last time. The "seen jobs" memory is kept in a named key-value store (uk-public-sector-jobs-state) in your account, keyed on your filters so different saved tasks don't interfere.
Output sample
| source | title | employer | region | salaryAnnualMin | salaryAnnualMax | nhsBand | teacherPayScales | closingDate |
|---|---|---|---|---|---|---|---|---|
| nhs | Registered Nurse | The Mid Yorkshire Teaching NHS Trust | Yorkshire and The Humber | 32073 | 39043 | 5 | — | 2026-10-25 |
| nhs | PGDip Student Midwife | Lewisham and Greenwich NHS Trust | London | 32073 | 39043 | 5 | — | 2026-10-20 |
| teaching | Teacher with Head of Learning Responsibility | St Edward's Church of England Academy | London | 39195 | 58119 | — | MPS, UPS | 2026-10-23 |
| teaching | Teaching Assistant Level 2 | Garforth Academy | Yorkshire and The Humber | 26847 | 27709 | — | — | 2026-10-31 |
{"recordType": "job","source": "nhs","sourceName": "NHS Jobs","jobId": "5669750","title": "PGDip Student Midwife","employer": "Lewisham and Greenwich NHS Trust","employerType": "nhs_trust","location": "Woolwich, SE18 4QH","postcode": "SE18 4QH","region": "London","localAuthority": "Greenwich","salaryText": "£32,073 to £39,043 a year per annum plus HCAS","salaryAnnualMin": 32073,"salaryAnnualMax": 39043,"salaryInterval": "year","nhsBand": "5","nhsBandSource": "nhsJobsAdvert","payScheme": "Agenda for change","contractType": "training","workingPattern": "full_time","postedAt": "2026-10-16T15:16:42.657996+00:00","closingDate": "2026-10-20T00:00:00+00:00","daysUntilClosing": 0,"url": "https://www.jobs.nhs.uk/candidate/jobadvert/C9197-26-0938","attribution": "Contains public sector information licensed under the Open Government Licence v3.0. Source: NHS Jobs (NHS Business Services Authority)."}
Employer summary example:
{"recordType": "employerSummary","source": "nhs","employer": "Leeds Teaching Hospitals","employerType": "nhs_trust","openJobs": 23,"postedLast7Days": 13,"closingWithin7Days": 12,"medianAnnualSalary": 35558,"bandMix": [{"name": "Band 3", "count": 5}, {"name": "Band 6", "count": 7}, {"name": "Band 8a", "count": 1}],"localAuthorities": [{"name": "Leeds", "count": 23}]}
(Figures from test runs in October 2026; live numbers change daily.)
The Console has three ready-made views: Jobs, Employer hiring summaries and Errors.
How much does it cost?
The Actor uses pay-per-event pricing. Current prices are always on the Pricing tab. You pay for:
- each job returned (
job-resultevent) - each employer summary, only if you turn summaries on (
employer-summaryevent)
Error records are never charged. In monitoring mode you pay only for new jobs. Use Max jobs per source, Max total jobs and the filters to cap the cost of a run.
The Actor also respects your run's maximum cost setting. When it is reached, it stops delivering jobs, and RUN_SUMMARY.droppedAtChargeLimit shows how many matching jobs and summaries were left out. In monitoring mode those jobs are not marked as seen, so the next run delivers them. Apify's free monthly credits are enough to try it.
FAQ
Is this legal? Can I reuse the data commercially?
Both sources publish their job data under the Open Government Licence v3.0. The OGL lets you copy, publish and adapt the data, including commercially, as long as you attribute it. Every record carries an attribution field with the required statement. Keep it, or show "Contains public sector information licensed under the Open Government Licence v3.0" with the source name wherever you republish the data. The Teaching Vacancies API terms also say you must not charge candidates or schools a fee for a hire made through a listing you republished. Check that rule if you run an agency. The Actor reads only public job adverts, never logs in, collects no candidate data, respects robots.txt and waits between requests.
How accurate are the NHS bands and teacher pay scales?
- NHS bands (
nhsBandSource: "nhsJobs") come from NHS Jobs' own pay-band filter, so they're exact. nhsJobsAdvertmeans the band was read from the advert page.textmeans "Band N" appeared in the title or salary.salarymeans the salary matched a 2025/26 or 2026/27 Agenda for Change pay point.- Teacher pay scales come from the advert's own wording (MPS, M1–M6, UPS, L8–L10…) or from figures that match the 2026/27 or 2025/26 national ranges.
- When an advert names a scale but gives no figures, the national (rest-of-England) range is used and
salarySourcesays so.
How is the annual salary calculated?
- Hourly pay × 1,950 (37.5 hours × 52 weeks), daily × 260, weekly × 52, monthly × 12.
- Pro-rata and FTE adverts keep the full-time-equivalent figures and set
salaryIsProRata: true. - "Up to £X" gives only a maximum, and "From £X" only a minimum.
Why is the NHS description short? NHS Jobs' feed includes only the first ~150 characters. Turn on NHS: fetch full advert to get the full summary, main duties and responsibilities, plus pay scheme, working pattern and reference. It costs one extra request per output job, so use it with filters or caps.
What about Civil Service Jobs, DWP Find a Job, Reed or Indeed?
- Civil Service Jobs runs an anti-bot check, so it isn't included.
- DWP Find a Job returned errors to every automated request in our October 2026 tests, so it isn't included either.
- Commercial boards (Reed, Totaljobs, Indeed, Adzuna) forbid commercial reuse in their terms.
We only ship sources we can use reliably and legitimately. Open an issue if there's an official feed you'd like added.
How do keywords work?
- By default, a keyword must appear in the job title (or the Teaching Vacancies job role), which gives precise results.
- Set Keyword match to Anywhere to use NHS Jobs' own full-text search and match Teaching Vacancies descriptions too. This is much broader: "nurse" matches about 40% of all NHS adverts.
How fast is it? Is the data complete?
- A full run of both boards (~17,000 jobs) takes about 3–5 minutes on the platform at the default 512 MB memory (peak use is about 225 MB, so more memory doesn't help).
- NHS Jobs is read in newest-first order, the only ordering NHS Jobs pages through without dropping jobs. Exact band tagging makes a second pass per band.
- Teaching Vacancies: the API has no server-side filters, so each run reads all ~60 pages (about 1 minute). Some jobs appear on more than one page, and the Actor removes the duplicates. On 20 Oct 2026, the API's reported 5,794 count came to 5,050 unique jobs.
- Posted within N days stops early on both sources, so daily monitoring runs take about 10 seconds.
How do I integrate it? Use the Apify API or the official JavaScript and Python clients. You can also connect it with Make, Zapier, n8n, Google Sheets, Slack, webhooks, or the Apify MCP server for AI agents. Results export to JSON, CSV, Excel, XML or RSS.
Attribution
- Contains public sector information licensed under the Open Government Licence v3.0.
- NHS Jobs data © NHS Business Services Authority.
- Teaching Vacancies data © Department for Education.
- Postcode lookups use postcodes.io, which serves Office for National Statistics data (OGL).
signalscouter isn't affiliated with, or endorsed by, the NHS, NHSBSA or DfE.
More signalscouter Actors
| Actor | What it gives you |
|---|---|
| Career Site Jobs Scraper | Jobs from 12 ATSes (Greenhouse, Lever, Ashby, Workday, Workable and more) in one schema, from company domains |
| Workday Jobs Scraper | Jobs from any myworkdayjobs.com career site, including sites with more than 2,000 jobs |
| Company Tech Stack & Domain Signals | What a company's website runs on, plus DNS, email security and domain age |
| SEC Form D Funding Signals | Newly funded US companies from SEC Form D filings |
Support and feedback
Built and maintained by signalscouter (apify.com/signalscouter, signalscouter.data@gmail.com). Found a bug, or want a field or source added? Open a ticket on the Issues tab. We read every issue and aim to reply quickly. If the Actor saves you time, a review on the Store helps others find it.