Porkbelly.info
Method · how the sausage is made

What's in it, what isn't, and how we check

Every number on this site comes from a government document you can open. This page says exactly how it gets from that document to here, and where the document itself falls short.

1 · What's in

Taxpayer-funded spending by Senate member offices, committees, leadership and officers, from the Report of the Secretary of the Senate (semiannual, 30 reports since April 2011), and by House offices from the Statement of Disbursements (quarterly CSVs since [placeholder]). Campaign and leadership-PAC spending, foreign delegation travel, privately sponsored travel and personal financial disclosures are separate records and come later.

Each parsed row keeps the PDF page index, the printed page label (B-661) and the bounding box of the text it was read from. Money is stored as integer cents with the sign as printed.

2 · What the Senate doesn't itemize Total only

The Senate prints line items for exactly three categories: travel, other contractual services and acquisition of assets. Payroll is printed as an abstract (name, title, dates, amount). Rent, supplies, printing, communications and utilities appear as a single total per office, with nothing beneath it.

So on this site a category stamped Total only has no rows to show, and a blank list under it means not visible, never zero. In the latest report, [placeholder] of Senate-wide spending sits in those three categories with no rows beneath it. The House CSVs itemize everything, which is one reason the two chambers are not directly comparable.

3 · How we check Inspected

No report is published until it reconciles to the totals it prints. For every office block, seven hard checks run:

CheckWhat must holdBlocks
funds_availableAuthorization + supplementals + transfers − withdrawals = funds available[placeholder]
category_sumCategory period amounts sum to the organization total[placeholder]
items_vs_subtotalLine items sum to their printed category subtotal[placeholder]
subtotal_vs_summaryPrinted subtotal equals the summary table's period amount[placeholder]
itemized_without_subtotalAn itemized category in the summary has detail beneath it[placeholder]
net_payroll_vs_classesPayroll class subtotals sum to net payroll[placeholder]
entries_vs_fulltimePayroll entries sum to the full-time permanent subtotal[placeholder]

Two soft checks are recorded and never fail a block: the printed net-payroll line vs. the summary (adjustment timing, per the report's own notes), and a summary showing payroll with no abstract printed (interns, child-care contributions, reserves). Whole-report counts (blocks, lines, items, entries) are also compared to an independent survey of the PDF.

4 · Status by report

ReportBlocksPassDiscrepanciesStatus
Senate · Oct 2025 – Mar 2026 119sdoc61,1611,156pair 2; unpaired 1; summary-only 1; payroll-abstract 1Published
Senate · Apr 2025 – Sep 2025 119sdoc51,1051,094pair 2; summary-only 1; payroll-abstract 8Published
Senate · Oct 2024 – Mar 2025 119sdoc31,1001,088summary-only 1; payroll-abstract 11Published
Senate · Apr 2024 – Sep 2024 118sdoc131,0481,034pair 2; summary-only 3; payroll-abstract 9Published
Senate · Oct 2023 – Mar 2024 118sdoc111,0361,007pair 2; within-office 2; unpaired 16; summary-only 1; payroll-abstract 8Published
Senate · Apr 2023 – Sep 2023 118sdoc81,0751,045pair 2; within-office 2; unpaired 18; summary-only 3; payroll-abstract 4Published
Senate · Oct 2022 – Mar 2023 118sdoc21,0721,066within-office 2; unpaired 2; payroll-abstract 2Published
Senate · Apr 2022 – Sep 2022 117sdoc141,0381,030unpaired 4; summary-only 2; payroll-abstract 2Published
Senate · Oct 2021 – Mar 2022 117sdoc101,034998unpaired 7; summary-only 1; payroll-abstract 28Published
Senate · Apr 2021 – Sep 2021 117sdoc81,0661,050unpaired 13; summary-only 1; payroll-abstract 2Published
Senate · Oct 2020 – Mar 2021 117sdoc51,1101,071unpaired 2; payroll-abstract 37Published
Senate · Apr 2020 – Sep 2020 116sdoc19971956within-office 2; unpaired 1; payroll-abstract 12Published
Senate · Oct 2019 – Mar 2020 116sdoc14966871unpaired 79; summary-only 1; payroll-abstract 15Published
Senate · Apr 2019 – Sep 2019 116sdoc10899875unpaired 1; payroll-abstract 23Published
Senate · Oct 2018 – Mar 2019 116sdoc2897863unpaired 1; payroll-abstract 33Published
Senate · Apr 2018 – Sep 2018 115sdoc9754723payroll-abstract 31Published
Senate · Oct 2017 – Mar 2018 115sdoc6750721payroll-abstract 29Published
Senate · Apr 2017 – Sep 2017 115sdoc5784750unpaired 1; payroll-abstract 33Published
Senate · Oct 2016 – Mar 2017 115sdoc2782746unpaired 1; payroll-abstract 35Published
Senate · Apr 2016 – Sep 2016 114sdoc17760738unpaired 1; payroll-abstract 21Published
Senate · Oct 2015 – Mar 2016 114sdoc13760730unpaired 2; payroll-abstract 28Published
Senate · Apr 2015 – Sep 2015 114sdoc7768724payroll-abstract 44Published
Senate · Oct 2014 – Mar 2015 114sdoc4763737payroll-abstract 26Published
Senate · Apr 2014 – Sep 2014 113sdoc25701669payroll-abstract 32Published
Senate · Oct 2013 – Mar 2014 113sdoc22697671payroll-abstract 26Published
Senate · Apr 2013 – Sep 2013 113sdoc17735702payroll-abstract 33Published
Senate · Oct 2012 – Mar 2013 113sdoc2729687payroll-abstract 42Published
Senate · Apr 2012 – Sep 2012 112sdoc10702671payroll-abstract 31Published
Senate · Oct 2011 – Mar 2012 112sdoc7699666payroll-abstract 33Published
Senate · Apr 2011 – Sep 2011 112sdoc4742699payroll-abstract 43Published
House · [placeholder] ([placeholder] quarters)———Loading

A report is published when every failing check has a verdict: a discrepancy printed in the source, a parser defect (fixed before publishing), or unclassified (which blocks publication). The bar is zero unexplained blocks.

5 · Printed discrepancies, latest report

5 of 1,161 blocks have printed discrepancies.

In every case the PDF prints the numbers we read, confirmed by a second script that does not use the parser; these are discrepancies in the report, not in the parse.

6 · Staff names Name withheld

The Senate prints every staffer's name beside their title and pay. We publish titles, service dates and office totals. Names are kept internally for analysis (turnover, moves between offices, later lobbying registrations) and appear only where a confirmed lead depends on one, after the office has been asked for comment. Travel reimbursements to staff show as "Staff" for the same reason. The names are one click away in the original PDF; we don't pretend otherwise, we just don't index them.

7 · Where a model is involved Model · 0.97

Never for a dollar amount. Models suggest finer subcategories for free-text descriptions ("STAFF TRANSPORTATION SEATTLE TO WASHINGTON DC" → airfare), cluster vendor spellings, and propose office-to-member matches. Every such label is stored with the model, prompt version and confidence, shown beside the original text, and never used in a total. Fuzzy vendor merges and name matches stay suggestions until a person reviews them.

Detectors (peer outliers, reversals, trip reconstruction, calendar patterns) run across all offices and report base rates, so no one is singled out by how the search was aimed. A lead is a reason to look, not a finding; only confirmed leads are published, with their rows.

8 · Known issues

Letter-spaced text[placeholder] records in the latest report were printed with spaces between letters (G U IDEPOINT). They are flagged, repaired for display, and the raw spelling is kept.
Layout driftColumn positions and section labels change between years. Parser rules cover the 30 reports; every change re-runs against all of them.
Funding years overlapAn office appears once per funding year in each report, and amounts can adjust earlier years. Period totals on member pages add funding years together and say so.
House allowancesShare-of-allowance is available for the Senate (printed in each summary) but not yet for the House, whose allowances are published separately.

9 · Changelog

2026-10-14Latest report, Oct 2025 – Mar 2026: 1,161 blocks, 32,618 line items, 8,990 payroll entries; 99.57% of blocks pass every hard check.
[date]Senate backfill, 30 reports, zero unexplained blocks per report.
[date]Site v1 launch.