Gov APIfindapprenticeship.service.gov.uk ↗
Search and retrieve live UK apprenticeship vacancies from findapprenticeship.service.gov.uk. Filter by location, level, category, and more across 4 endpoints.
What is the Gov API?
This API provides access to live apprenticeship vacancy data from the UK Government's Find an Apprenticeship service across 4 endpoints. Use search_apprenticeships to query vacancies by keyword, location, distance, apprenticeship level, and job category, then retrieve full vacancy details — including skills required, wage, working hours, and training course information — via get_apprenticeship_detail using the vacancy reference from search results.
curl -X GET 'https://api.parse.bot/scraper/29d077ec-2cda-42fc-9194-e7cd0737aa6d/search_apprenticeships?sort=AgeAsc&distance=2&location=London&level_ids=3&route_ids=7&page_number=1&search_term=software&exclude_national=False&apprenticeship_types=Standard&disability_confident=False' \ -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 findapprenticeship-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: UK Apprenticeships SDK — search vacancies, drill into details, explore filters."""
from parse_apis.uk_apprenticeships_api import Apprenticeships, Sort, Distance, VacancyNotFound
client = Apprenticeships()
# Search for software apprenticeships sorted by wage, capped at 5 results.
for vacancy in client.vacancies.search(search_term="software", sort=Sort.WAGE, limit=5):
print(vacancy.title, vacancy.employer, vacancy.wage)
# Drill into the first result for full details.
summary = client.vacancies.search(search_term="engineering", location="London", distance=Distance.TWENTY_MILES, limit=1).first()
if summary:
detail = summary.details()
print(detail.title, detail.employer, detail.duration, detail.hours)
# Typed error handling when a vacancy reference doesn't exist.
try:
gone = client.vacancies.get(vacancy_reference="VAC0000000000")
print(gone.title)
except VacancyNotFound as exc:
print(f"Vacancy not found: {exc.vacancy_ref}")
# Explore available filter options.
filters = client.filteroptionses.get()
for level in filters.levels:
print(level.value, level.label, level.description)
# Check total listings on the service.
stats = client.listingcounts.get()
print(f"Total apprenticeships listed: {stats.total_listings}")
print("exercised: vacancies.search / summary.details / vacancies.get / filteroptionses.get / listingcounts.get")
Full-text search over apprenticeship vacancies with filters for keyword, location, distance, levels, categories, and more. Returns paginated results sorted by the specified criteria. Paginates via page_number. Each result is a summary; use get_apprenticeship_detail with the vacancyReference for full information.
| Param | Type | Description |
|---|---|---|
| sort | string | Sort order for results. |
| distance | string | Radius in miles from location. |
| location | string | City or postcode to search near. |
| level_ids | string | Comma-separated apprenticeship level IDs: 2, 3, 4, 5, 6, 7. |
| route_ids | string | Comma-separated job category IDs: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15. |
| page_number | integer | Page number of results. |
| search_term | string | Job title or company name to search for. |
| exclude_national | boolean | Hide companies recruiting nationally. |
| apprenticeship_types | string | Comma-separated types: Foundation, Standard. |
| disability_confident | boolean | Only show disability confident companies. |
{
"type": "object",
"fields": {
"results": "array of apprenticeship vacancy summaries with vacancyReference, title, employer, location, url, startDate, trainingCourse, wage, closingDate, postedDate",
"pagination": "object with currentPage, totalResults, resultsPerPage"
},
"sample": {
"data": {
"results": [
{
"url": "https://www.findapprenticeship.service.gov.uk/apprenticeship/VAC2000036585",
"wage": "£15,600 a year",
"title": "Data Administration Apprentice",
"employer": "CHERISH HOME CARE LTD",
"location": "SUTTON COLDFIELD (B73 5DA)",
"startDate": "29 June 2026",
"postedDate": "11 June 2026",
"closingDate": "Closes in 15 days (Friday 26 June 2026 at 11:59pm)",
"trainingCourse": "Software and data foundation apprenticeship (level 2)",
"vacancyReference": "VAC2000036585"
}
],
"pagination": {
"currentPage": 1,
"totalResults": 25,
"resultsPerPage": 10
}
},
"status": "success"
}
}About the Gov API
Search and Filter Vacancies
The search_apprenticeships endpoint accepts free-text queries via search_term, geographic targeting via location and distance (in miles), and structured filters including level_ids (apprenticeship levels 2–7) and route_ids (job category IDs 1–15). Results are paginated using page_number and return a summary array with fields such as vacancyReference, title, employer, location, startDate, trainingCourse, and wage. A pagination object accompanies each response with currentPage, totalResults, and resultsPerPage.
Vacancy Detail
Passing a vacancy_ref (e.g. VAC2000036585) to get_apprenticeship_detail returns the full record for that vacancy: title, employer, location with postcode, wage, hours, duration, start_date, closingDate, a skills array listing required competencies, and a url pointing to the canonical vacancy page. The vacancy reference is included in every summary returned by search_apprenticeships.
Filter Discovery and Listing Count
get_search_filters requires no parameters and returns all valid filter values — levels, sortOptions, jobCategories, distanceOptions, and apprenticeshipTypes — each as arrays of labelled objects. This is the right starting point before building a filtered search UI or pipeline. get_total_listing_count returns a single totalListings integer representing the current number of live vacancies across the service, useful for monitoring market volume over time.
The Gov API is a managed, monitored endpoint for findapprenticeship.service.gov.uk — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when findapprenticeship.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 findapprenticeship.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 live UK apprenticeship postings into a job board filtered by region and trade category.
- Monitor total apprenticeship vacancy counts over time using get_total_listing_count to track labour market trends.
- Build a skills-gap analysis tool by extracting the skills array from vacancy detail records across a sector.
- Power a careers guidance app that surfaces apprenticeships near a user's postcode at a specified distance.
- Feed employer and wage data into a compensation benchmarking dataset segmented by apprenticeship level.
- Automate vacancy intake for a recruiter CRM using search_apprenticeships with route_ids and level_ids filters.
- Render a dynamic filter UI by fetching all valid values from get_search_filters before populating dropdowns.
| 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.
Does findapprenticeship.service.gov.uk have an official developer API?+
What does get_apprenticeship_detail return beyond what the search results include?+
Does the API cover apprenticeship applications or saved vacancies?+
How does pagination work in search_apprenticeships?+
page_number integer parameter. Each response includes a pagination object with currentPage, totalResults, and resultsPerPage, which lets you calculate the number of pages and iterate through the full result set for a given query.Are training provider details available beyond the trainingCourse field in search results?+
trainingCourse field. The detail endpoint returns course-level information but does not currently expose a structured training provider profile with contact details or provider identifiers. You can fork the API on Parse and revise it to surface additional provider data if it is needed for your use case.