# BRAK German Lawyer Register Scraper (`jungle_synthesizer/bravsearch-brak-de-lawyer-register-scraper`) Actor

Extract attorney profiles — name, firm, address, bar chamber, and admission date — from BRAK bravsearch, Germany's official federal register of every admitted Rechtsanwalt/Rechtsanwältin.

- **URL**: https://apify.com/jungle_synthesizer/bravsearch-brak-de-lawyer-register-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation, Jobs, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## BRAK German Lawyer Register Scraper

Extracts attorney records from **bravsearch**, the Bundesrechtsanwaltskammer's (BRAK) official nationwide register of every lawyer (Rechtsanwalt/Rechtsanwältin) admitted to practice in Germany. Returns names, firm affiliations, office addresses, contact details, bar chamber, and admission dates. The default run covers the Berlin bar (~17,400 attorneys); the whole federal register — all 28 regional bars, ~194,000 attorneys — is one input change away.

***

### BRAK German Lawyer Register Scraper Features

- Defaults to the **Berlin bar** (one of Germany's largest, ~17,400 lawyers) for a fast first run — pick any other chamber, several chambers, or clear the list to crawl the **whole federal register** (all 28 Rechtsanwaltskammern, ~194,000 lawyers).
- Returns full name, professional title, law firm/employer, office address, city, postal code, bar chamber, and admission date on every record.
- Office phone and e-mail where the lawyer has chosen to publish them.
- Deduplicated, resumable runs — safe to cap with `maxItems` for a sample, or let a chamber (or the whole register) run to completion.

***

### Who Uses BRAK German Lawyer Register Data?

- **DACH legal lead-gen** — build targeted outreach lists of German attorneys by region or firm.
- **Legal recruiters** — source candidates across Germany's 28 regional bars.
- **Legal tech vendors** — feed verified, authoritative German attorney records into CRMs and compliance tools.
- **B2B sales to German law firms** — identify and segment firms by city or chamber.
- **Compliance and due diligence** — confirm bar admission and chamber membership against the official federal source.

***

### How BRAK German Lawyer Register Scraper Works

1. By default the scraper crawls the Berlin bar (`chambers: ["B"]`) — fast, and representative of a major chamber's full data shape.
2. Pick one or more of the 28 regional bars instead (München, Hamburg, Köln, and so on), or clear `chambers` to `[]` to crawl the entire federal register.
3. Set `maxItems` to cap output, or leave it unset for a complete run of whatever scope you picked.
4. The scraper returns one record per attorney, enriched with firm, address, chamber, and admission date.

***

### Input

```json
{
  "maxItems": 1000,
  "chambers": ["B", "M"]
}
```

| Field      | Type             | Default | Description |
|------------|------------------|---------|-------------|
| `maxItems` | integer          | `10`    | Maximum number of records to return. The run stops as soon as the target is hit. |
| `chambers` | array of strings | `["B"]` | Regional bars (Rechtsanwaltskammern) to include — e.g. `B` (Berlin), `M` (München), `HH` (Hamburg). Defaults to Berlin alone. Clear this list (`[]`) to crawl all 28 chambers (the whole federal register). |

***

### BRAK German Lawyer Register Scraper Output Fields

```json
{
  "id": "DE.BRAK.b422517c-a4fc-448a-8627-41e559946967.4531",
  "url": "https://bravsearch.bea-brak.de/bravsearch/index.xhtml",
  "full_name": "Nadine Abbate",
  "title": "Rechtsanwältin",
  "firm_name": null,
  "address": "Max-Fromm-Str. 22",
  "city": "Kitzingen",
  "postal_code": "97318",
  "phone": "0170-7931760",
  "email": "N.Abbate@gmx.de",
  "specializations": null,
  "chamber": "Bamberg",
  "admission_date": "2004-09-08",
  "scrapedAt": "2026-10-15T07:40:41.702Z"
}
```

| Field             | Type   | Description                                                                                   |
|-------------------|--------|-----------------------------------------------------------------------------------------------|
| `id`              | string | Stable identifier for this record.                                                            |
| `url`             | string | Canonical source URL for the register.                                                        |
| `full_name`       | string | Attorney full name, as published by BRAK.                                                     |
| `title`           | string | Professional title (e.g. `Rechtsanwalt`, `Rechtsanwältin`).                                   |
| `firm_name`       | string | Law office or employer name, where published. Many solo practitioners publish none.           |
| `address`         | string | Office street address.                                                                        |
| `city`            | string | Office city.                                                                                  |
| `postal_code`     | string | Office postal code.                                                                           |
| `phone`           | string | Office telephone or mobile number, where published.                                           |
| `email`           | string | Office e-mail address, where published.                                                       |
| `specializations` | string | Fachanwalt specialization title, where the lawyer holds one. Sparse — most lawyers hold none. |
| `chamber`         | string | Regional Rechtsanwaltskammer (bar) this lawyer is admitted under.                             |
| `admission_date`  | string | Date of admission to the bar, ISO-8601 where parseable.                                       |
| `scrapedAt`       | string | ISO-8601 timestamp when the record was scraped.                                               |

***

### FAQ

#### What is bravsearch?

Bravsearch is BRAK's official, nationwide directory of every lawyer admitted to practice in Germany — Rechtsanwälte, Rechtsanwältinnen, European lawyers established under § 206 BRAO, and registered legal advisers (Rechtsbeistände). It's the authoritative source: every admitted German lawyer must be listed.

#### Does this cover the whole country?

The whole federal register is reachable, but the default run covers one chamber (Berlin) for a fast first result. Germany's bar is organized into 28 regional chambers (27 regional Rechtsanwaltskammern plus the Bundesgerichtshof bar); clear `chambers` to `[]` to crawl all of them in one run.

#### How much does it cost?

Pay-per-event pricing: a small per-start fee plus a per-record charge. Cap `maxItems` for a sample run, or leave it unset to pull a whole chamber or the full register.

#### Why are `phone`, `email`, `firm_name`, and `specializations` sometimes empty?

Because the register itself doesn't require them. A solo practitioner with no Fachanwalt title and no published phone/e-mail will show blanks on those fields — that's the real state of the source record, not a scraping gap.

#### Can I search by a specific chamber?

Yes — pass one or more chamber codes in `chambers` (e.g. `["M"]` for München). Clear the list (`[]`) for the full federal register instead of the Berlin default.

#### How long does a full run take?

The default run (Berlin, ~17,400 lawyers, no `maxItems` cap) is measured at roughly half an hour. Crawling the whole federal register (all 28 chambers — clear `chambers` to `[]`) is measured at roughly 6 hours, running unattended start to finish. Set `maxItems` for a faster, smaller pull on either scope.

***

### Need More Features?

Need a different field set, or another German legal/business register? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use BRAK German Lawyer Register Scraper?

- **Authoritative** — the official federal register, not a third-party aggregator.
- **Complete German coverage available** — all 28 regional bars, ~194k attorneys total, one schema; start with the fast Berlin default or pull the whole register.
- **Rich fields** — firm, chamber, and admission date alongside contact details, where published.
- **Affordable** — pay-per-event pricing means you pay for records, not compute time.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `resumeCursor` (type: `string`):

Leave empty for a fresh crawl. To CONTINUE a previous run where it stopped — without paying again for records you already received — paste the `resumeCursor` value from that run's Output (the run's OUTPUT key). Resume promptly: the previous run's data expires with your account's retention window (free tier: your ~10 most recent runs).

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

Maximum number of items to scrape

## `chambers` (type: `array`):

Defaults to Berlin (the B bar) for a fast, representative default run. Pick other/additional chambers, or clear this list (empty array) to crawl the whole federal register — all 28 bars, a much longer run. See the README for a measured full-register runtime estimate.

## Actor input object example

```json
{
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "chambers": [
    "B"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "sp_contact": "Share your email here...",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/bravsearch-brak-de-lawyer-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 = {
    "sp_contact": "Share your email here...",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/bravsearch-brak-de-lawyer-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 '{
  "sp_contact": "Share your email here...",
  "maxItems": 10
}' |
apify call jungle_synthesizer/bravsearch-brak-de-lawyer-register-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/bravsearch-brak-de-lawyer-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/fgR4nfaXrp1JOxzjo/builds/lrfhzZfy5V4kbN7Lu/openapi.json
