SAM.gov rate-limit guide

SAM.gov API rate limits and how to avoid them.

The official SAM.gov APIs are the upstream source of truth. They also have daily limits, page sizes, required date windows, and source-specific schemas. Plan for those limits before you build a polling loop.

SAM.gov API rate limitsavoid SAM.gov API throttlingSAM.gov opportunities API limits
Official limits

The limit depends on the SAM.gov API and account type.

The SAM.gov Get Opportunities API requires an API key, uses daily limits based on federal/non-federal roles, and documents a maximum opportunity page size of 1,000 records. The SAM.gov Entity Management API documents default daily limits from 10 requests/day for a non-federal personal key with no SAM.gov role up to 10,000 requests/day for a federal system account.

10 requests/day

Documented for non-federal personal keys with no SAM.gov role on the Entity Management API.

1,000 requests/day

Documented for common role-backed personal keys and non-federal system-account keys on the Entity Management API.

10,000 requests/day

Documented for federal system-account keys on the Entity Management API.

1,000 records/page

Documented maximum page size for the Get Opportunities Public API.

Build pattern

Avoid limits by changing the shape of the job.

Retrying faster usually makes the problem worse. A better pattern is to keep search broad, cache stable records, fetch detail only when a record changes, and use a cursor or date window for incremental work.

Cache by source ID

Store the upstream notice ID and the platform recordId. Do not refetch unchanged records on every user search.

Split search and detail

Use list/search calls to find candidate records, then fetch documents, history, and joined context only for selected records.

Use incremental polling

Poll changes or updated-since windows instead of replaying every keyword search across the same date range.

Keep source links

Preserve the source URL and original identifiers so humans can verify the upstream record when needed.

Boring path

Boring gives your app one request budget over normalized records.

This does not change SAM.gov's upstream limits. It gives your application a Boring Data Platform quota over source-linked, normalized records with documents, history, and joins where available.

PlanMonthly requestsPer-key rate
Sandbox5,00060 rpm
Starter10,000600 rpm
Growth100,000600 rpm
Developer500,000600 rpm
Run this curl

Fetch one current SAM.gov opportunity through Boring.

Replace the API key with a Sandbox or paid key. The response uses the Boring /v1/* envelope and counts as one request against your monthly quota.

bash
curl -s 'https://api.boringdataplatform.com/v1/opportunities?source=sam_current&limit=1' \
  -H 'Authorization: Bearer <YOUR_API_KEY>'