US Department of the Treasury
US Treasury data — The daily par yield curve as a CSV, and the debt, interest and auction tables behind it
When you need every maturity of the Treasury curve on one date (the daily CSV has 1-month to 30-year), or the fiscal side — debt outstanding, average interest rates, auction results — which FRED carries only partly.
Reach for it when…
When you need every maturity of the Treasury curve on one date (the daily CSV has 1-month to 30-year), or the fiscal side — debt outstanding, average interest rates, auction results — which FRED carries only partly.
Not for: Corporate or foreign yields (FRED, ECB), intraday bond prices, anything before 1990 (FRED's DGS series go back to 1962).
Units, revisions, traps
Units. Par yields in percent, semi-annual compounding, on US business days. FiscalData rates are percent; debt is in dollars.
Revisions. Yields are not revised. FiscalData tables are updated on their own schedules (daily to monthly), stated per table.
- The 1½-month and 4-month columns were added later and are blank before their start dates.
- The CSV URL takes one year at a time — loop years for history.
- Par yields are not zero-coupon yields; do not use them as discount factors without bootstrapping.
Classic mistake: Averaging the 2-year and 10-year to get a '5-year' — the curve is not linear.
Three recipes
- Recipe 1 · Today's whole yield curve
- Recipe 2 · Average interest rate on the debt (FiscalData)
- Recipe 3 · Debt to the penny
Each recipe: Python · Excel · Sheets, with how to read the result. Python recipes run under pandas; recipe 1 is re-run by the weekly check where the source allows it.
How to use it in your own work
Copy the snippet, change the series id, read the result the way the footer says. Replace YOUR_…_KEY with your own key where one is needed.
Recipe 1Today's whole yield curve
# every maturity, every business day this year
import pandas as pd
u = ("https://home.treasury.gov/resource-center/data-chart-center/interest-rates/daily-treasury-rates.csv/2026/all"
"?type=daily_treasury_yield_curve&field_tdr_date_value=2026&page&_format=csv")
df = pd.read_csv(u, index_col="Date", parse_dates=True).sort_index()
print(df.iloc[-1].dropna()) # the latest curve, 1 Mo → 30 Yr- Data → From Web → the same URL → Load.
- Change the two '2026' parts for another year.
=IMPORTDATA("https://home.treasury.gov/resource-center/data-chart-center/interest-rates/daily-treasury-rates.csv/2026/all?type=daily_treasury_yield_curve&field_tdr_date_value=2026&page&_format=csv")Recipe 2Average interest rate on the debt (FiscalData)
# what the Treasury pays, by security type, monthly
import requests, pandas as pd
u = ("https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v2/accounting/od/avg_interest_rates"
"?filter=security_desc:eq:Total%20Marketable&sort=-record_date&page[size]=24")
df = pd.DataFrame(requests.get(u, timeout=60).json()["data"])
print(df[["record_date", "security_desc", "avg_interest_rate_amt"]].head(12))- Data → From Web → the same URL; expand 'data' into a table.
- No native JSON import — add &format=csv to the URL and use =IMPORTDATA(...).
Recipe 3Debt to the penny
# total public debt outstanding, daily
import requests, pandas as pd
u = ("https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v2/accounting/od/debt_to_penny"
"?sort=-record_date&page[size]=10")
df = pd.DataFrame(requests.get(u, timeout=60).json()["data"])
print(df[["record_date", "tot_pub_debt_out_amt"]])- Data → From Web → the same URL; expand 'data'.
- Append &format=csv and =IMPORTDATA(...).
Series → question map
The ids we use from US Treasury data, each with the question it answers. The catalog's compare view reads the concept tags behind these rows.
| Series | Answers | Region | Concept |
|---|---|---|---|
| daily_treasury_yield_curve · 10 Yr | Where is the 10-year yield today? | United States | yield_10y |
| daily_treasury_yield_curve · 2 Yr | Where is the 2-year yield today? | United States | yield_2y |
| daily_treasury_yield_curve · 3 Mo | What is the bill rate? | United States | tbill |
| avg_interest_rates | What does the government pay on its debt? | United States | debt_cost |
| debt_to_penny | How big is the debt today? | United States | debt |
Compare with
Same question, different source: FRED, NY Fed Markets Data, ECB Data Portal. The compare view lines up coverage, frequency, history and access side by side and lists what the combination makes possible.
Open compare: US Treasury data · FRED · NY Fed Markets Data →
Questions readers ask
Is the Treasury yield-curve CSV free?
Yes, no key, one year per file. The same numbers reach FRED as DGS1MO…DGS30 the next morning.
What is a par yield?
The coupon a new bond would need to trade at 100 at that maturity. It is what the news quotes; it is not the zero-coupon rate a pricing model wants.
Where are auction results?
FiscalData's 'Treasury Securities Auctions Data' table (auctions_query) has every auction's bid-to-cover and high yield.
From the paper
Educational only — we explain, we never advise · snippet licence: public domain · corrections to [email protected], fixed within a day and logged in the changelog.