# UK Architect Register Scraper (`crawlerbros/uk-architect-register-scraper`) Actor

Scrape the official UK Architects Register (ARB) - search 30,000+ registered architects by name, practice, address, country, website or email, or look up specific architects by registration number. Get full contact details including telephone, website and email.

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

Scrape the official **UK Architects Register** — the statutory record maintained by the Architects Registration Board (ARB) of every person legally entitled to use the protected title "architect" in the United Kingdom. Search 30,000+ registered architects by name, practice, address, country, website or email — or look up specific architects by their registration number. Get name, practice, address, country, and (where published) telephone, website and email. No login, no cookies, no paid proxy.

### What this actor does

- **Two modes:** `search` (combinable filters across the whole register) and `byRegistrationNumber` (exact lookup for one or more known ARB numbers)
- **Combinable filters:** forename, surname, practice/company name, address, country, website, email, and distance-from-UK-postcode — any combination, all substring/contains matching (postcode filter is proximity-based)
- **265-country enum:** covers every country the register uses, including UK home-nation variants (England/Scotland/Wales/Northern Ireland, United Kingdom)
- **Sort control:** first name, surname or practice name, ascending or descending
- **Optional contact-detail enrichment:** visits each architect's profile page to also capture telephone, website and email where the architect has published them
- **Handles privacy opt-outs correctly:** architects who conceal their address are returned with just their name, registration number and country — never with fabricated placeholder data
- **Empty fields are omitted** — every record only contains fields the register actually has data for

### Output per architect

- `registrationNumber` — ARB registration number (e.g. `095726G`)
- `fullName`
- `practiceName` — registered practice / employer (e.g. `Foster + Partners`, or `Self Employed`)
- `addressLine` — registered address (excluding country)
- `country`
- `isAddressConcealed` — `true` if the architect has opted to keep their address private (ARB privacy option)
- `telephone` — only when `fetchContactDetails` is on and the architect has published one
- `website` — only when `fetchContactDetails` is on and the architect has published one
- `email` — only when `fetchContactDetails` is on and the architect has published one
- `registerUrl` — canonical profile page on architects-register.org.uk
- `recordType: "architect"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | `search` / `byRegistrationNumber` |
| `architectForename` | string | – | Forename contains (mode=search) |
| `architectSurname` | string | – | Surname contains (mode=search) |
| `practiceName` | string | – | Practice/company name contains (mode=search) |
| `address` | string | – | Address contains (mode=search) |
| `country` | select | – | One of 265 countries the register uses |
| `website` | string | – | Website contains (mode=search) |
| `email` | string | – | Email contains (mode=search) |
| `postcode` | string | – | Find architects near this UK postcode, full or partial (mode=search) |
| `radiusMiles` | int | `50` | Search radius in miles from `postcode` (1–100); ignored unless `postcode` is set |
| `sortBy` | select | default order | `firstNameAsc/Desc`, `surnameAsc/Desc`, `practiceNameAsc/Desc` |
| `registrationNumbers` | array | – | ARB numbers to look up (mode=byRegistrationNumber), format `095726G` |
| `fetchContactDetails` | bool | `true` | Also fetch telephone/website/email from each profile page |
| `maxItems` | int | `20` | Hard cap (1–1000) |

At least one filter (`architectForename`, `architectSurname`, `practiceName`, `address`, `country`, `website`, `email` or `postcode`) must be supplied in `search` mode.

#### Example: search architects in a city

```json
{
  "mode": "search",
  "address": "Manchester",
  "country": "United Kingdom",
  "sortBy": "surnameAsc",
  "maxItems": 100
}
```

#### Example: find a practice's registered architects

```json
{
  "mode": "search",
  "practiceName": "Foster + Partners",
  "fetchContactDetails": true
}
```

#### Example: verify specific registration numbers

```json
{
  "mode": "byRegistrationNumber",
  "registrationNumbers": ["095726G", "032702F"]
}
```

#### Example: architects registered overseas

```json
{
  "mode": "search",
  "country": "France"
}
```

#### Example: architects near a UK postcode

```json
{
  "mode": "search",
  "postcode": "SW1A 1AA",
  "radiusMiles": 10,
  "sortBy": "surnameAsc"
}
```

### Use cases

- **Due diligence** — verify a contractor or consultant genuinely holds ARB registration before signing a contract
- **Lead generation** — build lists of architects/practices by region, country or specialism-adjacent practice name
- **Fraud prevention** — the ARB itself recommends checking the register before commissioning any "architect" service, since the title is legally protected in the UK
- **Market research** — analyse practice concentration by city, region or country
- **Recruitment** — find registered architects by geography for hiring outreach
- **Compliance / procurement** — bulk-verify a supplier panel's registration numbers

### Limitations

- `telephone`, `website` and `email` are only returned when the architect has chosen to publish them on their public profile; the ARB does not require architects to provide these, so many records will not have all three.
- A small number of registered architects have no country recorded at all (a genuine data gap on the register itself, not something this actor can fill in) — `country` is simply omitted for those records rather than guessed.
- Text filters (forename/surname/practice/address/website/email) that contain **only** non-Latin characters (e.g. pure CJK) are not reliably narrowed by the register's own search backend — it appears to fall back to an unfiltered result set for values its collation can't match. This is upstream behaviour (verified directly against the register's API, independent of this actor), not something this actor introduces or can correct client-side. Latin-script text filters, including accented characters, work correctly.

### FAQ

**What's the Architects Register?** The definitive, legally-mandated record of every UK architect, maintained by the Architects Registration Board (ARB). If someone isn't on the register, they cannot lawfully call themselves an "architect" in the UK. See [architects-register.org.uk](https://www.architects-register.org.uk).

**Is the data official?** Yes — this actor scrapes the ARB's own public register directly, the same one referenced by [arb.org.uk](https://arb.org.uk).

**Why do some records have no `practiceName` or `addressLine`?** Architects can opt to keep their address private for personal safety reasons. Those records still return name, registration number, `isAddressConcealed: true`, and country where available — never a fabricated address.

**What does `isAddressConcealed` mean?** `true` means the architect has used the ARB's privacy option; their full company/address details are not published on the register at all, so this actor cannot recover them either.

**How do I find a registration number to look up?** Run `mode=search` first (by name, practice, or location) — every result includes `registrationNumber`, which you can then feed into `mode=byRegistrationNumber` for a direct, guaranteed lookup.

**Does the search match accents/case?** Yes — matching is case-insensitive and (per the register's own database collation) accent-insensitive, so `jose` will also match `José`.

**How fresh is the data?** The register is the ARB's live, authoritative database — every run reads the current, real-time state of the register, not a cached snapshot.

# Actor input Schema

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

What to fetch.

## `architectForename` (type: `string`):

Match architects whose first/given name contains this text (case-insensitive).

## `architectSurname` (type: `string`):

Match architects whose surname contains this text (case-insensitive).

## `practiceName` (type: `string`):

Match architects whose registered practice/company name contains this text.

## `address` (type: `string`):

Match architects whose registered address contains this text (e.g. a city or postcode).

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

Filter to architects registered with an address in this country.

## `website` (type: `string`):

Match architects whose registered website contains this text (e.g. a domain).

## `email` (type: `string`):

Match architects whose registered email address contains this text (e.g. a domain like `gmail.com`).

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

Find architects registered near this UK postcode (full or partial, e.g. `SW1A 1AA` or `SW1A`). Combine with radiusMiles to control the search radius. Matches the register's own "Distance from UK postcode" advanced search.

## `radiusMiles` (type: `integer`):

Search radius in miles from `postcode`. Ignored unless `postcode` is also set.

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

Order of returned results. Default is the register's own (effectively randomised) order.

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

ARB registration numbers to look up (format: 6 digits + 1 letter, e.g. `095726G`). Find these via mode=search first.

## `fetchContactDetails` (type: `boolean`):

Visit each architect's profile page to also capture telephone, website and email where published. Adds one extra request per record.

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "search",
  "country": "United Kingdom",
  "radiusMiles": 50,
  "sortBy": "surnameAsc",
  "registrationNumbers": [],
  "fetchContactDetails": true,
  "maxItems": 20
}
```

# Actor output Schema

## `architects` (type: `string`):

Dataset containing all scraped architect 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",
    "country": "United Kingdom",
    "radiusMiles": 50,
    "sortBy": "surnameAsc",
    "registrationNumbers": [],
    "fetchContactDetails": true,
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/uk-architect-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",
    "country": "United Kingdom",
    "radiusMiles": 50,
    "sortBy": "surnameAsc",
    "registrationNumbers": [],
    "fetchContactDetails": True,
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/uk-architect-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",
  "country": "United Kingdom",
  "radiusMiles": 50,
  "sortBy": "surnameAsc",
  "registrationNumbers": [],
  "fetchContactDetails": true,
  "maxItems": 20
}' |
apify call crawlerbros/uk-architect-register-scraper --silent --output-dataset

```

## MCP server setup

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