Block, formula, and project grants plus cooperative agreements that have already been awarded, sourced from USAspending and served as clean JSON. This is award data (who received federal funding), not open opportunities to apply for.
Search federal financial-assistance award transactions by recipient UEI, name, state, or type, by FAIN, awarding agency, CFDA program, or funding opportunity. This is the grant side of federal spending, money to states, universities, hospitals, nonprofits, tribes, and local governments, the counterpart to the prime contract (FPDS) data. Every base award and every modification is one row. Coverage today is FY2025 + FY2026 (action dates from October 2024 onward): 1,115,791 assistance transactions across 564,610 awards and 61,928 recipient organizations.
It is a free base data layer, the same posture as contracts: every plan, including the free trial, gets all filters and all four endpoints. Plans differ on page size and rate limit, not on access. Refreshed daily.
Search, single-award detail, the full modification trail, and a recipient-keyed reverse lookup. Every call takes a single Authorization: Bearer header.
Filter-based search. At least one substantive filter is required (see parameters below).
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/grants/search?uei=RFKGNHR7ZH37&limit=50"
Latest action plus a roll-up across every transaction under one award key. Look awards up by assistance_award_unique_key, not by FAIN.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/grants/ASST_NON_4683DRCAP00000001_070"
The full transaction history for one award, oldest action first. Not date-windowed: you get the complete history we carry.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/grants/ASST_NON_4683DRCAP00000001_070/modifications?limit=500"
Every grant one recipient received, by UEI, with a summary and the recipient's top CFDA programs.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/companies/RFKGNHR7ZH37/grants?limit=50"
Applies to /api/v1/grants/search. At least one of uei, parent_uei, fain, agency, cfda, recipient_name, recipient_state, or funding_opportunity is required. recipient_type and assistance_type_code are refinements and do not satisfy the requirement on their own. Unknown parameters return 400.
| Parameter | Type | Description |
|---|---|---|
uei | string (12) | Recipient Unique Entity Identifier, exact match. Joins to contracts and the company profile on the same UEI. |
parent_uei | string (12) | Recipient parent UEI, for corporate or system-level roll-up. |
fain | string | Federal Award ID Number, exact match. Not unique across recipients and years; to pull one award use the detail endpoint with the award key. |
agency | string | Awarding agency name substring, case-insensitive. health matches HHS sub-agencies. |
cfda | string | CFDA / Assistance Listing number, exact (for example 93.778 for Medicaid, 20.205 for Highway Planning and Construction). |
assistance_type_code | 02 | 03 | 04 | 05 | 02 Block grant, 03 Formula grant, 04 Project grant, 05 Cooperative agreement. Refinement only. |
recipient_name | string | Recipient name substring, case-insensitive. Minimum 3 characters. |
recipient_state | string | 2-letter code (exact) or full state name (prefix). |
recipient_type | string | Plain-language bucket: higher_education, nonprofit, state_government, local_government, school_district, tribal, small_business, for_profit, individual. Refinement only. |
funding_opportunity | string | Funding-opportunity (NOFO) number, exact match. |
date_from / date_to | YYYY-MM-DD | Bounds on action_date. Older dates are soft-clamped to the coverage floor; the clamp is surfaced in the response window block. |
amount_min / amount_max | number | Bounds on federal_action_obligation. 0 is honored. Accepts value_min / value_max as aliases. |
sort_by | string | One of action_date (default), federal_action_obligation, total_obligated_amount, recipient_name. |
sort_order | asc | desc | Default desc. Nulls sort last on descending, first on ascending. |
limit | 1-250 | Default 50. |
offset | integer | Pagination offset. |
fields | string | lean (default, 24 fields), expanded (~50 fields), full (every column), or a comma-separated explicit list. |
A search response is a data array plus pagination, a filters_applied echo, a window block, and a _sources array. The row below is one live Florida DOT highway action; note the negative federal_action_obligation, this row is a de-obligation.
{
"data": [
{
"assistance_award_unique_key": "ASST_NON_693JJ22230000Y001FLD620026_069",
"award_id_fain": "693JJ22230000Y001FLD620026",
"action_date": "2026-05-29",
"federal_action_obligation": -69062.00,
"total_obligated_amount": 4497482.00,
"assistance_type_code": "03",
"assistance_type_description": "FORMULA GRANT (A)",
"cfda_number": "20.205",
"cfda_title": "HIGHWAY PLANNING AND CONSTRUCTION",
"awarding_agency_name": "Department of Transportation",
"recipient_uei": "RFKGNHR7ZH37",
"recipient_name": "STATE OF FLORIDA DEPARTMENT OF TRANSPORTATION",
"recipient_state_code": "FL"
}
],
"pagination": { "limit": 1, "offset": 0, "total": 15661, "total_is_estimate": false, "has_next": true },
"filters_applied": { "uei": "RFKGNHR7ZH37", "date_from": "2024-10-01", "sort_by": "action_date", "sort_order": "desc" },
"window": { "plan_window_days": 1825, "earliest_searchable": "2024-10-01", "clamped": true },
"_sources": ["usaspending_fabs"]
}
Every row carries more than one dollar figure, and they answer different questions. Conflating them is the single most common grant-data mistake.
federal_action_obligation is what this transaction obligated. Sum it to total a recipient, a program, or a window. De-obligations are negative; summing nets them out correctly, so do not filter negatives away.total_obligated_amount is the award's cumulative lifetime total, repeated verbatim on every transaction of that award. Never sum it across rows; that multiplies one number by the transaction count.generated_pragmatic_obligations (in the expanded projection) is USAspending's reconciled best figure for an award.The single-award detail endpoint does this math for you: the latest transaction plus a transaction_rollup sibling that sums federal_action_obligation across the award and carries the award's lifetime figures separately. Below is a California FEMA disaster-recovery grant (CFDA 97.036).
{
"grant": { /* latest transaction, lean fields */ },
"transaction_rollup": {
"transaction_count": 1409,
"total_obligated": 312276899.65,
"award_total_obligated_amount": 403698397.09,
"award_total_outlayed": 264256562.26,
"first_action_date": "2024-10-04",
"latest_action_date": "2026-05-22",
"distinct_programs": 1
},
"_sources": ["usaspending_fabs"]
}
Here total_obligated ($312.3M) is the sum across this award's 1,409 transactions inside our coverage window. award_total_obligated_amount ($403.7M) is the award's lifetime cumulative carried from USAspending, so the roughly $91M gap is obligation that predates FY2025. award_total_outlayed ($264.3M) is money actually disbursed. To answer "how much has this award obligated to date," read the award figure; to answer "how much landed in my window," read the rollup sum.
/api/v1/companies/{uei}/grants is the reverse lookup: every grant one recipient received, plus a summary block that totals obligations and ranks the recipient's CFDA programs by dollars. It answers "what does this organization get from the federal government, and through which programs" in one call.
{
"uei": "RFKGNHR7ZH37",
"summary": {
"recipient_name": "STATE OF FLORIDA DEPARTMENT OF TRANSPORTATION",
"total_obligated": 3979077966.34,
"distinct_awards": 6753,
"distinct_programs": 29,
"distinct_agencies": 1,
"top_programs": [
{ "cfda_number": "20.205", "cfda_title": "HIGHWAY PLANNING AND CONSTRUCTION", "transaction_count": 14736, "total": 3189497390.00 },
{ "cfda_number": "20.279", "cfda_title": "NATIONAL HIGHWAY PERFORMANCE PROGRAM (NHPP)", "total": 204598978.00 }
/* up to 10 programs, ranked by dollars */
],
"first_action_date": "2024-10-15",
"last_action_date": "2026-05-29"
},
"data": [ /* paginated grant transactions */ ],
"pagination": { "total": 15661 },
"_sources": ["usaspending_fabs"]
}
The same UEI keys into prime contracts and the company profile, so a single recipient's grants and contracts line up without a client-side join.
assistance_award_unique_key (also embedded in the USAspending permalink), not by award_id_fain, which can recur across recipients and years.federal_action_obligation. To get net obligated dollars, sum the field across transactions, which is exactly what the detail endpoint's transaction_rollup.total_obligated reports.action_date is when the transaction posted and drives the search window. period_of_performance_start_date and period_of_performance_current_end_date describe when the funded work happens, which can run years past the action.record_type 1 or 3) with no individual recipient. Those rows carry a null recipient_uei, so recipient-keyed filters will not return them.recipient_type or assistance_type_code alone is not enough.has_next, not total. Search caps at 250 results per request, modification trails at 500. Two rate-limit layers are enforced: a per-key hourly limit (1,000 per hour on paid plans) and a 60-requests-per-minute-per-IP burst ceiling. Either one returns a 429 with a Retry-After header.
| GovCon API Grant Awards | USASpending API | Grants.gov | SAM.gov | |
|---|---|---|---|---|
| What it covers | Assistance awards (grants, cooperative agreements) | All federal spending | Funding opportunities, not awards | Contract notices, not assistance |
| Response format | JSON | JSON | JSON / XML | JSON |
| Search by recipient UEI | Yes (exact) | Partial (via recipient profile) | No | No |
| Filter by CFDA program | Yes (exact) | Yes | Yes (opportunities) | No |
| Plain-language recipient type | Yes (9 buckets) | No (business-type letter codes) | No | No |
| Modification trail | Yes (dedicated endpoint) | Partial | No | No |
| Search returns full fields | Yes | No (re-fetch detail to fill nulls) | n/a | n/a |
| Setup time | Minutes | Minutes (no key) | Minutes | 2-3 weeks (entity registration) |
earliest_searchable field in every response is the actual data floor, so window math is always honest. Older fiscal years are available on Enterprise and the open-tier window extends as coverage expands.Grant award data is a free base layer (the same posture as contracts). Every plan, including the free trial, gets all filters and all four endpoints. Plans differ on page size and rate limit, not on access.
Last updated: June 2026