OMB Public Budget Database: three agency code columns, and the one you want

Checked 2026-09-08 · Federal budget and spending

The Public Budget Database spreadsheets carry three different agency code columns and the leftmost one, Agency Code, is OMB's own three-digit code, not Treasury's. Filtering it for a Treasury or CGAC agency number returns nothing. Use CGAC Agency Code. All year columns are thousands of dollars, rounded to the nearest million from FY1995 on.

What we saw

No row in the budget authority file has Agency Code 075, although 075 is the CGAC code for HHS. Source (Sheet1, columns 'Agency Code' and 'CGAC Agency Code', 2026-09-08).

rows where Agency Code == '075': 0

One CGAC agency maps to several OMB agency codes, so the columns are not interchangeable. Source (Sheet1, distinct (Agency Code, Treasury Agency Code, CGAC Agency Code) triples where CGAC = 075, 2026-09-08).

HHS code triples: {('009', '75', '075'), ('902', '75', '075'), ('016', '75', '075')}

The user's guide states the units, verbatim. Source (Public Budget Database User's Guide, 'Units of measure', 2026-09-08).

Units of measure Data for budget authority, outlays, offsetting receipts, and governmental receipts are shown in thousands of dollars.

The guide also explains why every figure ends in three zeros from FY1995 on. Source (Public Budget Database User's Guide, same section, 2026-09-08).

Therefore, the file data from FY 1995 through FY 2031 represent the Budget amounts multiplied by one thousand to convert the amounts to thousands; detail below millions is not available.

Read that way the file agrees with USAspending to OMB's own rounding. Source (results.appropriations, against summed Discretionary + Mandatory rows for account 8005 / CGAC 075, 2026-09-08).

2023 OMB(thousands)=419528000 -> $419528000000   USAspending appropriations=419527402600.58   diff=0.00014%
2024 OMB(thousands)=388682000 -> $388682000000   USAspending appropriations=388681350795.73   diff=0.00017%
2025 OMB(thousands)=444126000 -> $444126000000   USAspending appropriations=444126814742.86   diff=0.00018%

BUDGET-2027-DB-3 is a spreadsheet and BUDGET-2027-DB-4 is the guide; requesting DB-3 as a PDF silently gives you an HTML page. Source (zip listing, 2026-09-08).

3159 BUDGET-2027-DB/dip.xml
343395 BUDGET-2027-DB/pdf/BUDGET-2027-DB-4.pdf
1611310 BUDGET-2027-DB/xls/BUDGET-2027-DB-1.xlsx
2144765 BUDGET-2027-DB/xls/BUDGET-2027-DB-2.xlsx
109647 BUDGET-2027-DB/xls/BUDGET-2027-DB-3.xlsx
72472 BUDGET-2027-DB/premis.xml
9797 BUDGET-2027-DB/mods.xml

curl -sSL .../pdf/BUDGET-2027-DB-3.pdf -> http=200 size=44165 ct=text/html

The command

curl -sS -o db1.xlsx -w "http=%{http_code} size=%{size_download} ct=%{content_type}\n" "https://www.govinfo.gov/content/pkg/BUDGET-2027-DB/xls/BUDGET-2027-DB-1.xlsx"
http=200 size=1611310 ct=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

Checked 2026-09-08.

python3 -c "import openpyxl,warnings;warnings.simplefilter('ignore')
wb=openpyxl.load_workbook('db1.xlsx',read_only=True,data_only=True)
ws=wb['Sheet1'];it=ws.iter_rows(values_only=True);hdr=list(next(it))
rows=[dict(zip(hdr,r)) for r in it]
print(len(hdr),len(rows));print(hdr[:12])
sel=[r for r in rows if str(r['Account Code']).strip()=='8005']
print(len(sel))
[print(repr(r['Agency Code']),repr(r['Treasury Agency Code']),repr(r['CGAC Agency Code']),r['Account Name'][:40],r['BEA Category'],r['2025']) for r in sel]"
69 5128
['Agency Code', 'Agency Name', 'Bureau Code', 'Bureau Name', 'Account Code', 'Account Name', 'Treasury Agency Code', 'CGAC Agency Code', 'Subfunction Code', 'Subfunction Title', 'BEA Category', 'On- or Off- Budget']
acct 8005 rows: 2
  '009' '75' '075' Federal Hospital Insurance Trust Fund Discretionary 2985000
  '009' '75' '075' Federal Hospital Insurance Trust Fund Mandatory 441141000

Checked 2026-09-08.

curl -sS -o db.zip "https://www.govinfo.gov/content/pkg/BUDGET-2027-DB.zip" && python3 -c "import zipfile;[print(i.file_size,i.filename) for i in zipfile.ZipFile('db.zip').infolist()]"
3159 BUDGET-2027-DB/dip.xml
343395 BUDGET-2027-DB/pdf/BUDGET-2027-DB-4.pdf
1611310 BUDGET-2027-DB/xls/BUDGET-2027-DB-1.xlsx
2144765 BUDGET-2027-DB/xls/BUDGET-2027-DB-2.xlsx
109647 BUDGET-2027-DB/xls/BUDGET-2027-DB-3.xlsx
72472 BUDGET-2027-DB/premis.xml
9797 BUDGET-2027-DB/mods.xml

Checked 2026-09-08.

curl -sS "https://www.govinfo.gov/wssearch/getContentDetail?packageId=BUDGET-2027-DB" | python3 -m json.tool
"colname": "Date Issued",
"colvalue": "April 3, 2026"
"colname": "Publication Title",
"colvalue": "Public Budget Database, Budget of the United States Government, Fiscal Year 2027"

Checked 2026-09-08.

FileContentsFormat
BUDGET-2027-DB-1Budget authority by accountxlsx, 69 columns, 5,128 rows
BUDGET-2027-DB-2Outlays by accountxlsx
BUDGET-2027-DB-3Receiptsxlsx (not pdf)
BUDGET-2027-DB-4User's guide, field definitions, agency code tablespdf, 29 pages

Limits

Open question

The 902 and 016 OMB agency codes both appear against CGAC 075. What accounts those are, and whether that split matters when rolling an agency up, is unresolved here.

Plain text