NHS Jobs Scraper
Pricing
from $0.79 / 1,000 results
NHS Jobs Scraper
Scrape NHS Jobs for structured UK healthcare listings. Filter by pay band, staff group, contract type, location. No API key needed.
Pricing
from $0.79 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share

Extract structured job listings from NHS Jobs — the official recruitment platform for the UK's National Health Service, with over 60,000 active vacancies across hospitals, GP practices, mental health trusts, community care, and NHS support services. No API key required.
Why this scraper?
🏥 Complete NHS Job Board Coverage
Access the full NHS Jobs database — clinical, administrative, scientific, and medical roles across England, Wales, Scotland, and Northern Ireland.
🎯 NHS-Specific Filters
Filter by NHS pay band (Band 2–9, Consultant, VSM), staff group (Nursing & Midwifery, Allied Health, Medical & Dental, and more), contract type, and working pattern in a single run.
📄 Full Job Descriptions
Optionally fetch complete job summaries, main duties, responsibilities, and employer information from each listing's detail page.
💷 Structured Salary & Pay Band Data
Salary strings are parsed into salaryMin, salaryMax, salaryPeriod, and currency fields. NHS-specific paySchemeType (e.g. Agenda for change) and payBand (e.g. Band 6) are extracted directly from each listing.
🔁 Repost Detection
Cross-run deduplication tracks job IDs for 90 days — isRepost: true flags re-advertised vacancies, and originalPublishDate shows when they first appeared.
📍 Location & Distance Search
Search by city, postcode, or region with configurable distance radii (5–100 miles). Results include structured city and postcode fields extracted from the listing.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | string | "" | Keywords to search, e.g. "nurse", "radiographer", "consultant" |
location | string | "" | City, town, county, or postcode, e.g. "London", "Manchester", "SW1A 1AA" |
distance | integer | — | Search radius in miles: 5, 10, 20, 30, 50, 100 |
contractTypes | array | [] | Filter by contract: "Permanent", "Fixed-Term", "Locum", "Bank", etc. |
workingPatterns | array | [] | Filter: "full-time", "part-time", "remote-working", "flexible-working", etc. |
staffGroups | array | [] | NHS staff group: "NURSING_AND_MIDWIFERY_REGD", "MEDICAL_AND_DENTAL", etc. |
payBands | array | [] | NHS pay band: "BAND_5", "BAND_6", "CONSULTANT", "VERY_SENIOR_MANAGER", etc. |
sortBy | string | "publicationDateDesc" | Sort order: "publicationDateDesc", "closingDate", "salaryAsc", "salaryDesc" |
maxResults | integer | 100 | Maximum number of results to return |
fetchDetails | boolean | true | Fetch full job description and contact details from each listing |
skipReposts | boolean | false | Skip jobs already seen in previous runs |
daysOld | integer | — | Only return jobs posted within this many days |
startUrls | array | [] | Scrape specific NHS Jobs listing URLs directly |
requestDelayMs | integer | 1000 | Minimum delay between requests (ms) |
Output schema
Each result contains:
{"id": "A2026-26-0001","url": "https://www.jobs.nhs.uk/candidate/jobadvert/A2026-26-0001","title": "Staff Nurse","company": "University College London Hospitals NHS Foundation Trust","location": "London WC1E 6BT","city": "London","postcode": "WC1E 6BT","country": "GB","salaryRaw": "£35,964 - £43,780 per annum","salaryMin": 35964,"salaryMax": 43780,"salaryPeriod": "YEAR","currency": "GBP","contractType": "Permanent","workingPattern": "Full-time","publishDate": "2026-04-28","publishDateISO": "2026-04-28","closingDate": "2026-05-15","closingDateISO": "2026-05-15","referenceNumber": "A2026-26-0001","paySchemeType": "Agenda for change","payBand": "Band 6","salaryDetail": "£35,964 - £43,780 per annum including HCAS","fullAddress": "235 Euston Road, London, WC1E 6BT","tracJobReference": "UCL-26-0001","employerWebsite": "https://www.uclh.nhs.uk","contactTitle": "Recruitment Team","descriptionHtml": "<h2>Job summary</h2><p>...</p>","descriptionText": "Job summary ...","descriptionMarkdown": "## Job summary\n\n...","summary": "First 200 characters of the job description...","contentHash": "a1b2c3d4e5f60718","source": "jobs.nhs.uk","scrapedAt": "2026-05-06T12:00:00.000Z","isRepost": false,"originalPublishDate": null,"originalUrl": null}
Field reference
| Field | Source | Notes |
|---|---|---|
id | List page | NHS Jobs reference number (e.g. C9395-26-0262) |
url | List page | Canonical detail page URL |
title | List + detail | Job title |
company | List + detail | NHS trust or employer name |
location | List | Raw location string as shown on listing |
city | List | City/town parsed from location |
postcode | List | UK postcode parsed from location |
country | Constant | Always "GB" |
salaryRaw | List | Raw salary string, e.g. "£39,959 to £48,117 a year" |
salaryMin | Parsed | Minimum salary as integer |
salaryMax | Parsed | Maximum salary as integer |
salaryPeriod | Parsed | "YEAR", "MONTH", "WEEK", "DAY", or "HOUR" |
currency | Constant | Always "GBP" |
contractType | List + detail | e.g. "Permanent", "Fixed-Term", "Secondment" |
workingPattern | List + detail | e.g. "Full-time", "Part-time", "Flexible working" |
publishDate | List + detail | Publication date (ISO YYYY-MM-DD) |
closingDate | List + detail | Application closing date (ISO YYYY-MM-DD) |
referenceNumber | List | Same as id |
paySchemeType | Detail only | NHS pay scheme, e.g. "Agenda for change", "Medical and dental" |
payBand | Detail only | NHS Agenda for Change band, e.g. "Band 5", "Band 8a" |
salaryDetail | Detail only | Full salary string from detail page (may include HCAS supplements) |
fullAddress | Detail only | Employer's full address as comma-separated string |
tracJobReference | Detail only | TRAC system reference number |
employerWebsite | Detail only | Employer's website URL |
contactTitle | Detail only | Job title of the hiring contact |
descriptionHtml | Detail only | Full job description as HTML |
descriptionText | Detail only | Full job description as plain text |
descriptionMarkdown | Detail only | Full job description as Markdown |
summary | Detail only | First 200 characters of plain-text description |
contentHash | Generated | MD5 hash of the job ID for deduplication |
source | Constant | Always "jobs.nhs.uk" |
scrapedAt | Generated | ISO 8601 timestamp of when the run started |
isRepost | Dedup | true if this job was seen in a previous run |
originalPublishDate | Dedup | First publish date seen (populated when isRepost: true) |
originalUrl | Dedup | Original URL (populated when isRepost: true) |
Note: Fields marked Detail only are
nullwhenfetchDetails: false.
Example inputs
1. Band 6 nurses in London
{"searchQuery": "nurse","location": "London","distance": 20,"payBands": ["BAND_6"],"maxResults": 200,"fetchDetails": true}
2. All new listings since yesterday
{"sortBy": "publicationDateDesc","daysOld": 1,"maxResults": 500,"fetchDetails": false}
3. Permanent Allied Health roles
{"contractTypes": ["Permanent"],"staffGroups": ["ALLIED_HEALTH_PROF"],"maxResults": 300,"fetchDetails": true}
4. Regional search
{"location": "Birmingham","distance": 30,"staffGroups": ["ALLIED_HEALTH_PROF"],"sortBy": "closingDate","maxResults": 150}
5. Specific listings by URL
{"startUrls": [{ "url": "https://www.jobs.nhs.uk/candidate/jobadvert/A2026-26-0001" }],"fetchDetails": true}
💰 Pricing
$0.79 per 1,000 results — you only pay for successfully retrieved listings. Failed retries and filtered reposts are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.08 |
| 1,000 | ~$0.79 |
| 10,000 | ~$7.90 |
| 100,000 | ~$79.00 |
Flat-rate alternatives typically charge $29–$49/month regardless of usage.
Use the Max results cap in the input to control your spend exactly.
Performance
| Run size | Mode | Approx. time |
|---|---|---|
| 100 results | fetchDetails: false | ~30 seconds |
| 100 results | fetchDetails: true | ~3 minutes |
| 1,000 results | fetchDetails: false | ~5 minutes |
| 1,000 results | fetchDetails: true | ~25 minutes |
| 10,000 results | fetchDetails: false | ~50 minutes |
Known limitations
- A maximum of 10 results are available per search page; deep pagination (1,000+ results) requires additional time.
- Job descriptions are only available in full when
fetchDetails: trueis set. - The NHS Jobs platform does not expose salary data for all listings — some roles show
"Depends on experience"or"See advert". - Vacancies from devolved nations (Scotland, Wales, Northern Ireland) may have limited availability depending on the trust's recruitment platform.
Technical details
- Source: jobs.nhs.uk — Official NHS recruitment platform for England and devolved nations
- Architecture: HTTP-only, JSON-HTML (regex on stable
id/data-testattributes used by NHS's own E2E tests) - Memory: 256 MB
- Repost storage: KeyValueStore
nhsjobs-uk-job-dedup, 90-day TTL - Retry: Automatic retry on network errors, exponential backoff, 3 attempts per request
Additional services
Need a custom actor, additional filters, scheduled runs, or integration support? Send an email to info@unfencedgroup.nl — we build on request.
Built by unfenced-group · Issues? Open a ticket or send a message.