# CFTC Commitments of Traders (COT) Data — Weekly Positions (`nexgensignal/cftc-commitments-of-traders-records`) Actor

Official CFTC Commitments of Traders data by market and week: open interest, long, short and spread positions, weekly changes, net positions, trader counts. Legacy, Disaggregated and TFF reports. No API key. Part of NexGen Signal — official-source data products

- **URL**: https://apify.com/nexgensignal/cftc-commitments-of-traders-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** News, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 cftc cot records

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## CFTC Commitments of Traders (COT) Data — Weekly Positions

**Official source. No API key. Pay per record.**

This actor reads the **Commitments of Traders (COT)** reports straight from the U.S. Commodity Futures Trading Commission's Public Reporting Environment and returns one clean record per market per weekly report: open interest; long, short and spread positions by trader category; the weekly change in each; percentages of open interest; trader counts; concentration ratios of the largest 4 and 8 traders; and computed **net positions and weekly net changes** per category.

All six COT report series are available:

| Report | Trader categories | Rows on 2 Oct 2026 |
|---|---|---|
| Legacy — futures only | commercial, non-commercial, non-reportable | 290,030 (since 1986) |
| Legacy — futures and options combined | same | 279,195 (since 1995) |
| Disaggregated — futures only / combined | producer-merchant, swap dealer, managed money, other reportable | 185,631 / 191,743 (since 2006) |
| Traders in Financial Futures (TFF) — futures only / combined | dealer, asset manager, leveraged funds, other reportable | 46,838 / 46,890 (since 2006) |

The latest report in the source on 2 October 2026 is dated **29 September 2026** (377 Legacy futures markets). CFTC publishes each report on Friday for positions as of the Tuesday.

Use it three ways:

- **Weekly positioning snapshot.** `latestReportOnly: true` returns the newest report for every market you filter on.
- **Positioning history.** Every week for gold, crude oil, the S\&P 500 or the euro since the series began, for charting net speculative positioning and its weekly velocity.
- **Screening.** All markets in a commodity group (agriculture, natural resources, financial instruments) for a date range.

### Who buys this and for what job

- **Traders and hedge funds** following speculative and commercial positioning (net non-commercial, managed money, leveraged funds).
- **Quant and research teams** building positioning factors and back-tests from full weekly history.
- **Commodity producers, merchants and risk managers** watching who holds the market in their contracts.
- **Financial media and newsletters** publishing the weekly COT chart.
- **Data and fintech teams** feeding COT into dashboards without parsing CFTC files.

### Sample output

![Sample output — CFTC Commitments of Traders](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/cftc-commitments-of-traders-records.png)

From live run rqbMN7gT8oaaK3IJo (2 October 2026; Legacy futures-only, gold). The record below is shortened to its main fields; each record holds all 76 fields.

```json
{
  "record_id": "CFTC:legacy_futures_only:260929088691F",
  "report_type": "legacy_futures_only",
  "report_name": "Legacy - Futures Only",
  "report_date": "2026-09-29",
  "market_and_exchange_names": "GOLD - COMMODITY EXCHANGE INC.",
  "report_date_as_yyyy_mm_dd": "2026-09-29T00:00:00.000",
  "yyyy_report_week_ww": "2026 Report Week 39",
  "contract_market_name": "GOLD",
  "cftc_contract_market_code": "088691",
  "cftc_market_code": "CMX",
  "cftc_region_code": "NYC",
  "cftc_commodity_code": "088",
  "commodity_name": "GOLD",
  "contract_units": "(CONTRACTS OF 100 TROY OUNCES)",
  "open_interest_all": 406456,
  "noncomm_positions_long_all": 249736,
  "noncomm_positions_short_all": 31104,
  "noncomm_postions_spread_all": 49105,
  "comm_positions_long_all": 58831,
  "comm_positions_short_all": 309798,
  "change_in_open_interest_all": -6344,
  "change_in_noncomm_long_all": -4246,
  "change_in_noncomm_short_all": 2975,
  "pct_of_oi_noncomm_long_all": 61.4,
  "traders_tot_all": 286,
  "conc_net_le_4_tdr_long_all": 20.6,
  "net_noncommercial": 218632,
  "change_in_net_noncommercial": -7221,
  "net_commercial": -250967,
  "change_in_net_commercial": 11936,
  "source": "U.S. Commodity Futures Trading Commission (CFTC) — Commitments of Traders, Public Reporting Environment",
  "source_dataset": "Legacy - Futures Only (Socrata dataset 6dca-aqww, https://publicreporting.cftc.gov/resource/6dca-aqww.json)",
  "licence": "Public domain — a work of the U.S. federal government, not subject to copyright in the United States (17 U.S.C. § 105).",
  "attribution": "Source: U.S. Commodity Futures Trading Commission, Commitments of Traders reports; reformatted by NexGen Signal.",
  "observed_at": "2026-10-03T05:34:07Z"
}
```

### Input

```json
{
  "reportType": "legacy_futures_only",
  "marketContains": ["GOLD - COMMODITY EXCHANGE"],
  "maxRecords": 10
}
```

| Field | Meaning |
|---|---|
| `reportType` | `legacy_futures_only` (default), `legacy_combined`, `disaggregated_futures_only`, `disaggregated_combined`, `tff_futures_only`, `tff_combined` |
| `marketContains` | Texts matched against CFTC's "market and exchange names", e.g. `CRUDE OIL, LIGHT SWEET`, `E-MINI S&P 500`, `EURO FX`, `CORN` |
| `contractCodes` | Exact CFTC contract market codes, e.g. `088691` (gold), `067651` (WTI crude), `13874A` (E-mini S\&P 500) |
| `commodityGroups` | `AGRICULTURE`, `NATURAL RESOURCES`, `FINANCIAL INSTRUMENTS` |
| `latestReportOnly` | Only the newest report date for your filters |
| `dateFrom`, `dateTo` | Report-date range |
| `sortBy` | `newest` (default) or `oldest` |
| `maxRecords` | Most records delivered and billed in this run |

### What is in each record

Field names are CFTC's own, so they match the CFTC documentation (including CFTC's own spellings such as `noncomm_postions_spread_all`). Records hold the **all-crop-years** figures; the old/other crop-year splits of agricultural contracts are not included. Each record also carries:

- `report_date` (YYYY-MM-DD) and `report_type`;
- `net_<category>` = long minus short, and `change_in_net_<category>` = the week's change in that net position, for each trader category of the report;
- `source`, `source_dataset`, `licence`, `attribution`, `observed_at`.

COT data is published only in aggregate, market by market. There is no person-level information in it, and the actor requests a fixed list of columns.

### Pricing

| Apify plan | Price per record |
|---|---|
| Free | $0.05 |
| Bronze | $0.045 |
| Silver | $0.04 |
| Gold, Platinum, Diamond | $0.0335 |

One record = one market on one report date. Records are delivered first and charged after; with a maximum total charge set, the actor stops before delivering records it could not charge for.

### Run end states and receipt

- **Delivered N CFTC Commitments of Traders record(s)** — with a note when your `maxRecords` limit was reached.
- **Nothing matched your filters** — nothing charged.
- **CAPPED** — stopped at your maximum total charge.
- **PARTIAL** — the API stopped answering part-way; what was delivered is kept and charged.
- **SOURCE UNAVAILABLE** — the CFTC API could not be reached after retries; nothing charged.

The `RUN_RECEIPT` record lists the robots.txt decision for publicreporting.cftc.gov, the dataset used, the rows matching your filters, the latest report date, calls and retries, and delivered and charged counts. The actor waits at least one second between requests, as the site's robots.txt asks.

### Source and licence

Data: U.S. Commodity Futures Trading Commission, Commitments of Traders reports, Public Reporting Environment (publicreporting.cftc.gov). Works of the U.S. federal government are in the public domain in the United States (17 U.S.C. § 105). This actor is not affiliated with or endorsed by the CFTC.

Part of NexGen Signal — official-source data products.

# Actor input Schema

## `reportType` (type: `string`):

Which COT report. Legacy splits traders into commercial / non-commercial; Disaggregated (commodities) into producer-merchant, swap dealer, managed money and other; TFF (financial futures) into dealer, asset manager, leveraged funds and other.

## `marketContains` (type: `array`):

Only markets whose 'market and exchange names' contain any of these texts (not case-sensitive), e.g. CRUDE OIL, LIGHT SWEET, E-MINI S\&P 500, EURO FX, CORN.

## `contractCodes` (type: `array`):

Exact CFTC contract market codes, e.g. 088691 (gold, COMEX), 067651 (WTI crude, NYMEX), 13874A (E-mini S\&P 500).

## `commodityGroups` (type: `array`):

CFTC commodity group names, e.g. AGRICULTURE, NATURAL RESOURCES, FINANCIAL INSTRUMENTS.

## `latestReportOnly` (type: `boolean`):

Only the most recent report date for your filters (one row per market) — the weekly snapshot.

## `dateFrom` (type: `string`):

Optional. Report dates on or after this day (YYYY-MM-DD). Legacy futures data goes back to 1986.

## `dateTo` (type: `string`):

Optional. Report dates on or before this day (YYYY-MM-DD).

## `sortBy` (type: `string`):

Which rows come first when more match than your maximum.

## `maxRecords` (type: `integer`):

Maximum records delivered and billed in this run. One record = one market on one report date.

## Actor input object example

```json
{
  "reportType": "legacy_futures_only",
  "marketContains": [
    "GOLD - COMMODITY EXCHANGE"
  ],
  "contractCodes": [],
  "commodityGroups": [],
  "latestReportOnly": false,
  "sortBy": "newest",
  "maxRecords": 10
}
```

# Actor output Schema

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

The delivered (and billed) records.

## `receipt` (type: `string`):

Robots decision, rows matching, delivered and charged counts.

# 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 = {
    "marketContains": [
        "GOLD - COMMODITY EXCHANGE"
    ],
    "maxRecords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/cftc-commitments-of-traders-records").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 = {
    "marketContains": ["GOLD - COMMODITY EXCHANGE"],
    "maxRecords": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/cftc-commitments-of-traders-records").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 '{
  "marketContains": [
    "GOLD - COMMODITY EXCHANGE"
  ],
  "maxRecords": 10
}' |
apify call nexgensignal/cftc-commitments-of-traders-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/cftc-commitments-of-traders-records"
        }
    }
}
```

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/5Fg81ZvFWLRVB0xER/builds/wDdIzXholIRdAtATh/openapi.json
