# FINRA BrokerCheck Scraper (`gio21/finra-brokercheck-scraper`) Actor

Scrape FINRA BrokerCheck broker, advisor and firm data: name, CRD number, registrations, disclosures, employment history, exams and licenses. Search by name, CRD or firm. No login required.

- **URL**: https://apify.com/gio21/finra-brokercheck-scraper.md
- **Developed by:** [Gio](https://apify.com/gio21) (community)
- **Categories:** Business, Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## FINRA BrokerCheck Scraper

Extract structured broker, investment advisor and firm data from [FINRA BrokerCheck](https://brokercheck.finra.org), the official U.S. registry of securities professionals. Search by name, CRD number or firm, filter by location, and optionally pull each broker's full record: employment history, disclosures, exams and state registrations.

Built for financial-industry research, compliance checks, recruiting, lead generation and due diligence.

### Features

- **Individual search** - brokers and investment advisors by name or CRD number
- **Firm search** - broker-dealers and advisory firms by name or CRD
- **Firm filter** - only individuals registered with a specific firm (name or CRD; the name is resolved to a CRD automatically)
- **Location filter** - city and/or 2-letter state of the registered branch office
- **Previously registered** - include or exclude professionals no longer in the industry
- **Full broker details (optional)** - employment history, disclosure events, exams passed (state / principal / product), registered states and SROs
- Fast, pure API scraping, no browser, no login

### Input

| Field | Type | Description |
|-------|------|-------------|
| `searchType` | select | `individual` (default) or `firm`. |
| `query` | string | Name, firm name, or CRD number. Required. |
| `firmName` | string | Only individuals registered with this firm. Resolved to a CRD automatically. |
| `firmCrd` | string | Only individuals registered with the firm having this exact CRD. Takes priority over `firmName`. |
| `city` | string | Branch-office city filter (e.g. "New York"). |
| `state` | string | Branch-office state filter, 2-letter code (e.g. "NY"). |
| `includePrevious` | boolean | Include no-longer-registered professionals. Default `true`. |
| `includeBrokerDetails` | boolean | Fetch the full record per individual (extra charge per record). Default `false`. |
| `maxItems` | integer | Max results. `0` means no limit. Default `100`. |

#### Example input

```json
{
  "searchType": "individual",
  "query": "Smith",
  "firmName": "Morgan Stanley",
  "state": "NY",
  "includeBrokerDetails": true,
  "maxItems": 50
}
```

### Output

One dataset item per broker or firm:

```json
{
  "recordType": "individual",
  "crd": "6658650",
  "fullName": "DAVID CHARLES SMITH",
  "bcScope": "Active",
  "iaScope": "NotInScope",
  "hasDisclosures": false,
  "currentFirm": "TRUIST SECURITIES, INC.",
  "currentFirmCrd": "6271",
  "branchCity": "NEW YORK",
  "branchState": "NY",
  "yearsInIndustry": 8.2,
  "brokerCheckUrl": "https://brokercheck.finra.org/individual/summary/6658650"
}
```

With `includeBrokerDetails` on, a `detail` object is added with `previousEmployments`, `disclosures`, `stateExams`, `principalExams`, `productExams`, `registeredStates` and `registeredSROs`.

### Common use cases

- Compliance and KYC: verify registrations and check disclosure history
- Recruiting: find advisors at a specific firm, city or state
- Lead generation: build lists of active brokers by region
- Market research: analyze firm headcounts and advisor movement
- Due diligence on financial professionals before investing

### Pricing

Pay per result: a small fee to start the run, a per-result fee for each broker or firm returned, and a separate per-record fee when full broker details are enabled. Errors are never charged.

### FAQ

**Is this legal?** BrokerCheck is a free public registry operated by FINRA specifically so the public can research brokers. This Actor only accesses publicly available data.

**Can I look up one specific broker?** Yes, search their CRD number as the query.

**Why do firm-filtered results include people at other firms?** FINRA's firm filter matches current and past employees of the firm. Set `includePrevious` to `false` to require the current firm to match.

**Is this affiliated with FINRA?** No. This is an independent tool for extracting publicly available data.

# Actor input Schema

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

Search individual brokers/advisors or brokerage firms.

## `query` (type: `string`):

Broker/advisor name, firm name, or CRD number (e.g. "Smith", "Morgan Stanley", "810315").

## `firmName` (type: `string`):

Only return individuals registered with this firm (e.g. "Morgan Stanley"). The firm is resolved to its FINRA CRD automatically; the broker-dealer with the most registered reps is used when several match.

## `firmCrd` (type: `string`):

Only return individuals registered with the firm having this exact CRD number (e.g. "149777"). Takes priority over the firm name filter.

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

Only return individuals whose registered branch office is in this city (e.g. "New York"). Applied after fetching, so runs may scan more results than they return.

## `state` (type: `string`):

Only return individuals whose registered branch office is in this US state, 2-letter code (e.g. "NY", "CA"). Applied after fetching.

## `includePrevious` (type: `boolean`):

Include brokers/advisors who are no longer registered.

## `includeBrokerDetails` (type: `boolean`):

Fetch each individual's full BrokerCheck record: employment history, disclosures, exams passed, registered states and SROs. One extra API call per individual, billed as a separate "Broker Detail" event.

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

Maximum number of results to return. Set 0 for no limit (the public API caps deep pagination at a few thousand results per query).

## Actor input object example

```json
{
  "searchType": "individual",
  "query": "Smith",
  "includePrevious": true,
  "includeBrokerDetails": false,
  "maxItems": 100
}
```

# 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 = {
    "searchType": "individual",
    "query": "Smith"
};

// Run the Actor and wait for it to finish
const run = await client.actor("gio21/finra-brokercheck-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 = {
    "searchType": "individual",
    "query": "Smith",
}

# Run the Actor and wait for it to finish
run = client.actor("gio21/finra-brokercheck-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 '{
  "searchType": "individual",
  "query": "Smith"
}' |
apify call gio21/finra-brokercheck-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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