# Financial Advisor & Broker Scraper - FINRA + SEC (`scrapesage/financial-advisor-scraper`) Actor

Scrape U.S. financial advisers, brokers & firms from FINRA BrokerCheck + SEC IAPD: search by name, list every rep at a firm, or pull full reports. Registrations, exams, employment history, disclosures, branch addresses, phones & lead scores. No API key, no browser.

- **URL**: https://apify.com/scrapesage/financial-advisor-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 financial professional scrapeds

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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Financial Advisor & Broker Scraper — FINRA BrokerCheck + SEC IAPD (Leads, Disclosures & Firms)

Extract **complete U.S. financial-professional data** from both regulators in one run — **FINRA BrokerCheck** (registered brokers & broker-dealers) **and the SEC's IAPD** (registered investment advisers / RIAs). Search advisers and brokers by name, **list every rep at a firm**, or pull full reports: registrations, exams, employment history, **branch office addresses, business phones, disclosures** and a 0–100 lead score on every record.

No login, no API key, no browser — fast JSON extraction straight from the official BrokerCheck and IAPD public APIs, with 99%+ reliability.

### Why this financial advisor scraper?

Most scrapers cover only FINRA BrokerCheck and stop at the search summary. This actor queries **both regulators**, merges the rich **full reports** (BrokerCheck *and* Form ADV), and ships the **richest dataset in the category**:

| Data | Typical scrapers | This actor |
|---|---|---|
| FINRA brokers (BrokerCheck) | ✅ | ✅ |
| SEC / state investment advisers — RIAs (IAPD) | ❌ usually | ✅ |
| Dual-registration flag (broker **and** adviser) | ❌ | ✅ |
| Every rep at a firm (firm roster) | partial | ✅ current-only or all |
| Branch office street/city/state/ZIP | partial | ✅ |
| Firm business phone + office & mailing address | ❌ | ✅ |
| Exams passed (Series 7, 63, 65, 66, SIE…) | ❌ | ✅ |
| Registered states + counts | partial | ✅ |
| **Disclosures** (regulatory, customer dispute, criminal, financial) | partial | ✅ full detail |
| Employment history (current + previous firms) | partial | ✅ |
| Firm type / size / direct owners / Form ADV notice-filings | ❌ | ✅ |
| Years of experience + lead score (0–100) | ❌ | ✅ |

### Use cases

- **Lead generation for fintech, insurance & B2B sales** — build targeted lists of advisers and firms by state, firm, experience and registration type, with branch addresses and firm phones ready for outreach.
- **Recruiting & talent sourcing** — find experienced advisers at competitor firms (firm roster), filter by tenure and multi-state reach, and monitor who newly joins or leaves.
- **Compliance, KYC & due-diligence** — verify a broker/adviser's CRD, registration status, exams and **full disclosure history** (regulatory actions, customer disputes, criminal, financial events) before doing business.
- **Investor protection & research** — screen firms and individuals for disclosures; analyse adviser distribution by firm, state and registration type.
- **Market & competitive intelligence** — size up broker-dealers and RIAs (firm size, branch count, owners, notice-filed states) and track changes over time.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Financial Advisor & Broker Scraper**, pick a **mode**, and fill in names / firms / CRDs.
3. Click **Start** and watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Modes

- **Search individuals** — find brokers & advisers by name or keyword (`searchQueries`).
- **Search firms** — find broker-dealers & RIAs by firm name or keyword.
- **Firm roster** — list **every registered rep at a firm** (`firms` = names or CRDs). `rosterCurrentOnly` keeps only those currently there.
- **Individual reports by CRD** — full reports for specific people (`crdNumbers`).
- **Firm reports by CRD** — full firm reports (`firmCrdNumbers`).
- **Profile URLs** — paste BrokerCheck / IAPD profile URLs (`startUrls`).

### Input

```json
{
    "mode": "firmRoster",
    "firms": ["Edward Jones", "LPL Financial"],
    "regulator": "both",
    "stateFilter": ["CA", "TX"],
    "activeOnly": true,
    "rosterCurrentOnly": true,
    "includeIndividualDetails": true,
    "includeDisclosures": true,
    "maxRepsPerFirm": 500,
    "maxRecords": 1000
}
````

- **mode** — `searchIndividuals`, `searchFirms`, `firmRoster`, `individualDetails`, `firmDetails`, or `startUrls`.
- **searchQueries** — names/keywords for the search modes.
- **firms** — firm names or CRD numbers for Firm roster.
- **crdNumbers / firmCrdNumbers** — CRDs for the report modes.
- **regulator** *(default both)* — `both` (FINRA + SEC), `broker` (FINRA BrokerCheck), or `adviser` (SEC IAPD).
- **stateFilter** — keep only records whose office is in these 2-letter states.
- **activeOnly / hasDisclosuresOnly** — filter by active registration / presence of disclosures.
- **rosterCurrentOnly** *(default true)* — Firm roster returns only reps currently at the firm.
- **includeIndividualDetails / includeFirmDetails** *(default true)* — fetch the full reports (one extra request each); turn off for a lighter summary.
- **includeDisclosures** *(default true)* — include the full disclosure-events array.
- **includePreviousEmployments** *(default false)* — add prior-firm history.
- **enrichFirmContacts / firmWebsites** — opt-in: crawl firm websites you supply (`CRD or name | https://site.com`) for emails, phones and socials.
- **monitorMode** *(default false)* — only emit records not seen in previous runs.

### Output

One record per individual (`type: "individual"`) or firm (`type: "firm"`). Example individual:

```json
{
    "type": "individual",
    "crd": 4304592,
    "fullName": "Terry Wayne Jones",
    "isBroker": true,
    "isInvestmentAdviser": true,
    "isDualRegistered": true,
    "brokerScope": "Active",
    "adviserScope": "Active",
    "currentFirmName": "Edward Jones",
    "currentFirmCrd": 250,
    "officeCity": "Springfield",
    "officeState": "TN",
    "officeZip": "37172",
    "officeAddress": "123 Main St, Springfield, TN, 37172",
    "industryStartDate": "1/14/2001",
    "yearsExperience": 25.4,
    "registeredStates": ["Tennessee", "Kentucky", "Alabama", "Georgia"],
    "registeredStatesCount": 21,
    "examsCount": 4,
    "exams": [
        { "category": "Series 66", "name": "Uniform Combined State Law Examination", "takenDate": "8/16/2002", "scope": "BOTH" },
        { "category": "Series 7", "name": "General Securities Representative Examination", "takenDate": "2/2/2001", "scope": "BC" }
    ],
    "registrationCount": 24,
    "currentEmployments": [
        { "firmName": "Edward Jones", "firmCrd": 250, "branchCity": "Springfield", "branchState": "TN", "officeAddress": "123 Main St, Springfield, TN, 37172" }
    ],
    "hasDisclosures": false,
    "disclosureCount": 0,
    "disclosures": [],
    "brokerCheckUrl": "https://brokercheck.finra.org/individual/summary/4304592",
    "secAdviserUrl": "https://adviserinfo.sec.gov/individual/summary/4304592",
    "leadScore": 96,
    "scrapedAt": "2026-06-15T04:30:00.000Z"
}
```

Example firm:

```json
{
    "type": "firm",
    "firmCrd": 7452,
    "firmName": "Vanguard Marketing Corporation",
    "isBrokerDealer": true,
    "isInvestmentAdviser": false,
    "firmType": "Corporation",
    "firmSize": "Large",
    "regulator": "SEC",
    "businessPhone": "610-669-1000",
    "officeAddress": "100 Vanguard Blvd, Malvern, PA, 19355",
    "mailingAddress": "5951 Luckett Court, Suite A1, El Paso, TX, 79932-1882",
    "branchCount": 142,
    "registeredStatesCount": 53,
    "directOwners": [{ "name": "The Vanguard Group, Inc.", "position": "Parent Company" }],
    "hasDisclosures": true,
    "disclosureCount": 3,
    "brokerCheckUrl": "https://brokercheck.finra.org/firm/summary/7452",
    "leadScore": 62,
    "scrapedAt": "2026-06-15T04:30:00.000Z"
}
```

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly with `monitorMode` to catch new advisers joining a firm, new entrants in a state, or new disclosures.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, compliance review) the moment a run finishes.

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

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

const run = await client.actor('scrapesage/financial-advisor-scraper').call({
    mode: 'firmRoster',
    firms: ['LPL Financial'],
    stateFilter: ['CA'],
    activeOnly: true,
    maxRepsPerFirm: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} advisers & brokers`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new adviser leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored firm or state gains new reps.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find active investment advisers at LPL Financial in California with 10+ years of experience and no disclosures" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **business, financial & compliance intelligence stack**:

- **[SEC EDGAR Scraper](https://apify.com/scrapesage/sec-edgar-scraper)** — company filings, XBRL financials, and Form D fundraising.
- **[USAspending Scraper](https://apify.com/scrapesage/usaspending-scraper)** — federal awards, contractors and recipient leads.
- **[SAM.gov Scraper](https://apify.com/scrapesage/sam-gov-scraper)** — federal contract opportunities and points of contact.
- **[Companies House Scraper](https://apify.com/scrapesage/companies-house-scraper)** — UK companies, directors and PSCs.
- **[Product Hunt Scraper](https://apify.com/scrapesage/product-hunt-scraper)** — launches, makers and B2B leads.
- **[Y Combinator Scraper](https://apify.com/scrapesage/ycombinator-scraper)** — startups, founders and jobs.
- **[LinkedIn Jobs Scraper](https://apify.com/scrapesage/linkedin-jobs-scraper)** — job postings as hiring-intent signals.

### Tips

- **Whole-firm rosters are huge** — wirehouses like Edward Jones (25k+) and LPL (30k+) have tens of thousands of reps. Combine `stateFilter` with `maxRepsPerFirm` and `maxRecords` to scope a manageable, geo-targeted list.
- **Cleaner leads** — keep `rosterCurrentOnly` on so you only get reps currently at the firm, not everyone who ever worked there.
- **Compliance screening** — set `hasDisclosuresOnly: true` to surface only records with disclosure events.
- **Faster, cheaper summaries** — turn off `includeIndividualDetails` for a quick name + firm + office summary (no per-person report request).
- **Proxies** — the default Apify datacenter proxy is plenty; the FINRA/SEC APIs are public and fast.

### FAQ

**What's the difference between BrokerCheck and IAPD?** FINRA BrokerCheck covers registered **brokers** and broker-dealer firms; the SEC's IAPD covers registered **investment advisers** (RIAs) and adviser firms. Many professionals are dually registered — this actor queries **both** and flags `isDualRegistered`.

**What is a CRD number?** The Central Registration Depository number — a unique ID assigned to every registered individual and firm. It's the reliable key for lookups and de-duplication, and it's the same across BrokerCheck and IAPD.

**Can I get every adviser at a specific firm?** Yes — use **Firm roster** mode with the firm's name or CRD. With `rosterCurrentOnly` on you get the firm's current registered reps, each with their branch office address and registration profile.

**Does it include disclosures?** Yes — every record carries a disclosure count, and with `includeDisclosures` on you get the full events (type, date, resolution and the detailed allegations/dispositions) for compliance and due-diligence.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor new advisers automatically?** Turn on `monitorMode` and create a [Schedule](https://docs.apify.com/platform/schedules); each run emits only CRDs not seen before — new joiners at a firm, new entrants in a state, etc.

**Is this data official?** Yes — it comes directly from the public FINRA BrokerCheck and SEC IAPD APIs that power brokercheck.finra.org and adviserinfo.sec.gov. This actor collects publicly available data only; you are responsible for using it in compliance with applicable laws (e.g. GDPR/CCPA for personal data) and the source terms.

**A field is null — why?** Some records genuinely don't publish a value (e.g. an investment-adviser-only firm has no FINRA broker-dealer phone, or a lapsed rep has no current office). Fields are `null` only when the data doesn't exist, not because the scraper skipped them.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

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

Search individuals (brokers/advisers) by name or keyword, search firms, list every rep at a firm (firm roster), pull full reports by CRD, or paste BrokerCheck/IAPD profile URLs.

## `searchQueries` (type: `array`):

Names or keywords to search. For individuals: a person's name (e.g. `John Smith`). For firms: a firm name or keyword (e.g. `Morgan Stanley`, `wealth management`). One per row.

## `firms` (type: `array`):

Firm names or CRD numbers whose ENTIRE roster of registered reps you want. E.g. `Edward Jones`, `LPL Financial`, or a CRD like `250`. One per row. (Mode: Firm roster.)

## `crdNumbers` (type: `array`):

Individual CRD numbers to pull full reports for (employment history, exams, registered states, disclosures). One per row. (Mode: Individual reports by CRD.)

## `firmCrdNumbers` (type: `array`):

Firm CRD numbers to pull full firm reports for (registrations, ownership, disclosures, address, phone). One per row. (Mode: Firm reports by CRD.)

## `startUrls` (type: `array`):

BrokerCheck or IAPD profile URLs, e.g. `https://brokercheck.finra.org/individual/summary/2860031` or `https://adviserinfo.sec.gov/firm/summary/107342`. Also accepts `individual 1234` / `firm 5678`. (Mode: Profile URLs.)

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

Which registry to query. Both = FINRA BrokerCheck + SEC IAPD (widest coverage). Brokers = FINRA registered reps & broker-dealers. Advisers = SEC/state investment advisers (RIAs).

## `stateFilter` (type: `array`):

Keep only records whose primary office is in these U.S. states, e.g. `CA`, `TX`, `NY`. Leave empty for all states. Great for geo-targeted lead lists.

## `activeOnly` (type: `boolean`):

Only return brokers/advisers/firms that are currently ACTIVE (skip those whose registration has lapsed).

## `hasDisclosuresOnly` (type: `boolean`):

Only return records that have at least one disclosure event (regulatory action, customer dispute, criminal, financial, etc.) — for compliance, due-diligence and screening.

## `rosterCurrentOnly` (type: `boolean`):

In Firm roster mode, return only reps CURRENTLY registered at the firm (the registry also matches departed reps). Turn off to include everyone who ever worked there.

## `includeIndividualDetails` (type: `boolean`):

For individuals, fetch each person's full report (employment history, exams, registered states, registration counts, disclosures). One extra request per person. Turn off for a faster, lighter name+firm+office summary.

## `includeFirmDetails` (type: `boolean`):

For firms, fetch the full report: firm type/size, business phone, office & mailing address, direct owners, state registrations, Form ADV notice-filings and disclosures. One extra request per firm.

## `includeDisclosures` (type: `boolean`):

Include the full array of disclosure events (type, date, resolution and detailed allegations/dispositions) on each record. Turn off to keep just the disclosure count.

## `includePreviousEmployments` (type: `boolean`):

Add each individual's prior firm history (firm name/CRD and registration begin/end dates). Requires full individual reports.

## `enrichFirmContacts` (type: `boolean`):

Opt-in lead enrichment: for firms you supply a website for (see Firm websites), crawl that site for emails, phones and socials. Regulatory data rarely lists a website, so this only runs for firms in the Firm websites map.

## `firmWebsites` (type: `array`):

Optional map for contact enrichment. Each row: `<firm CRD or name> | <website>`, e.g. `107342 | https://www.fisherinvestments.com`. The crawler visits those sites for emails/phones/socials.

## `maxRecords` (type: `integer`):

Hard cap on the total number of records (individuals + firms) emitted across the whole run.

## `maxRecordsPerQuery` (type: `integer`):

Cap the number of matching records returned per search query (search modes). Results are paginated automatically until this limit or the matches run out.

## `maxRepsPerFirm` (type: `integer`):

Cap how many reps to return per firm in Firm roster mode. Big wirehouses have tens of thousands of reps — raise this (and Max total records) to pull more.

## `monitorMode` (type: `boolean`):

Remember CRDs already returned and emit ONLY records not seen in previous runs — e.g. new advisers joining a firm or new entrants in a state. Pairs with Apify Schedules to track changes over time.

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

Named key-value store that holds the 'already seen' CRDs for monitoring mode. Use a different name per tracked target (firm, state, query) to keep their histories separate.

## `maxConcurrency` (type: `integer`):

Maximum parallel requests. The FINRA/SEC APIs are fast; lower this only if you see rate-limit warnings on very large runs.

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

Proxy settings. The FINRA BrokerCheck & SEC IAPD public APIs work fine through the default Apify datacenter proxy — no residential needed.

## Actor input object example

```json
{
  "mode": "searchIndividuals",
  "searchQueries": [
    "wealth management"
  ],
  "regulator": "both",
  "activeOnly": false,
  "hasDisclosuresOnly": false,
  "rosterCurrentOnly": true,
  "includeIndividualDetails": true,
  "includeFirmDetails": true,
  "includeDisclosures": true,
  "includePreviousEmployments": false,
  "enrichFirmContacts": false,
  "maxRecords": 200,
  "maxRecordsPerQuery": 100,
  "maxRepsPerFirm": 200,
  "monitorMode": false,
  "monitorStoreName": "finra-monitor",
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped records in the default dataset. Individual rows carry registrations, exams, employment history, branch addresses and disclosures; firm rows carry type/size, phone, ownership, registrations and disclosures.

# 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 = {
    "searchQueries": [
        "wealth management"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/financial-advisor-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 = { "searchQueries": ["wealth management"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/financial-advisor-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 '{
  "searchQueries": [
    "wealth management"
  ]
}' |
apify call scrapesage/financial-advisor-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Financial Advisor & Broker Scraper - FINRA + SEC",
        "description": "Scrape U.S. financial advisers, brokers & firms from FINRA BrokerCheck + SEC IAPD: search by name, list every rep at a firm, or pull full reports. Registrations, exams, employment history, disclosures, branch addresses, phones & lead scores. No API key, no browser.",
        "version": "0.1",
        "x-build-id": "V9Ti9xEurbOJL7Wx0"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~financial-advisor-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-financial-advisor-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapesage~financial-advisor-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-financial-advisor-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapesage~financial-advisor-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-financial-advisor-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "What to scrape",
                        "enum": [
                            "searchIndividuals",
                            "searchFirms",
                            "firmRoster",
                            "individualDetails",
                            "firmDetails",
                            "startUrls"
                        ],
                        "type": "string",
                        "description": "Search individuals (brokers/advisers) by name or keyword, search firms, list every rep at a firm (firm roster), pull full reports by CRD, or paste BrokerCheck/IAPD profile URLs.",
                        "default": "searchIndividuals"
                    },
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Names or keywords to search. For individuals: a person's name (e.g. `John Smith`). For firms: a firm name or keyword (e.g. `Morgan Stanley`, `wealth management`). One per row.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "firms": {
                        "title": "Firms (names or CRD numbers) — for Firm roster",
                        "type": "array",
                        "description": "Firm names or CRD numbers whose ENTIRE roster of registered reps you want. E.g. `Edward Jones`, `LPL Financial`, or a CRD like `250`. One per row. (Mode: Firm roster.)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "crdNumbers": {
                        "title": "Individual CRD numbers — for Individual reports",
                        "type": "array",
                        "description": "Individual CRD numbers to pull full reports for (employment history, exams, registered states, disclosures). One per row. (Mode: Individual reports by CRD.)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "firmCrdNumbers": {
                        "title": "Firm CRD numbers — for Firm reports",
                        "type": "array",
                        "description": "Firm CRD numbers to pull full firm reports for (registrations, ownership, disclosures, address, phone). One per row. (Mode: Firm reports by CRD.)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Profile URLs",
                        "type": "array",
                        "description": "BrokerCheck or IAPD profile URLs, e.g. `https://brokercheck.finra.org/individual/summary/2860031` or `https://adviserinfo.sec.gov/firm/summary/107342`. Also accepts `individual 1234` / `firm 5678`. (Mode: Profile URLs.)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "regulator": {
                        "title": "Regulator / dataset",
                        "enum": [
                            "both",
                            "broker",
                            "adviser"
                        ],
                        "type": "string",
                        "description": "Which registry to query. Both = FINRA BrokerCheck + SEC IAPD (widest coverage). Brokers = FINRA registered reps & broker-dealers. Advisers = SEC/state investment advisers (RIAs).",
                        "default": "both"
                    },
                    "stateFilter": {
                        "title": "State filter (2-letter codes)",
                        "type": "array",
                        "description": "Keep only records whose primary office is in these U.S. states, e.g. `CA`, `TX`, `NY`. Leave empty for all states. Great for geo-targeted lead lists.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "activeOnly": {
                        "title": "Active registrations only",
                        "type": "boolean",
                        "description": "Only return brokers/advisers/firms that are currently ACTIVE (skip those whose registration has lapsed).",
                        "default": false
                    },
                    "hasDisclosuresOnly": {
                        "title": "Only records with disclosures",
                        "type": "boolean",
                        "description": "Only return records that have at least one disclosure event (regulatory action, customer dispute, criminal, financial, etc.) — for compliance, due-diligence and screening.",
                        "default": false
                    },
                    "rosterCurrentOnly": {
                        "title": "Firm roster: current reps only",
                        "type": "boolean",
                        "description": "In Firm roster mode, return only reps CURRENTLY registered at the firm (the registry also matches departed reps). Turn off to include everyone who ever worked there.",
                        "default": true
                    },
                    "includeIndividualDetails": {
                        "title": "Fetch full individual reports",
                        "type": "boolean",
                        "description": "For individuals, fetch each person's full report (employment history, exams, registered states, registration counts, disclosures). One extra request per person. Turn off for a faster, lighter name+firm+office summary.",
                        "default": true
                    },
                    "includeFirmDetails": {
                        "title": "Fetch full firm reports",
                        "type": "boolean",
                        "description": "For firms, fetch the full report: firm type/size, business phone, office & mailing address, direct owners, state registrations, Form ADV notice-filings and disclosures. One extra request per firm.",
                        "default": true
                    },
                    "includeDisclosures": {
                        "title": "Include full disclosure events",
                        "type": "boolean",
                        "description": "Include the full array of disclosure events (type, date, resolution and detailed allegations/dispositions) on each record. Turn off to keep just the disclosure count.",
                        "default": true
                    },
                    "includePreviousEmployments": {
                        "title": "Include previous employment history",
                        "type": "boolean",
                        "description": "Add each individual's prior firm history (firm name/CRD and registration begin/end dates). Requires full individual reports.",
                        "default": false
                    },
                    "enrichFirmContacts": {
                        "title": "Enrich firm contacts (crawl supplied websites)",
                        "type": "boolean",
                        "description": "Opt-in lead enrichment: for firms you supply a website for (see Firm websites), crawl that site for emails, phones and socials. Regulatory data rarely lists a website, so this only runs for firms in the Firm websites map.",
                        "default": false
                    },
                    "firmWebsites": {
                        "title": "Firm websites (CRD or name | URL)",
                        "type": "array",
                        "description": "Optional map for contact enrichment. Each row: `<firm CRD or name> | <website>`, e.g. `107342 | https://www.fisherinvestments.com`. The crawler visits those sites for emails/phones/socials.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxRecords": {
                        "title": "Max total records",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Hard cap on the total number of records (individuals + firms) emitted across the whole run.",
                        "default": 200
                    },
                    "maxRecordsPerQuery": {
                        "title": "Max records per search query",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Cap the number of matching records returned per search query (search modes). Results are paginated automatically until this limit or the matches run out.",
                        "default": 100
                    },
                    "maxRepsPerFirm": {
                        "title": "Max reps per firm (roster)",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Cap how many reps to return per firm in Firm roster mode. Big wirehouses have tens of thousands of reps — raise this (and Max total records) to pull more.",
                        "default": 200
                    },
                    "monitorMode": {
                        "title": "Monitoring mode — only new records",
                        "type": "boolean",
                        "description": "Remember CRDs already returned and emit ONLY records not seen in previous runs — e.g. new advisers joining a firm or new entrants in a state. Pairs with Apify Schedules to track changes over time.",
                        "default": false
                    },
                    "monitorStoreName": {
                        "title": "Monitor store name",
                        "type": "string",
                        "description": "Named key-value store that holds the 'already seen' CRDs for monitoring mode. Use a different name per tracked target (firm, state, query) to keep their histories separate.",
                        "default": "finra-monitor"
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 15,
                        "type": "integer",
                        "description": "Maximum parallel requests. The FINRA/SEC APIs are fast; lower this only if you see rate-limit warnings on very large runs.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. The FINRA BrokerCheck & SEC IAPD public APIs work fine through the default Apify datacenter proxy — no residential needed.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
