NFA BASIC Scraper - Futures Broker & CTA/CPO Registry
NFA BASIC Scraper - Futures Broker, CTA/CPO & CFTC Registration Lookup
Scrapes registrant data from NFA BASIC, the public regulatory database of the National Futures Association. Use it as an NFA member lookup and CFTC registration check: it returns registration status, disciplinary history, and regulatory actions for Futures Commission Merchants, Introducing Brokers, CTAs, CPOs, Swap Dealers, and Associated Persons — 282,000+ registrants in total.
NFA BASIC Scraper & Broker Registration Check Features
- Extracts firm and individual registrant records from the full NFA BASIC dataset
- Returns NFA membership status, CFTC registration types, and regulatory action counts for every record
- Fetches full disciplinary action detail — contributor, reference number, date, outcome, and action description — per registrant
- Fetches complete registration lifecycle history on request
- Filters by membership status, registration type, or "has regulatory actions" flag
- Searches by name fragment or enumerates all registrants alphabetically with a blank query
- Pure API scraping — no browser required, no proxy needed, no authentication
Who Uses NFA BASIC Data?
- Compliance teams — Run registration checks on counterparties, verify FCM/IB status, screen for disciplinary history before onboarding
- Enforcement attorneys — Pull the full regulatory action index for a firm or individual as background for CFTC reparations or NFA arbitration proceedings
- M&A due diligence teams — Screen acquisition targets in the derivatives space for NFA membership status and pending enforcement actions
- AML and KYC analysts — Check whether an entity holds current derivatives registrations and whether they carry enforcement history
- Fintech and compliance SaaS builders — Integrate NFA registration data into onboarding workflows without paying for a third-party compliance API
- Researchers — Study enforcement patterns across the US derivatives industry using the complete historical action dataset
How NFA BASIC Scraper Works
- You provide a search type (firm or individual), an optional name fragment, and optional filters. Leave the name blank to enumerate all registrants.
- The scraper pages through NFA's search API in batches of 50, collecting registration status and metadata for each result.
- If disciplinary detail is enabled (the default), it calls a second endpoint per record to fetch the full regulatory action index.
- Records are returned as structured JSON. The
regulatory_actionsfield is a JSON string you can parse;regulatory_actions_countis already an integer at the top level.
Input
{
"searchType": "firm",
"searchQuery": "Goldman Sachs",
"membershipStatusFilter": "",
"regTypeFilter": "",
"hasRegulatoryActions": false,
"includeDisciplinaryDetail": true,
"includeRegistrationHistory": false,
"maxItems": 10
}
| Field | Type | Default | Description |
|---|---|---|---|
searchType |
string | firm |
firm for FCMs, IBs, CTAs, CPOs, Swap Dealers. individual for Associated Persons. |
searchQuery |
string | "" |
Name fragment to search. Empty string enumerates all registrants alphabetically. |
membershipStatusFilter |
string | "" |
Filter by membership status: NFA Member Approved, Not an NFA Member, or blank for all. |
regTypeFilter |
string | "" |
Filter by registration type (e.g. Futures Commission Merchant). Blank for all. |
hasRegulatoryActions |
boolean | false |
When true, only return registrants with at least one regulatory action on record. |
includeDisciplinaryDetail |
boolean | true |
Fetch full regulatory action detail per registrant. Adds one API call per record. |
includeRegistrationHistory |
boolean | false |
Fetch full registration lifecycle history per registrant. |
maxItems |
integer | 10 |
Maximum number of records to return. |
Example — enumerate all individuals with regulatory actions:
{
"searchType": "individual",
"searchQuery": "",
"hasRegulatoryActions": true,
"includeDisciplinaryDetail": true,
"maxItems": 500
}
NFA BASIC Scraper Output Fields
{
"nfa_id": "0002014",
"entity_type": "firm",
"name": "GOLDMAN SACHS & CO LLC",
"location": "NEW YORK, NY",
"nfa_membership_status": "NFA Member Approved",
"registration_types": "Futures Commission Merchant, Swap Dealer",
"has_regulatory_actions": true,
"regulatory_actions_count": 86,
"regulatory_actions": "[{\"contributor\":\"NFA\",\"reference\":\"22BCC00003\",\"effective_date\":\"04/15/2022\",\"actions\":\"• GENERAL CONDUCT\",\"outcome\":\"• FINE $2,500,000\"}]",
"registration_history": null,
"profile_url": "https://www.nfa.futures.org/BasicNet/firm.aspx?nfaId=0002014",
"scraped_at": "2026-05-06T18:41:09.000Z"
}
| Field | Type | Description |
|---|---|---|
nfa_id |
string | NFA registration ID, 7-digit zero-padded (e.g. 0002014) |
entity_type |
string | firm or individual |
name |
string | Registrant name |
location |
string | City and state (e.g. NEW YORK, NY). Firms only — blank for individuals. |
nfa_membership_status |
string | NFA membership status (NFA Member Approved, Not an NFA Member, etc.) |
registration_types |
string | Comma-separated CFTC registration types: FCM, IB, CTA, CPO, Swap Dealer, etc. |
has_regulatory_actions |
boolean | Whether the registrant has any regulatory actions on record |
regulatory_actions_count |
number | Count of regulatory actions on record |
regulatory_actions |
string | Regulatory actions as a JSON string. null if includeDisciplinaryDetail is false. Each action: contributor, reference, effective_date, actions, outcome. |
registration_history |
string | Registration lifecycle events as a JSON string. null if includeRegistrationHistory is false. Each event: category, description, effective_date. |
profile_url |
string | URL to the NFA BASIC profile page |
scraped_at |
string | ISO timestamp when this record was scraped |
🔍 FAQ
How do I scrape NFA BASIC?
NFA BASIC Scraper handles it. Set searchType, optionally provide a searchQuery or leave it blank to get everything, configure filters, and run. It pages through the registry and returns structured JSON for each registrant.
What data can I get from NFA BASIC?
NFA BASIC Scraper returns registration status, CFTC registration types, NFA membership status, and regulatory action counts for every registrant. With includeDisciplinaryDetail: true, you also get the full action index — reference numbers, dates, action types, and outcomes. With includeRegistrationHistory: true, you get the complete registration lifecycle.
How much does NFA BASIC Scraper cost to run?
NFA BASIC Scraper costs $0.10 per run plus $0.04 per record. A Goldman Sachs search returning 5 firms with disciplinary detail costs $0.30. The full 282K-record dataset costs around $11,300 — which is cheaper than most compliance data subscriptions, depending on your vendor.
Does NFA BASIC Scraper need proxies?
No. NFA BASIC is a public regulatory site with no bot protection. Standard datacenter IPs work fine. Leave proxyConfiguration at the default.
Can I enumerate the entire NFA BASIC database?
Yes. Set searchQuery to an empty string and maxItems to however many you need. NFA BASIC Scraper pages through all 73,000+ firms or 208,000+ Associated Persons alphabetically, stopping at your limit.
How do I verify a broker's CFTC registration or pull a swap dealer list?
Run a firm search with the broker's name in searchQuery, or set regTypeFilter to Swap Dealer (or Futures Commission Merchant, Commodity Trading Advisor, etc.) with a blank query to pull the full list for that registration type. Each record returns NFA membership status and CFTC registration types, so you can confirm whether a firm holds a current registration and which one.
Why does regulatory_actions come back as a string?
Apify datasets handle nested arrays as strings in certain output configurations. Parse the field with JSON.parse() in your downstream code. The regulatory_actions_count integer is available at the top level if you only need the count.
Need More Features?
Need a specific registration type filter, additional detail endpoints, or a bulk full-dataset export mode? File an issue or get in touch.
Why Use NFA BASIC Scraper?
- No authentication required — NFA BASIC is fully public, and the scraper hits the same API the official site uses. No session management, no credentials.
- Disciplinary detail included — Returns the full action record per registrant: contributor, reference number, date, action type, and outcome text, ready to parse.
- Clean structured output — Consistent JSON with stable field names across firms and individuals, so you spend less time normalizing and more time using it.