NHS Jobs Search Scraper avatar

NHS Jobs Search Scraper

Pricing

from $2.99 / 1,000 job details

Go to Apify Store
NHS Jobs Search Scraper

NHS Jobs Search Scraper

Extract rich NHS Jobs records with clean job sections, person-specification criteria, employer and contact details, structured locations, pay bands, salaries, contracts, dates, regulatory checks, documents, and application links.

Pricing

from $2.99 / 1,000 job details

Rating

0.0

(0)

Developer

Jobs API

Jobs API

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

11 hours ago

Last modified

Share

This Apify Actor extracts complete, publicly visible job adverts from NHS Jobs. It uses bounded direct HTTPS requests and Cheerio against the official search-results and candidate/jobadvert pages. No login, proxy, browser fingerprint spoofing, CAPTCHA solver, cloud call, or publish action is used.

Supported modes

  • search: one query and optional location (the default).
  • searchMultiple: several queries, deduplicated by NHS job ID while retaining matchedQueries.
  • single: one official detail URL in jobUrl.
  • multiple: several official detail URLs in jobUrls.
  • startUrls: official NHS Jobs search-results and/or detail URLs in startUrls.

Every search candidate is verified through its official detail page before it is written. Search and detail work is bounded by maxItems, maxCandidates, maxPages, maxDetailRequests, and maxRequests.

Input examples

Search:

{
"mode": "search",
"query": "nurse",
"location": "London",
"maxItems": 3,
"maxPages": 2
}

Single detail:

{
"mode": "single",
"jobUrl": "https://www.jobs.nhs.uk/candidate/jobadvert/A5412-26-0001"
}

The repository also contains INPUT-multiple.json, INPUT-search-multiple.json, INPUT-start-urls.json, and INPUT-negative.json for bounded local checks.

Output

Job records contain the stable NHS job ID, canonical/detail/source URLs, title, employer, public employer website/address, location parts, summary, duties, employer information, detailed description text and HTML, parsed description sections, person-specification criteria, regulatory notices, pay scheme/band/salary, contract and working pattern, dates, public supporting-document links, source-backed application URL when present, search attribution, request receipts, and data-quality metadata.

Direct personal contact fields are intentionally omitted. Placeholder criteria such as “Please see Job Description”, blank strings, nulls, empty arrays, and empty objects are omitted rather than turned into fabricated values. Failed public requests are represented as structured diagnostic records and KVS evidence rather than invalid job rows.

Local validation

Run from this directory:

npm ci --ignore-scripts --no-audit --no-fund
npm test
npm run check
apify validate-schema .actor/input_schema.json
apify run --purge --input-file INPUT.json
npm run validate

The run writes the default dataset and RUN_SUMMARY, OUTPUT_SUMMARY, RUN_DIAGNOSTICS, RUN_METADATA, and RUN_HEALTH to local storage. The workflow is bounded local and cloud; do not use apify call or apify push.

Runtime and output contract

The Actor supports bounded local and Apify cloud runs. The default dataset contains only complete job records; request failures and other diagnostics are retained in RUN_DIAGNOSTICS in the default key-value store. maxRequests caps total HTTP attempts, and deadlineSeconds caps wall-clock runtime. Raw input is not persisted in run metadata.