Report Jul 21, 2026 · live minutes after CFTC

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

EndpointWhat it returns
/api/v1/latest.jsonThe 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>.csvFull 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>.jsonThe 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.csvDisaggregated report history (producer/merchant, swap dealers, managed money, other reportables), where available.
/data/cot/<market>.tff.csvTraders in Financial Futures history (dealer, asset manager, leveraged funds), where available.
/data/cot/all-latest.csvThe current release across every published market, one row each.
/data/cot/recaps.jsonWeekly 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.