DEV Community

Ava Torres
Ava Torres

Posted on

Automating FINRA BrokerCheck Searches for Compliance Teams

FINRA's BrokerCheck is the public database for verifying registered brokers and investment advisors in the US. If you're doing KYC, building a compliance workflow, or just trying to verify that the person managing someone's money is actually licensed -- BrokerCheck is the authoritative source.

The annoying part: the BrokerCheck UI is built for one-off lookups. Typing in a name, clicking through, downloading a PDF. Fine for occasional use, completely unusable if you need to verify 50 advisors before a fund closes or run weekly checks on a broker network.

FINRA does have a JSON API at api.brokercheck.finra.org -- it's just undocumented and has some quirks worth knowing about.

What the data looks like

Here's a sample record from an individual broker search:

{
  "brokerName": "Jennifer A. Caldwell",
  "CRDNumber": "4521890",
  "type": "individual",
  "registrationStatus": "ACTIVE",
  "currentEmployer": "Merrill Lynch Pierce Fenner & Smith",
  "employerCRD": "7691",
  "licenses": ["Series 7", "Series 66"],
  "statesRegistered": ["CA", "NY", "TX"],
  "disclosureCount": 0,
  "yearsInIndustry": 12,
  "examsPassed": ["SIE", "Series 7 Top-Off", "Series 66"]
}
Enter fullscreen mode Exit fullscreen mode

And for a firm:

{
  "firmName": "Vanguard Marketing Corporation",
  "CRDNumber": "32361",
  "type": "firm",
  "status": "ACTIVE",
  "registeredIn": 52,
  "totalBrokers": 247,
  "disclosureCount": 3
}
Enter fullscreen mode Exit fullscreen mode

disclosureCount is the field compliance teams care most about. Zero is clean. Anything above that warrants a deeper look at the full BrokerCheck report.

The API quirk you'll hit

FINRA's API returns a minimum of 20 results regardless of what you set as the limit parameter. So if you search for a name and get back 20 results, you don't know if there are 20 matches or if the result was capped. The actor handles pagination and deduplication -- you just get back the full result set.

Also: CRD numbers are the reliable lookup key. Names are fuzzy. If you have CRD numbers (which show up in business cards, ADV filings, etc.), use those.

Running it

{
  "searchType": "individual",
  "searchQuery": "Jennifer Caldwell",
  "maxResults": 50
}
Enter fullscreen mode Exit fullscreen mode

Or by CRD directly:

{
  "searchType": "individual",
  "crdNumber": "4521890",
  "maxResults": 1
}
Enter fullscreen mode Exit fullscreen mode

Firm search works the same way with "searchType": "firm".

Use cases that actually make sense

Compliance teams doing pre-engagement checks on advisors. RIAs verifying their broker-dealer network. Journalists or researchers mapping advisor registration across states. Anyone building a financial advisor directory who needs fresh data instead of stale exports.

One thing it won't replace: the full PDF BrokerCheck report, which has detailed disclosure narratives. The API gives you the structured data -- counts, registration status, licenses. For the actual text of a complaint, you still need to pull the PDF. For most verification workflows though, the structured data is enough to flag who needs a closer look.


Try the actor: FINRA BrokerCheck Search on Apify

Good fit for compliance teams that need regular verification runs without manual lookups.

Top comments (0)