NHS Jobs Scraper avatar

NHS Jobs Scraper

Pricing

from $0.79 / 1,000 results

Go to Apify Store
NHS Jobs Scraper

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

Unfenced Group

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Banner

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.

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

ParameterTypeDefaultDescription
searchQuerystring""Keywords to search, e.g. "nurse", "radiographer", "consultant"
locationstring""City, town, county, or postcode, e.g. "London", "Manchester", "SW1A 1AA"
distanceintegerSearch radius in miles: 5, 10, 20, 30, 50, 100
contractTypesarray[]Filter by contract: "Permanent", "Fixed-Term", "Locum", "Bank", etc.
workingPatternsarray[]Filter: "full-time", "part-time", "remote-working", "flexible-working", etc.
staffGroupsarray[]NHS staff group: "NURSING_AND_MIDWIFERY_REGD", "MEDICAL_AND_DENTAL", etc.
payBandsarray[]NHS pay band: "BAND_5", "BAND_6", "CONSULTANT", "VERY_SENIOR_MANAGER", etc.
sortBystring"publicationDateDesc"Sort order: "publicationDateDesc", "closingDate", "salaryAsc", "salaryDesc"
maxResultsinteger100Maximum number of results to return
fetchDetailsbooleantrueFetch full job description and contact details from each listing
skipRepostsbooleanfalseSkip jobs already seen in previous runs
daysOldintegerOnly return jobs posted within this many days
startUrlsarray[]Scrape specific NHS Jobs listing URLs directly
requestDelayMsinteger1000Minimum 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

FieldSourceNotes
idList pageNHS Jobs reference number (e.g. C9395-26-0262)
urlList pageCanonical detail page URL
titleList + detailJob title
companyList + detailNHS trust or employer name
locationListRaw location string as shown on listing
cityListCity/town parsed from location
postcodeListUK postcode parsed from location
countryConstantAlways "GB"
salaryRawListRaw salary string, e.g. "£39,959 to £48,117 a year"
salaryMinParsedMinimum salary as integer
salaryMaxParsedMaximum salary as integer
salaryPeriodParsed"YEAR", "MONTH", "WEEK", "DAY", or "HOUR"
currencyConstantAlways "GBP"
contractTypeList + detaile.g. "Permanent", "Fixed-Term", "Secondment"
workingPatternList + detaile.g. "Full-time", "Part-time", "Flexible working"
publishDateList + detailPublication date (ISO YYYY-MM-DD)
closingDateList + detailApplication closing date (ISO YYYY-MM-DD)
referenceNumberListSame as id
paySchemeTypeDetail onlyNHS pay scheme, e.g. "Agenda for change", "Medical and dental"
payBandDetail onlyNHS Agenda for Change band, e.g. "Band 5", "Band 8a"
salaryDetailDetail onlyFull salary string from detail page (may include HCAS supplements)
fullAddressDetail onlyEmployer's full address as comma-separated string
tracJobReferenceDetail onlyTRAC system reference number
employerWebsiteDetail onlyEmployer's website URL
contactTitleDetail onlyJob title of the hiring contact
descriptionHtmlDetail onlyFull job description as HTML
descriptionTextDetail onlyFull job description as plain text
descriptionMarkdownDetail onlyFull job description as Markdown
summaryDetail onlyFirst 200 characters of plain-text description
contentHashGeneratedMD5 hash of the job ID for deduplication
sourceConstantAlways "jobs.nhs.uk"
scrapedAtGeneratedISO 8601 timestamp of when the run started
isRepostDeduptrue if this job was seen in a previous run
originalPublishDateDedupFirst publish date seen (populated when isRepost: true)
originalUrlDedupOriginal URL (populated when isRepost: true)

Note: Fields marked Detail only are null when fetchDetails: 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
}
{
"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.

ResultsCost
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 sizeModeApprox. time
100 resultsfetchDetails: false~30 seconds
100 resultsfetchDetails: true~3 minutes
1,000 resultsfetchDetails: false~5 minutes
1,000 resultsfetchDetails: true~25 minutes
10,000 resultsfetchDetails: 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: true is 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-test attributes 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.