# Ofsted Childcare Provider Scraper (`crawlerbros/ofsted-childcare-provider-scraper`) Actor

Scrape Ofsted's official register of English day nurseries, pre-schools and out-of-school childcare providers from GOV.UK open data. Search by region, local authority, provider type and Ofsted rating, look up by URN, or list every setting run by a nursery operator/group.

- **URL**: https://apify.com/crawlerbros/ofsted-childcare-provider-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Ofsted Childcare Provider Scraper

Scrape England's official register of day nurseries, pre-schools and out-of-school childcare providers straight from **Ofsted / GOV.UK open data**. Search by region, local authority, provider type and Ofsted rating, look up specific settings by their Ofsted URN, or list every setting run by a nursery operator/group (e.g. a national nursery chain).

### What this actor does

- **Official source** — pulls the latest quarterly Ofsted "Childcare providers and inspections" management-information dataset directly from GOV.UK, always the current release
- **England-wide coverage** — every actively registered day nursery, pre-school (sessional day care), out-of-school club (breakfast/after-school clubs), and non-home-based childminder, whose details are published un-redacted
- **Search by area** — region (9 English regions) and/or local authority (154 areas)
- **Search by rating** — filter to Outstanding-only, Good-or-better, or Requires-improvement-or-better
- **Search by capacity** — min/max registered childcare places
- **Direct lookup** — fetch specific providers by their Ofsted URN
- **Operator/group lookup** — list every setting run by a nursery chain (e.g. "Busy Bees", "Bright Horizons", "Kids Planet")
- **Empty fields are omitted** — every record only contains data that was actually published

### Output per provider

- `providerUrn`, `providerName`, `providerType` (`Childcare on non-domestic premises` or `Childminder without domestic premises`), `providerSubtype`, `providerStatus`, `sourceUrl` (Ofsted's public inspection-report page)
- `registeredPersonName`, `registeredPersonUrn` — the operator/company that owns the setting
- `registrationDate`
- `streetAddress`, `town`, `postalCode`, `localAuthority`, `region`, `ofstedRegion` (Ofsted's own broader regional grouping), `parliamentaryConstituency`, `deprivationBand`
- `registerCombinations` — which Ofsted register(s) the provider holds (`ALL`, `EYR only`, `VCR only`, `CCR only`, `EYR-CCR`, `EYR-VCR`, `CCR-VCR`)
- `earlyYearsRegisterFlag`, `compulsoryChildcareRegisterFlag`, `voluntaryChildcareRegisterFlag` — booleans for each individual register
- `places` — registered childcare capacity; `placesIncludingEstimates` (present only when it differs from `places`, e.g. an estimated figure where the official count is 0/unknown)
- **Legacy graded inspection** (Outstanding/Good/Requires improvement/Inadequate framework — pre-2025/26 inspections): `overallEffectiveness`, `overallEffectivenessCode` (1–4), `qualityOfEducation`, `behaviourAndAttitudes`, `personalDevelopment`, `effectivenessOfLeadershipAndManagement`, `safeguardingEffective`, `lastInspectionDate`, `lastInspectionNumber`
- **REIF inspection** (Ofsted's newer 2025/26-onwards framework, 5-point standard scale — replaces the legacy grade for providers inspected under it): `reifInspectionDate`, `reifInspectionNumber`, `reifInspectionVisitType`, `reifSafeguardingStandardsMet`, `reifInclusion`, `reifCurriculumAndTeaching`, `reifAchievement`, `reifBehaviourAndAttitudes`, `reifChildrensWelfareAndWellbeing`, `reifLeadershipAndGovernance` (each judgement: `Exceptional` / `Strong standard` / `Expected standard` / `Needs attention` / `Urgent improvement`)
- `outOfSchoolComplianceStatus` — for out-of-school clubs inspected under the compliance-only framework (Met / Not met (with actions) / Not met (enforcement)); `outOfSchoolInspectionDate`, `outOfSchoolInspectionNumber`, `outOfSchoolSafeguardingEffective` — that inspection's date/number/safeguarding verdict
- `ccrRequirementsSuitability`, `vcrRequirementsSuitability` — Compulsory/Voluntary Childcare Register requirements-met verdicts
- `crInspectionDate`, `crInspectionNumber`, `crComplianceStatus` — most recent Childcare Register inspection (when applicable)
- `ncorInspectionDate`, `ncorInspectionNumber`, `ncorComplianceStatus` — most recent non-compulsory-register inspection (when applicable)
- `recordType: "provider"`, `scrapedAt`

> Rating fields are only present once a provider has had its first inspection — newly registered settings won't yet have them, which is expected and reflects the real Ofsted register. A provider carries **either** the legacy graded fields **or** the REIF fields (or both, if inspected under both frameworks across its history) depending on when its most recent inspection took place — `minimumRating` only filters on the legacy grade, since the REIF 5-point standard scale isn't directly comparable to it.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | select | `search` | `search` / `byUrn` / `byOperator` |
| `region` | select | – | English region, e.g. `London` (mode=search); leave blank to search all regions |
| `localAuthority` | select | – | Local authority area (mode=search) |
| `providerSubtype` | select | – | Full day care / Sessional day care / Out-of-school day care |
| `minimumRating` | select | `any` | Any / Requires improvement or better / Good or better / Outstanding only (legacy grade only) |
| `registerCombination` | select | – | Exact Ofsted register combination, e.g. `ALL`, `EYR only` |
| `deprivationBand` | select | – | Income Deprivation Affecting Children Index (IDACI) band of the provider's postcode area, e.g. `Most deprived`, `Least deprived` |
| `nameContains` | string | – | Case-insensitive substring match on provider name |
| `minPlaces` / `maxPlaces` | int | – | Registered capacity range (0–1000) |
| `providerUrns` | array | – | Ofsted URNs (mode=byUrn) |
| `operatorName` | string | – | Operator/company name substring (mode=byOperator) |
| `operatorUrn` | string | – | Exact Registered Person URN (mode=byOperator) |
| `maxItems` | int | `100` | Hard cap on emitted records (1–5000) |

#### Example: Outstanding day nurseries in a local authority

```json
{
  "mode": "search",
  "localAuthority": "Kent",
  "providerSubtype": "Full day care",
  "minimumRating": "outstandingOnly",
  "maxItems": 100
}
```

#### Example: lookup by URN

```json
{
  "mode": "byUrn",
  "providerUrns": ["EY275703", "509666"]
}
```

#### Example: every setting run by a nursery chain

```json
{
  "mode": "byOperator",
  "operatorName": "Busy Bees",
  "maxItems": 500
}
```

### Use cases

- **Parent research** — find highly-rated nurseries and pre-schools in a specific area
- **Childcare market research** — map nursery density, capacity and ratings by region or local authority
- **Competitive intelligence for nursery chains** — track a competitor operator's full estate and rating distribution
- **Local authority / early-years planning** — analyze childcare capacity and quality across a region
- **Lead generation for childcare suppliers** — build territory lists of nurseries by area, type or rating

### FAQ

**What's the source of this data?** Ofsted's official "Childcare providers and inspections: management information" open dataset, published quarterly on GOV.UK. The actor always fetches the current release automatically.

**Does this cover the whole UK?** England only — Ofsted regulates childcare in England; Scotland, Wales and Northern Ireland have separate regulators (Care Inspectorate, Care Inspectorate Wales, Health and Social Care Trusts) not covered by this dataset.

**Why aren't most childminders included?** Ofsted's open dataset redacts home-based childminders' names and addresses for privacy (they operate from private homes). This actor covers every provider type where full details are published un-redacted: "Childcare on non-domestic premises" (day nurseries, pre-schools, out-of-school clubs) and "Childminder without domestic premises" (childminders who operate away from their own home, e.g. in a community hall). Ordinary home-based "Childminder", "Home childcarer" and "Childcare on domestic premises" rows are excluded because GOV.UK publishes their name/address fields as the literal value `REDACTED`.

**How current is the data?** Ofsted republishes this dataset quarterly. The actor always discovers and downloads the latest available release at run time.

**What does the Ofsted rating mean?** Outstanding, Good, Requires improvement, or Inadequate — the overall effectiveness grade from a setting's most recent full inspection under the Early Years Register framework. Settings not yet inspected won't have a rating.

**What's `outOfSchoolComplianceStatus`?** Out-of-school childcare (breakfast/after-school clubs) can be inspected under a compliance-only framework instead of the four-point grade — this field carries that verdict when applicable.

**Can I find all locations for a specific nursery chain?** Yes — use `mode=byOperator` with the chain's name (e.g. `"Busy Bees"`, `"Bright Horizons"`, `"Kids Planet"`) or its exact `registeredPersonUrn` from any provider record.

**What is "REIF" and why do some providers not have `overallEffectiveness`?** Ofsted introduced a new inspection framework (REIF) for early-years settings from 2025/26 onward, replacing the familiar 4-point grade (Outstanding/Good/Requires improvement/Inadequate) with a 5-point standard scale (Exceptional/Strong standard/Expected standard/Needs attention/Urgent improvement) across several judgement areas. A provider whose most recent inspection happened under REIF carries the `reif*` fields instead of the legacy `overallEffectiveness` fields — both are real, current Ofsted data, just from different inspection generations. As Ofsted continues rolling out REIF, an increasing share of providers will carry `reif*` fields instead of the legacy grade.

# Actor input Schema

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

What to fetch.

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

Restrict to an English region. Leave blank to search all regions.

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

Restrict to a specific local authority area. Leave blank to search the whole region/country.

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

Restrict to a specific type of setting.

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

Filter by most recent overall effectiveness grade.

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

Restrict to providers holding this exact combination of Ofsted registers (Early Years Register / Compulsory Childcare Register / Voluntary Childcare Register).

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

Restrict to providers in areas of a specific Income Deprivation Affecting Children Index (IDACI) band, based on the provider's postcode.

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

Case-insensitive substring match against the provider name.

## `minPlaces` (type: `integer`):

Drop providers registered for fewer childcare places than this.

## `maxPlaces` (type: `integer`):

Drop providers registered for more childcare places than this.

## `providerUrns` (type: `array`):

Ofsted Unique Reference Numbers, e.g. `EY275703`.

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

Case-insensitive substring match against the registered person/company name, e.g. `Busy Bees`.

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

Exact match against the registered person's Ofsted URN (found on any provider record's `registeredPersonUrn` field). Use instead of, or together with, operatorName.

## `maxItems` (type: `integer`):

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "search",
  "region": "London",
  "localAuthority": "",
  "providerSubtype": "",
  "minimumRating": "any",
  "registerCombination": "",
  "deprivationBand": "",
  "providerUrns": [
    "EY275703"
  ],
  "operatorName": "Busy Bees",
  "maxItems": 100
}
```

# Actor output Schema

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

Dataset containing all scraped provider records.

# 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 = {
    "mode": "search",
    "region": "London",
    "localAuthority": "",
    "providerSubtype": "",
    "minimumRating": "any",
    "registerCombination": "",
    "deprivationBand": "",
    "providerUrns": [
        "EY275703"
    ],
    "operatorName": "Busy Bees",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/ofsted-childcare-provider-scraper").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 = {
    "mode": "search",
    "region": "London",
    "localAuthority": "",
    "providerSubtype": "",
    "minimumRating": "any",
    "registerCombination": "",
    "deprivationBand": "",
    "providerUrns": ["EY275703"],
    "operatorName": "Busy Bees",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/ofsted-childcare-provider-scraper").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 '{
  "mode": "search",
  "region": "London",
  "localAuthority": "",
  "providerSubtype": "",
  "minimumRating": "any",
  "registerCombination": "",
  "deprivationBand": "",
  "providerUrns": [
    "EY275703"
  ],
  "operatorName": "Busy Bees",
  "maxItems": 100
}' |
apify call crawlerbros/ofsted-childcare-provider-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/ofsted-childcare-provider-scraper"
        }
    }
}

```

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/LuNtIkKB9Z9FJlpbP/builds/Zy8Jv2ahqoaDYGeXX/openapi.json
