CFTC COT Report Scraper — Commitments of Traders avatar

CFTC COT Report Scraper — Commitments of Traders

Pricing

from $2.64 / 1,000 result emitteds

Go to Apify Store
CFTC COT Report Scraper — Commitments of Traders

CFTC COT Report Scraper — Commitments of Traders

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

from $2.64 / 1,000 result emitteds

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Categories

Security

Limited permissions

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.