NHS Jobs Scraper — Job Listings & Career Data Extractor avatar

NHS Jobs Scraper — Job Listings & Career Data Extractor

Pricing

from $1.50 / 1,000 scraped results

Go to Apify Store
NHS Jobs Scraper — Job Listings & Career Data Extractor

NHS Jobs Scraper — Job Listings & Career Data Extractor

Scrape NHS job listings from jobs.nhs.uk. Get title, employer, salary, NHS band, location, contract type, closing date, job description, main duties, and structured person specification. Auto-pagination. Checkpoint resume. $2 per 1,000 jobs.

Pricing

from $1.50 / 1,000 scraped results

Rating

0.0

(0)

Developer

Scrape Pilot

Scrape Pilot

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Share


🏥 NHS Job Scraper – Extract Job Details, Employer, Salary, Band, Location & More

Scrape NHS job vacancies from jobs.nhs.uk – structured data including job title, employer, salary, band, location, contract type, working pattern, closing date, job summary, main duties, and person specification.
Pay only for successfully scraped jobs ($2 per 1,000). Automatic checkpoint/resume, residential proxy ready. Perfect for recruitment analytics, labour market research, and job board aggregation.


💡 What is the NHS Job Scraper?

The NHS Job Scraper extracts full job listing data from the official NHS Jobs portal (jobs.nhs.uk). It starts from a search results URL (e.g., with keywords, location, or filters) and then:

  • Crawls paginated search result pages
  • Visits each job detail page
  • Parses all available structured and unstructured fields

The actor extracts every piece of public information from a typical NHS job advert:

  • Job title
  • Employer (Trust/Organisation)
  • Salary (normalised, including band detection)
  • Band (e.g., Band 5, Band 6)
  • Location (town/city)
  • Working pattern (full‑time, part‑time, flexible)
  • Contract type (permanent, fixed‑term, secondment)
  • Closing date and date posted
  • Reference number
  • Job summary (short overview)
  • Main duties (bulleted list)
  • Person specification (structured: categories + essential/desirable criteria)

The NHS Job Scraper is built for pay‑per‑event (PPE) – you are charged only for successfully scraped job adverts ($0.002 per job). Failed requests, blocked pages, or missing data cost nothing. The actor also includes automatic checkpoint/resume – if interrupted (spending limit, timeout, network error), it restarts from the last page without re‑scraping already processed jobs.


🚀 Key Features

FeatureDescription
Start from any search URLUse NHS Jobs search filters (keyword, location, distance, etc.).
Paginated crawlingAutomatically follows page=X parameters up to maxItems.
Full job detail extractionTitle, employer, salary, band, location, contract, working pattern, closing date, reference.
Long‑text fieldsJob summary, main duties, job description.
Person specificationStructured output (category → list of essential/desirable criteria).
Normalised salary & bandConverts salary text to a consistent format; detects NHS Bands automatically.
Resume & checkpointSaves progress after each page. If the actor stops, it restarts where it left off.
Pay‑per‑success (PPE)Charged only for jobs that are successfully scraped and pushed to dataset. Failed attempts are free.
Spending limit protectionStops automatically when the user’s daily/monthly limit is reached.
Residential proxy readyBypasses anti‑bot measures (recommended for large runs).
Clean JSON / CSV / ExcelExport from Apify dataset.

📥 Input Parameters

The actor accepts a JSON object with the following fields:

ParameterTypeRequiredDefaultDescription
startUrlstringYesA valid NHS Jobs search URL (e.g., https://www.jobs.nhs.uk/candidate/search/results?keyword=nurse&page=1).
maxItemsintegerNo2000Maximum number of jobs to scrape (actor stops when reached).
proxyConfigurationobjectNoApify proxy configuration. Residential proxies strongly recommended to avoid blocking.

Example Input

{
"startUrl": "https://www.jobs.nhs.uk/candidate/search/results?keyword=physiotherapist&location=London&page=1",
"maxItems": 500,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

📤 Output Fields

Each successful job advert returns an object with the following fields (some may be null or []):

FieldTypeDescription
urlstringDirect link to the job advert.
idstringJob ID (extracted from URL).
titlestringJob title.
employerstringNHS Trust or organisation name.
salarystringNormalised salary (e.g., £28,407 - £34,581 or Band 5).
bandstringNHS band (e.g., Band 5, Band 6).
locationstringPrimary location (town/city).
pay_schemestringPay scheme (e.g., Agenda for Change).
working_patternstringWorking pattern (e.g., Full time, Part time, Flexible working).
contract_typestringContract type (e.g., Permanent, Fixed term, Secondment).
closing_date_textstringClosing date (as displayed).
date_posted_textstringDate posted (as displayed).
reference_numberstringJob reference number (falls back to URL id).
job_summarystringShort job summary paragraph.
main_duties_of_the_jobstringMain duties / responsibilities.
job_descriptionstringCombined job summary + main duties (if separate description missing).
person_specificationarrayList of categories with essential/desirable items (structured).

Example Output

[
{
"url": "https://www.jobs.nhs.uk/candidate/jobadvert/A1234-5678",
"id": "A1234-5678",
"title": "Senior Occupational Therapist",
"employer": "Guy's and St Thomas' NHS Foundation Trust",
"salary": "£40,057 - £45,839 per annum incl. HCA",
"band": "Band 6",
"location": "London SE1",
"pay_scheme": "Agenda for Change",
"working_pattern": "Full time - 37.5 hours per week",
"contract_type": "Permanent",
"closing_date_text": "15 June 2026",
"date_posted_text": "22 May 2026",
"reference_number": "A1234-5678",
"job_summary": "We are looking for an experienced Occupational Therapist to join our dynamic team...",
"main_duties_of_the_job": "• Manage a complex caseload • Provide clinical supervision • Participate in service development",
"job_description": "We are looking for... • Manage a complex caseload...",
"person_specification": [
{
"category": "Qualifications",
"essentials": ["Degree in Occupational Therapy", "HCPC registration"]
},
{
"category": "Experience",
"essentials": ["Minimum 2 years post‑graduate experience", "Experience in acute medicine"],
"desirables": ["MSc in relevant field"]
}
]
}
]

💰 Pricing

ComponentPrice
Actor start (per run)$0.40
Per successful job$0.002
Per 1,000 successful jobs$2.00
  • You are charged only when a job advert is successfully scraped (title exists, basic fields present).
  • Failed pages (blocked, no results, 404) cost nothing.
  • The actor start fee ($0.40) covers infrastructure for the run (even if no jobs are scraped).
  • Example: 500 successful jobs = $0.40 + (500 × $0.002) = $1.40.
  • Example: 2,500 successful jobs = $0.40 + (2,500 × $0.002) = $5.40.

Checkpoint & Resume:
The actor saves state after every page. If it stops due to spending limit, timeout, or network issue, restarting will continue from the last page without re‑charging for already processed jobs.


🛠 How to Use on Apify

  1. Create a task with this actor.
  2. Get a search URL from NHS Jobs – go to jobs.nhs.uk, enter your search criteria (keyword, location, distance, etc.), copy the URL from the results page (it should contain page=1).
  3. Paste the startUrl into the input.
  4. Set maxItems – how many jobs to scrape (max 2000 per run, but you can run multiple tasks).
  5. Enable residential proxies – go to Proxy ConfigurationSelected proxiesResidential (strongly recommended to avoid blocking).
  6. Run – the actor will crawl pages, extract each job, push to dataset, and charge per successful job.
  7. Export – download results as JSON, CSV, or Excel from the Dataset tab.

Running via API

curl -X POST "https://api.apify.com/v2/acts/your-username~nhs-job-scraper/runs" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"startUrl": "https://www.jobs.nhs.uk/candidate/search/results?keyword=admin&page=1",
"maxItems": 100,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}'

🎯 Use Cases

Industry / Use CaseHow the NHS Job Scraper Helps
Labour market analyticsTrack NHS hiring trends by region, band, speciality, and contract type.
Recruitment agenciesEnrich candidate matching with real‑time vacancy data from NHS Trusts.
Job board aggregationBuild a secondary job board focused on NHS roles.
Academic researchStudy workforce supply in the UK healthcare system.
Salary benchmarkingExtract salary and band information for comparable roles.
Data journalismAnalyse vacancy patterns, closing dates, and geographical distribution.

❓ Frequently Asked Questions

1. Do I need an NHS Jobs account?
No. The actor uses the public NHS Jobs website. No login required.

2. Why do I need residential proxies?
NHS Jobs uses Cloudflare and may block datacenter IPs after many requests. Residential proxies avoid Access Denied pages and ensure stable scraping, especially for large runs.

3. How many jobs can I scrape per run?
The actor respects maxItems (default 2000). NHS Jobs typically returns up to ~1000–2000 results per search. You can increase by using broader keywords or multiple start URLs.

4. What happens if the actor is blocked (CAPTCHA)?
It will log “Blocked by website security” and stop. Retry with a different residential proxy IP or reduce the request rate.

5. How does the pay‑per‑event work?
Each successful job advert triggers Actor.charge(event_name='scraped-result'). You are charged $0.002 per job. Failed requests (e.g., job detail page 404) are not charged.

6. What is the checkpoint feature?
The actor saves its state (processed URLs, items pushed, current page number) in the key‑value store. If the run stops, the next run will resume from where it left off without re‑scraping already processed jobs.

7. Can I scrape job descriptions that are long?
Yes. The job_summary, main_duties_of_the_job, and person_specification fields capture multi‑paragraph content and bullet points.

8. What is the person_specification field?
It is a structured array where each item has a category (e.g., “Qualifications”, “Experience”) and an essentials list (sometimes also desirables). This is parsed from the “Person Specification” section of the job advert.

9. How accurate is the band detection?
The actor first looks for explicit Band field. If not present, it tries to extract band from the salary text (e.g., “Band 5” or “Band 6”). Accuracy is very high for most NHS jobs.

10. What is the actor start fee ($0.40) for?
It covers the cost of running the actor container, proxy setup, and checkpoint management – even if no jobs are found. It is a fixed cost per run.


📝 Technical Notes

  • Libraries used: curl_cffi (TLS fingerprinting), beautifulsoup4 (lxml parser).
  • Proxy: Uses Apify’s create_proxy_configuration(). Set useApifyProxy: true and choose RESIDENTIAL group.
  • Concurrency: Fetches job detail pages in parallel using asyncio.gather() for speed.
  • Checkpoint: Stored in key‑value store under SCRAPER_STATE.
  • Rate limiting: The actor does not add artificial delays between pages; use proxies to avoid triggering Cloudflare.
  • Error handling: Single job failures do not stop the entire run; they are logged and skipped.

🔍 SEO Keywords

NHS Job Scraper, NHS jobs, jobs.nhs.uk scraper, NHS vacancy extractor, NHS recruitment data, UK healthcare jobs, NHS salary band scraper, NHS job details API, Apify NHS actor, NHS job advert parser, NHS Trust vacancies, NHS job search automation




Start scraping NHS Job Scraper today – $0.40 per run + $2 per 1,000 successful jobs. Residential proxy ready.