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.
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), where available. |
/data/cot/<market>.tff.csv | Traders in Financial Futures history (dealer, asset manager, leveraged funds), where available. |
/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/.
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.