CFTC Commitments of Traders (COT) Report Scraper avatar

CFTC Commitments of Traders (COT) Report Scraper

Pricing

Pay per event

Go to Apify Store
CFTC Commitments of Traders (COT) Report Scraper

CFTC Commitments of Traders (COT) Report Scraper

Pull the CFTC's weekly Commitments of Traders reports straight from its public Socrata data portal — trader positioning across agricultural, metals, energy, currency, and financial futures markets. Filter by report type, commodity, market, and date range. No API key required.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share


🎯 What this scrapes

The CFTC publishes a Commitments of Traders (COT) report every Friday, breaking down who holds what in the futures and options markets it regulates: wheat, corn, soybeans, gold, silver, copper, crude oil, natural gas, currencies, interest-rate futures, and equity indices. Traders read it every week to see how speculators are positioned against commercial hedgers. This Actor is a direct client for the CFTC's own public Socrata open-data portal (publicreporting.cftc.gov) — the same backend behind the CFTC's own COT visualizations — across all 6 published report-type datasets (Legacy / Disaggregated / Traders-in-Financial-Futures, each in Futures-Only and Futures-&-Options-Combined variants). Give it a report type, an optional commodity or market filter, and a date range, and it returns one clean row per market/report-date combination instead of a Socrata query string you'd otherwise have to hand-build yourself.

🔥 What we handle for you

  • 🗂️ All 6 COT datasets in one Actor — Legacy, Disaggregated, and Traders in Financial Futures, each in Futures-Only or Futures-&-Options-Combined form, selectable by a single reportType field.
  • 🔍 Commodity and market filters — narrow to WHEAT, GOLD, CRUDE OIL, or a specific exchange without hand-writing a Socrata $where clause.
  • 📅 Date-range control — pull one week's report or backfill years of history; the underlying dataset goes back decades per report type.
  • 🔢 Numeric fields normalized — open interest, long/short positions, and week-over-week changes arrive as numbers, not the raw JSON strings the source API returns.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO date strings, stable Socrata row ids, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

💡 Use cases

  • Futures trading desks — track how speculators vs. commercials are positioned week over week for a watchlist of commodities.
  • Quant research — backfill years of positioning history per market to build sentiment or crowding indicators.
  • Commodity market newsletters — pull the latest report every Friday and auto-generate a positioning summary.
  • Risk/compliance teams — monitor open interest and concentration in specific contracts over time.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
reportTypestringno'legacy_futures_only'Which of the CFTC's 6 Commitments of Traders datasets to query (Socrata dataset id shown in parens).
commoditystringno'WHEAT'Optional filter on commodity_name (e.g. WHEAT, GOLD, CRUDE OIL, NATURAL GAS). Omitted = all commodities.
marketstringno'CHICAGO BOARD OF TRADE'Optional substring filter on market_and_exchange_names (e.g. CHICAGO BOARD OF TRADE, COMMODITY EXCHANGE…
dateFromstringno'2026-06-30'Inclusive lower bound on report_date_as_yyyy_mm_dd (YYYY-MM-DD).
dateTostringno'2026-09-15'Inclusive upper bound on report_date_as_yyyy_mm_dd (YYYY-MM-DD).
maxResultsintegerno500Maximum rows returned per run (1-5000).
proxyConfigurationobjectno{'useApifyProxy': False}Apify Proxy configuration. Default is a direct connection — the CFTC's Socrata portal is a public, keyless open-data…

Example input

{
"reportType": "legacy_futures_only",
"commodity": "WHEAT",
"market": "CHICAGO BOARD OF TRADE",
"dateFrom": "2026-06-01",
"dateTo": "2026-09-15",
"maxResults": 3,
"proxyConfiguration": {
"useApifyProxy": false
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
idstringSocrata row id for this report row.
report_typestringWhich of the 6 report-type datasets this row came from (mirrors the reportType input).
market_and_exchange_namesstringFull market and exchange name as published by the CFTC.
report_date_as_yyyy_mm_ddstringReport date (ISO YYYY-MM-DD).
commodity_namestringCommodity name as published by the CFTC.
cftc_contract_market_codestringCFTC's internal contract market code for this market.
open_interest_allnumberTotal open interest across all trader categories.
change_in_open_interest_allnumberWeek-over-week change in open interest.
traders_tot_allnumberTotal number of traders reported for this market on this date.
noncomm_positions_long_allnumberNon-commercial (speculator) long positions. Populated for Legacy report types only.
noncomm_positions_short_allnumberNon-commercial (speculator) short positions. Populated for Legacy report types only.
comm_positions_long_allnumberCommercial (hedger) long positions. Populated for Legacy report types only.
comm_positions_short_allnumberCommercial (hedger) short positions. Populated for Legacy report types only.
prod_merc_positions_longnumberProducer/merchant/processor/user long positions. Populated for Disaggregated report types only.
prod_merc_positions_shortnumberProducer/merchant/processor/user short positions. Populated for Disaggregated report types only.
swap_positions_long_allnumberSwap dealer long positions. Populated for Disaggregated report types only.
swap_positions_short_allnumberSwap dealer short positions. Populated for Disaggregated report types only.
m_money_positions_long_allnumberManaged money long positions. Populated for Disaggregated report types only.
m_money_positions_short_allnumberManaged money short positions. Populated for Disaggregated report types only.
dealer_positions_long_allnumberDealer/intermediary long positions. Populated for TFF report types only.
dealer_positions_short_allnumberDealer/intermediary short positions. Populated for TFF report types only.
asset_mgr_positions_longnumberAsset manager/institutional long positions. Populated for TFF report types only.
asset_mgr_positions_shortnumberAsset manager/institutional short positions. Populated for TFF report types only.
lev_money_positions_longnumberLeveraged funds long positions. Populated for TFF report types only.
lev_money_positions_shortnumberLeveraged funds short positions. Populated for TFF report types only.
other_rept_positions_longnumberOther-reportables long positions. Populated for Disaggregated and TFF report types only.
other_rept_positions_shortnumberOther-reportables short positions. Populated for Disaggregated and TFF report types only.

Example output

{
"id": "row-6dca-aqww-example",
"report_type": "legacy_futures_only",
"market_and_exchange_names": "WHEAT-SRW - CHICAGO BOARD OF TRADE",
"report_date_as_yyyy_mm_dd": "2026-09-15",
"commodity_name": "WHEAT",
"cftc_contract_market_code": "001602",
"open_interest_all": 412873,
"change_in_open_interest_all": -3211,
"traders_tot_all": 487,
"noncomm_positions_long_all": 98123,
"noncomm_positions_short_all": 134502,
"comm_positions_long_all": 251340,
"comm_positions_short_all": 198211
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.2One-off warm-up charge per run
result$0.003Per dataset item

Example: 1 000 rows at the rates above ≈ $3.20. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

  • Report coverage, publication cadence (weekly, Fridays, for the prior Tuesday), and historical depth are set entirely by the CFTC — this Actor mirrors what the source publishes, nothing more.
  • commodity and market are server-side text filters against the CFTC's own field values; if a market's name doesn't match your filter text, use a broader term or leave it unset.
  • This Actor returns the structured COT report rows only — it does not compute derived indicators (e.g. net-positioning z-scores); that's a downstream analysis step.

❓ FAQ

Do I need a CFTC or Socrata API key?

No. The CFTC's public reporting portal is a keyless, public open-data API — this Actor doesn't require any credentials.

Which report type should I pick?

legacy_futures_only is the classic COT report most traders reference first. Switch to disaggregated_* for physical-commodity markets broken into producer/merchant, swap dealer, managed money, and other-reportable categories, or tff_* for financial futures (rates, currencies, equity indices) broken into dealer, asset manager, leveraged funds, and other-reportable categories.

How far back does the data go?

Each of the 6 datasets covers a different historical range published directly by the CFTC — some back to the late 1990s/2000s. Leave dateFrom/dateTo unset to pull the widest available window (subject to maxResults).

What happens if my filter combination matches nothing?

The run succeeds with zero rows and a status message describing exactly what was searched — you're never charged for rows that don't exist.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.