Next free-source hunt
We check for new free data every weekday.
Datasets / Money Flows
cftc.gov/

CFTC Weekly Swaps Report

Freeauth: noneCustom#money-flows#historical-data#time-series#flows#risk✓ verified Nov 1, 2026

CFTC Weekly Swaps Report

CFTC weekly aggregate swap-market tables covering gross notional outstanding, transaction dollar volume and ticket volume by asset class, product, cleared status, participant type, currency, tenor or grade. Current HTML and archived Excel files expose dates and values in millions of U.S. dollars without an account or key.

Required Attribution:

CFTC requests appropriate acknowledgement in subsequent use of its public-domain information.

Coverage

The report covers market-facing swaps reported to registered swap data repositories, currently across interest-rate, credit and FX asset classes; the archive includes editions back to November 2012 and regulated reporting began in January 2013. It is normally published Monday at 3:30 p.m. Eastern, but the reporting week ends two and a half weeks before publication; current all-swaps tables show five weeks while asset-class tables show one week.

Verdict

A derivatives-positioning and activity signal for a trading or AI agent tracking changes in swap notionals, clearing, turnover and participation. It is a lagged weekly aggregate, not a real-time transaction feed, and the stated reporting period is already two and a half weeks old at publication. Coverage is limited to market-facing swaps reported to registered repositories and classifications have changed over time, including the later addition of FX swaps. Historical comparisons should preserve publication dates, definitions and archive versions because corrections or delayed federal operations can alter the release sequence.

Get the free weekly email

Free weekly email of newly verified free data. Unsubscribe by emailing us.

Use in your agent

Load CFTC swaps gross notional into pandas and Parquet. Checked against the provider's documentation on Nov 1, 2026.

Raw skill file (/skills/cftc-weekly-swaps-report.md)Also in our MCP server: call get_ingestion_skill with {"slug": "cftc-weekly-swaps-report"}.

Access

  • No account or key is required for the checked current HTML report table.
  • Archived editions are linked by publication date from the provider archive.

Request

bash
curl 'https://www.cftc.gov/MarketReports/SwapsReports/L1GrossExpCS.html'

Format

HTML table with swap categories as rows and five weekly reporting dates as columns; values are gross notional outstanding in millions of U.S. dollars.

Load into pandas and Parquet

Needs Python 3 with requests, pandas and pyarrow.

python
"""CFTC gross-notional cleared-status table -> pandas -> Parquet."""
from html.parser import HTMLParser
import requests
import pandas as pd

class FirstTable(HTMLParser):
    def __init__(self):
        super().__init__()
        self.in_table = self.done = self.in_cell = False
        self.row, self.rows, self.cell = [], [], []
    def handle_starttag(self, tag, attrs):
        if tag == "table" and not self.in_table and not self.done:
            self.in_table = True
        elif self.in_table and tag == "tr":
            self.row = []
        elif self.in_table and tag in ("td", "th"):
            self.in_cell, self.cell = True, []
    def handle_data(self, data):
        if self.in_cell:
            self.cell.append(data)
    def handle_endtag(self, tag):
        if self.in_table and tag in ("td", "th"):
            self.row.append(" ".join("".join(self.cell).split()))
            self.in_cell = False
        elif self.in_table and tag == "tr" and self.row:
            self.rows.append(self.row)
        elif self.in_table and tag == "table":
            self.in_table, self.done = False, True

URL = "https://www.cftc.gov/MarketReports/SwapsReports/L1GrossExpCS.html"
r = requests.get(URL, headers={"User-Agent": "Mozilla/5.0 SignalLabCheck/1.0"}, timeout=60)
r.raise_for_status()
p = FirstTable()
p.feed(r.text)
width = len(p.rows[0])
rows = [row for row in p.rows[1:] if len(row) == width and row[0]]
df = pd.DataFrame(rows, columns=["category", *p.rows[0][1:]])
for col in df.columns[1:]:
    df[col] = pd.to_numeric(df[col].str.replace(",", ""))
df.to_parquet("cftc_swaps_gross_notional.parquet", index=False)
print(len(df), "rows", len(df.columns) - 1, "weekly dates", "latest", df.columns[-1])

Run by us on 2026-11-01 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 10 rows 5 weekly dates latest October 09

Limits

  • Rate limit: Not stated.
  • Current all-swaps tables contain five weekly observations; asset-class tables contain the latest week.
  • The reporting period ends two and a half weeks before the normal Monday publication date.

Quirks

  • The current tables are HTML, so ingestion depends on table structure rather than a stable CSV schema.
  • Values are in millions of U.S. dollars and formatted with thousands separators.
  • Cleared-status and participant-type tables count notionals differently; do not compare their totals without the explanatory notes.

Terms and attribution

  • CFTC government information is public domain, while separately identified third-party items may be protected.
  • CFTC requests appropriate acknowledgement when its public-domain information is reused.

Sources

Information and education only. Not financial, investment, legal or tax advice. Listings can be inaccurate, incomplete or out of date and are provided "as is". Free tiers, limits and licenses belong to each provider and can change, so check the provider's own terms before you rely on them. Terms & Disclaimer