# SRA Solicitors Register Scraper (`crawlerbros/sra-solicitors-register-scraper`) Actor

Scrape the Solicitors Regulation Authority's (SRA) official public register of solicitors and law firms in England & Wales. Search by name or SRA number, or fetch full firm profiles with offices, areas of law, and regulated people.

- **URL**: https://apify.com/crawlerbros/sra-solicitors-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

## SRA Solicitors Register Scraper

Scrape the **Solicitors Regulation Authority (SRA)** Solicitors Register — the official public directory of every solicitor and law firm regulated in England & Wales. Search by name or SRA number, or pull a full firm profile (offices, website, areas of law, reserved legal activities, and regulated people) by SRA number. No login, no cookies, no paid proxy.

The SRA is the regulator that authorises solicitors and law firms in England & Wales; this register is the same authoritative source that underpins the Law Society's public "Find a Solicitor" tool.

### What this actor does

- **Two modes:** `search` (by name/keyword/SRA number) and `firmDetails` (full firm profile by SRA number)
- **Both entity types:** individual solicitors and law firms/organisations
- **Rich firm profiles:** trading & previous names, every office (address/phone/website/email), areas of law, reserved legal activities, and a list of SRA-regulated people at the firm
- **Regulatory status filter:** optionally restrict firm results to actively SRA-regulated firms only
- **Empty fields are always omitted** — you never see `null`, `""`, or `[]`

### Output fields

#### Search mode — firm record (`recordType: "firm"`)

| Field | Description |
|---|---|
| `sraNumber` | Unique SRA identifier |
| `name` | Registered firm name |
| `alsoKnownAs` | Trading name(s), if different from registered name |
| `status` | Regulatory status, e.g. `SRA-regulated firm`, `Firm has closed`, `Not regulated by an approved regulator for legal services` |
| `headOfficeLocation` | Town/city of the head office (plus office count if there are others) |
| `profileUrl` | Link to the full public register page for this firm |
| `recordType`, `scrapedAt` | |

#### Search mode — person record (`recordType: "person"`)

| Field | Description |
|---|---|
| `sraNumber` | Unique SRA identifier |
| `name` | Full name |
| `status` | e.g. `SRA-regulated solicitor`, `SRA-regulated lawyer`, `SRA-regulated solicitor, not practising` |
| `worksAt` | Firm name(s) the person currently works at |
| `recordType`, `scrapedAt` | |

#### `firmDetails` mode — full firm profile (`recordType: "firm"`)

All search-mode firm fields, plus:

| Field | Description |
|---|---|
| `tradingNames[]` | All trading names on file |
| `previousNames[]` | Former registered names |
| `website` | Firm's website domain |
| `typeOfFirm` | e.g. `Recognised body since 16/04/2015, authorised for all legal services` |
| `regulator` | Regulating body (normally `Solicitors Regulation Authority`) |
| `regulatoryRecord` | Summary text of published regulatory/disciplinary decisions |
| `offices[]` | Every office: `officeName`, `address`, `phone`, `website`, `email` |
| `areasOfLaw[]` | Self-reported practice areas |
| `reservedActivities[]` | Reserved legal activities the firm is authorised to perform |
| `regulatedPeople[]` | Up to 25 SRA-regulated people at the firm (`name`, `status`, `worksAt`) |
| `regulatedPeopleCount` | Total count of regulated people (may exceed the 25 listed) |

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | select | `search` | `search` or `firmDetails` |
| `searchQuery` | string | `Irwin Mitchell` | Name, partial name, or SRA number (mode=search) |
| `searchType` | select | `all` | `all` / `firm` / `person` |
| `regulatedOnly` | boolean | `false` | Drop non-SRA-regulated firm results |
| `nameContains` | string | – | Extra case-insensitive substring filter on `name` |
| `sraNumbers` | array | – | SRA numbers to fetch full profiles for (mode=firmDetails) |
| `maxItems` | integer | `30` | Hard cap on emitted records (1–500) |

#### Example: search for a firm by name

```json
{
  "mode": "search",
  "searchQuery": "Irwin Mitchell",
  "searchType": "firm",
  "maxItems": 20
}
```

#### Example: search for solicitors by surname, regulated firms only

```json
{
  "mode": "search",
  "searchQuery": "smith",
  "searchType": "person",
  "maxItems": 50
}
```

#### Example: full firm profile lookup

```json
{
  "mode": "firmDetails",
  "sraNumbers": ["620674", "570654"]
}
```

### Use cases

- **Legal tech / KYC** — verify a solicitor or law firm is currently SRA-regulated before onboarding
- **Due diligence** — confirm a firm's registered offices, areas of law, and regulatory record
- **Market research** — map law firms by name, location, or practice area
- **Directory building** — power a "find a solicitor" search feature with authoritative data
- **Recruitment** — identify firms practising in a given area of law

### FAQ

**Where does this data come from?** The [SRA's public Solicitors Register](https://www.sra.org.uk/consumers/register/) — the same regulator-maintained data used by the Law Society's own "Find a Solicitor" tool.

**Can I search by SRA number instead of name?** Yes — pass the SRA number as `searchQuery` in `search` mode, or use `firmDetails` mode with `sraNumbers` for a full profile lookup.

**Why don't individual-solicitor records include a profile link?** The SRA's individual-solicitor detail pages are protected by an additional bot-mitigation challenge that isn't reliably reachable via automation; the actor only returns fields sourced from pages that are consistently and reliably accessible. Name, status, and firm affiliation for individuals are still fully populated from the search results and from each firm's own regulated-people list.

**Does `regulatedOnly` affect individual-solicitor results?** No — it only filters firm/organisation records. Some organisations appear in the register only because they employ an SRA-regulated person (e.g. an in-house legal team); `regulatedOnly: true` excludes those and keeps only firms whose own status is "SRA-regulated firm".

**Is there a limit on how many results I can get?** Yes, `maxItems` caps the run (max 500). The register itself returns up to roughly 1,000 results for a very broad query; narrow your `searchQuery` for more targeted results.

# Actor input Schema

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

What to fetch.

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

A solicitor/firm name, partial name, or SRA number, e.g. `Irwin Mitchell`, `smith`, `620674`.

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

Restrict results to law firms, individual solicitors, or both.

## `regulatedOnly` (type: `boolean`):

When true, drop firm results whose status is not 'SRA-regulated firm' (e.g. universities or other organisations that merely employ an SRA-regulated person). Has no effect on individual-solicitor results.

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

Extra client-side substring filter applied to the result name, case-insensitive.

## `sraNumbers` (type: `array`):

One or more firm/organisation SRA numbers to fetch full profiles for, e.g. `620674`. Find these via mode=search first.

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "Irwin Mitchell",
  "searchType": "all",
  "regulatedOnly": false,
  "sraNumbers": [],
  "maxItems": 20
}
```

# Actor output Schema

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

Dataset containing all scraped solicitor and firm 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",
    "searchQuery": "Irwin Mitchell",
    "searchType": "all",
    "regulatedOnly": false,
    "sraNumbers": [],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/sra-solicitors-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",
    "searchQuery": "Irwin Mitchell",
    "searchType": "all",
    "regulatedOnly": False,
    "sraNumbers": [],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/sra-solicitors-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",
  "searchQuery": "Irwin Mitchell",
  "searchType": "all",
  "regulatedOnly": false,
  "sraNumbers": [],
  "maxItems": 20
}' |
apify call crawlerbros/sra-solicitors-register-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/sra-solicitors-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/CvfGYYhW7P5GJ1XPi/builds/DIXF7IIM6aGkmStsc/openapi.json
