Federal Contracts API for Developers

Federal Grant Awards API

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.

On this page:

The four endpoints

Search, single-award detail, the full modification trail, and a recipient-keyed reverse lookup. Every call takes a single Authorization: Bearer header.

Search assistance transactions

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"

Single grant award

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"

Modification trail

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"

Recipient grants (reverse lookup)

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"

Query parameters

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.

ParameterTypeDescription
ueistring (12)Recipient Unique Entity Identifier, exact match. Joins to contracts and the company profile on the same UEI.
parent_ueistring (12)Recipient parent UEI, for corporate or system-level roll-up.
fainstringFederal Award ID Number, exact match. Not unique across recipients and years; to pull one award use the detail endpoint with the award key.
agencystringAwarding agency name substring, case-insensitive. health matches HHS sub-agencies.
cfdastringCFDA / Assistance Listing number, exact (for example 93.778 for Medicaid, 20.205 for Highway Planning and Construction).
assistance_type_code02 | 03 | 04 | 0502 Block grant, 03 Formula grant, 04 Project grant, 05 Cooperative agreement. Refinement only.
recipient_namestringRecipient name substring, case-insensitive. Minimum 3 characters.
recipient_statestring2-letter code (exact) or full state name (prefix).
recipient_typestringPlain-language bucket: higher_education, nonprofit, state_government, local_government, school_district, tribal, small_business, for_profit, individual. Refinement only.
funding_opportunitystringFunding-opportunity (NOFO) number, exact match.
date_from / date_toYYYY-MM-DDBounds on action_date. Older dates are soft-clamped to the coverage floor; the clamp is surfaced in the response window block.
amount_min / amount_maxnumberBounds on federal_action_obligation. 0 is honored. Accepts value_min / value_max as aliases.
sort_bystringOne of action_date (default), federal_action_obligation, total_obligated_amount, recipient_name.
sort_orderasc | descDefault desc. Nulls sort last on descending, first on ascending.
limit1-250Default 50.
offsetintegerPagination offset.
fieldsstringlean (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"]
}

Two amounts, two meanings (read this)

Every row carries more than one dollar figure, and they answer different questions. Conflating them is the single most common grant-data mistake.

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.

Recipient grants and top programs

/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.

Quirks that cost you a day

Drive page-forward loops off 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.

How it compares

GovCon API Grant AwardsUSASpending APIGrants.govSAM.gov
What it coversAssistance awards (grants, cooperative agreements)All federal spendingFunding opportunities, not awardsContract notices, not assistance
Response formatJSONJSONJSON / XMLJSON
Search by recipient UEIYes (exact)Partial (via recipient profile)NoNo
Filter by CFDA programYes (exact)YesYes (opportunities)No
Plain-language recipient typeYes (9 buckets)No (business-type letter codes)NoNo
Modification trailYes (dedicated endpoint)PartialNoNo
Search returns full fieldsYesNo (re-fetch detail to fill nulls)n/an/a
Setup timeMinutesMinutes (no key)Minutes2-3 weeks (entity registration)

Data source and coverage

Pricing

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.

See full pricing.

Related guides

Last updated: June 2026