# FINRA BrokerCheck Scraper: Brokers and Advisers (`parselab/finra-brokercheck-scraper`) Actor

Scrape FINRA BrokerCheck for brokers, investment advisers and firms by name, CRD, firm, state or city. Get employment history, branch location, exams, registered states, disciplinary disclosures with details, years in the industry and firm size. Export to CSV or Excel.

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

## Pricing

from $16.50 / 1,000 results

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

## FINRA BrokerCheck Scraper: Brokers and Advisers

This FINRA BrokerCheck scraper reads the public records that FINRA keeps on every registered broker, investment adviser and brokerage firm in the United States. Search by name, CRD number, firm, state or city and get one clean row per person or per firm: where they work, how long they have been in the industry, which exams they passed, which states they are registered in, and every disciplinary or financial disclosure with its details.

A person row carries much more than a name and a firm. You get the registration type (broker, investment adviser or both), the date they entered the industry and the years since, the current firm and branch with address and coordinates, whether the person works from a private residence, the full employment history with dates and locations, how many firms they worked for, the exams with dates (Series 7, 63, 65, 66, 24, SIE and more) and flags for the common ones, the states where they are registered, and the disclosures: customer disputes, regulatory events, terminations, criminal and civil matters, financial events such as liens, with date, resolution and the text of the case. A firm row adds size, type, status, formation date, office address, phone, number of registered representatives, owners, registered states and counts of disclosures by type.

Compliance teams, recruiters, wealth management firms, due diligence providers, journalists and investors use it to check advisers, to build lead lists and to monitor firms.

### What can you do with this BrokerCheck scraper?

- Check a broker or adviser by name or CRD number before you work with them
- List all representatives of a firm in a state or city, with their branch address
- Find advisers with customer disputes, regulatory events or terminations
- Find people with a clean record and more than ten years in the industry
- Find new advisers with a Series 65 or Series 66 license in a city
- Review the employment history of a person: how many firms and how long at each
- Look at barred brokers by name
- Profile a firm: size, owners, states, disclosures and how many representatives it has
- Build lead lists of advisers by city, firm and experience
- Export BrokerCheck data to CSV or Excel, or send it to your CRM

### What data can you extract from BrokerCheck?

| Mode | One row is | Highlights |
|---|---|---|
| Brokers and advisers | One person | Name and other names, CRD, registration type, industry start date and years in the industry, current firm and CRD, date registered with the firm and years there, branch street, city, state, ZIP, latitude and longitude, private residence flag, all current firms with branches, previous firms with dates and places, number of firms ever, exams with dates and scope, flags for Series 7, 63, 65, 66, 24 and SIE, registered states and count, registered exchanges, disclosure count, types, counts by type, flags for customer disputes, regulatory events, terminations, criminal, civil and financial matters, latest disclosure date, the full text of every disclosure, BrokerCheck link |
| Firms | One firm | Name and other names, CRD, registration type, firm type and size, status, regulator, FINRA district, state and date of formation, years in business, SEC numbers, office address and phone, number of active representatives, disclosure counts by type, registered states, owners and officers with their positions, BrokerCheck link |

### How to scrape FINRA BrokerCheck

1. Choose **Brokers and advisers** or **Firms**.
2. Enter names or CRD numbers. In the advisors mode you can also enter a firm and a state or city to list the people who work there.
3. Pick the registration status: currently registered, no longer registered, barred or all.
4. Optionally filter by disclosures, years in the industry or exams.
5. Set **Max Items** and click **Start**.
6. Export the dataset as CSV, Excel or from the Apify console.

### Input example

```json
{
  "mode": "advisors",
  "firmCrds": ["7452"],
  "states": ["NC"],
  "status": "active",
  "onlyWithDisclosures": true,
  "maxItems": 100
}
```

### Person output example (illustrative values)

```json
{
  "crd": "1234567",
  "fullName": "Jane Q Example",
  "registrationStatus": "Broker and investment adviser",
  "yearsInIndustry": 18.4,
  "currentFirmName": "EXAMPLE SECURITIES LLC",
  "currentFirmCrd": "99999",
  "yearsAtCurrentFirm": 6.2,
  "branchCity": "Charlotte",
  "branchState": "NC",
  "hasSeries7": true,
  "hasSeries63": true,
  "hasSeries65": false,
  "registeredStateCount": 12,
  "firmsEver": 3,
  "disclosureCount": 1,
  "disclosureTypes": ["Customer Dispute"],
  "brokerCheckUrl": "https://brokercheck.finra.org/individual/summary/1234567"
}
```

### Firm output example

```json
{
  "crd": "250",
  "firmName": "EDWARD JONES",
  "registrationStatus": "Broker and investment adviser",
  "firmSize": "Large",
  "status": "Approved",
  "regulator": "SEC",
  "finraDistrict": "Kansas City",
  "formedState": "Missouri",
  "formedDate": "1941-02-20",
  "yearsInBusiness": 85.6,
  "officeCity": "St. Louis",
  "officeState": "MO",
  "activeRepresentatives": 25373,
  "disclosureCounts": { "Regulatory Event": 183, "Civil Event": 2, "Arbitration": 150 },
  "totalDisclosures": 335,
  "registeredStateCount": 53,
  "brokerCheckUrl": "https://brokercheck.finra.org/firm/summary/250"
}
```

### How much does it cost to scrape BrokerCheck?

You pay per result: $22 per 1,000 rows plus a tiny start fee. The free plan returns up to 10 rows per run. A firm profile is one row, so profiling 100 firms costs a few cents.

### Tips for better results

- A single search returns at most 10,000 people. For a large firm, split the search by state or city.
- A search for a common surname returns thousands of people. Add a first name, a state or a firm to narrow it down.
- Turn off **Add the full record** for a fast list with names, firms and locations. The disclosure filter then uses the flag that the search already gives.
- Disclosures are reported by firms and regulators. A disclosure is not a finding of wrongdoing, and many customer disputes are settled or dismissed. Read the details and the resolution.
- The years in the industry count from the first registration date that FINRA shows. People who have been registered only as advisers may have no date.
- The branch coordinates are the registered branch address. Some people work from a private residence, which the flag shows.
- Firm owners and officers are listed as FINRA shows them.

### Who uses BrokerCheck data?

- **Compliance and due diligence teams** screen advisers and counterparties.
- **Recruiters** find experienced advisers and new licensees.
- **Wealth management firms** build prospect lists by city and firm.
- **Journalists and researchers** study discipline across firms.
- **Investors and consumers** check who manages their money.

### Automate and connect

Schedule the Actor weekly with your watchlist and send the results to Google Sheets, Slack, Zapier, Make or n8n, or trigger a webhook when a run ends.

### FAQ

**Do I need a FINRA account?**
No. The Actor works without any login.

**Is the data official?**
It comes from FINRA BrokerCheck, which shows the records of the Central Registration Depository. Check the BrokerCheck page for the latest state of a record.

**Does it include investment advisers that are not brokers?**
Yes. Advisers and brokers are both returned, and the registration type tells them apart.

**What does a disclosure mean?**
A disclosure is an event that the broker, the firm or a regulator reported, such as a customer dispute, a regulatory action, a termination or a financial matter. It is not always a finding against the person.

**Why do I get fewer people than the firm has?**
A search shows at most 10,000 people. Split large firms by state or city, and note that the status filter keeps only registered people by default.

**Can I search by city?**
Yes, in the advisors mode, for the city of the branch where the person works.

**Is this legal or financial advice?**
No. BrokerCheck records are public information. Use them as one input among many and follow the rules of your jurisdiction for how you use personal data.

### Legal note

This Actor collects information that is publicly visible on the website. Check the source site's terms and your local rules before using the data, especially rules on personal data and on contacting people. Nothing here is legal or financial advice.

### Support

Missing a field or found a bug? Open an issue from the Actor page.

# Actor input Schema

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000.

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

Advisors returns one row per broker or investment adviser with employment history, exams, registrations and disciplinary disclosures. Firms returns one row per brokerage or advisory firm with size, owners, disclosures and number of representatives.

## `names` (type: `array`):

Names of people (for example John Smith or just Smith) in the advisors mode, or names of firms (for example Edward Jones) in the firms mode. One search is run for each name.

## `crds` (type: `array`):

FINRA CRD numbers of people (advisors mode) or firms (firms mode), for example 6808119. Use them when you know the exact record.

## `firmNames` (type: `array`):

Names of firms whose representatives you want, for example Vanguard Marketing or Edward Jones. The closest firms are used. Leave the names empty to list everyone at the firm.

## `firmCrds` (type: `array`):

CRD numbers of firms whose representatives you want, for example 7452.

## `states` (type: `array`):

Two letter state codes. In the advisors mode it is the state of the branch where the person works. In the firms mode it is the state of the firm office.

## `cities` (type: `array`):

City of the branch where the person works, for example Charlotte. Use with a state for best results.

## `status` (type: `string`):

Currently registered people, people who left the industry, people who were barred, or all of them.

## `registration` (type: `string`):

Brokers, investment advisers, or both.

## `onlyWithDisclosures` (type: `boolean`):

Keep only people or firms that have disciplinary or financial disclosures, such as customer disputes, regulatory events, terminations or liens.

## `disclosureTypes` (type: `array`):

Keep only people with these kinds of disclosure, for example Customer Dispute, Regulatory, Termination, Criminal, Civil Judicial or Financial. Any match keeps the person.

## `minYearsInIndustry` (type: `number`):

Keep only people with at least this many years since they entered the industry.

## `maxYearsInIndustry` (type: `number`):

Keep only people with at most this many years in the industry. Useful to find newer advisers.

## `requiredExams` (type: `array`):

Keep only people who passed all of these exams, for example Series 7, Series 66 or Series 65.

## `includeDetails` (type: `boolean`):

Adds employment history, exams, registered states and disclosures (people) or owners, registrations and disclosure counts (firms). One extra request per result. Turn off for a fast list.

## `includeDisclosureDetails` (type: `boolean`):

Adds the date, resolution and the details of every disclosure, including comments written by the broker.

## Actor input object example

```json
{
  "maxItems": 10,
  "mode": "advisors",
  "names": [
    "John Smith"
  ],
  "status": "active",
  "registration": "any",
  "onlyWithDisclosures": false,
  "includeDetails": true,
  "includeDisclosureDetails": true
}
```

# Actor output Schema

## `overview` (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 = {
    "maxItems": 10,
    "names": [
        "John Smith"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("parselab/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 = {
    "maxItems": 10,
    "names": ["John Smith"],
}

# Run the Actor and wait for it to finish
run = client.actor("parselab/finra-brokercheck-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 '{
  "maxItems": 10,
  "names": [
    "John Smith"
  ]
}' |
apify call parselab/finra-brokercheck-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parselab/finra-brokercheck-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/VcbQEfd28syJCMds4/builds/VTLtpCdn1H9PfcFkl/openapi.json
