Source catalog

GAO Protests

Published Government Accountability Office bid-protest decisions.

← Source catalog

Source, grain and coverage

GAO Protests ↗

Separate public docket and decision observations. Filing and decision dates describe different events.

Dockets and published decisions have separate datasets and event dates. Collection covers selected public records and accumulates history. Decision NAICS and grounds can be unavailable. An absent published decision does not establish that no protest occurred.

Collection schedule: Monthly.

Records describe public source observations. Missing values remain unknown; historical observations do not establish current status.

Definitions audited . Use source status and the returned watermarks to inspect current collection health.

REST and MCP access

Use a credential with intelligence scope and enable that data domain in your workspace.

curl 'https://www.govbiz.ai/api/v2/catalogue/sources/gao-protests-refresh/records?limit=2' \
  -H "Authorization: Bearer $GOVBIZ_API_KEY"

The primary dataset is protest_dockets. Select another dataset from this source with dataset_id. Supported field names can be used as exact filters; the versioned query endpoint also supports declared ranges and list operators.

Through canonical /mcp, use govbiz_discover_datasets, govbiz_describe_dataset, govbiz_search_records, and govbiz_get_evidence. Cross-source relationships use govbiz_get_related_records and require access to every involved domain.

API contracts · MCP setup · Workspace data domains

Query this source →

Protest Dockets

protest_dockets · Schema 1

One retained public protest docket per case_number; filing, disposition and published-decision events are distinct.

Search modes: structured, lexical. History: Current retained projection; exact historical reconstruction is unsupported.

Measures: record_count. Monetary values use decimal strings with declared units. Unknown amounts do not become zero.

Field definitions and supported filters · 12 fields
FieldType / unitMeaningAvailability and filters
case_numberstringGAO docket file/case reference; not a contract/solicitation ID.Storage and value limits: Maximum 50 characters; identifier rules can be narrower.Values can be missingeq, in, is_null, contains
file_datedateGAO protest filing calendar date.Storage and value limits: Calendar date without time of day or timezone; source precision can be month/quarter instead.Values can be missingeq, in, is_null, gte, lte
decision_datedateGAO docket/decision disposition calendar date.Storage and value limits: Calendar date without time of day or timezone; source precision can be month/quarter instead.Values can be missingeq, in, is_null, gte, lte
protesterstringGAO docket protesting-party label.Storage and value limits: Maximum 500 characters; identifier rules can be narrower.Values can be missingeq, in, is_null, contains
agencystringSource agency label used by legacy SBIR/GAO records.Storage and value limits: Maximum 200 characters; identifier rules can be narrower.Values can be missingeq, in, is_null, contains
contracting_officestringPublic GAO docket contracting-office label when supplied.Storage and value limits: Maximum 300 characters; identifier rules can be narrower.Values can be missingeq, in, is_null, contains
outcomestringStored docket/decision disposition label; preserve source normalization and case scope.Storage and value limits: Maximum 30 characters; identifier rules can be narrower.Values can be missingeq, in, is_null, contains
decision_urlstringPublic GAO docket/decision evidence URL.Storage and value limits: No declared field-length cap here; API/output budgets must apply; empty and null differ.Values can be missingeq, in, is_null, contains
decision_titlestringGAO public decision title in the docket table.Storage and value limits: No declared field-length cap here; API/output budgets must apply; empty and null differ.Values can be missingeq, in, is_null, contains
attorneystringPublished GAO attorney label; public docket metadata, not an agency procurement contact.Storage and value limits: Maximum 300 characters; identifier rules can be narrower.Values can be missingeq, in, is_null, contains
abstract_textstringGAO docket/decision abstract or summary text.Storage and value limits: No declared field-length cap here; API/output budgets must apply; empty and null differ.Values can be missingeq, in, is_null, contains
ingested_atdatetimeProducer ingestion timestamp; some relations store ISO text and others timestamp without time zone.Storage and value limits: Instant with timezone only if declared; otherwise local/producer time must be explicitly interpreted. Do not invent clock precision.Values can be missingeq, in, is_null, gte, lte

Protest Decisions

protest_decisions · Schema 1

One retained published protest-decision observation per id, with its docket reference and decision date.

Search modes: structured, lexical. History: Current retained projection; exact historical reconstruction is unsupported.

Measures: record_count. Monetary values use decimal strings with declared units. Unknown amounts do not become zero.

Field definitions and supported filters · 16 fields
FieldType / unitMeaningAvailability and filters
idintegerGovBiz surrogate row identifier; interpret together with its relation, not as a source-native key.Storage and value limits: Signed 32-bit integer; logical domain constraints can be narrower.Values can be missingeq, in, is_null, gte, lte
docket_numberstringGAO decision docket/file reference in the decisions table.Storage and value limits: Maximum 50 characters; identifier rules can be narrower.Values can be missingeq, in, is_null, contains
case_titlestringGAO case/decision title.Storage and value limits: No declared field-length cap here; API/output budgets must apply; empty and null differ.Values can be missingeq, in, is_null, contains
protester_namestringGAO decision protesting-party label; not a resolved UEI.Storage and value limits: Maximum 300 characters; identifier rules can be narrower.Values can be missingeq, in, is_null, contains
agency_namestringSource agency name; a label whose scope can be department, bureau or office.Storage and value limits: Maximum 200 characters; identifier rules can be narrower.Values can be missingeq, in, is_null, contains
agency_codestringStored source agency identifier; namespace can be CGAC, FPDS, top-tier or publisher-specific and must be declared.Storage and value limits: Maximum 20 characters; identifier rules can be narrower.Values can be missingeq, in, is_null, contains
decision_datedateGAO docket/decision disposition calendar date.Storage and value limits: Calendar date without time of day or timezone; source precision can be month/quarter instead.Values can be missingeq, in, is_null, gte, lte
outcomestringStored docket/decision disposition label; preserve source normalization and case scope.Storage and value limits: Maximum 50 characters; identifier rules can be narrower.Values can be missingeq, in, is_null, contains
decision_urlstringPublic GAO docket/decision evidence URL.Storage and value limits: No declared field-length cap here; API/output budgets must apply; empty and null differ.Values can be missingeq, in, is_null, contains
summarystringCollected decision summary; do not assume it contains every ground or holding.Storage and value limits: No declared field-length cap here; API/output budgets must apply; empty and null differ.Values can be missingeq, in, is_null, contains
groundsarrayReported protest ground label list when separately extracted; currently absent.Storage and value limits: Array/list; no declared cardinality cap here; distinguish missing list, empty list and per-element nulls.Not collected; returned as unknownoverlaps, is_null
corrective_actionstringPublished corrective-action context when collected; not implied by a disposition label.Storage and value limits: No declared field-length cap here; API/output budgets must apply; empty and null differ.Values can be missingeq, in, is_null, contains
solicitation_numberstringSource solicitation reference; qualify by issuer and dates before relating records.Storage and value limits: Maximum 100 characters; identifier rules can be narrower.Values can be missingeq, in, is_null, contains
naics_codestringSource industry classification code; link with the NAICS edition and declared precision.Storage and value limits: Maximum 10 characters; identifier rules can be narrower.Require a classification edition; do not join broad prefixes as exact identities.Not collected; returned as unknowneq, in, is_null, contains
keywordsarrayCollector decision keyword list; search hints rather than definitive legal categorization.Storage and value limits: Array/list; no declared cardinality cap here; distinguish missing list, empty list and per-element nulls.Values can be missingoverlaps, is_null
ingested_atdatetimeProducer ingestion timestamp; some relations store ISO text and others timestamp without time zone.Storage and value limits: Instant with timezone only if declared; otherwise local/producer time must be explicitly interpreted. Do not invent clock precision.Values can be missingeq, in, is_null, gte, lte