Skip to content

gao_reports

Government Accountability Office reports

One row per U.S. Government Accountability Office (GAO) report or testimony, keyed by GAO's own product id. The federal oversight layer over the rulemakings this dataset tracks — GAO's audits, evaluations, and recommendations on how agencies implement laws and rules. source names the route of each row: the public GAO reports RSS feed, read daily by build_gao_reports (a ~25-item recent-products window, the only anonymous machine-readable listing of new products, so the table is an append-only accumulator); a one-time copy of upstream's rows for the weeks before the fork read the feed; explicit single-report repairs; and GovInfo's GAOREPORTS listing, a closed collection read once, each row then filled from its package's MODS; and GAO's own Month in Review and Annual Index, read from a walk made outside the daily job. Deduped on report_id; a GovInfo or listing row never replaces a row already held. A later read of a held product merges cell by cell and never empties a cell. The R package copy is the lowest route: it adds only reports no row holds, and a later read by any other route takes its row over, with the package's cells filling only what that route leaves NULL. The listing fills only a NULL report_number. The daily feed sets title, date, abstract and url on its own and upstream-copied rows, and only fills NULLs of those on rows another route supplied; its placeholder type and tag lists fill nothing. A row keeps the source that first supplied it. The three counts are BIGINT; every other column is VARCHAR.

Coverage. True range on GovInfo's archive and a window on recent products, with a gap between. The govinfo rows are every report and testimony in GovInfo's closed GAOREPORTS collection, issued from 1989-11-15 to 2008-09-18, less its Comptroller General decisions; GovInfo adds nothing later, and one history run adds them. Their abstract, topics, product type and report number come from each package's MODS, read in batches; a govinfo row whose report_number is NULL has not been read yet, or GovInfo serves no MODS for it. The gao_rss rows are what the daily job has read from GAO's recent-items feed since 2026-09-22 (its first read reached back to 2026-09-15); the feed lists only about 25 items, so a product published while the job was not reading is lost to it. The upstream_copy rows are the reports published from 2026-07-13 to 2026-09-14, copied once from upstream spicy-regs' own feed accumulator. The gao_repair rows were added one at a time by an explicit repair. The gao_listing rows are the products GAO's own Month in Review and Annual Index list for each year or month a finished walk of those pages read, from 2009 on; a year or month the walk has not finished adds nothing. They are the GAO-numbered products and every Federal Agency Major Rule Report, which GAO numbered GAO- to February 2017 and B- from April 2017, keyed on its page. So every major-rule report from 2009 on is here, and none from 1996 to 2008: GovInfo's history leaves out B-numbered packages. B-numbered legal decisions and Contract Appeals Board dockets are in gao_decisions; entries GAO gives no number are left out. Products issued from late 2008 to mid-2026 are absent unless a repair or that listing added them. The requester, recommendation, matters, page-count and subject-term columns come from the R package for the reports it lists; reports issued after its copy (package commit 6f61230, 2026-09-26) are blank in them until a GAO product-page reader fills them. The gao_r_package rows are the reports no other route held, copied once from the CetiAlphaFive/gao R package by Jack T. Rametta (GPL-3.0-or-later; commit 6f61230, inst/extdata/gao_links.rds). They run from 1922, mostly the 1970s to the 1990s, and carry no product type. Legal decisions there are left out. (measured 2026-09-28)

  • Parquet file: gao_reports.parquet
  • MCP query_sql support: 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_table reply gives the live count under publication.
Column Type Description
report_id VARCHAR GAO product id as gao.gov's product URL spells it (e.g. gao-26-107974, t-rced-94-121), lowercased. Primary key / dedup key. A GovInfo package id maps to that spelling (GAOREPORTS-GAO-HEHS-00-73 is hehs-00-73, GAOREPORTS-RCED-AIMD-94-221FS is rcedaimd-94-221fs); a few keep GovInfo's spelling where the package id cannot recover gao.gov's.
title VARCHAR Product title as the route states it; on a listing row, the teaser's label and heading joined as label: heading, which is how the feed titles the same products. A few GovInfo titles are GovInfo's placeholder GAO Report from and the number. Where our own routes leave it NULL, it may come from the CetiAlphaFive/gao R package (GPL-3.0-or-later, commit 6f61230), which fills only empty cells. GAO double-escapes some headings, so a few listing titles keep —, — or & literally, as GAO's page displays them; apply html.unescape when matching.
report_type VARCHAR GAO product type. The feed tags no finer type, so a feed or upstream-copied row is Report; a GovInfo or listing row is Testimony for a T- number or a number ending in T, else Report; NULL on a report added by explicit repair.
published_date VARCHAR Publication date as an ISO date string (e.g. 2026-07-17): the feed's pubDate (upstream's feed for a copied row), GovInfo's dateIssued, the listing's "Publicly Released" date (its "Published" date where it states no release), or the day a repaired product's page states. Sort key.
abstract VARCHAR The product summary: the feed's (GAO's What GAO Found / Why GAO Did This Study narrative), or a GovInfo row's MODS abstract with whitespace runs collapsed; NULL where neither states one, and on repair and listing rows. Where our own routes leave it NULL, it may come from the CetiAlphaFive/gao R package (GPL-3.0-or-later, commit 6f61230), which fills only empty cells.
agencies_json VARCHAR Reserved JSON array of agencies the product covers. The RSS feed carries no structured agency tags, so this is [] pending a future enrichment source; NULL on repair, GovInfo (MODS names no agency) and listing rows. Where our own routes leave it NULL, it may come from the CetiAlphaFive/gao R package (GPL-3.0-or-later, commit 6f61230), which fills only empty cells.
topics_json VARCHAR JSON array of topics. A GovInfo row's is its MODS subject/topic terms in the record's order, GAO's own index terms, program names and places, kept as stated (a long name can arrive split in two); NULL where the MODS states none or is unread. A listing row's is GAO's own topic headings the product was listed under, as GAO spells them and in listed order. The RSS feed carries no topic tags, so a feed or upstream-copied row is []; NULL on repair rows. Where our own routes leave it NULL, it may come from the CetiAlphaFive/gao R package (GPL-3.0-or-later, commit 6f61230), which fills only empty cells.
url VARCHAR The product's page on the route that supplied the row: the gao.gov product page for feed, upstream-copied, repair and listing rows, GovInfo's details page (composed from the package id) for GovInfo rows.
source VARCHAR The route that supplied the row: gao_rss (the daily feed), upstream_copy (copied once from upstream spicy-regs' published table), gao_repair (an explicit single-report repair), govinfo (GovInfo's GAOREPORTS listing), gao_listing (GAO's own Month in Review and Annual Index) or gao_r_package (copied once from the CetiAlphaFive/gao R package by Jack T. Rametta, GPL-3.0-or-later).
product_type VARCHAR The publisher's product type, finer than report_type, which keeps its values. A GovInfo row's is its MODS type (e.g. Letter Report, Correspondence, Testimony, Fact Sheet, Other Written Product). A listing row has one only where GAO's teaser shows a finer type in place of a subject (Federal Agency Major Rule Report, on every major-rule report; Correspondence; Other Written Product); NULL where it shows a subject or only Report/Testimony. NULL on other routes and on unread GovInfo rows.
report_number VARCHAR The report number as the route prints it, the form other documents cite and users search for: a GovInfo row's MODS (e.g. GAO-08-919R, RCED/AIMD-94-221FS, GAO/HEHS-00-73) or the product number on GAO's listing page (e.g. GAO-26-108426, or B-331093 for a major-rule report from April 2017 on). The listing fills it on any row it lists whose number is NULL, whatever route supplied the row, and never replaces one. NULL on other feed, upstream-copied and repair rows, and on GovInfo rows whose MODS is unread. Where our own routes leave it NULL, it may come from the CetiAlphaFive/gao R package (GPL-3.0-or-later, commit 6f61230), which fills only empty cells.
requester_type VARCHAR Why GAO did the work, as the R package states it: congressional_request, testimony, correspondence, cg_initiated (the Comptroller General's own initiative) or statutory_mandate. NULL where the package states none, and on reports issued after its copy (2026-09-26) until a GAO product-page reader fills them.
requester_committees_json VARCHAR JSON array of the requesting congressional committees, as the R package extracted them from the report (e.g. Committee on Armed Services (Senate)). NULL where it states none, and on reports issued after its copy.
requester_members_json VARCHAR JSON array of the requesting members of Congress, as the R package extracted them from the report's text, with its OCR errors kept (e.g. Charles H. Percy (Senate)). NULL where it states none, and on reports issued after its copy.
recommendation_count BIGINT How many recommendations the product makes, as the R package counts them (0 for none). BIGINT. NULL on reports it does not list, and on reports issued after its copy.
matters_for_congress_count BIGINT How many matters for congressional consideration the product raises, as the R package counts them (0 for none). BIGINT. NULL on reports it does not list, and on reports issued after its copy.
page_count BIGINT The report's page count as the R package states it. BIGINT. NULL where it states none, and on reports issued after its copy.
subject_terms_json VARCHAR JSON array of GAO's subject index terms for the product, as the R package states them (e.g. Cost control, Financial management), finer than topics_json. NULL where it states none, and on reports issued after its copy.