cbo_cost_estimates
CBO cost-estimate publication index
One row per bill and CBO publication, using build_bill_family's own cbo_cost_estimates output and spicy-docs' feed builder, merged by merge_cbo_cost_estimates: where both routes state one bill and publication, the BILLSTATUS row stands. One publication can stand under two bills, and both rows publish. All columns are stored as VARCHAR.
Coverage. Sampled: the estimates CBO lists for the bills the bill family has read, from the 108th Congress on, from two routes merged: each bill's BILLSTATUS record (source billstatus_bulk) and CBO's own per-Congress feed (cbo_feed), read once by every run for each Congress it is scoped to. BILLSTATUS states no estimate for the 112th and 113th, so theirs come from the feed alone; elsewhere the feed adds only what no BILLSTATUS record lists, such as the Recovery Act, H.R. 3200 and the ACA. A Congress no scoped run has read the feed of yet holds its BILLSTATUS estimates only. A feed item that names no bill has no row here (cbo_feed_items lists it): CBO's weekly estimates of the bills the House takes up under suspension of the rules, a committee's reconciliation recommendations, and an estimate CBO files under no bill number. A bill passed under suspension can be scored in such a weekly estimate first or only, so its first row here does not date CBO's first estimate of it. An absent estimate does not mean CBO never scored a bill. No CBO.gov body is requested. (measured 2026-10-03)
Data quality. The bill's cbo_cost_estimates_outcome distinguishes an absent or empty element, an unexpected shape, and populated estimates. An empty index does not establish that CBO never scored the bill. Report citations are the bill's list, not proof that each publication is reprinted in each report; the report's recital gate is evaluated separately. A feed row carries its bill's own BILLSTATUS report citations, read by the same run or carried from the bill's published rows, and NULL where neither names them. A successfully evaluated bill replaces its prior BILLSTATUS rows, including when the list is absent or empty; an unexpected list shape retains prior rows until a successful read can establish the current relationships. A feed read replaces its Congress's prior feed rows, so an item CBO withdraws or re-files leaves, and a feed that cannot be read keeps them. found_by says how each row names its bill; the rows published before it take billstatus in a one-time backfill. title_bill_id is the bill the estimate's title leads with: where it differs from bill_id (7 of the 12,732 BILLSTATUS rows on 2026-09-29), bill_id is a numbering error as published and title_bill_id the bill scored. A title leading with a public law reads through the published laws table, which held the 119th Congress alone on 2026-09-29, so such a title of an earlier Congress leaves title_bill_id NULL and a blank feed item titled by an earlier law has no row (110th P.L. 110-50 and 112th P.L. 112-8). CBO's 119th-Congress feed, read 2026-10-03, holds 53 items that name no bill and have no row, 48 of them weekly suspension estimates. 23 of them are among the feed's 674 items dated 2026: 21 suspension estimates, 62413 (reconciliation recommendations of the Senate Homeland Security and Governmental Affairs committee) and 62643 (the Continuing Appropriations and Extensions Act, 2027).
- Parquet file:
cbo_cost_estimates.parquet - MCP
query_sqlsupport: Configured; requires an available artifact. - Publication status: Not established by this schema page or its measurement date.
- Row count: Not stated here; the MCP
describe_tablereply gives the live count underpublication.
| Column | Type | Description |
|---|---|---|
bill_id |
VARCHAR |
The bill the source attached this estimate to, as published, keyed the way congress_bills.bill_id is: the bill whose BILLSTATUS record lists it (billstatus_bulk), or the bill CBO's feed item names by Bill_Number, by a bare-number Bill_Number and the title's leading citation of that number, or, where Bill_Number is empty, by the citation its title leads with or by the bill the host's laws table says enacted the law it leads with (cbo_feed; found_by says which). Where title_bill_id differs, this number is wrong and title_bill_id names the bill the estimate scores. |
congress |
VARCHAR |
The numbered Congress the bill belongs to. |
bill_type |
VARCHAR |
Lowercase publisher bill or resolution type (hr, s, hjres...). |
bill_number |
VARCHAR |
The measure's number within its Congress and type. |
publication_id |
VARCHAR |
CBO's own publication number, parsed from the stated url by the cbo_publication_url rule and part of this row's identity. This is the key CBO's per-Congress feed also states, so that feed's own spelling of the measure, which no GovInfo route gives, joins here. It is not unique alone: where the routes file one estimate under two bills, both rows publish -- CBO's feed files 22065, its estimate of P.L. 111-322, under the 112th's H.R. 3082 and the 111th's H.R. 3082 BILLSTATUS lists it -- and title_bill_id names the bill it scores. |
pub_date |
VARCHAR |
The publisher's pubDate for this estimate; the merge prefers the larger value. It is when CBO published the estimate, not when the bill acted. A cbo_feed row states the feed's Date as the same instant in UTC, spelled as BILLSTATUS spells pubDate. |
title |
VARCHAR |
The estimate's title as the publisher states it, which is usually the bill's own title. |
description |
VARCHAR |
CBO's own statement of which printing it scored ("As ordered reported by the House Committee on Energy and Commerce on March 24, 2023"). The only field that distinguishes two estimates of one bill, and the field that states the stage: 826 of the 118th House's 1,062 rows begin "As ordered reported by the House C", and the tail includes Rules Committee prints, which have no committee report at all. A cbo_feed row's is the feed's Description with the surrounding whitespace this package's feed parser trims, a trailing newline on many. |
url |
VARCHAR |
The publication page the publisher linked, exactly as stated; every measured one is walled. |
source |
VARCHAR |
Which route stated the element: billstatus_bulk for GovInfo's keyless BILLSTATUS bulk zip, cbo_feed for CBO's keyless per-Congress feed; congress_api is reserved and no route produces it. Sealed and additions-only. The feed is read for every Congress. BILLSTATUS states no estimate for the 112th-113th (none in 12,299 and 10,637 documents), so their rows are cbo_feed, and there a bill without a row is one no feed item names, never established as unscored. Elsewhere a merge keeps billstatus_bulk, the bill's own record, where both routes state one bill and publication (merge_cbo_cost_estimates), so a cbo_feed row there is an estimate no BILLSTATUS record lists: 33 over the 108th-111th and 114th-119th (2026-09-28), among them the 111th's H.R. 1, H.R. 3200 and two of H.R. 3590, and the 110th's P.L. 110-50. |
estimate_index |
VARCHAR |
Zero-based position, in the list the row was read from, of the item this row states: the first one naming this publication on https, else the first one naming it. A BILLSTATUS list keeps the publisher's order, which is a fact nothing here re-sorts. A cbo_feed row's list is the feed items naming the bill, oldest first and then by publication id, because the feed runs newest first and its order within one Date changes between captures. Each route's list is its own, so on a bill both routes give rows (8 over the 108th-119th, 2026-09-28) a billstatus_bulk and a cbo_feed row can share one index. |
stated_count |
VARCHAR |
How many items in this bill's list name this publication, which is one estimate stated that many times and not that many estimates. The 108th-111th BILLSTATUS lists state every estimate twice, once on http and once on https, and the 112th-113th's state none. Elsewhere it is usually 1: the 118th states one twice on 37 of 1,468 measured rows. A cbo_feed row's is 1, because the feed lists a publication once. |
restatements_json |
VARCHAR |
Every other item naming this publication whose fields differ from the row's, in list order, as a JSON array of objects carrying estimate_index and only the differing fields; [] when they agree or there is no other item. In the 118th (measured 2026-09-20) 9 of the 37 restated rows differ, every one in title alone -- CBO re-spelling the bill's title ('Human rights' to 'Human Rights', one double-escaped ampersand). In the 108th-111th every row carries its http twin, which differs in url and, on all but 11 of 4,762, in description, which it wraps in a p element. The column exists so folding onto the identity drops nothing. |
report_citation_count |
VARCHAR |
How many committee reports this bill's own BILLSTATUS names, on a cbo_feed row too, where the host supplies that record; NULL on a cbo_feed row shaped without it. Zero means this document names no report citation; it does not establish that no CRPT package exists. 883 of the 1,368 scored bills of the 118th are nonzero (64.5%), and the Senate shortfall is structural -- 155 of 395 scored Senate bills were reported without a written report. |
report_citations_json |
VARCHAR |
Every citation that bill's <committeeReports> states, as a JSON array in publisher order (NULL where report_citation_count is), each carrying the citation verbatim and its parsed congress, report_type and number -- the three columns committee_reports publishes -- plus part where the citation names one. A part citation has no package id under GovInfo's sealed CRPT grammar, so none is invented; the parsed parts are NULL on any citation outside the measured shape. |
publication_id_rule |
VARCHAR |
The rule that produced publication_id; a url shape, never a guess at an id. |
title_bill_id |
VARCHAR |
The bill this estimate's own title leads with ("H.R. 3447, a bill to extend ..."), keyed as bill_id is and read by the feed's title rule; for a title leading with a public law ("P.L. 111-322, ..."), the bill the host's laws table says enacted it, where the host supplies that map. NULL where the title leads with no citation, cites the bill only after its start ("Senate Amendment 1183 to S. 744"), is ambiguous, or names a law the host did not map. Where it differs from bill_id the row is a numbering error and this is the bill the estimate scores: over the 108th-119th (2026-09-28), 5 BILLSTATUS rows and 5 feed rows by bill titles -- four of CBO's own wrong numbers on both, 112 H.R. 1707 for S. 1707 on the feed, and 114 H.R. 3347 on BILLSTATUS, whose record lists CBO's estimate of H.R. 3447 -- and, with a law map, 2 more on both (P.L. 119-21's estimates filed under H. Con. Res. 14) and 1 more on the feed (P.L. 111-322 filed under the 112th's H.R. 3082, its bill's number in the 111th). A bill citation reads in the row's own Congress, so this cannot show a link to the same number in another Congress: 115 H.R. 1422's BILLSTATUS lists 52538, CBO's estimate of the 113th's H.R. 1422, and this reads 115-hr-1422; that pub_date, 2013-04-22, precedes the 115th. On a cbo_feed row whose found_by is title, title_law or bill_number_title the title chose bill_id, so the two agree by construction and the agreement proves nothing: 237 of the 108th-119th's feed rows with the host's law map, 235 without (2026-09-28). title_bill_id_rule names the rule. |
found_by |
VARCHAR |
How the source linked this estimate to bill_id: billstatus (the bill's own BILLSTATUS record lists it), or on a cbo_feed row bill_number (the item's Bill_Number), title (the citation a blank item's title leads with), title_law (the public law a blank item's title leads with, through the host's laws table: the 110th's P.L. 110-50 and the 112th's P.L. 112-8) or bill_number_title (a bare-number Bill_Number, whose type the title's leading citation of the same number supplies: the 117th's 700 as H.R. 700, the 118th's 106 as S. 106). Sealed and additions-only. |
title_bill_id_rule |
VARCHAR |
The rule that read title_bill_id, on every row, a NULL title_bill_id included (the rule ran and named no bill): cbo_title_citation/1, the bill or public law the estimate's title leads with, a law through the host's laws table. The grammar is this package's and moves; the version says which one read the row. |