Public Bid Access Observatory

Dated data on how US state and local public bids are posted, collected and timed. Every figure has its date, sample size and what was left out. Every file is yours to download.

By Colton HeilRelease Snapshot taken November 1, 2026

Release of November 1, 2026

This release is a snapshot taken November 1, 2026. It counts 23,973 cleared bids due August 3 to November 1, 2026, out of 103,851 rows in that window. The rest were left out by the rules below, and each step is counted on the pages that use the window. It corrects release 2026-11-01; what changed is listed below.

How long cleared bids gave to respond

Each bar is the share of bids whose due date fell that many weeks after the posting date.

  1. Under 1 week4.8%630 bids
  2. 1 to 2 weeks11.9%1,559 bids
  3. 2 to 3 weeks23.0%3,015 bids
  4. 3 to 4 weeks19.3%2,536 bids
  5. 4 to 5 weeks21.5%2,815 bids
  6. 5 to 6 weeks9.0%1,181 bids
  7. 6 to 7 weeks4.7%610 bids
  8. 7 to 8 weeks2.3%307 bids
  9. 8 to 9 weeks1.3%174 bids
  10. 9 to 10 weeks0.6%84 bids
  11. 10 weeks or more1.6%205 bids

Bars run from 0% to 25%, just above the largest share.

Date
bids due August 3 to November 1, 2026
Sample
13,116 cleared bids with a usable source posting date
Left out
79,878 of 103,851 rows in the window were left out by the release rules. 10,857 of 23,973 cleared bids have no usable posting date and are not in this measure
Type
Observed
Embed this chart

Paste this into any page. It reads the latest release, so it updates when we publish one. You do not need to link back to us. The framed chart runs no analytics, advertising or attribution code. The chart carries its own date and sample size, so keep it whole.

<iframe src="https://www.velocitybids.ai/data/embed/window-histogram" title="How long cleared bids gave to respond" width="100%" height="1654" loading="lazy" style="border:0;max-width:760px"></iframe>

Open the chart on its own page

Not every row is a bid

Share of cleared rows that are true solicitations

87.2%

Date
bids due August 3 to November 1, 2026
Sample
400 randomly sampled cleared rows
Left out
79,878 of 103,851 rows in the window; the steps are on the response windows page
Type
Estimated

An estimate from a random sample of 400 cleared rows, each judged by a model from its posted title only, not a count of every row. The 95% interval is 83.6 to 90.2; the precision file has the sample, the unclear rows and the spot-check.

Cohort: cleared US state and local bids.

87.2% of the 400 sampled rows were true solicitations, with a 95% interval of 83.6% to 90.2%. 33 were unclear from the title alone and 18 were not solicitations, such as headings, grant programs and award notices. Leave the unclear ones out and the share is 95.1%.

Verdicts read from posted titles by Claude Sonnet 5.5. Spot-check: a second pass by Claude Opus 5.5, a different model, with the first verdicts hidden, on 133 of 400 general labels on November 1, 2026. All 133 had a first verdict of solicitation, so the check tests false positives only; labels first judged unclear or not a solicitation were not rechecked. 4 verdicts differed and 4 labels changed; where the passes differed, the verdict that is not a solicitation stood. It is a model check, not a human one.

Rules every number follows

  • A source is cleared only if no named exclusion applies and its listing host's robots.txt permits its listing URL. A row is cleared only if its source is cleared and its own posting URL is permitted. Unknown means excluded.
  • Left out by name: resellers and aggregators; portals whose terms limit how we can use their data; a foreign notice feed; SAM.gov (federal, reported separately); portals behind a login; hosts we have not cleared for republication.
  • Only bids with a verified United States location are counted. 11,687 rows that passed every other test were left out because their country could not be verified.
  • A state, platform or trade figure needs at least 150 rows. Below that it is not published.
  • Counts of the whole source base say so, and are not trends. Observed counts and estimates are never mixed on one line.
  • We estimate we hold 45% to 70% of state and local bids, medium-low confidence, as of October 29, 2026. That was measured separately from this release. How we count.
  • Published figures are never edited by hand. A wrong figure gets a new release and a dated correction note.

The method, and where our collection falls short, is in How we count public bids.

Source base on November 1, 2026: 26,285 active sources, of which 12,373 sit on no platform we track. Observed Cohort: whole hub, not a trend.

All releases

Every published release, newest first
ReleaseSnapshot takenBids dueRows inCleared rows
2026-11-01-r2November 1, 2026August 3 to November 1, 2026103,85123,973
2026-11-01November 1, 2026August 3 to November 1, 2026103,85123,973

latest.json always names the newest release. The pages show only the newest. Older releases stay at their addresses so a figure you cited can still be checked.

Corrections

Release 2026-11-01-r2, November 1, 2026

Release 2026-11-01-r2 corrects release 2026-11-01, on November 1, 2026. Release 2026-11-01 stays published as it was. Use this release where the two differ.

  • Time from posting to first sighting. Release 2026-11-01 timed a bid when its posting date was on or before our first sighting. That kept 1,326 bids dated within a day of first sighting, whose dates may have been inferred from when we found the bid, and DATA-RELEASE-RULES allows a date-based figure only on a date from the source. This release times a bid only when its posting date is more than a day before first sighting, the rule the response window uses: 8,502 bids, median 5.2 days, 21.4% seen within 2 days and 63.7% within 7 days, against 9,828 bids, median 4.1 days, 32.0% and 68.6% before. The earlier basis is published as the labelled sensitivity in freshness.json.
  • Bids not timed. The reasons published for cleared bids left out of the timing figures did not add up to the bids left out. They now do: 15,471 of 23,973 cleared bids are not timed, and timing.notTimed gives each reason, including 353 bids dated after we first saw them.
  • Platform concentration by state. The share published as topPlatformShare for a state is the share of its largest raw platform label, and in 10 of 32 states that label is the one for sources on no platform we track, which stands for many separate sites. This release publishes the largest platform by name for each state, the share of bids on no tracked platform, and the largest tracked platform with its share of the bids on tracked platforms. A platform the clearance rules do not allow us to name shows as unnamed.
  • Platform concentration overall. Release 2026-11-01 published top5PlatformShare, 67.5% of cleared bids on the five largest platform groups, and its headline called them the five largest platform groups. Two of those five groups are catch-alls and not platforms: sources on no platform we track (25.0% of cleared bids) and the shared Other portals label. This release publishes top5NamedPlatformShare, the five largest groups that are one named platform each: 42.5% of cleared bids. The share with the two catch-alls is kept as top5GroupShareIncludingCatchAlls (67.5%, the figure published before as top5PlatformShare) and the headline no longer uses it.
  • Precision. The share of cleared rows that are true solicitations is now marked estimated, because it comes from a random sample of 400 rows judged by a model from the posted title, with a 95% interval of 83.6 to 90.2.
  • Source base. sourceBase.json now gives the exact difference between the 12,373 active sources on no tracked platform and the 12,296 in the platform list: 77 are resellers or are not listed by platform.
  • Wording. The figure for the share of cleared bids with a posting date now says usable posting date, because more cleared bids have a posting date than have a usable one. Its value is unchanged.
  • New tables. freshness-by-state.csv, response-window-by-state.csv and response-window-histogram.csv publish the state and histogram figures that the pages show.
  • Every other figure, including the response window, weekly counts, document access and trades, is unchanged. The changed figures are listed below, and the files that did not change are named in unchangedFiles.
Every changed figure (42)
Figures that differ between release 2026-11-01 and release 2026-11-01-r2
FileFigureIn 2026-11-01In 2026-11-01-r2
freshness.jsonbyState[AZ].medianLagDays4.45.3
freshness.jsonbyState[AZ].n182158
freshness.jsonbyState[CA].medianLagDays55.7
freshness.jsonbyState[CA].n743666
freshness.jsonbyState[CO].medianLagDays2.74.7
freshness.jsonbyState[CO].n295216
freshness.jsonbyState[FL].medianLagDays3.85.1
freshness.jsonbyState[FL].n1,3191,141
freshness.jsonbyState[HI].medianLagDays4.75.1
freshness.jsonbyState[HI].n391370
freshness.jsonbyState[IL].medianLagDays25.3
freshness.jsonbyState[IL].n282188
freshness.jsonbyState[KY].medianLagDays66.4
freshness.jsonbyState[KY].n229217
freshness.jsonbyState[LA].medianLagDays78
freshness.jsonbyState[LA].n255229
freshness.jsonbyState[MI].medianLagDays3.74.3
freshness.jsonbyState[MI].n499453
freshness.jsonbyState[MO].medianLagDays2.93.4
freshness.jsonbyState[MO].n414360
freshness.jsonbyState[NC].medianLagDays8.19
freshness.jsonbyState[NC].n695668
freshness.jsonbyState[NJ].medianLagDays5.37.3
freshness.jsonbyState[NJ].n346287
freshness.jsonbyState[NY].medianLagDays3.34.3
freshness.jsonbyState[NY].n200169
freshness.jsonbyState[OH].medianLagDays4.25.5
freshness.jsonbyState[OH].n214171
freshness.jsonbyState[SC].medianLagDays3.73.9
freshness.jsonbyState[SC].n1,3241,150
freshness.jsonbyState[TN].medianLagDays4.45
freshness.jsonbyState[TN].n217199
freshness.jsonbyState[TX].medianLagDays3.95.4
freshness.jsonbyState[TX].n371316
freshness.jsonbyState[VA].medianLagDays4.85.1
freshness.jsonbyState[VA].n269249
freshness.jsonlagMedianDays4.15.2
freshness.jsonlagP75Days8.69.5
freshness.jsonlagP90Days14.615.6
freshness.jsonlagRows9,8288,502
freshness.jsonseenWithin2Days3221.4
freshness.jsonseenWithin7Days68.663.7

Also new: freshness-by-state.csv, response-window-by-state.csv, response-window-histogram.csv. Fields added: 35. Fields removed: 5. Wording changed in 4 fields. Files with no change: biasTests.json, clearance.json, document-access-by-platform.csv, document-access-by-state.csv, documentAccess.json, exclusions.json, geography.json, platforms.csv, portal-directory.csv, portalDirectory.json, precision.json, reconciliation.json, responseWindow.json, trades.csv, trades.json, weekly-due.csv, weekly.json. manifest.json lists all of these field by field.

All files in release 2026-11-01-r2

These files are the release these figures come from. They are plain CSV and JSON, they sit at fixed addresses, and each one is listed with its size and a hash in manifest.json, so you can check that what you hold is what we published.

  • manifest.jsonJSON

    Release date, code revision, rule version, row counts in and out, and a hash of every file

  • biasTests.jsonJSON, 1 KB

    Checks on whether bids with a posting date differ from those without

  • clearance.jsonJSON, 6 KB

    How sources are cleared, with counts by platform and reason

  • document-access-by-platform.csvCSV, 382 B

    Document access by platform group

  • document-access-by-state.csvCSV, 425 B

    Document access by state

  • documentAccess.jsonJSON, 3 KB

    Open bids with a downloaded document, overall, by state and by platform

  • exclusions.jsonJSON, 4 KB

    Rows left out at each step, with the reason, and the sensitivity checks

  • figures.jsonJSON, 8 KB

    Every headline figure with its date, sample size, cohort and what it measures

  • fragmentation.jsonJSON, 13 KB

    Platform groups, sources and shares, overall and by state

  • freshness-by-state.csvCSV, 614 B

    Median days from posting to first sighting by state, on the strict rule and on the looser rule

  • freshness.jsonJSON, 5 KB

    Days to first sighting, with every bid not timed counted under a reason, the looser rule as a labelled sensitivity, source recency and the state breakdown

  • geography.jsonJSON, 877 B

    How country and state are verified, with counts

  • platforms.csvCSV, 757 B

    Platform groups with sources, cleared bids and share

  • portal-directory.csvCSV, 4 KB

    The portal directory as a table

  • portalDirectory.jsonJSON, 9 KB

    Portals whose pages we fetched and checked on the release date

  • precision.jsonJSON, 3 KB

    The reviewed sample that gives the share of rows that are true solicitations

  • reconciliation.jsonJSON, 1 KB

    How earlier published figures compare with this release

  • response-window-by-state.csvCSV, 795 B

    Response window by state: timed bids, median and the 10th and 90th percentiles

  • response-window-histogram.csvCSV, 325 B

    Response windows in one-week steps: timed bids and share

  • responseWindow.jsonJSON, 5 KB

    Response window percentiles, histogram and state breakdown

  • sourceBase.jsonJSON, 2 KB

    The whole source base on the release date, with its clearance counts

  • states.csvCSV, 3 KB

    One row per state: bids, sources, platform labels, the largest platform and the largest tracked platform, response window and document access

  • states.jsonJSON, 15 KB

    State table with the suppression counts

  • trades.csvCSV, 1 KB

    Trade breakdown as a table

  • trades.jsonJSON, 9 KB

    Trade breakdown where the release publishes one

  • weekly-due.csvCSV, 477 B

    Cleared bids due each week as a table

  • weekly.jsonJSON, 2 KB

    Cleared bids due each week, all sources and a fixed cohort

File hashes
SHA-256 of each file in release 2026-11-01-r2
FileSizeSHA-256
biasTests.json1 KBf9d41121b04497658b56a7941fe29d1ea956bbc437d228046587baeeb2ff5443
clearance.json6 KB2533ab185b38256f668e115830153c60dadd5497fed937698d4773b5f2f75778
document-access-by-platform.csv382 B6f707cb25e44410ce7045cd8368f764787198e2063503e4fb111ef2fcd4a9f93
document-access-by-state.csv425 B7e43dcae5e6102dc40797b6924d0b00261edf2689b48992c78118ba96adaee8a
documentAccess.json3 KB3a00802f2af451ba3c9d09baf6ebdec529b3a4485cdea52c80dd378aa78fe31a
exclusions.json4 KB36c4999f1ff2bc6b87e2f7b7108f066ee4b7270960590fd3ac60ad6f0cd085e4
figures.json8 KB4b014189396b426af9681b41f6a240adbec579ec2b3bb129558c698d8855eb81
fragmentation.json13 KB446f13b2799cf86db795e1944f7a0ac4367d26a71e9a4fc82875a887c466f4b2
freshness-by-state.csv614 B82c53951b344f1e3ada7a7e9baabb9bf73d8ece022eefd85481e45482df0063a
freshness.json5 KBfacbcb2aaa39239cb5e328412146be66cb6f14bb18c13b6e2c64bbe87982fbf8
geography.json877 B021e8971e83fa42841a167e4b5cb8e4d48b6ea78a1bfd9ec6fe1d8cc8abeb6bb
platforms.csv757 B688b154b77359f44af2ae983e923625c6e9d940622c614df4db557f6d5d4a0e2
portal-directory.csv4 KB17101c3789bd66095d87e8e15cc6eb05d6c75295de0d741b1f26242a0c6a56da
portalDirectory.json9 KBbfa373dd9b4f45785aa7ff9d734a0ff5e2b755efe1f8badd1a233fd480050762
precision.json3 KBf208256727d0be116d826f40e4a60fb1d09d92315a8398a64c1391b029bf66d1
reconciliation.json1 KBc3a578fcbcee93fb5fa75f1a9ae6e79eb73a9bd0046240a15efb2e2fe1bd4167
response-window-by-state.csv795 Bd47a8c43319304d7b95185fd1b6bec9799e867abca1d849c1e3b3ef20ab8f410
response-window-histogram.csv325 B80d83602caaf8a7d9a684f7350db6b2ff49435b475b1eec141e5eeb6dd7aedd9
responseWindow.json5 KB92b050b57a9d5012697fe121f928ebf18b88f1178e599a81ef71530971aa2b24
sourceBase.json2 KBd2ebf89b862088928de3776b6d6069b16cbad34575a51010d534736c257e5df3
states.csv3 KB2e91abb2de0adfa5b0ae86d0e8bf9d7f2e86f509cf59b3026ead8074063e6189
states.json15 KB2ad19c42724e82a8a9644030b39792d36d8ef1acf0b1bca5f3a4cb9f2c0c4e26
trades.csv1 KB61f15cbd0a800a4b377c839b3d98dd02c75dc73b28fddaa1bfb7227ab2a65197
trades.json9 KB1caf58539f24c398c9bf891b61f098ecd99d9da84a50256534ab8c5b514fbcdf
weekly-due.csv477 B79c6fd6691cdf10f395718ba82845e6a21851822a46572569fa0b47643a22d3c
weekly.json2 KBc5caa3d5108dd1633cfba39520e973cca00a3d0082256e5673367f0990c8bdb0

manifest.json holds these hashes, so it is not hashed in itself.

Use and cite this data

You can copy a table, embed a chart or build on the files without asking and without linking back. Keep the date and sample size with the figure, because a number without them can be read the wrong way.

Cite as: VelocityBids, Public Bid Access Observatory, release 2026-11-01-r2, November 1, 2026. https://www.velocitybids.ai/data

If a figure is wrong, we publish a new release with a dated correction note and leave the old one at its address. To report one, write to hello@velocitybids.ai.

Keep reading

See it for your business.

Share a few details and we'll follow up to schedule a demo. Date and time are optional.

Times are shown in your local time. If you pick a time, we'll confirm a 30-minute demo by email.

Your information is sent securely to the VelocityBids team.