# FINRA BrokerCheck Scraper — Advisors, Brokers & Firms (`haketa/finra-brokercheck-scraper`) Actor

Scrape FINRA BrokerCheck: US financial advisors, brokers and firms with name, CRD number, broker/advisor registration scope, disclosure flag, years in industry, current firm and location. Search by name, CRD or firm. For KYC, due diligence and advisor lead gen. Not affiliated with FINRA.

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

## Pricing

from $2.00 / 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 — Advisors, Brokers, Firms, CRD & Disclosures

> **The premier FINRA BrokerCheck scraper for financial advisor lead generation, broker-dealer recruiting, and automated KYC compliance verification.** Query the official [BrokerCheck](https://brokercheck.finra.org/) registry by individual advisor name, registered representative CRD number, or advisory firm name. Extract comprehensive profile records: full legal names, Central Registration Depository (CRD) numbers, broker and investment adviser registration scopes, disclosure flags, industry experience tenure, current employer firms, branch addresses, and canonical profile links.
>
> Export thousands of records seamlessly to **JSON, CSV, Excel, or direct API integration**.

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-orange.svg)](https://apify.com/haketa/finra-brokercheck-scraper)
[![FINRA Registry](https://img.shields.io/badge/FINRA-BrokerCheck-003366.svg)](https://brokercheck.finra.org/)
[![Lead Generation](https://img.shields.io/badge/Lead%20Gen-Financial%20Advisors-2da44e.svg)]()
[![Compliance & KYC](https://img.shields.io/badge/KYC-Due%20Diligence-8250df.svg)]()
[![Export Formats](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-fb8500.svg)]()
[![Pagination](https://img.shields.io/badge/Pagination-1%2C000%2B%20Deep%20Crawl-brightgreen.svg)]()

> Designed for **compliance officers**, **KYC & AML analysts**, **RIA and wealth management recruiters**, **fintech onboarding engineers**, **investment researchers**, and **B2B sales teams** targeting licensed financial professionals across the United States.

***

### ⚡ At a glance

| Capability | Feature Details |
|---|---|
| **Target Registry** | FINRA BrokerCheck — official US Central Registration Depository (CRD) public database |
| **Search Modes** | 2-in-1: **Individuals** (brokers, investment advisers, wealth managers) & **Firms** (brokerages, RIAs) |
| **Query Parameters** | Search by full name, surname, firm name (e.g. `"Morgan Stanley"`), or specific numeric CRD identifier |
| **Key Risk Signals** | Flags disciplinary history, regulatory disclosures, customer disputes, civil liens, and bankruptcies (`hasDisclosures`) |
| **Tenure & Seniority** | Automatically computes industry tenure in days and years (`industryYears`) from initial licensing dates |
| **Scale & Pagination** | Unlocked deep pagination supporting **1,000+ to 25,000+** records per run with zero hard caps |
| **Speed & Performance** | Pure HTTP streaming engine — collects 500+ advisors in ~15-20 seconds |
| **Authentication** | 100% keyless, public data access; no account login, session tokens, or browser automation needed |
| **Export Formats** | Clean JSON, NDJSON, CSV, Excel (`.xlsx`), HTML tables, and Apify REST API |

***

### 🔎 Why scrape FINRA BrokerCheck?

The [Financial Industry Regulatory Authority (FINRA)](https://www.finra.org/) maintains BrokerCheck as the authoritative public record of securities firms and professionals in the United States. Over **620,000 registered representatives** and **3,400 securities firms** operate under FINRA jurisdiction. Every licensed broker and registered investment adviser (RIA) is assigned a unique **CRD number**, which tracks their complete licensing status, career mobility, employment tenure, and formal regulatory disclosures.

For compliance departments, wealth management firms, and B2B providers, accessing BrokerCheck data systematically is indispensable:

- **Mandatory KYC & Counterparty Due Diligence**: Institutional allocators and financial institutions must verify registration status and review disclosure records before initiating business or onboarding funds.
- **Advisor Recruiting & Talent Acquisition**: Registered Investment Advisers (RIAs) and independent broker-dealers continuously recruit top-producing advisors based on their years in the industry, current firm affiliation, and clean regulatory records.
- **Disciplinary & Regulatory Risk Screening**: The `hasDisclosures` flag surfaces customer complaints, regulatory arbitrations, suspensions, and financial liens, shielding institutions from high-risk partnerships.
- **B2B Sales Targeting**: Software, fintech, insurance, and asset management vendors selling directly to independent wealth advisors need accurate, verified directories sorted by firm and geographic region.

However, the manual BrokerCheck interface only supports single-person lookups. Screening a book of 500 advisors or compiling regional rosters by hand takes days of manual search. This **FINRA BrokerCheck scraper** automates bulk retrieval: input names, corporate entities, or CRD lists, and extract clean, tabular datasets structured for instant CRM or compliance audit usage.

***

### 🎯 Key Use Cases & Business Applications

#### 1. Automated Compliance, KYC & AML Screening

Batch-screen counterparties, investment advisors, and corporate partners against official FINRA registries. Immediately flag individuals with active customer complaints or regulatory actions.

#### 2. Financial Advisor & RIA Recruiting

Wealth management executive recruiters can search target broker-dealers (e.g., Merrill Lynch, Edward Jones, LPL Financial) to build comprehensive candidate pipelines segmented by state, city, and industry tenure (`industryYears`).

#### 3. Fintech & WealthTech Account Onboarding

Embed real-time licensing validation into digital onboarding workflows for trading apps, custodial platforms, and financial software via the Apify REST API.

#### 4. Mergers & Acquisitions (M\&A) Due Diligence

Corporate development teams evaluating wealth management acquisitions can map a target firm's branch network (`branchesCount`), licensed personnel headcount, and historical disciplinary record.

#### 5. Academic & Industry Market Intelligence

Analyze geographic advisor migration patterns, industry tenure distributions, and the statistical prevalence of regulatory disclosures across regional markets.

***

### ✨ Key Features & Technical Highlights

- ✅ **Two Dedicated Entity Modes**:
  - **Individual Mode**: Extracts registered brokers, investment advisers, and dual-registered wealth managers.
  - **Firm Mode**: Extracts corporate brokerage and RIA entities, including branch counts and headquarters addresses.
- ✅ **Multi-Term Query Execution**: Provide dozens of search terms (individual names, broker-dealer firm names, or numeric CRDs) in a single run.
- ✅ **Deep 1,000+ Results Pagination**: Traverses all available 50-item search pages continuously without arbitrary page cutoffs. Setting `maxPagesPerQuery: 0` allows complete multi-thousand result extraction bounded only by your requested `maxItems`.
- ✅ **Strict Deduplication by CRD**: Normalizes every record by unique CRD identifier, guaranteeing zero duplicate entries even when searching overlapping query terms.
- ✅ **Accurate Industry Tenure Calculation**: Normalizes FINRA calendar entry dates into explicit numerical values (`industryDays` and `industryYears`), enabling clean filtering by seniority.
- ✅ **Full Branch Office Geocoding**: Extracts office street addresses, city, state, and postal code for firm searches.
- ✅ **Direct BrokerCheck Summary Links**: Provides permanent, direct URLs (`brokercheckUrl`) to each representative's or firm's official FINRA summary page for manual audit verification.

***

### 🥊 FINRA BrokerCheck Scraper vs Manual Search

| Feature | FINRA BrokerCheck Scraper | Manual BrokerCheck Web UI | Generic Web Scrapers |
|---|---|---|---|
| **Speed** | 500+ records in ~18 seconds | 1 lookup per minute | Often breaks on JSON parsing |
| **Bulk Search** | Unlimited names & firms in one run | Single name per query | Difficult to configure multi-query |
| **Data Export** | JSON, CSV, Excel, REST API | Print-to-PDF only | Messy unformatted HTML |
| **Tenure Normalization** | Auto-calculated `industryYears` | Manual date subtraction | Raw unparsed strings |
| **Deduplication** | Unique CRD deduplication (0 dups) | Manual spreadsheet deduplication | Frequent duplicate entries |
| **Automated Monitoring** | Scheduled hourly / weekly runs | Impossible without manual work | High operational overhead |

***

### 📥 Input Parameters

All parameters are optional, but you must provide at least one search query in `searchTerms`.

| Parameter | Type | Default | Description |
|---|---|---|---|
| `entityType` | String | `"individual"` | Target entity type: `"individual"` (brokers & advisors) or `"firm"` (brokerages & RIAs). |
| `searchTerms` | Array | `["john smith"]` | Names, CRD numbers, or firm names to query (e.g. `["john smith", "Morgan Stanley"]`). |
| `maxItems` | Integer | `0` | Total maximum results across all queries (`0` = auto/unlimited, governed by available results). |
| `maxPagesPerQuery` | Integer | `0` | Maximum pages per query at 50 results/page (`0` = auto/unlimited, governed by `maxItems`). |
| `proxyConfiguration` | Object | `{ "useApifyProxy": true }` | Proxy configuration. Public FINRA API operates reliably on datacenter proxies. |

#### Example Input Configuration: Individual Advisors

```json
{
  "entityType": "individual",
  "searchTerms": ["David Miller", "LPL Financial", "Charles Schwab"],
  "maxItems": 1000,
  "maxPagesPerQuery": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

#### Example Input Configuration: Securities Firms

```json
{
  "entityType": "firm",
  "searchTerms": ["Wealth Management", "Capital Advisors", "Securities"],
  "maxItems": 500,
  "maxPagesPerQuery": 0
}
```

***

### 📤 Output Data Structure

The scraper produces clean, normalized JSON records tailored to the chosen entity mode.

#### Sample Individual Record (`entityType: "individual"`)

```json
{
  "type": "individual",
  "crd": "2840192",
  "firstName": "DAVID",
  "middleName": "MICHAEL",
  "lastName": "MILLER",
  "nameSuffix": "JR.",
  "fullName": "DAVID MICHAEL MILLER JR.",
  "otherNames": [
    "DAVE MILLER",
    "D. M. MILLER"
  ],
  "isBroker": true,
  "isAdvisor": true,
  "brokerScope": "Active",
  "advisorScope": "Active",
  "hasDisclosures": false,
  "registrationCount": 4,
  "employmentsCount": 1,
  "industryDays": 7420,
  "industryYears": 20.3,
  "currentFirm": "MORGAN STANLEY",
  "currentFirmCity": "NEW YORK",
  "currentFirmState": "NY",
  "currentFirms": [
    "MORGAN STANLEY"
  ],
  "brokercheckUrl": "https://brokercheck.finra.org/individual/summary/2840192",
  "scrapedAt": "2026-11-10T14:50:00.000Z"
}
```

#### Sample Firm Record (`entityType: "firm"`)

```json
{
  "type": "firm",
  "crd": "149777",
  "name": "BEACON WEALTH ADVISORS, LLC",
  "otherNames": [
    "BEACON CAPITAL MANAGEMENT"
  ],
  "isAdvisor": true,
  "advisorScope": "Active",
  "hasDisclosures": false,
  "branchesCount": 6,
  "street": "100 FEDERAL STREET, 18TH FLOOR",
  "city": "BOSTON",
  "state": "MA",
  "postalCode": "02110",
  "country": "United States",
  "brokercheckUrl": "https://brokercheck.finra.org/firm/summary/149777",
  "scrapedAt": "2026-11-10T14:50:00.000Z"
}
```

***

### 📊 Complete Field Reference & Data Coverage

#### 👤 Individual Advisor Fields

| Field | Type | Description | Coverage |
|---|---|---|---|
| `type` | String | Fixed identifier (`"individual"`) | 🟢 High (100%) |
| `crd` | String | Central Registration Depository (CRD) identifier | 🟢 High (100%) |
| `fullName` | String | Clean full name with middle names and suffixes | 🟢 High (100%) |
| `firstName` / `lastName` | String | Normalized given and family name | 🟢 High (100%) |
| `otherNames` | Array | Known business aliases or previous legal names | 🟡 Conditional (~40%) |
| `isBroker` | Boolean | True if actively registered as a broker-dealer rep | 🟢 High (100%) |
| `isAdvisor` | Boolean | True if actively registered as an investment adviser | 🟢 High (100%) |
| `brokerScope` / `advisorScope` | String | Detailed scope status string (`"Active"`, etc.) | 🟢 High (100%) |
| `hasDisclosures` | Boolean | True if profile contains public regulatory disclosures | 🟢 High (100%) |
| `industryYears` | Number | Calculated industry experience in years | 🟢 High (~90%) |
| `industryDays` | Number | Cumulative days elapsed since industry licensing | 🟢 High (~90%) |
| `currentFirm` | String | Primary currently employing brokerage or RIA | 🟡 Conditional (~60-70% active) |
| `currentFirmCity` / `State` | String | Primary branch office location | 🟡 Conditional (~60-70% active) |
| `currentFirms` | Array | All simultaneous active employer firms | 🟢 High (100%) |
| `brokercheckUrl` | String | Permanent canonical link to FINRA summary dossier | 🟢 High (100%) |
| `scrapedAt` | String | ISO 8601 UTC timestamp of extraction | 🟢 High (100%) |

#### 🏢 Brokerage & RIA Firm Fields

| Field | Type | Description | Coverage |
|---|---|---|---|
| `type` | String | Fixed identifier (`"firm"`) | 🟢 High (100%) |
| `crd` | String | Central Registration Depository (CRD) identifier | 🟢 High (100%) |
| `name` | String | Registered legal or trade name of the firm | 🟢 High (100%) |
| `otherNames` | Array | DBA (Doing Business As) names and previous names | 🟡 Conditional (~40%) |
| `isAdvisor` | Boolean | True if registered as an investment advisory firm | 🟢 High (100%) |
| `hasDisclosures` | Boolean | True if firm has reported formal disclosures | 🟢 High (100%) |
| `branchesCount` | Number | Total registered branch offices across the US | 🟢 High (~85%) |
| `street` | String | Primary corporate office street address | 🟢 High (~95%) |
| `city` / `state` | String | Primary corporate city and two-letter state | 🟢 High (~95%) |
| `postalCode` / `country`| String | Zip code and country identifier | 🟢 High (~95%) |
| `brokercheckUrl` | String | Direct canonical profile link on BrokerCheck | 🟢 High (100%) |
| `scrapedAt` | String | ISO 8601 UTC timestamp of extraction | 🟢 High (100%) |

***

### 🚀 Step-by-Step Usage Guide

#### 1. Web Console Interface

1. Navigate to **FINRA BrokerCheck Scraper** on the Apify Console.
2. Select your `entityType` (`individual` or `firm`).
3. Enter one or more `searchTerms` (e.g., `"Merrill Lynch"`, `"Michael Scott"`).
4. Specify `maxItems` (e.g., `500` or `0` for all available results).
5. Click **Start** to initiate the search and monitor live results.

#### 2. Python API Client

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

## Search for wealth advisors at Morgan Stanley
run_input = {
    "entityType": "individual",
    "searchTerms": ["Morgan Stanley Wealth"],
    "maxItems": 500,
    "maxPagesPerQuery": 0
}

run = client.actor("haketa/finra-brokercheck-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    status = "⚠️ Disclosures" if item["hasDisclosures"] else "✅ Clean"
    print(f"{item['fullName']} (CRD: {item['crd']}) | {item.get('currentFirm')} | {item.get('industryYears')} yrs | {status}")
```

#### 3. Node.js API Client

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({
    token: 'YOUR_APIFY_TOKEN',
});

const run = await client.actor('haketa/finra-brokercheck-scraper').call({
    entityType: 'individual',
    searchTerms: ['John Smith'],
    maxItems: 200,
    maxPagesPerQuery: 0,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Retrieved ${items.length} FINRA advisor profiles.`);
```

#### 4. Direct cURL / REST API

```bash
curl -X POST "https://api.apify.com/v2/acts/haketa~finra-brokercheck-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "entityType": "individual",
    "searchTerms": ["Edward Jones"],
    "maxItems": 250,
    "maxPagesPerQuery": 0
  }'
```

***

### ⚖️ FINRA Disclosure Categories & Compliance Risk Tiers

BrokerCheck aggregates disclosures across several formal regulatory categories:

| Disclosure Category | Description | Primary Impact |
|---|---|---|
| **Customer Dispute** | Formal arbitration, civil litigation, or written customer complaints | Product suitability & fiduciary conduct |
| **Regulatory Action** | Disciplinary proceedings initiated by FINRA, SEC, or state regulators | Suspension, fines, or statutory bars |
| **Criminal Matter** | Felony charges, misdemeanor convictions, or plea agreements | Mandatory statutory disqualification |
| **Civil Judicial Event** | State or federal civil court injunctions involving investment activities | Legal and fiduciary liability |
| **Termination** | Discharged or permitted to resign following internal firm allegations | Internal policy or regulatory violations |
| **Financial / Lien** | Personal bankruptcy filings, compromise with creditors, tax liens | Financial solvency and creditworthiness |

***

### 🔗 KYC & Due Diligence Integration Workflows

- **Automated Watchlist Auditing**: Ingest lists of thousands of financial advisors periodically to detect any newly added disclosure events (`hasDisclosures: true`).
- **Recruiting CRM Scoring**: Weight prospective broker candidates by calculating `industryYears` and filtering for zero-disclosure histories.
- **Fintech Onboarding API**: Execute synchronous background checks during platform account creation to verify licensed broker credentials before enabling trading access.
- **Institutional Allocation Diligence**: Ensure all portfolio managers and managing directors at counterparty investment firms maintain clean licensing and active scopes.
- **Historical Seniority Benchmarking**: Measure advisor turnover and career trajectory across top wirehouses to identify team lift-out opportunities.
- **Continuous Compliance Monitoring**: Automate weekly delta checks against employee watchlists to flag newly opened customer arbitrations before external audits.

***

### ❓ Frequently Asked Questions (FAQ)

##### Do I need an account or API key to access BrokerCheck data?

No. The scraper queries public FINRA BrokerCheck endpoints directly without requiring developer registrations or API tokens.

##### What does the `hasDisclosures` flag indicate?

The `hasDisclosures` flag indicates whether an advisor or firm has reported customer arbitrations, regulatory disciplinary actions, criminal matters, or civil financial liens. A `true` value suggests that compliance teams should review the full BrokerCheck record.

##### Why are `currentFirm` and location fields empty for some individuals?

If an individual is no longer actively employed with a registered firm (e.g. retired, between firms, or inactive license status), FINRA does not list a current firm. These fields are populated on approximately 60-70% of records representing currently active practitioners.

##### How does deep pagination work?

Setting `maxPagesPerQuery: 0` enables the scraper to paginate through all available 50-hit batches for each query term until all results are collected or your overall `maxItems` limit is reached.

##### Can I export directly to CSV for CRM import?

Yes. You can export datasets in CSV or Excel formats, or use Apify integrations to stream leads directly into Salesforce, HubSpot, or custom KYC databases.

***

### 📋 Changelog

#### Version 1.2.0 (2026-11)

- **Deep 1,000+ Pagination**: Enabled auto-unlimited deep pagination with `maxPagesPerQuery: 0` governed by `maxItems`.
- **Fast Prefill Execution**: Streamlined default inputs to deliver verified discovery runs in under 15 seconds.
- **Enhanced Tenure Calculations**: Normalized calendar dates to ensure consistent `industryYears` and `industryDays` across all advisor profiles.
- **Strict Deduplication by CRD**: Hardened CRD deduplication across multiple concurrent queries.

#### Version 1.1.0 (2026-10)

- Added firm branch address parsing (`firm_ia_address_details`).
- Standardized `output_schema.json` with version 1 specifications.

#### Version 1.0.0 (2026-10)

- Initial release with individual broker search and disclosure flag extraction.

# Changelog

This Actor's version history is a separate document: https://apify.com/haketa/finra-brokercheck-scraper/changelog.md

# Actor input Schema

## `entityType` (type: `string`):

Search individuals (brokers/advisors) or firms.

## `searchTerms` (type: `array`):

Names, CRD numbers or firm names to search (e.g. "john smith", "Morgan Stanley").

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

Maximum results across all searches. 0 = no limit.

## `maxPagesPerQuery` (type: `integer`):

Pagination cap per search term (50 per page). 0 = auto/unlimited, governed by maxItems.

## `proxyConfiguration` (type: `object`):

Apify Proxy. The API is public — datacenter is enough and enabled by default.

## Actor input object example

```json
{
  "entityType": "individual",
  "searchTerms": [
    "john smith"
  ],
  "maxItems": 100,
  "maxPagesPerQuery": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

individual/firm

## `crd` (type: `string`):

CRD number

## `fullName` (type: `string`):

Individual full name

## `firstName` (type: `string`):

First name

## `lastName` (type: `string`):

Last name

## `nameSuffix` (type: `string`):

Suffix (Jr., III)

## `otherNames` (type: `string`):

Known aliases

## `name` (type: `string`):

Firm name

## `isBroker` (type: `string`):

Registered broker

## `isAdvisor` (type: `string`):

Registered advisor

## `brokerScope` (type: `string`):

Broker registration

## `advisorScope` (type: `string`):

Advisor registration

## `hasDisclosures` (type: `string`):

Has disclosures

## `registrationCount` (type: `string`):

FINRA registrations

## `employmentsCount` (type: `string`):

Employment count

## `industryDays` (type: `string`):

Days in industry

## `industryYears` (type: `string`):

Years in industry

## `currentFirm` (type: `string`):

Current firm

## `currentFirmCity` (type: `string`):

Firm city

## `currentFirmState` (type: `string`):

Firm state

## `currentFirms` (type: `string`):

All current firms

## `branchesCount` (type: `string`):

Firm branch count

## `street` (type: `string`):

Firm street

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

Firm city

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

Firm state

## `postalCode` (type: `string`):

Firm ZIP

## `brokercheckUrl` (type: `string`):

BrokerCheck profile

## `scrapedAt` (type: `string`):

ISO timestamp

# 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 = {
    "searchTerms": [
        "john smith"
    ],
    "maxItems": 100,
    "maxPagesPerQuery": 0,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/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 = {
    "searchTerms": ["john smith"],
    "maxItems": 100,
    "maxPagesPerQuery": 0,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/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 '{
  "searchTerms": [
    "john smith"
  ],
  "maxItems": 100,
  "maxPagesPerQuery": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/finra-brokercheck-scraper --silent --output-dataset

```

## MCP server setup

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