CFTC COT Futures Positioning Scraper (Commitments of Traders) avatar

CFTC COT Futures Positioning Scraper (Commitments of Traders)

Pricing

from $11.34 / 1,000 positioning records

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

CFTC COT Futures Positioning Scraper (Commitments of Traders)

Weekly CFTC Commitments of Traders positioning by trader category: legacy, disaggregated and financial futures. Long, short, net, weekly change and % of open interest per market. Export to JSON, CSV or Excel.

Pricing

from $11.34 / 1,000 positioning records

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

CFTC COT Futures Positioning Scraper

CFTC COT Futures Positioning Scraper (Commitments of Traders)

Here is one real result, with every field the actor returns:

{
"reportType": "legacy",
"reportTypeLabel": "Legacy Futures-Only",
"marketName": "GOLD - COMMODITY EXCHANGE INC.",
"contractMarketName": "GOLD",
"exchange": "COMMODITY EXCHANGE INC.",
"commodity": "GOLD",
"commodityGroup": "NATURAL RESOURCES",
"commoditySubgroup": "PRECIOUS METALS",
"contractCode": "088691",
"reportDate": "2026-08-11",
"reportWeek": "2026 Report Week 32",
"contractUnits": "(CONTRACTS OF 100 TROY OUNCES)",
"futuresOnlyOrCombined": "FutOnly",
"openInterest": 400309,
"changeInOpenInterest": 28758,
"totalTraders": 297,
"primaryCategory": "Non-Commercial",
"primaryLong": 250936,
"primaryShort": 32996,
"primaryNet": 217940,
"primaryChangeLong": 23923,
"primaryChangeShort": 3617,
"primaryChangeNet": 20306,
"primaryPctOfOiLong": 62.7,
"primaryPctOfOiShort": 8.2,
"pctLongOfOI": 62.69,
"nonCommercialLong": 250936,
"nonCommercialShort": 32996,
"nonCommercialSpread": 28937,
"netNonCommercial": 217940,
"changeNonCommercialLong": 23923,
"changeNonCommercialShort": 3617,
"changeNetNonCommercial": 20306,
"pctOiNonCommercialLong": 62.7,
"pctOiNonCommercialShort": 8.2,
"commercialLong": 69385,
"commercialShort": 322025,
"netCommercial": -252640,
"changeCommercialLong": -2447,
"changeCommercialShort": 23702,
"pctOiCommercialLong": 17.3,
"pctOiCommercialShort": 80.4,
"totalReportableLong": 349258,
"totalReportableShort": 383958,
"nonReportableLong": 51051,
"nonReportableShort": 16351,
"netNonReportable": 34700,
"aiBias": null,
"aiExtremeness": null,
"aiInterpretation": null,
"source": "CFTC Commitments of Traders (COT)",
"observedAt": "2026-08-21T02:25:16.778Z",
"error": null
}

The most complete CFTC Commitments of Traders scraper available. It returns every trader-category position the weekly COT reports expose (long, short, spreading, weekly change and percent of open interest), plus derived fields such as net positions per category, net weekly change and long-as-percent-of-open-interest, and gives you filters for report type, market name, contract code, date range and latest week only so you get exactly the market-weeks you need across the Legacy, Disaggregated and Traders in Financial Futures reports.

Input · Output · Pricing · Examples

Platform Coverage Output Billing

Table of contents

What it does

This actor returns weekly CFTC Commitments of Traders (COT) positioning data, one clean record per market and report week. It covers three report families and lets the input pick which one:

  • Legacy Futures-Only splits every market into Non-Commercial (large speculators), Commercial (hedgers) and Non-Reportable (small traders).
  • Disaggregated Futures-Only breaks physical-commodity markets into Producer/Merchant/Processor/User, Swap Dealers, Managed Money and Other Reportables.
  • Traders in Financial Futures (TFF) breaks financial markets into Dealer/Intermediary, Asset Manager/Institutional, Leveraged Funds and Other Reportables.

For each market-week you get open interest and its weekly change, the number of reporting traders, and for every trader category the long, short, net, weekly change and percent of open interest. Derived fields include net positions per category, net weekly change and long as a percent of open interest, so you can spot crowded or stretched positioning without post-processing.

Quickstart

Latest week for a single market in the Legacy report:

{
"reportType": "legacy",
"market": "GOLD",
"latestOnly": true,
"maxResults": 3
}

Managed Money positioning in crude oil from the Disaggregated report:

{
"reportType": "disaggregated",
"market": "CRUDE OIL",
"latestOnly": true,
"maxResults": 5
}

A history of weekly reports for one market using a date range:

{
"reportType": "tff",
"market": "EURO FX",
"reportDateFrom": "2025-01-01",
"reportDateTo": "2026-08-31",
"latestOnly": false,
"maxResults": 100
}

Input reference

NameTypeRequiredDescriptionExample
reportTypestring (enum)noWhich COT report to read: legacy, disaggregated or tff. Default legacy.legacy
marketstringnoCase-insensitive substring match on the market and exchange name. Leave empty for every market.GOLD
contractCodestringnoExact CFTC contract market code for a precise single-market pull.088691
reportDateFromstringnoEarliest report week to include (YYYY-MM-DD).2025-01-01
reportDateTostringnoLatest report week to include (YYYY-MM-DD).2026-08-31
latestOnlybooleannoReturn only the most recent report week for the matching markets. Default true.true
includeAiSignalbooleannoOpt-in add-on. Adds an AI read of each market's speculative net position. Paid plans only.false
maxResultsintegernoMaximum records to return. Free plans are capped at 10.10

Output reference

NameTypeDescription
reportTypestringReport family: legacy, disaggregated or tff
reportTypeLabelstringHuman label for the report family
marketNamestringCFTC market and exchange name
contractMarketNamestringShort contract market name
exchangestringExchange the contract trades on
commoditystringCommodity name
commodityGroupstringCommodity group
commoditySubgroupstringCommodity subgroup
contractCodestringCFTC contract market code
reportDatestringReport week date (YYYY-MM-DD)
reportWeekstringReport week label
contractUnitsstringUnits of the underlying contract
futuresOnlyOrCombinedstringFutures-only or futures plus options combined
openInterestnumberTotal open interest
changeInOpenInterestnumberWeekly change in open interest
totalTradersnumberNumber of reporting traders
primaryCategorystringMain speculative category for the report type
primaryLong / primaryShort / primaryNetnumberPrimary category long, short and net
primaryChangeLong / primaryChangeShort / primaryChangeNetnumberWeekly change in primary long, short and net
primaryPctOfOiLong / primaryPctOfOiShortnumberPrimary long and short as reported percent of open interest
pctLongOfOInumberDerived: primary long divided by open interest, percent
nonCommercialLong / nonCommercialShort / nonCommercialSpread / netNonCommercialnumberLegacy: non-commercial positions
changeNonCommercialLong / changeNonCommercialShort / changeNetNonCommercialnumberLegacy: weekly change in non-commercial
pctOiNonCommercialLong / pctOiNonCommercialShortnumberLegacy: non-commercial percent of open interest
commercialLong / commercialShort / netCommercialnumberLegacy: commercial positions
changeCommercialLong / changeCommercialShortnumberLegacy: weekly change in commercial
pctOiCommercialLong / pctOiCommercialShortnumberLegacy: commercial percent of open interest
totalReportableLong / totalReportableShortnumberLegacy: total reportable positions
producerMerchantLong / producerMerchantShort / netProducerMerchantnumberDisaggregated: producer/merchant/processor/user
swapDealerLong / swapDealerShort / netSwapDealernumberDisaggregated: swap dealers
managedMoneyLong / managedMoneyShort / netManagedMoneynumberDisaggregated: managed money
changeManagedMoneyLong / changeManagedMoneyShort / changeNetManagedMoneynumberDisaggregated: weekly change in managed money
pctOiManagedMoneyLong / pctOiManagedMoneyShortnumberDisaggregated: managed money percent of open interest
dealerLong / dealerShort / netDealernumberTFF: dealer/intermediary
assetManagerLong / assetManagerShort / netAssetManagernumberTFF: asset manager/institutional
leveragedFundsLong / leveragedFundsShort / netLeveragedFundsnumberTFF: leveraged funds
changeLeveragedFundsLong / changeLeveragedFundsShort / changeNetLeveragedFundsnumberTFF: weekly change in leveraged funds
pctOiLeveragedFundsLong / pctOiLeveragedFundsShortnumberTFF: leveraged funds percent of open interest
otherReportableLong / otherReportableShort / netOtherReportablenumberOther reportables (disaggregated and tff)
nonReportableLong / nonReportableShort / netNonReportablenumberNon-reportable (small traders)
aiBias / aiExtremeness / aiInterpretationstringAI positioning signal (add-on only)
sourcestringData source
observedAtstringWhen the record was scraped
errorstringError message, if any

Fields that do not apply to the chosen report type are returned as null so the column layout stays consistent.

Example output record

A real Managed Money record from the Disaggregated report:

{
"reportType": "disaggregated",
"marketName": "CRUDE OIL, LIGHT SWEET-WTI - ICE FUTURES EUROPE",
"reportDate": "2026-08-11",
"openInterest": 797158,
"primaryCategory": "Managed Money",
"managedMoneyLong": 15527,
"managedMoneyShort": 23963,
"netManagedMoney": -8436,
"changeNetManagedMoney": -1346,
"netSwapDealer": -77668,
"netProducerMerchant": 81931,
"pctLongOfOI": 1.95
}

Run via API and CLI

Start a run with the Apify API:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~cftc-cot-futures-positioning-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"reportType":"legacy","market":"E-MINI S&P","latestOnly":true,"maxResults":5}'

Or with the Apify CLI:

apify call scrapers_lat/cftc-cot-futures-positioning-scraper \
--input '{"reportType":"disaggregated","market":"CRUDE OIL","latestOnly":true,"maxResults":5}'

Fetch results

Read the dataset items from a finished run:

$curl "https://api.apify.com/v2/actor-runs/RUN_ID/dataset/items?token=YOUR_TOKEN&format=json"

Swap format=json for format=csv or format=xlsx to export to CSV or Excel.

Billing and limits

  • Pay per result. You are charged for each positioning record returned, never for empty or failed runs.
  • Events: a one-time actor start, a result event per market-week record, and an opt-in ai_positioning_signal add-on billed only when a usable AI signal is produced.
  • The AI add-on is disabled for free Apify plans and never charges when the model returns nothing usable.
  • Free Apify plans are capped at 10 records per run. Paid plans can raise maxResults.
  • A configured spend limit is respected: once reached, the run stops emitting billable records.
  • If no market matches your filters, the actor returns a single non-billable row describing the mismatch.

FAQ and troubleshooting

Which report should I use? Use legacy for a broad speculator-versus-hedger split on any market, disaggregated for detailed physical-commodity categories (managed money, swaps, producers), and tff for financial futures (leveraged funds, asset managers, dealers).

How do I target one exact market? Pass contractCode (for example 088691 for gold). A market substring like GOLD can match several related contracts.

How do I get history instead of the latest week? Set latestOnly to false and provide reportDateFrom and reportDateTo, or just a date range.

How fresh is the data? COT reports are published weekly by the CFTC. Each record carries its reportDate and reportWeek so you always know the exact week.

No records came back. Check the market spelling or try a broader substring, confirm the reportType covers that market, and widen or remove the date range.

More scrapers at scrapers.lat

Explore the full catalog of finance, market and compliance scrapers at scrapers.lat.

This actor is not affiliated with, endorsed by, or sponsored by the CFTC. It returns public data for research and analysis.