Nimbryxo Studio

Use Bar Standards Board Barrister Register Scraper with Python

Search the Bar Standards Board's official Barristers' Register for England & Wales by name or chambers, filter by practising status, area of practice, or public access, and browse disciplinary findings and suspensions.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "areasOfPractice": [],
  "authorisedToConductLitigation": "any",
  "disciplinaryActionType": [],
  "entityStatus": [],
  "fetchFullProfile": false,
  "findingDateRange": "",
  "findingStatus": [],
  "findingType": [],
  "maxItems": 1,
  "mode": "search",
  "practisingStatus": [],
  "publicAccessRegistered": "any",
  "registerView": "practising",
  "searchField": "name",
  "searchQuery": "smith",
  "sortOrder": "recent",
  "startUrls": [
    "https://www.barstandardsboard.org.uk/barristers-register/7C5DCA7B263721A6CB12F687568766BD.html"
  ]
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
modestringrequiredWhat to fetch from the Bar Standards Board register.
searchQuerystringoptionalFor mode=search: barrister name or chambers/organisation name (required). For mode=authorisedBarristers: optional name/chambers filter over the full register. For mode=disciplinaryFindings: optional barrister name filter — leave empty to browse all findings. For mode=entities: optional entity/trading name filter — leave empty to include all entities.
searchFieldstringoptionalWhether `searchQuery` matches the barrister's name or their chambers/organisation (mode=search and mode=authorisedBarristers).
registerViewstringoptional`Practising` = currently authorised practising barristers. `Sanctioned non-practising` = barristers disbarred or otherwise sanctioned who are no longer authorised to practise.
practisingStatusarrayoptionalRestrict to barristers with these practising statuses. Leave empty for all statuses. Applies to mode=search (practising view only) and mode=authorisedBarristers.
areasOfPracticearrayoptionalRestrict to barristers practising in ANY of these areas of law. Leave empty for all areas. Applies to mode=search (practising view only) and mode=authorisedBarristers.
publicAccessRegisteredstringoptionalFilter by whether the barrister is registered to accept work directly from the public (Public Access scheme). Applies to mode=search (practising view only) and mode=authorisedBarristers.
authorisedToConductLitigationstringoptionalFilter by whether the barrister is authorised to conduct litigation. Applies to mode=search (practising view only) and mode=authorisedBarristers.
sortOrderstringoptionalHow to order the disciplinary findings listing.
findingStatusarrayoptionalRestrict to disciplinary findings with these statuses. Leave empty for all statuses.
disciplinaryActionTypearrayoptionalRestrict to findings with ANY of these sanction types. Leave empty for all types.
findingTypearrayoptionalRestrict to findings from ANY of these hearing types. Leave empty for all types.
findingDateRangestringoptionalRestrict findings to a decision-date window. `custom` uses `findingDateFrom`/`findingDateTo`. The window is applied to each finding's decision date.
findingDateFromstringoptionalStart of the custom decision-date range, format `YYYY-MM-DD` (e.g. `2020-01-01`).
findingDateTostringoptionalEnd of the custom decision-date range, format `YYYY-MM-DD` (e.g. `2020-12-31`).
entityStatusarrayoptionalRestrict to BSB-regulated entities with these authorisation statuses. Leave empty for all statuses.
startUrlsarrayoptionalFull barstandardsboard.org.uk barrister-register or disciplinary_finding URLs to fetch directly.
fetchFullProfilebooleanoptionalFor mode=search and mode=disciplinaryFindings: fetch each record's full detail page for additional fields (chambers address, areas of practice, rights of audience, breach/offence details, etc). Uses one extra HTTP request per record. Not used by mode=authorisedBarristers (the CSV already contains the full record).
maxItemsintegeroptionalHard cap on the number of records emitted in this run. The full authorised-practising register currently has about 18,700 rows.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/5BKeN2aUL19MTrry1/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

Barristers, past disciplinary findings, interim suspensions and BSB-regulated entities from the Bar Standards Board's official public register (barstandardsboard.org.uk).

Questions before you run

Which inputs are required?

The published required fields are mode

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build pxEtWDylYNl6lItlw and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.