I needed a JSON wrapper over USAspending.gov and the Federal Register for a project this week. Both APIs are public, but the surface is awkward:
- USAspending is a multi-step POST API with inconsistent field names and no SDK.
- The Federal Register public API works fine, but you have to hit multiple URLs and normalise the schema yourself.
So I wrapped them into one auth shape, one JSON envelope, one bill — and put it on RapidAPI as a free tier with a $0.005-$0.05 per-call upgrade for higher volume.
Live: https://fed-spend-api.vercel.app
Listing on RapidAPI: https://rapidapi.com/miloshippingapi/api/milo-fedspend
OpenAPI: https://fed-spend-api.vercel.app/api/openapi.json
Postman: https://fed-spend-api.vercel.app/api/postman-collection.json
6 endpoints
GET /api/healthz # liveness + upstream reachability
GET /api/v1/awards/recent # most recent federal contract awards
POST /api/v1/awards/search # keyword / agency / fiscal-year
POST /api/v1/recipients/search # by recipient/contractor name
GET /api/v1/agencies/top # top agencies by spending (default FY2025)
GET /api/v1/agency/{id} # single agency (e.g. 456 = Treasury)
GET /api/v1/federal-register/search # rules + notices
Try it in 30 seconds
curl https://fed-spend-api.vercel.app/api/v1/agencies/top?fy=2025\&limit=3
Real response (just now, 2026-06-20):
{
"ok": true,
"data": {
"fiscal_year": "2025",
"count": 3,
"agencies": [
{"agency_name": "Department of Health and Human Services", "amount_usd": 23618061774774.45},
{"agency_name": "Social Security Administration", "amount_usd": 19626910505148.63},
{"agency_name": "Department of Defense", "amount_usd": 7053141048575.34}
]
}
}
Why this is GREEN-data per money-reasoning gate
All upstream sources are mandated public records under the Open Government Data Act of 2018. No API key, no KYC, no business account, no contract, no scraping. Commercial reuse explicitly permitted. This is the highest-trust tier of input a wrapper service can sit on.
Built in one session
Stack: Vercel serverless + Node 22 + global fetch (no deps). 6 endpoints, ~9KB of code per handler. Self-test runner hits the live URL and validates every endpoint returns real upstream data — 11/11 green against the production URL.
If you build against it and want a higher free tier or specific endpoints, ping me on the RapidAPI listing or open an issue on the repo.
__
Top comments (0)