The Free COT API
Every endpoint is a static file on a CDN: no keys, no login, no rate limits, CORS open. Data updates within minutes of each Friday CFTC release.
FuturesBench publishes CFTC Commitments of Traders data as free, stable CSV and JSON endpoints - full weekly history back to 1986 for 107 markets, plus a one-call latest-summary endpoint. Source data is U.S. government public domain; attribution to FuturesBench is appreciated but not required - /api/v1/latest.json carries a ready-made attribution string if you want to surface one.
Endpoints
| Endpoint | What it returns |
|---|---|
/api/v1/latest.json | The current release: one summary object per market (net positions, weekly change, COT index at 26/52/156 weeks, z-score) plus the report date. |
/data/cot/<market>.csv | Full weekly history for one market, legacy futures-only report: open interest, net position and %-of-OI per trader category. Example: /data/cot/gold.csv |
/data/cot/<market>.json | The same history as JSON, plus a families object carrying the disaggregated and TFF series (net and gross long per category) where the CFTC publishes them. |
/data/cot/<market>.disagg.csv | Disaggregated report history (producer/merchant, swap dealers, managed money, other reportables). Physical commodities only - see below. |
/data/cot/<market>.tff.csv | Traders in Financial Futures history (dealer, asset manager, leveraged funds). Financial markets only - see below. |
/data/cot/all-latest.csv | The current release across every published market, one row each. |
/data/cot/recaps.json | Weekly recap manifest: dates, top movers and extremes for recent releases. |
Market slugs are listed in llms.txt and linked from every page under /cot/. /api/v1/cot/latest.json serves the same bytes as /api/v1/latest.json, which is the canonical path.
Which report family a market has
The CFTC does not publish all three report families for every market, so .disagg.csv and .tff.csv exist only where the underlying report does. The split follows the CFTC's own: the disaggregated report covers physical commodities (grains, energy, metals, softs, livestock), and Traders in Financial Futures covers financials (equity indices, interest rates, currencies). So sp500-emini.disagg.csv does not exist and sp500-emini.tff.csv does; for corn it is the other way round. The legacy .csv and .json exist for every market.
You never have to guess. Every market in /api/v1/latest.json carries a datasets object listing exactly the URLs that exist for it:
{"markets": {"sp500-emini": {"datasets": {
"csv": "https://futuresbench.com/data/cot/sp500-emini.csv",
"json": "https://futuresbench.com/data/cot/sp500-emini.json",
"tff_csv": "https://futuresbench.com/data/cot/sp500-emini.tff.csv"}}}}
Read the keys rather than building the path by hand and a new family appearing for a market picks itself up.
The CFTC's own datasets (Socrata IDs and flat files)
If you would rather pull straight from the source, these are the six datasets our pipeline ingests every Friday. The CFTC publishes each report twice: as a Socrata dataset on publicreporting.cftc.gov (queryable, full history) and as a current-week flat file under cftc.gov/dea/newcot/.
| Report | Socrata dataset ID | Current-week flat file | FuturesBench equivalent |
|---|---|---|---|
| Legacy, futures only | 6dca-aqww | deafut.txt | /data/cot/<market>.csv |
| Legacy, futures and options combined | jun7-fc8e | deacom.txt | - |
| Disaggregated, futures only | 72hh-3qpy | f_disagg.txt | /data/cot/<market>.disagg.csv |
| Disaggregated, futures and options combined | kh3c-gbw2 | c_disagg.txt | - |
| Traders in Financial Futures, futures only | gpe5-46if | FinFutWk.txt | /data/cot/<market>.tff.csv |
| Traders in Financial Futures, futures and options combined | yw9f-hn96 | FinComWk.txt | - |
One week of one report, as CSV (the $where date is the Tuesday the positions are as of):
https://publicreporting.cftc.gov/resource/gpe5-46if.csv?$where=report_date_as_yyyy_mm_dd='2026-09-22'&$limit=5000
The whole dataset as one download is https://publicreporting.cftc.gov/api/views/gpe5-46if/rows.csv?accessType=DOWNLOAD (swap in any ID above). Things we learned running this every week:
- Futures-only vs combined is the easy mistake.
kh3c-gbw2andyw9f-hn96look like the disaggregated and TFF datasets you want, but they are the combined (futures plus options) variants. Mixing the two gives you positions that do not reconcile week to week. - The flat files sit behind a CDN cache. Right after a release the
newcotfile can still serve the previous week for a while, and cache-busting does not help. Socrata is not CDN-fronted, so it is the authoritative fallback. - The six reports do not always land together. On 2026-09-25 the legacy report was live at release time while the disaggregated and TFF reports were still on the prior week in both sources. Check each dataset's latest date rather than assuming one release means all six.
- cftc.gov rejects some default HTTP clients. A request with Python's default
urllibuser agent gets HTTP 403; send a descriptiveUser-Agent.
Stability promise
The v1 CSV and JSON schemas are additive-only: existing columns and keys never change meaning, get renamed, or disappear. New columns and keys may appear. A breaking change would ship under a new path (/api/v2/), never in place. Null values are empty CSV cells / JSON null - never zero.
Examples
curl
curl -s https://futuresbench.com/api/v1/latest.json | head -c 400
Python / pandas
import pandas as pd
gold = pd.read_csv("https://futuresbench.com/data/cot/gold.csv",
parse_dates=["report_date"])
print(gold.tail())
Google Sheets
=IMPORTDATA("https://futuresbench.com/data/cot/all-latest.csv")
JavaScript
const r = await fetch("https://futuresbench.com/api/v1/latest.json");
const { report_date, markets } = await r.json();
console.log(report_date, markets.gold.net_noncommercial);
Fair use
There are no keys and no enforced limits - the endpoints are CDN-cached static files and normal use costs us nearly nothing. If you're polling for the weekly release, once a minute from 3:30 p.m. ET on Fridays is plenty (the data is weekly). For bulk backfills, each market is one file - please don't re-download unchanged history on a schedule.
Questions or a use case that needs more: data@futuresbench.com.
Source & licensing
Underlying data: CFTC Commitments of Traders reports, U.S. federal public domain. Derived metrics (net positions, COT index, z-scores) are computed as documented in the methodology. A link back to futuresbench.com when you publish something built on this data is appreciated.