# NFA BASIC Futures Broker, CTA, CPO & Swap Dealer Scraper (`scrapers_lat/nfa-basic-futures-registrants-scraper`) Actor

Scrape CFTC-registered futures firms and individuals from NFA BASIC: FCM, IB, CPO, CTA, swap dealer and forex dealer records with office address, phone, principals, 10% owners, disciplinary actions with fine amounts, funds and net-capital figures. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/nfa-basic-futures-registrants-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.75 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## NFA BASIC Futures Broker, CTA, CPO & Swap Dealer Scraper

> Pull the complete public registration and disciplinary record of the **US derivatives industry** — every futures commission merchant, introducing broker, commodity pool operator, commodity trading advisor, swap dealer and retail forex dealer registered with the CFTC or a member of the National Futures Association.

**📥 [Input](https://apify.com/scrapers_lat/nfa-basic-futures-registrants-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/nfa-basic-futures-registrants-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/nfa-basic-futures-registrants-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/nfa-basic-futures-registrants-scraper/examples)**

Search by name, look up exact NFA IDs, or **sweep the entire registry** filtered down to just the registration types you care about. Every match comes back as one flat, spreadsheet-ready row combining contact details, the people in charge, the full disciplinary history with fine amounts, and — for firms holding customer money — the latest financial filings.

Built for **KYB and AML screening, counterparty due diligence, compliance monitoring and financial-sector lead generation**.

### What you get

**Identity and status** — NFA ID, current legal name, former names and DBAs, NFA membership status (approved, pending, permanently barred, withdrawn), every CFTC registration currently held, and boolean flags for each one (`isFcm`, `isIntroducingBroker`, `isCommodityPoolOperator`, `isCommodityTradingAdvisor`, `isSwapDealer`, `isRetailForexDealer`).

**Contact details** — business street address, city, state, ZIP, country and the **main business phone number**, plus any additional office phone numbers on record.

**The people in charge** — every listed principal with their titles, the **10% or greater beneficial owners** called out separately, and the most senior principal surfaced as a headline contact with their own NFA ID for follow-up.

**Full disciplinary history** — every NFA, CFTC, exchange and foreign-regulator case, with effective date, case reference, violations cited and outcome. Counts are broken out per regulator, and the **total and largest fine amounts are parsed into clean USD numbers** so you can sort and threshold on them. Waived fines are excluded and amounts restated across multiple line items are counted once.

**Financial strength (futures commission merchants)** — the latest monthly filing: adjusted net capital, required net capital and **excess net capital**, plus segregated, secured (Section 30.7) and cleared-swaps customer funds with the required and excess amounts for each.

**Business activity** — commodity pools currently operated and ceased, CFTC exemptions claimed (such as 4.7), registration history dates, and declared activity: whether the firm has commodity interest customers, solicits customers, directs accounts or operates pools.

**Individuals** — associated persons and listed principals with first and last name, the sponsoring firm and its NFA ID, the capacity held and the date the relationship took effect.

**Commodity pools** — fund name and pool ID, current or ceased status, and the operating CPO complete with its address, phone and principals, so every fund is immediately actionable.

### Who is it for

- **Compliance and AML teams** screening counterparties, onboarding brokers or monitoring for new disciplinary actions.
- **Risk and treasury desks** comparing FCM financial strength before placing customer funds.
- **Sales teams** selling software, data, clearing or services into the futures and derivatives industry.
- **Investors and allocators** mapping CPOs, CTAs and the managed futures funds they run.
- **Journalists and researchers** tracking enforcement patterns and fine totals across regulators.

### How to use it

1. Pick what to scrape: **firms**, **individuals** or **commodity pools**.
2. Enter search queries — or leave them empty to sweep the whole registry.
3. Narrow with the filters: registration type, NFA membership status, only registrants with disciplinary actions, US state, or only those with a phone number.
4. Set the max number of records and run it. Export to JSON, CSV or Excel.

Matching works on word starts, so a query of `trading` finds `HJS TRADING INC` as well as `TRADING & CAPITAL STRATEGIES INC`.

### Example input

Every FCM in Illinois that has been disciplined, with contacts and financials:

```json
{
  "recordType": "firms",
  "registrationTypes": ["Futures Commission Merchant"],
  "onlyWithRegulatoryActions": true,
  "usStates": ["IL"],
  "maxRegistrants": 500
}
```

Sweep every active NFA member commodity pool operator and trading advisor:

```json
{
  "recordType": "firms",
  "registrationTypes": ["Commodity Pool Operator", "Commodity Trading Advisor"],
  "membershipStatuses": ["NFA Member Approved"],
  "requirePhone": true,
  "maxRegistrants": 5000
}
```

Look up specific registrants by NFA ID:

```json
{
  "nfaIds": ["0002014", "0339826"]
}
```

### FAQ

**Do I need an account, API key or login?**
No. Everything the actor returns is public record, and it handles access internally.

**Am I charged if a run returns nothing?**
No. You are only charged per real record returned. A run that finds no matches or fails costs nothing.

**Can I get the whole registry?**
Yes. Leave the search queries empty and the actor sweeps the registry alphabetically, de-duplicating as it goes. Combine that with the registration-type filter to pull a complete, targeted segment such as every registered introducing broker.

**Why are financial figures empty for most firms?**
Only futures commission merchants file the monthly net-capital and customer-funds reports. Other registration types have no such filings on record.

**Are fine amounts reliable?**
They are parsed from the official outcome text of each case. Amounts restated across several line items of the same case are counted once, and fines recorded as waived are excluded from the imposed total.

**Does it lose data if a run times out?**
No. Records are pushed in batches as they are collected, so whatever has been gathered is always in your dataset.

### Related actors

- **SEC IAPD Registered Investment Adviser (RIA) Firm Scraper** — investment advisers registered with the SEC and state regulators.
- **FINRA BrokerCheck Scraper** — broker-dealer firms and registered representatives.
- **SEC Form D Private Placements Scraper** — Reg D private placements with issuer officers and placement agents.
- **CFTC / SEC EDGAR Filings Scrapers** — filings, financials and insider transactions.

***

Built by [scrapers.lat](https://scrapers.lat) — structured data from public registries, tenders and marketplaces.

*This actor is not affiliated with, endorsed by or sponsored by the National Futures Association or the Commodity Futures Trading Commission. It collects publicly available registration and disciplinary information.*

# Actor input Schema

## `recordType` (type: `string`):

Firms = CFTC-registered companies (futures commission merchants, introducing brokers, commodity pool operators, commodity trading advisors, swap dealers, forex dealers). Individuals = associated persons and listed principals. Pools = commodity pools / managed futures funds together with the operator (CPO) that runs them.

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

Firm, fund or person name keywords, one search per item (for example 'capital', 'Goldman Sachs', 'grain'). Matching is on word starts, so 'trading' finds 'HJS TRADING INC'. For Individuals, use 'Lastname' or 'Lastname, Firstname'. Leave empty to sweep the whole registry alphabetically.

## `nfaIds` (type: `array`):

Optional. Look up exact NFA ID numbers directly (for example '0002014'). Leading zeros are added automatically. When given, these are fetched instead of running searches.

## `registrationTypes` (type: `array`):

Keep only registrants currently holding these CFTC registrations. Leave empty for every type.

## `membershipStatuses` (type: `array`):

Keep only registrants with these NFA membership statuses. 'NFA Member Approved' means an active, in-good-standing member. Leave empty for all statuses.

## `onlyWithRegulatoryActions` (type: `boolean`):

Return only registrants carrying at least one NFA, CFTC, exchange or foreign-regulator disciplinary action. Useful for AML, KYC and counterparty risk screening.

## `usStates` (type: `array`):

Optional. Keep only registrants whose business address is in these two-letter states (for example 'NY', 'IL', 'TX'). Requires full profiles to be fetched.

## `requirePhone` (type: `boolean`):

Return only registrants that have a business phone number on record. Requires full profiles to be fetched.

## `fetchProfiles` (type: `boolean`):

Fetch the full profile for every match: business address and phone, DBAs and former names, listed principals and 10% owners, registration history, commodity pools and CFTC exemptions. Turn off for a faster, lighter run with name and status only.

## `fetchRegulatoryActions` (type: `boolean`):

Fetch every NFA, CFTC, exchange and foreign-regulator case on record, with case reference, effective date, violations, outcome and the total fine amount imposed.

## `fetchFinancials` (type: `boolean`):

For futures commission merchants, fetch the latest monthly financial figures: adjusted net capital, required net capital, excess net capital and segregated, secured and cleared-swaps customer funds.

## `maxRegistrants` (type: `integer`):

Maximum number of registrant records to return across all searches.

## Actor input object example

```json
{
  "recordType": "firms",
  "searchQueries": [
    "capital"
  ],
  "onlyWithRegulatoryActions": false,
  "requirePhone": false,
  "fetchProfiles": true,
  "fetchRegulatoryActions": true,
  "fetchFinancials": true,
  "maxRegistrants": 30
}
```

# Actor output Schema

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

No description

# 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": [
        "capital"
    ],
    "maxRegistrants": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/nfa-basic-futures-registrants-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": ["capital"],
    "maxRegistrants": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/nfa-basic-futures-registrants-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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": [
    "capital"
  ],
  "maxRegistrants": 30
}' |
apify call scrapers_lat/nfa-basic-futures-registrants-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/nfa-basic-futures-registrants-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DHbKu7JLMGkbnejKi/builds/5e0DMVvLgCnZg9IsY/openapi.json
