NFA BASIC Scraper - Futures Broker & CTA/CPO Registry
Independent tool. Trademarks referenced on this page are the property of their respective owners and are used only to identify the public website this tool reads. No affiliation or endorsement.
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
- Fetches CPO/CTA pool and principal detail (pool count, per-pool exemption/status, officers and 10%+ owners) 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
- No authentication, and quick per record
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,
"includePools": false,
"includePrincipals": 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, Commodity Pool Operator). 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. |
includePools |
boolean | false |
Fetch registered pool detail for CPO/CTA firms. Adds one API call per firm. |
includePrincipals |
boolean | false |
Fetch principal/officer detail for CPO/CTA firms. Adds one API call per firm. |
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. |
registration_status |
string | NFA membership status. Only present when includePools or includePrincipals is true on a firm record. |
registration_date |
string | Earliest active CPO/CTA registration date (MM/DD/YYYY). Only present when includePools or includePrincipals is true on a firm record. |
principals |
array | Principals as NAME|TITLE|10pct_owner strings. Only present when includePrincipals is true on a firm record. |
pool_count |
number | Number of active pools registered under this firm. Only present when includePools is true on a firm record. |
pools |
array | Per-pool detail as POOL_ID|NAME|EXEMPTION_TYPE|STATUS strings. Only present when includePools is true on a firm record. |
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.
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.