Gov APIcivilservicejobs.service.gov.uk ↗
Search and retrieve UK Civil Service job listings by keyword, location, and grade. Access titles, salaries, departments, closing dates, and full vacancy details.
What is the Gov API?
The Civil Service Jobs API provides 2 endpoints to search and retrieve UK public sector vacancies from civilservicejobs.service.gov.uk. The search_jobs endpoint returns paginated job listings with titles, departments, salaries, locations, and closing dates, while get_job_details returns full vacancy information including civil service grade, security requirements, benefits, and a job summary for a specific listing identified by its reference number.
curl -X GET 'https://api.parse.bot/scraper/d7734b85-2dcc-4952-b455-218ca45215cb/search_jobs?page=1&query=analyst&location=London' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace civilservicejobs-service-gov-uk-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Civil Service Jobs SDK — search vacancies and drill into details."""
from parse_apis.civil_service_jobs_api import CivilServiceJobs, JobNotFound
client = CivilServiceJobs()
# Search for analyst roles in London — limit caps total items fetched.
for job in client.jobsummaries.search(query="analyst", location="London", limit=3):
print(job.title, job.department, job.salary)
# Drill down: take ONE result with .first(), then fetch full details.
result = client.jobsummaries.search(query="project manager", limit=1).first()
if result:
detail = result.details()
print(detail.title, detail.job_grade, detail.contract_type, detail.working_pattern)
# Direct get by jcode when you already know the reference number.
job = client.jobs.get(jcode="463414")
print(job.title, job.salary, job.closing_date)
# Typed error handling: catch JobNotFound for an invalid reference.
try:
client.jobs.get(jcode="000000")
except JobNotFound as exc:
print(f"Job not found: jcode={exc.jcode}")
print("exercised: jobsummaries.search / jobsummary.details / jobs.get / JobNotFound")
Full-text search over UK Civil Service job listings by keyword and/or location. Returns a paginated list of matching vacancies with summary information (title, department, location, salary, closing date, reference number). Omitting both query and location returns all current vacancies. Each page returns up to 25 results. Use the jcode from results to fetch full details via get_job_details.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination |
| query | string | Search keyword (job title, skill, or keywords). Leave empty to browse all jobs. |
| location | string | Location filter (postcode, town, or region) |
{
"type": "object",
"fields": {
"jobs": "array of job objects with title, url, jcode, department, location, salary, and closing_date",
"total_count": "integer - total number of matching jobs"
},
"sample": {
"data": {
"jobs": [
{
"url": "https://www.civilservicejobs.service.gov.uk/csr/index.cgi?SID=abc123",
"jcode": "463414",
"title": "Data Security Analyst",
"salary": "£43,760 to £51,690",
"location": "London",
"department": "Cabinet Office",
"closing_date": "11:55 pm on Tuesday 23rd June 2026"
}
],
"total_count": 3
},
"status": "success"
}
}About the Gov API
Searching Jobs
The search_jobs endpoint accepts a query string (job title, skill, or keyword), a location filter (postcode, town, or region), and a page integer for pagination. Leaving query empty returns all current listings. Each result in the jobs array includes title, url, jcode (the vacancy reference number), department, location, salary, and closing_date. The total_count field indicates how many vacancies matched the search, which is useful for building pagination logic.
Retrieving Full Vacancy Details
The get_job_details endpoint takes a single required input — jcode — taken directly from a search_jobs result. It returns the complete vacancy record: title, salary, benefits, location, department, job_grade (the Civil Service pay band or grade), security (security clearance level required), job_summary (the full descriptive text of the role), and closing_date. This is the primary endpoint for building a job detail page or extracting structured requirements from a listing.
Coverage and Scope
All data reflects current live vacancies on the Civil Service Jobs board, which spans departments, agencies, and arm's-length bodies across the UK government. Listings include central government roles, HMRC, DVLA, the Home Office, and many others. The location filter supports standard UK location strings, and results are UK-only given the nature of the source.
The Gov API is a managed, monitored endpoint for civilservicejobs.service.gov.uk — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when civilservicejobs.service.gov.uk changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official civilservicejobs.service.gov.uk API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate UK public sector job listings filtered by region or keyword for a government careers portal
- Monitor closing dates on civil service vacancies to trigger alerts before application deadlines
- Extract job_grade and salary fields to analyse pay band distribution across departments
- Pull department and location data to map civil service hiring activity by region
- Build a job recommendation feed by querying search_jobs with role-specific keywords
- Track vacancy counts over time by storing total_count responses from repeated searches
- Display full vacancy descriptions and security clearance requirements in a third-party HR tool using get_job_details
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.