# UK Care Home Directory Scraper (CQC) (`crawlerbros/cqc-care-home-directory-scraper`) Actor

Scrape the official CQC (Care Quality Commission) register of nursing and residential care homes in England. Search by region, local authority, specialism, keyword or postcode, and fetch official inspection ratings (Outstanding/Good/Requires improvement/Inadequate) per home.

- **URL**: https://apify.com/crawlerbros/cqc-care-home-directory-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Agents, Automation, Developer tools
- **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

## UK Care Home Directory Scraper (CQC)

Scrape the official register of nursing and residential care homes in England, sourced directly from the **Care Quality Commission (CQC)** — the UK government body that regulates and inspects every health and social care provider in the country. Search by region, local authority, care specialism (e.g. dementia), keyword or postcode, and optionally fetch each home's official inspection rating (Outstanding / Good / Requires improvement / Inadequate). No login, no API key, no proxy required.

### What this actor does

- **Two modes:** `search` (filter the full directory) and `byLocationIds` (look up specific homes by their CQC Location ID, always enriched with ratings)
- **Filters:** keyword (name), provider/operator name, region, local authority, care home type (nursing vs residential), specialism/care need, postcode area
- **Official inspection ratings:** Overall, Safe, Effective, Caring, Responsive, Well-led — straight from CQC's own published assessments
- **Sorting:** alphabetical or most-recently-inspected-first
- **Always fresh:** the directory export is re-downloaded from CQC every run (CQC republishes it daily)
- **Empty fields are omitted** — every record only contains what CQC actually published for that home

### Output per care home

| Field | Description |
|---|---|
| `name` | Registered care home name |
| `alsoKnownAs` | Trading/brand name, if different from the registered name |
| `address` | Street address |
| `postcode` | UK postcode |
| `fullAddress` | Address + postcode combined |
| `phone` | UK phone number |
| `website` | Care home or provider website |
| `serviceTypes[]` | e.g. `Nursing homes`, `Residential homes` |
| `specialisms[]` | Care needs supported, e.g. `Dementia`, `Physical disabilities` |
| `providerName` | Operating company / charity name |
| `providerId`, `providerUrl` | CQC provider ID and profile page |
| `localAuthority` | English local authority area |
| `region` | One of CQC's 9 English regions |
| `latestInspectionDate` | Date of CQC's most recent inspection (ISO date) |
| `locationId` | CQC Location ID |
| `locationUrl` / `sourceUrl` | Canonical CQC page for this care home |
| `overallRating` \* | Outstanding / Good / Requires improvement / Inadequate |
| `ratingSafe`, `ratingEffective`, `ratingCaring`, `ratingResponsive`, `ratingWellLed` \* | The 5 official CQC assessment categories |
| `reportPublishedDate` \* | Date the latest inspection report was published |
| `reportUrl` \* | Link to the full inspection report |
| `regulatedActivities[]` \* | CQC-regulated activities this location is registered to carry out, e.g. `Accommodation for persons who require nursing or personal care`, `Treatment of disease, disorder or injury` |
| `registeredManagers[]` \* | Named registered manager(s) on file |
| `nominatedIndividuals[]` \* | Named nominated individual(s) on file — the person the provider has made accountable for compliance at this location |
| `recordType` | Always `careHome` |
| `scrapedAt` | UTC timestamp of the scrape |

\* Only present when ratings are fetched — see `includeRatings` below. Always present for `mode=byLocationIds`.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | select | `search` | `search` or `byLocationIds` |
| `keyword` | string | – | Substring match on name / "also known as" |
| `providerName` | string | – | Substring match on provider/operator name |
| `region` | select | – | One of CQC's 9 English regions |
| `localAuthority` | select | – | One of 152 English local authorities |
| `serviceType` | select | – | `Nursing homes` or `Residential homes` |
| `specialism` | select | – | One of 12 CQC-listed specialisms (e.g. `Dementia`) |
| `postcodeArea` | string | – | Postcode prefix match, e.g. `NE31`, `SW1` |
| `sortBy` | select | `name` | `name` (A-Z) or `latestInspectionDateDesc` |
| `includeRatings` | boolean | `false` | Fetch each result's official CQC rating (capped at 60 fetches/run) |
| `locationIds` | array | – | CQC Location IDs or URLs (mode=`byLocationIds`) |
| `maxItems` | integer | `20` | Hard cap on emitted records (1–500) |

#### Example: dementia care homes in London, with ratings

```json
{
  "mode": "search",
  "region": "London",
  "specialism": "Dementia",
  "includeRatings": true,
  "maxItems": 25
}
```

#### Example: all care homes run by a specific provider

```json
{
  "mode": "search",
  "providerName": "Barchester",
  "sortBy": "latestInspectionDateDesc",
  "maxItems": 100
}
```

#### Example: look up specific care homes by CQC Location ID

```json
{
  "mode": "byLocationIds",
  "locationIds": [
    "1-10557588274",
    "https://www.cqc.org.uk/location/1-4843681933"
  ]
}
```

### Use cases

- **Care research & comparison** — build a shortlist of highly-rated homes in a specific area or specialism
- **Lead generation** — identify care providers by region, local authority, or operator group
- **Market research** — analyse the density and quality distribution of care provision across England
- **Compliance monitoring** — track inspection dates and ratings for homes you operate or oversee
- **Family/carer decision support** — compare nearby homes on official ratings before choosing care

### FAQ

**Where does this data come from?** Directly from CQC's own [public transparency data](https://www.cqc.org.uk/about-us/transparency/using-cqc-data) — the same regulator-verified register CQC publishes for public download every day. This is the official UK government source of truth for registered care providers, not a third-party aggregator.

**Does this cover all of the UK?** CQC regulates England only. Scotland, Wales, and Northern Ireland have their own regulators (Care Inspectorate, CIW, RQIA) which are not covered by this actor.

**What's the difference between a nursing home and a residential home?** A nursing home has registered nurses on-site and can provide medical/nursing care; a residential home provides personal care (help with daily living) without nursing care. Some homes are registered for both.

**Why do some homes have no rating?** CQC ratings are assigned after an inspection. Newly registered homes, or homes whose most recent assessment didn't produce a published overall rating, will have `overallRating` omitted rather than a fabricated placeholder.

**How current is the data?** The base directory (name, address, provider, specialisms) is CQC's daily-refreshed export. Ratings are fetched live from each home's CQC page at the time you run the actor.

**Why is `includeRatings` capped at 60 fetches per run?** Fetching a rating requires one extra page load per care home. The cap keeps runs fast and reliable; use `mode=byLocationIds` for guaranteed per-home rating lookups regardless of this cap.

**Can I search by exact postcode?** `postcodeArea` matches on prefix (e.g. `NE31` matches `NE31 1YQ`). For an exact single address lookup, use `keyword` with the care home's name instead.

# Actor input Schema

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

What to fetch.

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

Case-insensitive substring match against the care home's registered name or "also known as" name (mode=search). Leave blank to skip.

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

Case-insensitive substring match against the care provider/operator company name, e.g. `Bupa`, `Barchester` (mode=search). Leave blank to skip.

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

Restrict to one of CQC's 9 English regions (mode=search).

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

Restrict to a single English local authority area (mode=search).

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

Restrict to nursing homes (registered nursing care) or residential homes (personal care only). Leave as "any" to include both (mode=search).

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

Restrict to care homes that CQC lists as supporting this specific care need, e.g. Dementia (mode=search).

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

Match care homes whose postcode starts with this value, e.g. `NE31`, `SW1`, `B93` (mode=search). Leave blank to skip.

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

Order of results (mode=search).

## `includeRatings` (type: `boolean`):

Fetch each matched care home's CQC inspection page to add its Overall/Safe/Effective/Caring/Responsive/Well-led ratings, regulated activities, registered manager(s), and nominated individual(s) (mode=search). Adds one extra request per result, capped at 60 per run for reliability. Always included for mode=byLocationIds.

## `locationIds` (type: `array`):

Exact CQC Location IDs (e.g. `1-10557588274`) or full `cqc.org.uk/location/...` URLs to fetch, each enriched with inspection ratings.

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "search",
  "keyword": "manor",
  "providerName": "",
  "region": "",
  "localAuthority": "",
  "serviceType": "",
  "specialism": "",
  "postcodeArea": "",
  "sortBy": "name",
  "includeRatings": false,
  "locationIds": [
    "1-10557588274"
  ],
  "maxItems": 20
}
```

# Actor output Schema

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

Dataset containing all scraped CQC care home 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",
    "keyword": "manor",
    "providerName": "",
    "region": "",
    "localAuthority": "",
    "serviceType": "",
    "specialism": "",
    "postcodeArea": "",
    "sortBy": "name",
    "includeRatings": false,
    "locationIds": [
        "1-10557588274"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/cqc-care-home-directory-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",
    "keyword": "manor",
    "providerName": "",
    "region": "",
    "localAuthority": "",
    "serviceType": "",
    "specialism": "",
    "postcodeArea": "",
    "sortBy": "name",
    "includeRatings": False,
    "locationIds": ["1-10557588274"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/cqc-care-home-directory-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",
  "keyword": "manor",
  "providerName": "",
  "region": "",
  "localAuthority": "",
  "serviceType": "",
  "specialism": "",
  "postcodeArea": "",
  "sortBy": "name",
  "includeRatings": false,
  "locationIds": [
    "1-10557588274"
  ],
  "maxItems": 20
}' |
apify call crawlerbros/cqc-care-home-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/cqc-care-home-directory-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/bIgndBpONtHuMeQgn/builds/3ibAhMUsM3rv8Hmuu/openapi.json
