# UK Chiropractor Register Scraper (`crawlerbros/uk-chiropractor-register-scraper`) Actor

Scrape the General Chiropractic Council (GCC) public register of UK-regulated chiropractors. Search by name or location, find chiropractors near a postcode, or look up exact registration numbers - with practice addresses, contact details, qualifications, and regulatory history.

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

Scrape the **General Chiropractic Council (GCC)** public register — the official, legally-mandated list of every chiropractor entitled to practise in the UK. Search by name, find chiropractors near a postcode, or look up exact registration numbers. Get practice addresses, phone/email/website, qualifications, registration status, and any published regulatory (fitness-to-practise) history. No login, no cookies, no proxy required.

### What this actor does

- **Two modes:** `search` (name / location / status filters, or browse the whole register) and `byRegistrationNumber` (exact lookup)
- **"Near me" search:** give a UK postcode and get chiropractors nearest to it, exactly like the site's own "Find a Chiropractor" tool
- **Global coverage:** most registrants practise in the UK, but the GCC also registers chiropractors practising in Ireland, Australia, New Zealand, Singapore, Spain, the Netherlands, Malaysia, Hong Kong, Israel, and elsewhere
- **Multiple practices per chiropractor** are all captured, not just the first
- **Regulatory history:** hearing decisions, findings and outcomes for chiropractors who have been the subject of GCC fitness-to-practise proceedings, with links to the official PDF notices
- **Empty fields are omitted** — every record only contains data the GCC actually publishes

### Output per chiropractor

- `fullName`
- `gender`
- `registrationNumber` — 5-digit GCC registration number
- `registrationStatus` — e.g. `Registered - Practising`, `Registered - Non-Practising`, `Erased/Struck Off`
- `isRegistered` — boolean, derived from `registrationStatus`
- `dateFirstRegistered` — ISO date (`YYYY-MM-DD`)
- `qualification` — chiropractic degree/diploma and awarding institution, where published
- `practices[]` — one entry per practice: `name`, `street`, `city`, `region`, `postcode`, `country`, `phone`, `email`, `website`, `latitude`, `longitude`
- `regulatoryActions[]` — only present if the GCC has published a hearing: `title`, `dateRange`, `finding`, `outcome`, `noticeUrl`, `decisionUrl`
- `sourceUrl` — the exact GCC register page for this registration number
- `recordType: "chiropractor"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | select | `search` | `search` / `byRegistrationNumber` |
| `name` | string | – | Full or partial name (mode=search) |
| `postcode` | string | – | UK postcode — returns nearest chiropractors first |
| `city` | string | – | Filter by practice city/town |
| `region` | string | – | Filter by county/region |
| `country` | string | – | Filter by country (e.g. `United Kingdom`, `Ireland`, `Australia`) |
| `gender` | select | – | `Male` / `Female` |
| `registrationStatus` | select | – | Filter by registration status |
| `registeredAfter` | string | – | ISO date; only chiropractors registered on/after this date |
| `registeredBefore` | string | – | ISO date; only chiropractors registered on/before this date |
| `qualificationContains` | string | – | Keyword filter on the qualification text |
| `registrationNumbers` | array | `["01913"]` | Exact registration numbers (mode=byRegistrationNumber) |
| `maxItems` | int | `50` | Hard cap on emitted records (1–5000) |

#### Example: browse the whole register

```json
{ "mode": "search", "maxItems": 100 }
```

#### Example: search by surname

```json
{ "mode": "search", "name": "Smith", "maxItems": 50 }
```

#### Example: chiropractors near a postcode

```json
{ "mode": "search", "postcode": "SW1A 1AA", "maxItems": 20 }
```

#### Example: currently-practising female chiropractors in Surrey

```json
{
  "mode": "search",
  "region": "Surrey",
  "gender": "Female",
  "registrationStatus": "Registered - Practising",
  "maxItems": 50
}
```

#### Example: exact registration-number lookup

```json
{ "mode": "byRegistrationNumber", "registrationNumbers": ["01913", "00078", "05581"] }
```

### Use cases

- **Patient safety checks** — verify a chiropractor is currently registered before booking treatment
- **Insurance & referral networks** — validate practitioner credentials in bulk
- **Healthcare directories** — build a searchable UK chiropractor directory with live registration status
- **Compliance monitoring** — track fitness-to-practise outcomes and registration changes over time
- **Market research** — analyse practice density by region, qualification pathway, or registration year
- **Lead generation** — find chiropractic practices near a location, with contact details

### FAQ

**What is the GCC?** The General Chiropractic Council is the UK's independent statutory regulator for chiropractors, established under the Chiropractors Act 1994. It is a criminal offence to call yourself a "chiropractor" in the UK without being on this register.

**Is this the same list patients see on gcc-uk.org?** Yes — the actor reads the exact same public search tool at gcc-uk.org, with no login or special access.

**Why do some records have no practice address?** A small number of chiropractors (mostly `Registered - Non-Practising`) have no current practice on file with the GCC — the actor omits the `practices` field rather than fabricating one.

**How is `postcode` search matched to a location?** The actor geocodes the postcode via the free, public [postcodes.io](https://postcodes.io) API (no key required) and passes the coordinates to GCC's own proximity search, exactly as the site's UI does client-side.

**Why is `registrationStatus` a dropdown but `city`/`region`/`country` free text?** Registration status is a small, fixed set of values defined by the regulator. City, region, and country are open-ended place names (the GCC's own search form uses free-text boxes for these too).

**What does `isRegistered` mean?** `true` for any status starting with "Registered" (Practising or Non-Practising); `false` for erased/struck-off registrants. Being "Non-Practising" still means the person is a registered chiropractor — they are simply not currently seeing patients.

**Does the actor include historic/removed chiropractors?** Yes, where the GCC's own register still lists them (typically alongside their fitness-to-practise hearing outcome).

**Why is `registrationStatus`/`gender`/date/qualification filtering sometimes slow?** GCC's own search form only filters by name, postcode, city, region, and country server-side — status, gender, registration date, and qualification are applied by the actor after fetching each page. `Registered - Practising`/`Registered - Non-Practising`/`Female`/`Male` are common (a match typically appears within the first page or two). `Erased/Struck Off` is rare — around 0.5% of the register — and the GCC's own listing order does not group by status, so the actor may need to page through hundreds of records before finding enough matches to reach `maxItems`. When filtering for a rare status with no `name`/`city`/`region`/`country`, set a generous run timeout (10+ minutes) and a small `maxItems` (1–5).

**How fresh is the data?** The GCC register is a live, continuously-updated official database — the actor always reads the current state at run time.

# Actor input Schema

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

What to fetch.

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

Full or partial name to search for (matches first name, last name, or both, e.g. `Smith` or `Julia Smith`). Leave blank to browse the whole register.

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

A UK postcode (e.g. `SW1A 1AA`). Results are geocoded and returned nearest-first, matching the site's own "Find a Chiropractor" tool.

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

Filter practices by city or town, e.g. `London`, `Manchester`, `Edinburgh`. GCC resolves this to a geographic area on their end, so nearby towns (e.g. `Didsbury`, `Sale` for `Manchester`) may also appear — matching the site's own "Find a Chiropractor" tool.

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

Filter practices by county or region, e.g. `Surrey`, `West Yorkshire`.

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

Filter practices by country, e.g. `United Kingdom`, `Ireland`, `Australia`, `Singapore` (GCC-registered chiropractors sometimes practise abroad).

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

Only return chiropractors of this gender.

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

Only return chiropractors whose registration status contains this value.

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

Only return chiropractors first registered on or after this date.

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

Only return chiropractors first registered on or before this date.

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

Only return chiropractors whose listed qualification contains this text, e.g. `AECC`, `Doctor of Chiropractic`.

## `registrationNumbers` (type: `array`):

Exact GCC registration numbers to look up, e.g. `01913` or `1913`.

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "search",
  "name": "Smith",
  "registrationNumbers": [
    "01913"
  ],
  "maxItems": 50
}
```

# Actor output Schema

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

Dataset containing all scraped chiropractor 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",
    "name": "Smith",
    "registrationNumbers": [
        "01913"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/uk-chiropractor-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",
    "name": "Smith",
    "registrationNumbers": ["01913"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/uk-chiropractor-register-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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",
  "name": "Smith",
  "registrationNumbers": [
    "01913"
  ],
  "maxItems": 50
}' |
apify call crawlerbros/uk-chiropractor-register-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/uk-chiropractor-register-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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