DEV Community

NexGenData
NexGenData

Posted on • Originally published at thenextgennexus.com

How to Vet a Stockbroker with FINRA BrokerCheck: Free API Guide

TL;DR. FINRA BrokerCheck is the public registration database for every individual securities broker (Series 7, Series 63, etc.) and FINRA-member firm in the United States. You can search by name, CRD number, or firm. It returns employment history, exam record, registration status, and — critically — disclosures (customer complaints, regulatory actions, terminations for cause, bankruptcies, criminal matters). FINRA does not publish a documented public API, but the BrokerCheck site is backed by a JSON endpoint you can query. This guide covers what BrokerCheck contains, what disclosures actually mean, how to query the underlying endpoint, and a working Python implementation that handles pagination and disclosure parsing.

Who needs to query BrokerCheck programmatically

  • RIA and broker-dealer recruiters screening candidates against their U4 history before extending an offer.
  • Compliance teams at brokerage firms monitoring their own reps for new disclosures (a U4 amendment hits BrokerCheck within ~15 days).
  • Wealth platforms and fintechs verifying advisor identities at onboarding.
  • Investor due diligence — family offices, RIAs vetting subadvisors, journalists investigating misconduct patterns.
  • Academic researchers studying broker misconduct (the Egan-Matvos-Seru "Market for Financial Adviser Misconduct" papers run on BrokerCheck-derived data).

What BrokerCheck actually contains

Per FINRA's own documentation, BrokerCheck pulls from the Central Registration Depository (CRD) and the Investment Adviser Registration Depository (IARD). For each individual you get:

  • CRD number (the canonical identifier)
  • Current registration status (Registered, Not Registered, Pending)
  • Currently registered firm(s) and self-regulatory organizations (FINRA, MSRB, individual state regulators)
  • Employment history (last 10 years)
  • Exam record (Series 7, 63, 65, 24, etc., with pass dates)
  • Disclosure events — the section that matters most for vetting

For firms you additionally get the firm's BD or IA registration status, branch office count, and aggregated disclosure history.

The disclosure taxonomy

"Disclosure" in BrokerCheck-speak means a reportable event on the broker's U4 form. FINRA's U4 instructions classify them as:

  1. Customer Dispute — settled, pending, or denied complaint involving sales practice
  2. Regulatory Action — FINRA, SEC, state, or foreign regulator sanction
  3. Employment Separation After Allegations — fired or resigned during an internal review
  4. Criminal — felony or specified misdemeanor
  5. Civil — non-customer civil litigation
  6. Financial — bankruptcy, compromise with creditors, unsatisfied judgments
  7. Judgment/Lien — outstanding judgment or lien
  8. Investigation — current FINRA or SEC investigation

Customer disputes and regulatory actions are the categories that correlate with future misconduct in the academic literature. A broker with two or more disclosures has materially higher odds of future complaints.

The undocumented JSON endpoint

BrokerCheck's frontend is a React SPA backed by JSON endpoints under https://api.brokercheck.finra.org/. The endpoints are not officially documented but are public, unauthenticated, and stable. The search call:


    GET https://api.brokercheck.finra.org/search/individual?query=Smith&hl=true&nrows=12&start=0&r=25&sort=score+desc
Enter fullscreen mode Exit fullscreen mode

Returns a Solr-style JSON response with hits containing CRD numbers, names, firms, and disclosure counts. To pull a specific individual's full profile:


    GET https://api.brokercheck.finra.org/search/individual/{CRD}?hl=true
Enter fullscreen mode Exit fullscreen mode

FINRA's terms of service prohibit "scraping" in the colloquial commercial-redistribution sense. Querying these public endpoints for compliance, due diligence, or research is consistent with how the site is designed to be used. Polite rate limiting (1–2 requests/second), a real User-Agent, and not redistributing raw FINRA data wholesale are the practical guardrails.

Working Python example

The FINRA BrokerCheck Search actor wraps the endpoint with pagination, disclosure normalization, and rate limiting. Curl:


    curl -X POST "https://api.apify.com/v2/acts/nexgendata~finra-brokercheck-search/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"queries": ["John Smith"], "type": "individual", "includeDisclosures": true}'

Enter fullscreen mode Exit fullscreen mode

Python — screening a candidate list before recruiting:


    import os, json, urllib.request

    APIFY_TOKEN = os.environ["APIFY_TOKEN"]
    ACTOR = "nexgendata~finra-brokercheck-search"

    candidates = ["Jane Doe", "John Smith", "Maria Garcia"]

    payload = json.dumps({
        "queries": candidates,
        "type": "individual",
        "includeDisclosures": True,
        "includeEmploymentHistory": True,
    }).encode("utf-8")

    url = f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items?token={APIFY_TOKEN}"
    req = urllib.request.Request(url, data=payload, method="POST",
                                  headers={"Content-Type": "application/json"})

    with urllib.request.urlopen(req, timeout=300) as r:
        profiles = json.loads(r.read())

    for p in profiles:
        disc_count = len(p.get("disclosures", []))
        flag = "RED FLAG" if disc_count >= 2 else "OK" if disc_count == 0 else "REVIEW"
        print(f"{flag} | CRD {p['crd']} | {p['name']} | disclosures={disc_count}")

Enter fullscreen mode Exit fullscreen mode

How this compares to commercial vetting tools

Tool Source Coverage Per-check cost
HireRight Securities Industry FINRA + criminal + credit US securities ~$50–$120 per check (volume-priced)
Sterling Securities + Financial FINRA + state regs US + some intl ~$40–$100 per check
FINRA BrokerCheck (web UI) FINRA CRD US registered reps and firms Free, manual
BrokerCheck actor (Apify) FINRA CRD via JSON endpoint Same as BrokerCheck PPE — cents per query at volume

BrokerCheck does not replace a full background check — it has no criminal-records search, no credit, no education verification. For full pre-hire screening you still need HireRight, Sterling, or an equivalent. BrokerCheck programmatic access is the right tool for the specific job of "does this person have a clean FINRA record, and has anything new shown up since the last time I checked."

Ongoing monitoring pattern

A common compliance workflow: nightly job that pulls the current disclosure count for each of your firm's reps, compares to last night's snapshot, and alerts on any delta. A 100-rep firm runs that for under $5/month at PPE rates. The same pattern works for monitoring a watch list of competitor brokers if you're recruiting laterally.

What the data is good for — and what it isn't

BrokerCheck is canonical for what it covers: FINRA-registered brokers and broker-dealer firms. It is not canonical for:

  • Investment advisers (RIAs) — those are in IAPD. There is overlap (dually registered "hybrid" reps appear in both) but the U4 disclosure scope differs from the Form ADV Part 2B brochure supplement disclosure scope. Don't conflate them.
  • Insurance-only producers — state insurance department licenses, not FINRA.
  • Crypto / digital-asset firms not registered as broker-dealers — outside FINRA's perimeter unless they're FINRA members.
  • Former brokers — partial. BrokerCheck retains records for 10 years after a person's last registration ended, but disclosure history that was old at the time of departure may be incomplete.

For a complete picture on a senior advisor who has moved between BD and RIA registrations, you'll usually pull both BrokerCheck and IAPD and merge by CRD number (the CRD is shared across both systems).

Refresh cadence

U4 amendments must be filed by the member firm within 30 days of the broker learning of a reportable event (10 days for some categories). FINRA publishes the amendments on BrokerCheck within roughly 15 days after filing. Practically this means a weekly polling cadence catches every disclosure within ~30–45 days of the underlying event. For high-stakes monitoring (e.g., a wealth platform that custodies client assets through specific reps), nightly polling reduces the window to ~16 days end-to-end.

Related ground

BrokerCheck's institutional analogue is IAPD (Investment Adviser Public Disclosure) for SEC-registered investment advisors. For enforcement actions against brokers and firms, see our companion guide on SEC enforcement actions tracking. For Singapore-based equivalents, the Monetary Authority of Singapore publishes enforcement actions tracked by our MAS enforcement actor.

Get started: Run your first BrokerCheck batch free at the FINRA BrokerCheck Search actor. Bring a list of names or CRDs.

Related Reading

More from this series:

From the press release / event-driven series:

Top comments (0)