Every record · every document · every change

Federal procurement data, ready to build on.

One API for opportunities, awards, entities, exclusions, documents, and changes. Source records, extracted text, history, source coverage, and analytics endpoints in one contract.

REST API for traditional integrations. MCP server for Claude, Cursor, and any agent. Same key. Same quota.

API operationalSchema v1
sam_current:W912-ABC-123schema v1 · source v4

Enterprise IT Support Services — Fort Liberty

Department of the ArmyNAICS 541512Closes May 14, 2026
PostedAmendment 0003Set-aside: SBA
Documents7 included
PDFsolicitation_W912-ABC-123.pdf2.4 MB · OCR ✓
XLSXprice_schedule_attach_B.xlsx88 KB
DOCXSOW_amendment_0003.docx146 KB · OCR ✓
History12 events
  1. Apr 16Amendment 0003 posted · close date extended
  2. Apr 02Q&A attachment added
  3. Mar 21Set-aside updated to SBA
  4. Mar 14Solicitation posted
One response · no joinsdocuments history analysis
75.1M+
Records
8+ yrs
Of history
65K+
DIBBS RFQs with documents
Per-source
Freshness model
How it works · sources → platform → API → clients

Nine sources. One envelope. One API.

We sync, normalize, and deduplicate every federal source on a continuous cadence. Documents, history, and analysis arrive in the same shape — for every record, current and historical.

Unified record · v1 envelope

The same shape for every source, every event, every year.

{
  recordId: string,
  threadKey: string,
  sourceName: string,
  summary: { ... },
  documents: { attachments[], OCR },
  history: { events[], snapshots[] },
  analysis: { features }
}
  • No per-source schemas. No format drift. No surprise nulls.
  • Same query for a 2026 RFQ and a 2018 award action.
  • Typed end to end, so agents and humans share one contract.
Reliability
99.97%
Uptime · 90d
84ms
p50 latency
  • SOC 2 Type II · in audit
  • Idempotent writes · signed webhooks
  • Versioned schemas · v1 stable since 2024
  • 30-day raw page archive per record
  • Replays from any cursor
  • Status page · public →
Two ways to integrate · one API key
Same record · two transports00000000-0000-4000-8000-000000000001
RESTfor apps & jobs

Dashboards, sync pipelines, alerts. Versioned /v1/* endpoints, bearer auth, cursor pagination where supported.

# From your backend, a cron, a notebook
curl https://api.boringdataplatform.com/v1/opportunities/00000000-0000-4000-8000-000000000001 \
  -H "Authorization: Bearer <YOUR_API_KEY>"
API reference
MCPfor agents · new

Claude Desktop, Cursor, Claude.ai, any agent. 20+ specialized tools tuned for tool selection, JSON-RPC over streamable HTTP.

# Inside Claude Desktop, Cursor, or any MCP client
	https://mcp.boringdataplatform.com/mcp
	{ "recordId": "00000000-0000-4000-8000-000000000001" }
Setup guide
One API key. One monthly quota. Switch transports without changing billing.

One response instead of three integrations.

Today, teams working with federal procurement data wire up three things: a notice feed, a document fetcher with OCR, and a diffing layer to reconstruct what changed. Each has its own auth, rate limits, and schema drift. Boring Data Platform returns the current record, its supporting documents, and its change history in one response — against one contract.

Without
  • SAM.gov API for current records
  • Custom scraper + OCR pipeline for attachments
  • Nightly diff job to reconstruct amendment history
  • Per-source retry / backfill logic
With
  • GET /v1/opportunities/:recordId
Every response contains
data.recordId
Globally unique, source-scoped identifier.
data.threadKey
Stable key linking notice + opportunity revisions.
data.summary
Normalized title, agency, status, type, dates.
data.documents
PDFs, attachments, extracted text, metadata.
data.history
Amendments, state transitions, full snapshot chain.
data.analysis
Structured dimensions and feature flags for grouped questions.

Need to slice rather than fetch-by-id? Hit /v1/opportunities/analysis for structured filters — NAICS, set-aside, contract type, and feature flags (hasExtractedText, hasPdf, hasTechnicalDocuments) — plus /analysis/rollups for aggregated facet counts.

Analytics · joined public records

Ask grouped questions, not just row lookups.

The lakehouse sources are useful alone. They become more useful when the API connects them: agency spend, opportunity features, vendor registration, exclusions, and integrity signals.

Award market

Which agencies are buying this NAICS this fiscal year?

Group awards by agency, vendor, NAICS, or PSC without pulling 33M rows into your own warehouse first.

/v1/awards/analysis/rollups?group_by=awarding_agency_code&fiscal_year=2025
Opportunity funnel

Which open opportunities have PDFs, tech packages, or awards?

Facet live opportunities by source, status, set-aside, NAICS, document availability, and derived features.

/v1/opportunities/analysis/rollups?hasPdf=true&naics=541512
Entity profile

What do we know about this UEI before we pursue or partner?

Connect SAM registration, recent awards, agency rollups, exclusions, and public integrity records in one call.

/v1/entities/{uei}/profile
Coverage · current sources
SourceRecordsDocumentsHistoryFreshnessStatus
SAM.govFederal opportunities & notices
6.4MPer recordEvery 6hLive
SAM.gov · HistoricalArchived solicitations & state transitions
14.2M snapshots8 yearsFrozenArchive
DLA DIBBSDefense Logistics Agency RFQs
65K+312K · OCR'dPer recordEvery 4hLive
USASpendingPrime contract award actions (FPDS-equivalent)
33M+FY2021–FY2025Every 2hLive
SAM.gov ExclusionsActive federal exclusion records with UEI/CAGE/NPI join keys
170K+Daily snapshotsDailyLive
Every source returns the same envelope — swap source= without rewriting business logic.Full coverage matrix

The boring part is the contract.

What stays stable, what changes, and how you find out. Read this before you commit to a procurement data vendor — most can't answer it.

Stable — we don't break these
  • Response envelopeTop-level data, meta, errors shape is frozen per major version.
  • Field names & typesAdditive changes only. Renames ship as a new major with 12-month overlap.
  • Record identifiersrecordId and threadKey are permanent once issued.
  • Auth & endpointsBearer tokens and route paths don't move within a major version.
Changes — with notice
  • New fieldsAdded as additive. Announced in meta.apiVersion changelog.
  • New sourcesNew source= values ship behind a feature flag, then GA.
  • DeprecationsMinimum 6-month sunset window. Deprecation header on every response that uses a deprecated field.
  • Rate limitsRaised, never lowered, without a billing-cycle of notice.
Current versionv1 · stable
Uptime SLO99.9% · 30-day rolling
Incident historystatus.boringdataplatform.com →

Four ways to start.

No sales call required for self-serve plans.

Sandbox
$0/mo
  • 5,000 requests / month
  • 60 rpm rate limit
  • 1 API key
  • All /v1/* endpoints and every source we cover
Start freeNo credit card.
Starter
$49/mo
  • 10,000 requests / month
  • 600 rpm rate limit
  • Unlimited API keys
  • Everything in Sandbox
Start StarterCancel anytime.
Developer
$299/mo
  • 500,000 requests / month
  • 600 rpm rate limit
  • Unlimited API keys
  • Everything in Sandbox
Get API keyCancel anytime.
Enterprise
Custom
  • Custom volume + rate limits
  • Everything in Developer
  • 99.9% uptime SLA · 30-day rolling
  • Dedicated support channel
Talk to a humanReply within 1 business day.