UCAS APIucas.com ↗
Access UCAS course listings, apprenticeships, university profiles, scholarships, and content via a structured JSON API. 7 endpoints covering UK higher education data.
What is the UCAS API?
The UCAS API exposes 7 endpoints covering UK undergraduate and postgraduate courses, apprenticeships, university and college profiles, editorial content, and scholarships from ucas.com. The search_courses endpoint returns paginated course objects including courseId, courseTitle, provider, subjects, and entry options, filterable by academic year (2025 or 2026). Companion endpoints deliver detailed fee and grade history per course, employer and salary data for apprenticeships, and structured scholarship details including deadline and eligibility.
curl -X GET 'https://api.parse.bot/scraper/26ad71cd-9914-4a1e-8d6e-ca0122a45400/search_courses?page=0&year=2025&limit=5&query=engineering' \ -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 ucas-com-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.
"""
UCAS API - Search and explore UK university courses, apprenticeships, providers, and scholarships.
"""
from parse_apis.ucas_api import Ucas, AcademicYear, ContentType, Course, Provider
ucas = Ucas()
# Search for engineering courses in 2026
for course in ucas.courses.search(query="engineering", year=AcademicYear.Y2026, limit=5):
print(course.course_title, course.university, course.provider_location)
# Get full details for a specific course
detail = ucas.courses.get(course_id="f9631483-60d5-dbea-4593-4fb95ead77d5")
print(detail.course_title, detail.university)
# Search for software apprenticeships
for apprenticeship in ucas.apprenticeships.search(query="software", limit=3):
print(apprenticeship.title, apprenticeship.employer_name, apprenticeship.salary)
# Search providers
for provider in ucas.providers.search(query="oxford", limit=3):
print(provider.name, provider.region, provider.code)
# Search content filtered by type
for item in ucas.contentitems.search(query="finance", type=ContentType.ARTICLE, limit=3):
print(item.title, item.url)
# Retrieve scholarship details
scholarship = ucas.scholarships.get(scholarship_id="a891b5d3-a1b5-4e41-9918-42194074c320")
print(scholarship.name, scholarship.provider_id, scholarship.scholarship_id)
Full-text search over UCAS course listings filtered by academic year. Returns paginated results with course title, provider, location, study options, and subject metadata. Each hit includes a courseId suitable for drilling into full details via get_course_details.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-indexed). |
| year | string | Academic year to filter by. Only years with published course data return results (currently '2025' and '2026'). |
| limit | integer | Number of results per page. |
| query | string | Search keyword for courses (e.g. 'engineering', 'medicine'). |
{
"type": "object",
"fields": {
"hits": "array of course objects containing courseId, courseTitle, university, providerId, options, subjects, and more",
"page": "integer current page number",
"nbHits": "integer total number of matching courses",
"nbPages": "integer total number of pages"
},
"sample": {
"data": {
"hits": [
{
"scheme": "Undergraduate",
"options": [
{
"duration": "4 Years",
"startDate": "September 2026",
"studyMode": "Full-time",
"Qualification": "BEng (Hon)",
"courseOptionId": "e94a467c-e5fc-4a54-a4d2-163318eda956"
}
],
"courseId": "f9631483-60d5-dbea-4593-4fb95ead77d5",
"providerId": "3a023828-8d77-ecfa-dc21-2708f721b788",
"university": "University of Aberdeen",
"courseTitle": "Engineering",
"optionCount": 1,
"academicYear": 2026,
"providerLocation": "Aberdeen"
}
],
"page": 0,
"nbHits": 7007,
"nbPages": 200
},
"status": "success"
}
}About the UCAS API
Course and Provider Data
search_courses accepts a query keyword, a year parameter (currently '2025' or '2026'), and standard page/limit pagination controls. Each hit in the hits array includes courseId, courseTitle, university, providerId, options, and subjects. To drill into a specific course, pass the course_id UUID to get_course_details, which returns the full course object — including provider contacts, fees, and course options — alongside a historicGrades object containing grade distribution history (or null when unavailable). Provider-level data follows the same pattern: search_providers searches by name or address, and get_provider_details returns courseCount, options, open day event arrays, and provider profile objects for a given provider_id.
Apprenticeships and Scholarships
search_apprenticeships returns paginated listings with fields including Title, EmployerName, Location, Salary, and Duration — useful for building apprenticeship finders or salary-range comparisons. get_scholarship_details accepts a scholarship_id UUID and returns structured data via the scholarship_parsed field, covering scholarship name, value, deadline, nationality, study_level, and application details. The raw scholarship field also carries the full JSON-encoded payload for cases where additional unparsed attributes are needed.
Content Search
search_content queries UCAS articles and guides. Results can be narrowed to 'structure_content' or 'article' via the type parameter, and each hit exposes title, url, summary, type, and author. This is suitable for surfacing UCAS guidance content — finance guides, application tips, scholarship explainers — alongside course or provider results in a single interface.
The UCAS API is a managed, monitored endpoint for ucas.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when ucas.com 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 ucas.com 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?+
- Build a UK course comparison tool using courseTitle, subjects, fees, and historicGrades from get_course_details.
- Populate an apprenticeship board with employer name, location, salary, and duration from search_apprenticeships.
- Create a university discovery feature filtering providers by region and surfacing open day dates from get_provider_details.
- Aggregate scholarship opportunities by study level, nationality, and deadline using get_scholarship_details.
- Display contextual UCAS guidance articles alongside course listings by querying search_content with a matching keyword.
- Track year-on-year course availability by comparing search_courses results across the 2025 and 2026 academic year parameters.
- Build an autocomplete provider search using search_providers full-text matching on university and college names.
| 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.