NHS Jobs Scraper (Cheap) avatar

NHS Jobs Scraper (Cheap)

Pricing

from $3.99 / 1,000 results

Go to Apify Store
NHS Jobs Scraper (Cheap)

NHS Jobs Scraper (Cheap)

NHS Jobs Scraper that pulls vacancy listings from jobs.nhs.uk by keyword, location, and filter, so recruiters and analysts get clean structured job data without manual searching.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

Data API

Data API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

NHS Jobs Scraper

Searching jobs.nhs.uk by hand means clicking through page after page of results and copying out each role one cell at a time. This scraper does that part for you. Give it a search term such as "nurse" or "physiotherapist", add an area if you want one, and it walks the NHS Jobs results and returns every vacancy as a clean row: role title, employer, salary, location, contract, closing date, and a direct link to the advert. Run one search or queue dozens of term-and-area pairs in a single go.

NHS Jobs Scraper

What you get

Every vacancy comes back as one row with the same set of columns, so the results drop straight into a spreadsheet or database. Each row carries:

  • The roleroleTitle, employerName, workLocation, payRange, contractKind, workSchedule
  • Dates and referencepostedDate, applyByDate, vacancyRef, listingUrl
  • Search contextqueryTerm and queryArea so you can tell which search produced each row, plus a collectedAt timestamp

Quick start

  1. Click Try for free and open the input form.
  2. Type your searches into Search terms, one per line (for example midwife).
  3. Optional: add a matching Search area on the same line, then set a Radius, a salary band, or a contract filter.
  4. Set Results per search term to cap how many jobs each search returns.
  5. Hit Start, then download the results as JSON, CSV, Excel, or XML once the run finishes.

How it works

Use cases

  • Recruitment agencies — track new NHS vacancies by role and region and feed them into your candidate pipeline
  • Job boards and aggregators — keep a fresh feed of NHS listings without manual copy-paste
  • Workforce planning — watch which trusts are hiring, for what, and at what salary over time
  • Salary benchmarking — pull pay ranges across a role or band to compare against your own offers
  • Locum and bank staffing — filter to Locum or Bank contracts and surface short-term openings fast
  • Career research — gather every matching role in your area into one list instead of scrolling the site

Input

FieldTypeRequiredDescription
searchTermsarray of stringsYesOne job search per line. Each line pairs with the area on the same row in searchAreas. Prefill healthcare assistant.
searchAreasarray of stringsNoOne town, city, or postcode per line, matched by row to searchTerms. Leave empty to search the whole UK.
searchRadiusintegerNoHow far from each area to look, in miles (5, 10, 20, 30, 50, or 100). Default 20.
employerFilterstringNoLimit results to a single employer or NHS Trust by name.
contractKindFilterstringNoKeep only one contract type (Permanent, Locum, Bank, and so on). Default is all contracts.
workScheduleFilterstringNoKeep only one work schedule (Full time, Part time, Flexible working, and so on). Default is all schedules.
minSalaryintegerNoLowest annual salary to include. Default 0 for no lower bound.
maxSalaryintegerNoHighest annual salary to include. Default 0 for no upper bound.
firstPageintegerNoResults page to start from, per search row. Default 1. Use it to resume a stopped run.
resultsLimitintegerNoJobs to collect per search row. Default 50; three terms at 50 gathers up to 150 jobs.
timeoutSecondsintegerNoSeconds to wait on each request before giving up. Default 45.

Example input

{
"searchTerms": ["healthcare assistant", "physiotherapist", "midwife"],
"searchAreas": ["Leeds", "Bristol", "Glasgow"],
"searchRadius": 20,
"contractKindFilter": "Permanent",
"workScheduleFilter": "full-time",
"minSalary": 30000,
"maxSalary": 55000,
"firstPage": 1,
"resultsLimit": 50,
"timeoutSeconds": 45
}

Output

Each vacancy is one row, and the columns are the same on every row. Fields with nothing to show come back as null so the dataset stays rectangular.

Example output

{
"roleTitle": "Band 5 Physiotherapist",
"listingUrl": "https://www.jobs.nhs.uk/candidate/jobadvert/C9123-25-4567",
"vacancyRef": "C9123-25-4567",
"employerName": "Leeds Teaching Hospitals NHS Trust",
"workLocation": "Leeds, LS1 3EX",
"payRange": "£29,970 to £36,483 a year",
"postedDate": "12 June 2026",
"applyByDate": "30 June 2026",
"contractKind": "Permanent",
"workSchedule": "Full time",
"queryTerm": "physiotherapist",
"queryArea": "Leeds",
"collectedAt": "2026-06-29T12:00:00.000000+00:00"
}

Output fields

FieldTypeDescription
roleTitlestringVacancy title as shown on NHS Jobs
listingUrlstringDirect link to the full job advert
vacancyRefstringNHS Jobs reference code from the advert link
employerNamestringHiring organisation or NHS Trust
workLocationstringTown, city, or postcode for the role
payRangestringSalary text as printed on the listing
postedDatestringWhen the advert went live
applyByDatestringApplication closing date
contractKindstringContract on offer, such as Permanent or Locum
workSchedulestringHours pattern, such as Full time or Part time
queryTermstringThe search term that produced the row
queryAreastringArea paired with the term; null when none was given
collectedAtstringISO 8601 timestamp of when the row was captured

Tips for best results

  • Start with one search. Run a single term against a single area first to confirm the output looks right, then scale up.
  • Match your rows. Search terms and areas pair by line number, so keep them aligned. A term with no area on its row searches the whole UK.
  • Cap each search with resultsLimit. Keep it low while you test, then raise it for the full pull. Remember the cap counts per search row, not per run.
  • Use the salary band to cut noise. Set minSalary and maxSalary to focus on a specific pay bracket instead of wading through every result.
  • Resume long runs with firstPage. If a run stops part way, set the starting page to pick up roughly where it left off.

How can I use NHS Jobs data?

How can I use the NHS Jobs Scraper to build a recruitment feed? Queue the roles you place for, like nurse, healthcare assistant, and radiographer, across the areas you cover. Set a sensible resultsLimit and run it on a schedule. Each run hands back every matching vacancy with the employer, salary, location, and a link to the advert, ready to load into your applicant tracking system.

How can I scrape NHS job vacancies for salary benchmarking? Search a single role and read the payRange field across the results. Because every row carries the contract, schedule, and employer too, you can group the pay data by trust or by region and compare it against your own bands without opening a single advert by hand.

How can I track which NHS Trusts are hiring in my region? Add your towns and postcodes to searchAreas and set a searchRadius. The scraper returns the employerName and workLocation on every vacancy, so you can count openings per trust, watch demand shift over weeks, and spot which employers are recruiting hardest near you.

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the legality of web scraping.

Support

Questions, feature requests, or a field you'd like added? Reach out at data.apify@proton.me and we'll get back to you.