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.
| File | Contents | Format |
|---|---|---|
| BUDGET-2027-DB-1 | Budget authority by account | xlsx, 69 columns, 5,128 rows |
| BUDGET-2027-DB-2 | Outlays by account | xlsx |
| BUDGET-2027-DB-3 | Receipts | xlsx (not pdf) |
| BUDGET-2027-DB-4 | User's guide, field definitions, agency code tables | pdf, 29 pages |
Limits
- The account cross-check was done for one account, 075-8005, over three closed years. A 0.0002% agreement across three years is good evidence the units and the account boundary are right; it is not evidence for every account.
- I read the guide's field list and units section. I did not check the guide's agency code table against Circular A-11 Appendix C, which it cites.
- The FY2027 edition is the one checked. Earlier editions live at the same URL shape with the year changed, but I did not fetch them.
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.