# UK Care Services Register Scraper (CQC) (`crawlerbros/uk-care-services-register-scraper`) Actor

Scrape the official CQC register of every regulated care service in England - care homes, homecare agencies, GP practices, dentists, hospitals, hospices, ambulances and more. Search by type, region, local authority, specialism, or keyword and fetch CQC ratings.

- **URL**: https://apify.com/crawlerbros/uk-care-services-register-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Lead generation, Automation, Other
- **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 Services Register Scraper (CQC)

Scrape the official register of **every regulated health and social care service 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. Covers care homes, homecare (domiciliary care) agencies, GP practices, dentists, hospitals, hospices, ambulance services, community health services, and 20+ other CQC-defined service types in one dataset. Search by service type, region, local authority, care specialism, keyword or postcode, and optionally fetch each service'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 register) and `byLocationIds` (look up specific services by their CQC Location ID, always enriched with ratings)
- **31 CQC service types** — care homes, homecare agencies, GP/doctors surgeries, dentists, hospitals, mental health hospitals, hospices, ambulances, community services, urgent care, prison healthcare, and more
- **Filters:** keyword (name), provider/operator name, service type, region, local authority, care specialism/need, postcode area, has-website-only, has-phone-only
- **Rating filter:** restrict results to a specific CQC overall rating (e.g. only `Outstanding` services)
- **Official inspection ratings:** Overall, Safe, Effective, Caring, Responsive, Well-led — straight from CQC's own published assessments (where CQC assigns one — not every service type is star-rated)
- **Sorting:** alphabetical, most-recently-inspected-first, or by region
- **Always fresh:** the register 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 service

### Output per care service

| Field | Description |
|---|---|
| `name` | Registered service 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` | Service or provider website |
| `serviceTypes[]` | CQC-defined type(s), e.g. `Nursing homes`, `Doctors/GPs`, `Dentist`, `Hospital` |
| `specialisms[]` | Care needs supported, e.g. `Dementia`, `Physical disabilities` |
| `providerName` | Operating company / charity / NHS trust name |
| `providerId`, `providerUrl` | CQC provider ID and profile page |
| `localAuthority` | Local authority area |
| `region` | CQC region (9 English regions, plus Wales for the small number of cross-border providers CQC also lists) |
| `latestInspectionDate` | Date of CQC's most recent inspection (ISO date) |
| `locationId` | CQC Location ID |
| `locationUrl` / `sourceUrl` | Canonical CQC page for this service |
| `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 |
| `registeredManagers[]` \* | Named registered manager(s) on file |
| `nominatedIndividuals[]` \* | Named nominated individual(s) on file (the provider's board-level lead responsible for CQC compliance at this service) |
| `recordType` | Always `careService` |
| `scrapedAt` | UTC timestamp of the scrape |

\* Only present when ratings are fetched — see `includeRatings` below — **and** when CQC assigns that service type a domain rating at all (dentists, for example, are inspected but not star-rated, so these fields are simply omitted rather than showing a fabricated value). Always fetched 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 |
| `serviceType` | select | – | One of 31 CQC service types, e.g. `Doctors/GPs`, `Homecare agencies`, `Dentist`, `Hospital` |
| `region` | select | – | CQC region |
| `localAuthority` | select | – | One of 156 local authorities |
| `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), `latestInspectionDateDesc`, or `regionAsc` |
| `includeRatings` | boolean | `false` | Fetch each result's official CQC rating (capped at 60 fetches/run) |
| `overallRatingFilter` | select | – | Keep only services rated e.g. `Outstanding`, or `notRated` for services CQC doesn't domain-rate (auto-enables rating enrichment) |
| `hasWebsiteOnly` | boolean | `false` | Only keep services with a website on file |
| `hasPhoneOnly` | boolean | `false` | Only keep services with a phone number on file |
| `lastPublishedFilter` | select | – | Only keep services last inspected `week` (7 days) or `month` (30 days) ago |
| `locationIds` | array | – | CQC Location IDs or URLs (mode=`byLocationIds`) |
| `maxItems` | integer | `20` | Hard cap on emitted records (1–500) |

#### Example: outstanding-rated GP practices in London

```json
{
  "mode": "search",
  "serviceType": "Doctors/GPs",
  "region": "London",
  "overallRatingFilter": "Outstanding",
  "maxItems": 25
}
```

#### Example: homecare agencies for dementia care, with contact details required

```json
{
  "mode": "search",
  "serviceType": "Homecare agencies",
  "specialism": "Dementia",
  "hasWebsiteOnly": true,
  "hasPhoneOnly": true,
  "maxItems": 50
}
```

#### Example: all services run by a specific provider

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

#### Example: recently-inspected services with no domain rating published

```json
{
  "mode": "search",
  "serviceType": "Dentist",
  "overallRatingFilter": "notRated",
  "lastPublishedFilter": "month",
  "maxItems": 50
}
```

#### Example: look up specific services by CQC Location ID

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

### Use cases

- **Care research & comparison** — build a shortlist of highly-rated services in a specific area, service type or specialism
- **Lead generation** — identify care providers, GP practices, dentists, or homecare agencies by region, local authority, or operator group
- **Market research** — analyse the density and quality distribution of health and social care provision across England
- **Compliance monitoring** — track inspection dates and ratings for services you operate or oversee
- **Family/carer decision support** — compare nearby services 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 health and social 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) — a small number of cross-border providers registered under `Wales` do appear in CQC's own export and are included as-is, but this is not a Welsh-regulator dataset.

**What service types are covered?** All 31 that CQC's directory export lists, including (but not limited to) `Nursing homes`, `Residential homes`, `Homecare agencies`, `Doctors/GPs`, `Dentist`, `Hospital`, `Hospitals - Mental health/capacity`, `Hospice`, `Ambulances`, `Community services - Healthcare`, `Supported living`, `Urgent care centres`, and `Prison healthcare`. Leave `serviceType` blank to search across all of them at once.

**Why do some services have no rating?** CQC only assigns a Good/Outstanding-style overall rating to certain service types after an inspection (adult social care, GP practices, hospitals, homecare, etc). Dentists and a few other service types are inspected but are not given this style of rating by CQC — for those, `overallRating` and the 5 domain ratings are omitted rather than showing a fabricated or misleading value. Newly registered services without a published assessment yet will also have these fields omitted.

**How current is the data?** The base register (name, address, provider, specialisms) is CQC's daily-refreshed export. Ratings are fetched live from each service'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 service. The cap keeps runs fast and reliable; use `mode=byLocationIds` for guaranteed per-service rating lookups regardless of this cap. `overallRatingFilter` uses a wider internal scan budget since it actively searches for rating matches.

**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 service's name instead.

### Limitations

- **Archived / deregistered locations are not included.** This actor's `search` mode draws from CQC's daily "Care directory" export, which covers currently-registered (active) locations only (~94,000 as of writing). CQC separately publishes a much larger "Deactivated locations" file (~92,000 records, ~26MB) covering services that have since closed or re-registered — but that file is only available as a large `.ods` spreadsheet, not CSV, and parsing it reliably within a single actor run was judged too memory-risky to add in this pass. If you need historical/closed-service lookups, download CQC's "Deactivated locations" file directly from their [transparency page](https://www.cqc.org.uk/about-us/transparency/using-cqc-data).
- **`mode=byLocationIds` also only resolves active registrations** for the same reason — a Location ID belonging to an archived/deregistered service will return ratings-page data if the detail page still exists, but base fields (address, provider, etc.) will be empty since they come from the same active-only directory export.

# Actor input Schema

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

What to fetch.

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

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

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

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

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

Restrict to one CQC-defined service type. Leave as "any" to include every regulated service type (mode=search).

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

Restrict to one of CQC's English regions (plus Wales, for the small number of cross-border providers CQC also lists). Leave as "any" to include all (mode=search).

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

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

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

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

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

Match services 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 service's CQC inspection page to add its Overall/Safe/Effective/Caring/Responsive/Well-led ratings (mode=search). Adds one extra request per result, capped at 60 per run for reliability. Note: dentists and a few other service types are not given a CQC rating and will simply have no rating fields. Always included for mode=byLocationIds.

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

Only keep services whose CQC overall rating equals this value. Automatically enables rating enrichment (mode=search). `notRated` matches services CQC doesn't give a location-level rating (e.g. dentists, or multi-service locations rated per-service under CQC's newer assessment approach). Leave as "any" to skip this filter.

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

Restrict to services whose latest CQC inspection check was published recently (mode=search), matching CQC's own "Last published" site filter.

## `hasWebsiteOnly` (type: `boolean`):

Exclude services with no website recorded in the CQC directory (mode=search).

## `hasPhoneOnly` (type: `boolean`):

Exclude services with no phone number recorded in the CQC directory (mode=search).

## `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": "",
  "serviceType": "",
  "region": "",
  "localAuthority": "",
  "specialism": "",
  "postcodeArea": "",
  "sortBy": "name",
  "includeRatings": false,
  "overallRatingFilter": "",
  "lastPublishedFilter": "",
  "hasWebsiteOnly": false,
  "hasPhoneOnly": false,
  "locationIds": [
    "1-10557588274"
  ],
  "maxItems": 20
}
```

# Actor output Schema

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

Dataset containing all scraped CQC care service 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": "",
    "serviceType": "",
    "region": "",
    "localAuthority": "",
    "specialism": "",
    "postcodeArea": "",
    "sortBy": "name",
    "includeRatings": false,
    "overallRatingFilter": "",
    "lastPublishedFilter": "",
    "hasWebsiteOnly": false,
    "hasPhoneOnly": false,
    "locationIds": [
        "1-10557588274"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/uk-care-services-register-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": "",
    "serviceType": "",
    "region": "",
    "localAuthority": "",
    "specialism": "",
    "postcodeArea": "",
    "sortBy": "name",
    "includeRatings": False,
    "overallRatingFilter": "",
    "lastPublishedFilter": "",
    "hasWebsiteOnly": False,
    "hasPhoneOnly": False,
    "locationIds": ["1-10557588274"],
    "maxItems": 20,
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/uk-care-services-register-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/mqRW84u9bJaWyOyD7/builds/eBY6TxspfIzvxJdFe/openapi.json
