# Ofqual Register - 53K Regulated UK Qualifications (`j0401/uk-ofqual-qualifications`) Actor

The Ofqual register of regulated qualifications for England (53,049 qualifications from 351 awarding organisations, OGL v3): level, type, status, credits, GLH/TQT, sector subject area, grading, validity dates, apprenticeship standard links and the awarding organisation. Search, filter or aggregate.

- **URL**: https://apify.com/j0401/uk-ofqual-qualifications.md
- **Developed by:** [Wenhao Yang](https://apify.com/j0401) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.03 / 1,000 ofqual qualification records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Ofqual Register - 53K Regulated UK Qualifications

The register of regulated qualifications that Ofqual publishes for England:
**53,049 qualifications** (register build **25 October 2026**), of which
**17,100 are currently available to learners** and **34,187 are no longer
awarded**. The register lists 351 awarding organisations; **326 recognition
numbers (323 distinct names) have qualifications in this extract**. Every record carries the level, type,
status, sector subject area and awarding organisation, plus the dates the
register publishes (an operational end date on **71.7%** of records and a
certification end date on **71.4%**). The credit, guided-learning,
grading-scale and apprenticeship fields are present where the register
publishes them (measured over all 53,049 rows: total credits 82.6%, GLH
53.7%, TQT 54.0%, grading scale 25.8%, apprenticeship standard 6.0%).

### Low cost

**From $0.00005 per record, down to $0.00003 at Gold.** You pay only for the
records you receive; the whole register stays searchable.

### What you get per qualification

| field | meaning |
|---|---|
| `qualificationNumber`, `title` | Ofqual qualification number and title |
| `status` | `Available to learners`, `No longer available to new learners`, `Not yet available to learners`, `No longer awarded` |
| `level`, `subLevel`, `eqfLevel` | Ofqual level, sub-level and EQF level |
| `type` | qualification type, e.g. `QCF`, `National Vocational Qualification`, `End-Point Assessment`, `GCSE (A* to G)`, `English For Speakers of Other Languages` |
| `totalCredits`, `tqt`, `glh`, `minGlh`, `maxGlh` | credit and learning-time values |
| `ssa` | sector subject area, e.g. `13.1 Teaching and lecturing` |
| `gradingType`, `gradingScale`, `assessmentMethods` | how the qualification is graded and assessed |
| `regulationStart`, `operationalStart`, `operationalEnd`, `certificationEnd` | validity dates |
| `offeredInEngland`, `offeredInNorthernIreland` | where it is offered |
| `apprenticeshipStandard`, `apprenticeshipTitle` | linked apprenticeship standard, where one exists |
| `specialisms`, `pathways` | specialisms and pathways tagged by the register, where published |
| `specificationUrl` | the awarding organisation's specification, where published |
| `organisationName`, `organisationAcronym`, `organisationLegalName` | awarding organisation |
| `organisationRecognitionNumber`, `organisationStatus`, `organisationWebsite` | Ofqual recognition details |
| `organisationTown`, `organisationPostcode` | head-office address of the awarding organisation |
| `refreshedDate` | date of the register release this record came from |

The register is a living record: it keeps qualifications after they retire,
so a "current qualifications" answer should set `availableOnly=true` (or
`status="Available to learners"`). Qualification and organisation records are
included; the register's separate unit-level files are not.

### Search it

- **Keyword** - `q="electrical installation"` (matches title or number).
- **Awarding organisation** - `organisation="City & Guilds"` (matches City &
  Guilds Limited and AQA - City & Guilds), `organisation="Pearson"`.
- **Level** - `level="Level 3"`, `"Entry Level"`.
- **Current only** - `availableOnly=true`.
- **Sector** - `ssa="Health and social care"`.
- **Exact qualification** - `qualificationNumber="500/1514/X"`.
- **Apprenticeship standard** - `apprenticeshipStandard="ST0384"`.

### Example inputs

**Current Level 3 health and social care qualifications**

```json
{ "level": "Level 3", "ssa": "Health and social care",
  "availableOnly": true, "maxResults": 100 }
```

**One awarding organisation's live offer**

```json
{ "organisation": "City & Guilds Limited", "availableOnly": true,
  "maxResults": 200 }
```

**Everything linked to an apprenticeship standard**

```json
{ "apprenticeshipStandard": "ST0384", "maxResults": 50 }
```

### Aggregate it

Set `groupBy` with no filters for a whole-register rollup, or with filters for
a scoped one:

```json
{ "mode": "aggregate", "groupBy": "level" }
```

`groupBy` = `status` (default), `level`, `type`, `organisation`, `ssa`,
`eqfLevel` or `offeredInEngland`. Every row carries `groupKey`, `groupCount`,
`groupBy` and `totalMatched`.

The default (empty) run returns the whole-register status summary. A search
returns at most 5,000 records per run and there is no offset paging; the
largest partitions (status "No longer awarded" 34,187; that status plus one
level still 10,907) are bigger than that. `mode=aggregate` gives counts for
those partitions; to enumerate them, add filters that bring the partition
under 5,000.

### Source and licence

Ofqual Register of Regulated Qualifications, published under the
**Open Government Licence v3**, which permits commercial reuse with
attribution. Qualification records contain no personal data; the awarding
organisation's public email address and telephone number are not included
(website and head-office address only).

Data source: [Ofqual - find a qualification](https://www.gov.uk/check-a-qualification-network).

# Actor input Schema

## `mode` (type: `string`):

search = filter the register. aggregate = one row per group. warm = owner maintenance: rebuild the snapshot from the Ofqual register and upload it (no filters). Leave blank to auto-route: filters -> search, no filters -> aggregate.

## `q` (type: `string`):

Matches the qualification title or qualification number, case-insensitive (e.g. "electrical installation").

## `title` (type: `string`):

Substring of the qualification title only, case-insensitive.

## `organisation` (type: `string`):

Awarding organisation name, acronym or legal name substring, case-insensitive (e.g. "City & Guilds Limited", "Pearson").

## `level` (type: `string`):

Exact Ofqual level: Entry Level, Level 1, Level 2, Level 3 ... Level 8 (also Level 1/Level 2 for combined GCSEs).

## `type` (type: `string`):

Qualification type substring, e.g. "QCF", "National Vocational Qualification", "End-Point Assessment", "GCSE".

## `status` (type: `string`):

Exact Ofqual status. The register keeps retired qualifications, so use "Available to learners" for current qualifications.

## `availableOnly` (type: `boolean`):

true = only qualifications currently available to learners (status "Available to learners"). false (default) = no status filter.

## `ssa` (type: `string`):

Sector subject area substring, e.g. "Health and social care", "Engineering".

## `qualificationNumber` (type: `string`):

Exact Ofqual qualification number, e.g. "500/1514/X" or "610/1234/5".

## `apprenticeshipStandard` (type: `string`):

Exact apprenticeship standard reference number, e.g. "ST0384".

## `offeredInEngland` (type: `boolean`):

true = only qualifications offered in England. false (default) = no filter.

## `groupBy` (type: `string`):

status -> Ofqual status; level / eqfLevel -> levels; type -> qualification type; organisation -> awarding organisation; ssa -> sector subject area; offeredInEngland -> England flag. Blank defaults to status.

## `maxResults` (type: `integer`):

Cap the number of search records pushed (0 = the default 50, maximum 5000). Aggregate returns every group.

## Actor input object example

```json
{
  "availableOnly": false,
  "offeredInEngland": false,
  "maxResults": 50
}
```

# Actor output Schema

## `recordsUrl` (type: `string`):

Ofqual qualification records - as JSON

## `datasetUrl` (type: `string`):

No description

## `runUrl` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("j0401/uk-ofqual-qualifications").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("j0401/uk-ofqual-qualifications").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call j0401/uk-ofqual-qualifications --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,j0401/uk-ofqual-qualifications"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/tx0zwhlPDXLStTfSE/builds/CgGhikEF2RvJkxCs9/openapi.json
