Most of the federal bid protest record is public, but it is split across two different views, one of which is easy to miss entirely. And the outcome label in that record routinely understates who actually won. Here is where protest records live, how long a protest takes, and how to read what you find.
GET /api/v1/protests, JSON, on every plan.
This is the question that trips people up first, because "the protest record" is not one thing. There are five places a federal protest can exist, and they have completely different disclosure rules.
| Where | Public? | What you can actually get |
|---|---|---|
| GAO docket | Yes | Every GAO case: file number, protester, agency, solicitation number, filing date, the date it must be decided by, and the outcome once there is one. This is the complete record of which cases exist, including the ones that never produce a written decision. |
| GAO published decisions | Yes | The full written reasoning, for cases that reach a published decision. Valuable, but a minority of cases: most dismissals are never published, so decisions alone are not a census of protests. |
| GAO's electronic filing system | No | The filing system used by parties to a case. It is a docketing tool for participants, not a research surface, and the public docket is the view that corresponds to it. |
| Court of Federal Claims | Yes, separately | A different venue with its own docket. A protester can go there instead of GAO, or after GAO. Not part of the GAO record and not in this dataset. |
| Agency-level protests | No | Filed directly with the buying agency. These are not disclosed anywhere, by anyone. No dataset has them, including this one. |
The practical consequence: the docket, not the decisions, is what tells you a protest happened. A dataset built only from published decisions looks authoritative and silently omits most of the cases, because the largest outcome category, dismissal, is largely unpublished. That distinction is the single most common way protest counts go wrong.
A bid protest is a formal challenge to how a federal agency ran a procurement: the terms of the solicitation, the evaluation of proposals, or the award itself. Most go to GAO, which acts as an independent forum and issues a written decision.
Protests are a normal, legal part of federal contracting. Being protested says nothing about an awardee's quality, and filing one says nothing bad about the protester. Read a protest as a fact about a procurement, never as a verdict on a company.
The record uses five outcome labels: Sustained (GAO agreed the agency erred), Denied (GAO considered the merits and disagreed), Dismissed (the case ended without a merits ruling), Withdrawn (the protester ended it), and Granted (rare, mostly on requests for reconsideration or cost claims). Those labels look self-explanatory. Two of them are not, which is the subject of the section below.
"How long does a GAO protest take" has an unusually precise answer, because the deadline is statutory rather than a matter of court congestion.
| Clock | Limit |
|---|---|
| Filing a post-award protest | Within 10 days of when the protester knew the basis, or 5 days after a required debriefing |
| GAO decision | 100 days from filing |
| GAO decision, express option | 65 days |
| Automatic stay of performance | Runs from the timely protest until GAO decides |
The stay is the part that changes a schedule rather than informing a post-mortem. Under the Competition in Contracting Act, a timely protest obliges the agency to stop performance of the contract while GAO reviews it. The winner cannot start work. The agency often extends the incumbent to bridge the gap. Any timeline built on that award moves. None of that is visible in a record of decided protests, because the case has not been decided yet.
Because the 100 days are statutory, every pending case carries a specific date it must be decided by, and GAO publishes it on the docket alongside the filing date. That date is the practical answer to "when does this award come unfrozen." We hold it for every pending protest, so the pending set can be read in deadline order: which frozen awards resolve first.
Right now there are 219 open GAO protests. A pending protest carries no outcome and no decision date, because there is nothing decided to report, and it leaves the pending set the moment GAO rules. If one sits on a solicitation you are watching, that is the single most actionable protest fact available about it.
The 100 days is a ceiling, not a typical case. Measured across 12,508 GAO protests filed between November 2017 and August 2026 where both the filing date and the decision date are published:
| Percentile | Days from filing to decision |
|---|---|
| 25th | 20 |
| Median | 34 |
| 75th | 67 |
| 90th | 95 |
97.4% are decided inside the statutory 100 days. GAO meets its deadline in nearly every case.
The median of 34 days is not the number to plan against, though, because it averages two very different populations. Splitting by outcome shows what is really happening:
| Outcome | Cases | Median days to decision |
|---|---|---|
| Dismissed | 7,390 | 26 |
| Withdrawn | 1,625 | 27 |
| Denied | 2,830 | 87 |
| Sustained | 546 | 89 |
| Granted | 45 | 122 |
Cases that end without a merits ruling close in about four weeks. Cases GAO actually decides on the merits, whether it agrees with the protester or not, take about three months. Denied and Sustained sit within two days of each other, which makes sense: both required the same full review, and the length tells you nothing about which way it went.
The practical read: a protest still open after roughly a month is probably heading for a merits decision, and the stay on that award is likely to run to something near the full 100 days rather than clearing shortly. That distinction is the difference between waiting out a procedural dismissal and re-planning a program schedule around a quarter-long freeze.
Two caveats worth stating plainly. The 100-day clock is a deadline, not a schedule: many cases end earlier, most often because the agency takes corrective action and the case is dismissed. And the deadline can move, as it did when GAO closed during the 2025 lapse in appropriations and pending deadlines were extended by the length of the closure.
GAO's sustain rate for fiscal year 2025 was 14%. Read alone, that suggests protesting is close to futile: seven in eight protesters lose.
GAO's effectiveness rate for the same year was 52%.
Both figures are correct, and the gap between them is the most useful thing in protest data. The effectiveness rate counts protesters who obtained relief by any route, including the common one: the agency reviews the protest, decides the protester has a point, and takes voluntary corrective action. It re-opens the evaluation, amends the solicitation, or re-competes the award. Once it does, there is nothing left for GAO to rule on, so GAO dismisses the protest as academic.
The protester got what they wanted. The public record says Dismissed.
So the practical reading is:
| Outcome | What it actually tells you |
|---|---|
| Sustained | Unambiguous and rare. GAO found the agency erred and recommended a remedy. In our corpus, 546 of 13,778 decided. |
| Dismissed | Ambiguous, and the largest category by far. Covers protests filed late or outside GAO's jurisdiction, and protests resolved because the agency fixed the problem. A cluster of dismissals on one solicitation deserves a closer look, not a shrug. |
| Denied | GAO reached the merits and did not agree with the protester. This is the clearest "the agency was fine" signal. |
| Withdrawn | The protester ended it themselves, which can also follow an agency concession. |
Anyone building a pipeline that filters on outcome = Sustained to find "successful protests" is looking at roughly a quarter of the ones that actually achieved something.
Our corpus, as of 25 August 2026:
| Measure | Value |
|---|---|
| Decided protests held | 13,778, October 2019 to today |
| Currently pending | 219, refreshed daily |
| Carrying a solicitation number | 12,487 (89%), which is what makes a protest joinable to a specific procurement |
| Sustained | 546 |
| Dismissed / Denied / Withdrawn | 7,390 / 2,830 / 1,625 |
| Volume | roughly 1,850 to 2,200 decided per year, steady across the period |
Two patterns are worth naming. First, the same procurement often draws several protests: three firms protesting one solicitation produce three separate case numbers, so a solicitation lookup can legitimately return a cluster. Second, protest volume has been drifting down, and GAO's own reporting shows the same: 1,803 cases received in fiscal 2024, 1,688 in fiscal 2025.
The protest record is public. Turning it into something you can query against your own pipeline is a different problem, and it is worth being direct about where the difficulty sits.
unknown as if it were an identifier.None of this is exotic. All of it is a place to end up with a number that looks authoritative and is quietly wrong.
Counting your own rows proves nothing about completeness. GAO publishes an Annual Bid Protest Report to Congress with exact case counts, so we checked against it rather than against ourselves.
| Fiscal year | GAO published | Our record |
|---|---|---|
| 2024 | 1,706 cases closed (of 1,803 received) | 1,850 |
| 2025 | 1,688 cases filed | 1,920 closed |
We hold slightly more records than GAO's headline case counts, which is the shape of a complete pull rather than a partial one: a truncated dataset comes in under the published figure, not over. The overage is most likely a counting difference, since GAO reports cases while we record individual docket entries and one procurement protested by several firms produces several of them. We have not proven that, and we would rather say so than round it off.
We also scanned the record month by month. Across the 83-month span the median month carries 166 decisions, and exactly one month is empty: October 2025. That is not a gap in coverage. GAO was closed for the entire month during the lapse in appropriations, its filing system was offline, and no decisions were issued at all. Deadlines for pending cases were extended by the length of the closure. The absence is the event.
This is the GAO forum. Three other paths exist, and none of them are in this data:
So an empty result means no protest is visible in this corpus for that solicitation. It is never proof that none was filed. The API says this in the response rather than leaving you to assume it.
The feed is available on every plan and answers the survey questions:
# everything currently pending before GAO, soonest deadline first
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/protests?status=Open&sort=due"
# protests GAO actually sustained, most recent first
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/protests?outcome=Sustained"
# one agency's protest record
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/protests?agency=Veterans"
# filed this quarter, excluding requests for reconsideration
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/protests?filed_from=2026-07-01&case_type=Bid%20Protest"
Every record carries the protester, agency, solicitation number, filing date, the date GAO must decide by, the case type, the outcome and decision date once there is one, and a link to the public docket entry. Factual only, never scored: there is no "protest risk rating", because the facts are the product and the judgement is yours.
The question about a specific procurement you are working is on the Pro plan:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/protests/{solicitation_number}"
It returns count, any_open (is it under an active protest right now), any_sustained, and earliest_open_due_date, the soonest a live protest on that solicitation must be decided, plus each protest in full. A solicitation can carry both an earlier closed protest and a live pending one, which is precisely the case worth catching. Full field and error reference: API documentation.
GAO protests are. The GAO docket lists every case filed with it, including cases that never produce a published decision, with the protester, the agency, the solicitation number and the outcome. GAO's published decisions are also public, but they cover only a minority of cases. Protests filed directly with the buying agency are not public, from any source. Court of Federal Claims protests are public through that court's own docket, separately.
100 days from the date the protest is filed, set by statute, or 65 days if the case is handled under GAO's express option. Because the deadline is statutory, every pending case has a specific date it must be decided by, and GAO publishes that date on the docket. Many cases end sooner, most often because the agency takes corrective action.
GAO publishes the docket and its decisions on gao.gov, which is the authoritative source and the right place to read any individual case. What that surface does not offer is a way to query the record against your own pipeline: pending and decided cases sit in separate views, the most accessible view covers only a rolling window, and there is no bulk export. That gap is what this dataset fills.
Often, yes. If the protest reaches the agency within 10 days of award, or 5 days of a required debriefing, the agency must suspend performance until GAO decides, and GAO has 100 days to do so. That is why a pending protest is a scheduling fact and not just a record.
Because dismissal covers two very different things: cases with a procedural defect, and cases where the agency took corrective action and there was nothing left for GAO to decide. The second group are protesters who effectively won. GAO's fiscal 2025 sustain rate was 14%, while its effectiveness rate, which counts corrective action as relief, was 52%.
October 2019, with roughly 1,850 to 2,200 decided protests per year and no unexplained gaps. Every response reports the exact window it covers, because the record extends forward daily.
GAO was closed for the whole month during the lapse in appropriations. No protests could be filed and no decisions were issued. The absence in the data reflects what happened.
You can see protests a firm filed, and protests on solicitations it was involved in, by name and by solicitation number. Note that the party named in the record is the protester, which is usually the firm that did not win.
No. Every field is a fact from the public record. A protest is a fact about a procurement, not a judgement about a vendor, and what it means for your bid is yours to decide.