This comparison is for FX traders, quant developers, and research engineers who want Commitments of Traders positioning in code and are deciding where to pull it from. The obvious route is the source itself: the CFTC Public Reporting Environment publishes every COT report as open datasets behind a Socrata (SODA) API, and the CFTC also offers annual compressed history files. The alternative is FXMacroData's currency-mapped /v1/cot/{ccy} endpoint, which serves the same official weekly report keyed by currency rather than by contract market code. If you need a refresher on what the report measures, start with our COT report guide for FX traders; the endpoint's launch notes are in Introducing the COT Positioning Endpoint. This article is only about the developer choice.
The core finding: the CFTC API is free, public domain, complete, and the authoritative source, and it is the right choice when you need every report family (Legacy, Disaggregated, Traders in Financial Futures), options-combined figures, or contracts outside the major currencies. FXMacroData is the better fit when COT positioning is one input in an FX workflow: it maps the major currency futures to currency codes, pre-computes net positions and z-scores, stamps each weekly row with the CFTC's Friday release instant so backtests stay free of lookahead, and returns it in the same JSON shape as release data for 22 currencies, calendars, FX rates, and MCP tools.
Decision snapshot
Choose the CFTC API when
You need all six COT datasets, TFF trader categories such as asset managers and leveraged funds, futures-and-options combined figures, or any of the hundreds of non-FX contracts, at zero cost.
Choose FXMacroData when
You want net speculative positioning for AUD, CAD, CHF, EUR, GBP, JPY, MXN, NZD, the US dollar index, and gold by currency code, with release timestamps, z-scores, and the rest of your FX macro data in one schema.
Quick answer
The CFTC API is free and complete but contract-centric and report-date-keyed. FXMacroData is $50/month for an individual and is currency-centric and release-timed. Pure positioning research favours the CFTC; multi-signal FX automation favours FXMacroData.
Takeaway: both serve the same official numbers. The decision is whether you want to own the contract mapping, release dating, and joins yourself.
Pricing And Access
There is no commercial price to compare on the CFTC side. The Public Reporting Environment, its SODA API, and the historical compressed files are free. Socrata does not require an account for read queries; an optional app token moves throttling from your IP address to your application. CFTC website information is in the public domain, with a request that the CFTC be acknowledged.
FXMacroData is a paid workflow product with a free entry point. The Always Free tier needs no key, covers USD data only, allows 100 requests per day, and delivers USD announcements on a 15-minute delay; recent US dollar index positioning is reachable there. The Individual plan is $50/month or $500/year with a 14-day trial and 1,000,000 requests per month. The Business plan is $250/month or $2,500/year for companies and teams of up to 10 people, with the same allowance and priority support. Enterprise terms are by custom agreement, and a self-serve Commercial Redistribution add-on costs $10/month per block of up to 100 measured users or 1,000 public-feed followers.
CFTC Public Reporting API
Free*
Six COT datasets on Socrata, optional app token, public-domain data, annual compressed history files.
FXMacroData Always Free
$0
USD data only, no key, 100 requests/day, USD announcements delayed 15 minutes.
FXMacroData Individual
$50/month
COT for nine currency contracts plus gold, 22-currency macro releases, 1,000,000 requests/month, 14-day trial.
Takeaway: if raw COT data is all you need, the CFTC wins on cost. FXMacroData's price buys the mapping, release dating, and cross-dataset packaging around it.
Side-By-Side Comparison
| Attribute | FXMacroData /v1/cot/{ccy} |
CFTC Public Reporting API |
|---|---|---|
| Core job | Currency-keyed weekly positioning inside a release-timed FX macro API. | Official publication of every COT report for every reportable futures market. |
| Entry pricing | Individual $50/month or $500/year; Business $250/month; Enterprise by agreement. | Free* |
| Free tier | Always Free: USD only, 100 requests/day; 14-day trial on paid plans. | Everything is free; no account required for queries*. |
| Coverage | AUD, CAD, CHF, EUR, GBP, JPY, MXN, NZD, US dollar index, and gold, from the Legacy futures-only report. | All reportable contracts across Legacy, Disaggregated, and TFF (each futures-only and combined), plus the Supplemental index-trader report. |
| Release timing | Each row carries announcement_datetime for the CFTC release instant, with holiday-adjusted release flags. |
Published Fridays at 3:30 p.m. ET for Tuesday positions; rows are keyed by report date, and release dates live on a separate schedule page. |
| API format | REST JSON with OpenAPI, GraphQL, SSE, Python and JavaScript SDKs, X-API-Key header. |
SODA REST with SoQL query parameters; JSON, CSV, and other export formats; numbers returned as strings. |
| Rate limits | 1,000,000 requests/month; bursts of 300/minute, 5,000/hour, 20 concurrent. | No published numeric limit; unauthenticated calls share an IP-based pool and may be throttled (HTTP 429). Default page size 1,000 rows. |
| History | Weekly history per currency with pagination and date windows; 52 weeks by default. | Legacy data back to 1986; TFF from 2006; annual compressed text and Excel files. |
| AI / MCP | COT tools on the official MCP server for Claude, ChatGPT, Cursor, and other clients. | No MCP server; agents need the dataset ids, field names, and contract codes. |
| Licence for programmatic / commercial use | Personal/internal use on Individual; company use on Business; public redistribution via the self-serve add-on. | Public domain; free to distribute with CFTC acknowledgement requested*. |
| Best fit | FX traders, signal builders, dashboards, and AI agents that combine positioning with macro releases and price. | Positioning researchers, cross-asset quants, and anyone who needs trader categories or contracts beyond the FX majors. |
* Competitor access and terms retrieved from the CFTC Public Reporting Environment, CFTC web policy, and Socrata developer documentation in October 2026; the CFTC publishes no paid tier.
Which CFTC Dataset Do You Actually Need?
The first decision on the raw route is which of the six COT datasets to query, and the choice changes the story the data tells. The Public Reporting Environment exposes Legacy, Disaggregated, and Traders in Financial Futures (TFF) reports, each in a futures-only and a futures-and-options combined version, plus a Supplemental commodity-index report.
CFTC COT dataset map for currency futures
Legacy 6dca-aqww / jun7-fc8e
Commercial, non-commercial, and nonreportable. The classic "speculator" series most FX desks quote. History back to 1986.
TFF gpe5-46if / yw9f-hn96
Dealers, asset managers, leveraged funds, and other reportables for financial futures, including currencies. History from 2006.
Disaggregated 72hh-3qpy / kh3c-gbw2
Physical commodities only, such as metals, energy, and agriculture. Gold is here; the Euro FX contract is not.
Takeaway: for currencies, the real choice is Legacy versus TFF, and futures-only versus combined. FXMacroData serves Legacy futures-only, the convention most FX positioning commentary uses.
The difference is not academic. For the Euro FX contract in the report dated 29 September 2026, the Legacy non-commercial category was net short 63,256 contracts. The TFF report for the same week split the picture: leveraged funds were net short 39,265 contracts while asset managers were net long 220,603. A model that reads "speculators are short euros" from one dataset and "institutions are long euros" from the other is reading the same market through different trader classifications. The CFTC API lets you pick; FXMacroData makes the Legacy choice for you and keeps it consistent across every currency.
EUR Positioning From The CFTC API
The chart below is built directly from the CFTC Legacy futures-only dataset for the Euro FX contract (contract market code 099741): non-commercial longs minus non-commercial shorts for the last 12 report dates. The same series is what the FXMacroData EUR COT dashboard plots, next to EUR/USD price.
Euro FX net non-commercial position, 14 July to 29 September 2026
Thousands of contracts, Legacy futures-only report, by Tuesday report date. Negative values are net short euros.
Takeaway: large speculators held a net short euro position in every one of the last 12 reports, ranging from 12,600 to 72,400 contracts, and added about 36,000 contracts of net shorts over the last two weeks of September.
Source: CFTC Public Reporting Environment, Legacy Futures Only dataset (6dca-aqww), Euro FX, Chicago Mercantile Exchange; fields noncomm_positions_long_all minus noncomm_positions_short_all. Retrieved October 2026.
Report Date Versus Release Time
The most common COT bug in backtests is a timing bug. Positions are measured as of Tuesday's close, the CFTC receives the data on Wednesday, and the report is generally published on Friday at 3:30 p.m. Eastern. Federal holidays push the release to the following Monday: the 2026 schedule lists five Monday releases, including 22 June, 6 July, and 16 November. A strategy that joins a COT row to price on its Tuesday report date is using information that did not exist for another three days.
The CFTC API keys each row by report_date_as_yyyy_mm_dd. The release date is not a field in the dataset; it lives on the release schedule page, so a raw-API pipeline has to maintain its own Friday-plus-holiday calendar. FXMacroData does that work and returns it on the row: announcement_datetime as epoch seconds for the release instant, a confirmed release date, the schedule source, and a flag when the release was holiday-adjusted. Joining positioning to price on announcement_datetime gives a no-lookahead backtest by default.
One COT week, from position snapshot to usable signal
Tuesday
Positions measured. This is the report_date on both APIs.
Wednesday
Reporting firms submit data; the CFTC corrects and verifies it.
Friday 15:30 ET
Report published. FXMacroData stamps this instant as announcement_datetime.
Holiday week
Release moves to Monday; the row is flagged as holiday-adjusted.
Takeaway: Tuesday is when positions were measured, not when anyone could trade on them. Backtests should key on the release instant.
Speed of the weekly publication itself is not where the two differ much. The CFTC dataset metadata for the 2 October 2026 release shows the Legacy, Disaggregated, and TFF datasets updating within about 11 seconds of 3:30 p.m. ET, so the official API is a prompt source. The difference is in what the row tells you about that timing, not how fast it appears. For FXMacroData's measured release timing across macro data, see the public release-speed record.
API Format And Developer Experience
On the CFTC side you query Socrata with SoQL. You need the dataset id, the contract market code or the exact market_and_exchange_names string, and the CFTC's column names. A Legacy row carries more than 130 fields, numbers arrive as strings, and you compute net positions yourself:
curl -H "X-App-Token: YOUR_APP_TOKEN" \
"https://publicreporting.cftc.gov/resource/6dca-aqww.json?\$where=cftc_contract_market_code='099741'&\$order=report_date_as_yyyy_mm_dd%20DESC&\$limit=12"
That is not difficult once, but it repeats per contract. Euro FX is 099741; the US dollar index sits on ICE Futures U.S. rather than CME; and each additional currency means another code to look up and maintain. The app token is optional, but without one your requests share an IP-based throttling pool. Pages default to 1,000 rows, so a full Legacy history across several contracts needs $limit and $offset handling.
FXMacroData replaces those decisions with a currency code. The same week of euro positioning comes back from one call:
curl -H "X-API-Key: YOUR_API_KEY" "https://api.fxmacrodata.com/v1/cot/eur"
Example response (abridged, illustrative)
{
"currency": "EUR",
"source": "CFTC public reporting API",
"fx_overlay": { "pair": "EUR/USD" },
"data": [
{
"date": "2026-09-29",
"announcement_datetime": 1790969400,
"open_interest": 853959,
"noncommercial_long": 238183,
"noncommercial_short": 301439,
"noncommercial_net": -63256,
"release_date_confirmed": true,
"holiday_adjusted_release": false
}
]
}
Integers, not strings
Long, short, net, and open interest arrive typed, with net already computed.
Release instant
announcement_datetime is the Friday 15:30 ET release, not the Tuesday measurement date.
Pair context
The overlay names the FX pair, so positioning joins straight to spot from /v1/forex/EUR/USD.
Takeaway: the values match the CFTC row exactly; what changes is the key (currency, not contract code), the types, and the timing fields.
Full rows also carry commercial and nonreportable positions and rolling z-scores for each field, which saves a common normalisation step when comparing extremes across currencies. Field documentation is in the API reference.
Rate Limits And History Depth
Socrata's documentation says requests made with an app token are not currently throttled unless judged abusive, and that throttled requests receive HTTP 429. No numeric quota is published, which is generous for a weekly dataset: even a daily refresh of every contract is a small load. FXMacroData's limits are explicit, at 1,000,000 requests per month with bursts of 300 per minute, which is far beyond what weekly positioning needs; the limit only matters because the same key also serves releases, calendars, and FX rates.
History is a clear CFTC strength. The Legacy dataset runs back to 1986, TFF to 2006, and the compressed annual files give text and Excel archives of each report family. For a decades-long study of positioning regimes, or for options-combined figures, the CFTC is the source to use.
Licence And Commercial Use
CFTC data is US government information in the public domain. It may be freely distributed and copied, and the CFTC asks for acknowledgement. That makes the raw API the simplest licence position for anyone republishing positioning in a product. FXMacroData's Individual plan covers personal and internal use; Business covers company use for teams of up to 10; showing data to outside users goes through the self-serve redistribution add-on. If your product only republishes COT, building on the public-domain source is a reasonable call.
How FXMacroData Builds On CFTC Data
FXMacroData does not have its own positioning data. It reads the same official CFTC Legacy futures-only report that the Public Reporting Environment publishes, for the major currency contracts and COMEX gold, and labels every response with the CFTC as source. What it adds is the layer around those numbers: a currency-to-contract mapping, typed and pre-netted fields, z-scores, release-instant dating from the CFTC schedule with holiday handling, and the same JSON conventions used for policy rates, CPI, payrolls, and FX rates across 22 currencies. The COT dashboard puts all ten series side by side.
Where The CFTC API Is Genuinely Stronger
- Completeness. Every reportable market, not just the FX majors: rates, equity indices, energy, metals, agriculture, and smaller currency contracts.
- Trader categories. TFF splits dealers, asset managers, and leveraged funds, which can matter more for currencies than the Legacy speculator split.
- Futures-and-options combined versions of each report, plus trader counts, concentration ratios, and spreading positions.
- History and archives. Legacy back to 1986 and annual compressed files for offline work.
- Cost and licence. Free, no account, public domain.
- Authority. It is the publisher. Citing the CFTC directly carries the most weight in research.
Where FXMacroData Is Stronger For FX Teams
FXMacroData is stronger once positioning is one input among several. A typical FX signal asks whether speculators are crowded into a currency just as a central bank meeting or a CPI print approaches. That needs COT, the release calendar, the latest releases, and price in one place, keyed consistently. On FXMacroData, the euro positioning call sits next to /v1/calendar/eur, /v1/announcements/eur/inflation, and /v1/forex/EUR/USD with the same authentication and the same timestamp convention. Through the MCP server, an AI assistant can ask "how crowded is the yen short" without knowing a dataset id or a contract code.
CFTC API strengths
- All six datasets and every contract.
- TFF trader categories and combined reports.
- Free, public domain, history to 1986.
CFTC API tradeoffs
- Contract codes and 130+ raw field names to manage.
- Rows keyed by report date; release dating is on you.
- No macro releases, calendar, FX prices, or MCP.
FXMacroData strengths
- Currency-code access, typed and pre-netted fields, z-scores.
- Release-instant timestamps with holiday handling.
- One schema with releases, calendar, FX, and MCP.
FXMacroData tradeoffs
- Legacy futures-only report only; no TFF categories.
- Nine currency contracts plus gold, not every market.
- Paid beyond the USD-only free tier.
Takeaway: the CFTC wins on breadth of positioning data; FXMacroData wins on how quickly positioning becomes part of an FX decision.
Decision Matrix
| Use case | Better fit | Why |
|---|---|---|
| Asset manager versus leveraged fund positioning | CFTC API | Only the TFF dataset carries those categories. |
| Cross-asset positioning study (rates, equities, energy) | CFTC API | Every reportable contract is available. |
| Decades-long positioning history | CFTC API | Legacy history to 1986 and compressed archives. |
| FX crowding filter in a backtest | FXMacroData | Release-instant timestamps prevent Tuesday-date lookahead. |
| Positioning plus CPI, policy rates, and calendar | FXMacroData | One key, one schema, 22 currencies of releases. |
| AI assistant answering positioning questions | FXMacroData | MCP tools take a currency code instead of a dataset id. |
| Republishing COT in a public product | CFTC API | Public-domain data with no licence fee. |
Recommendation
If your project is a positioning research tool, or you need TFF categories, options-combined reports, or contracts outside the currency majors, build on the CFTC Public Reporting API. Register a free app token, store the dataset ids and contract codes in configuration, cast every numeric string, and maintain a release-date table from the CFTC schedule so your joins respect the Friday publication.
If positioning is one feature in an FX model, dashboard, or agent, FXMacroData removes that plumbing. Check the plans on the pricing page, read the COT fields in the API reference, and compare timing for the rest of the macro data on the release-speed record. Teams that want both often use the CFTC for research archives and FXMacroData for the live, currency-keyed signal. You can start a 14-day trial from the subscribe page.
Bottom line
The CFTC API is the complete, free, public-domain source for every COT report. FXMacroData serves the same Legacy figures for the currency majors and gold, keyed by currency, dated to the release instant, and packaged with the macro releases and prices an FX decision also needs.
Sources Checked
Evidence checked - October 2026
- CFTC Commitments of Traders overview and release timing: cftc.gov/MarketReports/CommitmentsofTraders
- CFTC 2026 COT release schedule: cftc.gov COT release schedule
- CFTC historical compressed files: cftc.gov COT historical compressed
- CFTC COT explanatory notes: cftc.gov COT explanatory notes
- CFTC Public Reporting Environment: publicreporting.cftc.gov
- Legacy Futures Only dataset API docs: dev.socrata.com/foundry/publicreporting.cftc.gov/6dca-aqww
- Socrata app tokens and throttling: dev.socrata.com/docs/app-tokens
- Socrata paging limits: dev.socrata.com/docs/queries/limit
- CFTC web policy (public domain): cftc.gov/WebPolicy
- FXMacroData: pricing, API reference, release speed.
Related Reading
- FXMacroData vs BIS Data Portal for another official-source comparison.
- FXMacroData vs ECB Data Portal API for euro-area statistics.
- Best macroeconomic data APIs in 2026 for the wider field.
- Best economic indicator feeds for algo trading for automated strategies.