Civil Service Jobs Search Scraper avatar

Civil Service Jobs Search Scraper

Pricing

from $2.99 / 1,000 civil service vacancies

Go to Apify Store
Civil Service Jobs Search Scraper

Civil Service Jobs Search Scraper

Scrape job listings from Civil Service Jobs (civilservicejobs.service.gov.uk), the official UK government civil service recruitment portal. Extract job titles, departments, locations, salary ranges, grades, and descriptions for public sector recruitment.

Pricing

from $2.99 / 1,000 civil service vacancies

Rating

0.0

(0)

Developer

Jobs API

Jobs API

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

11 days ago

Last modified

Share

This Apify Actor extracts current public vacancies from the official Civil Service Jobs portal locally or on Apify Cloud. It uses a normal headless Chrome session, reads the official search results, and enriches each row from its stable jobs.cgi?jcode=... detail page. If the site displays its human-verification quick-check or returns HTTP 401, 403, 429, or 451, the Actor stops without interacting with or retrying the barrier.

Modes

  • search: one bounded keyword/location search.
  • searchMultiple: several keyword/location searches with stable job-code deduplication.
  • single: one jobUrl, url, or numeric jobId.
  • multiple: jobUrls, urls, or jobIds.
  • startUrls: official search or stable detail URLs.

Every detail row is identity-checked against its public reference/job code and is buffered until the required employer, location, and rich description fields are complete. Published values are omitted when absent; no placeholder, fabricated application URL, diagnostic dataset row, proxy, fingerprint spoofing, or CAPTCHA/WAF bypass is used. Run summaries separate platform status (SUCCEEDED or FAILED) from data resultStatus (COMPLETE, LIMITED, SKIPPED, DEFERRED, NO_DATA, or FAILED). Confirmed source barriers discard staged jobs and report SUCCEEDED/SKIPPED; generic or unverified empty/parser/transport results are SUCCEEDED/DEFERRED; a later non-block failure preserves the successfully stored prefix as SUCCEEDED/LIMITED; fatal zero-row runtime failures use Actor.fail() and report FAILED/FAILED.

Local commands

npm install --no-audit --no-fund
npm test
npm run check
npx --yes apify validate-schema .actor/input_schema.json
npx --yes apify validate-schema .actor/dataset_schema.json
npx --yes apify validate-schema .actor/key_value_store_schema.json
apify run --input-file INPUT.json
npm run validate

The Actor writes jobs only to the default dataset. RUN_SUMMARY, RUN_DIAGNOSTICS, RUN_SKIPS, RUN_HEALTH, RUN_METADATA, and RUN_REQUESTS are KVS-only run state. A handled source barrier is a successful Actor process with a skipped data outcome and zero job rows. Fatal zero-row failures are marked failed; an empty-results outcome is NO_DATA only when every requested search seed visibly reports no matches on a successful page. RUN_SUMMARY records noDataConfirmed, the expected search count, and matching evidence receipts. Local location-filter misses, missing cards, and unparseable pages are DEFERRED, not NO_DATA. Before any local Actor run, follow the repository storage-safety guidance and use isolated storage; this lifecycle-only update did not execute the Actor.

Input examples

{
"mode": "search",
"query": "policy advisor",
"location": "London",
"maxItems": 3,
"maxCandidates": 12,
"maxPages": 1,
"maxRequests": 24
}

Stable detail URLs look like:

https://www.civilservicejobs.service.gov.uk/csr/jobs.cgi?jcode=2010702

The Apply now control on current adverts is an official login form rather than a final external destination. The output records that source-backed form action and explicitly marks finalDestinationPublished: false; it never invents a destination.