usa_award_search
Pack: usaspending · Connect: https://pipeworx.io/mcp (see Connect below for a single-pack URL)
No MCP client? Call it directly: GET https://gateway.pipeworx.io/v1/tools/usa_award_search for the schema, then POST the same URL with its arguments for the data.
Search US federal PROCUREMENT CONTRACTS / government contract awards for goods and services. Use recipient_name for “contracts won by Lockheed Martin”; keywords searches award descriptions/topics, not contractor identity. Dates are optional and default to the last 12 months for “recent” questions. Dates select awards ACTIVE in the window (not signed in it) and award_amount is the award’s LIFETIME obligation, so do not sum it as spending for the period. Results are paged: 100 per page max — pass page (and read page_metadata.has_next) to reach the rest. Returns recipient, award amount, outlays (with an outlays_reported flag, since DoD awards usually report none), dates, and contract type. Umbrella contracts (IDVs — CRS-2, NASA Launch Services II, CCtCap) are a SEPARATE result set in idvs, not in awards: read both, and idv_status says which you got. IDV and child-order amounts are disjoint, so totals.combined_amount is the correct total.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
keywords | array | no | Search keywords (e.g., [“cybersecurity”, “cloud”] or [“goods”, “services”]) |
items | string | no | |
recipient_name | string | no | Contractor/recipient name (e.g., “Lockheed Martin”). Use for awards won by a company; do not put company names in keywords. Matched as a SUBSTRING of the registered legal name, so a brand name can miss the company entirely (“SpaceX” is not inside “SPACE EXPLORATION TECHNOLOGIES CORP.”); a known brand that matches nothing is retried under its legal name and the response says so in recipient_resolution. An empty result distinguishes no_match (no registered recipient has this name) from recipient_matched_no_awards (it does, but holds nothing under your window/agency filters) and lists the near-miss names in recipient_candidates. |
state | string | no | Place-of-performance US state, 2-letter code (e.g., “MD”, “TX”). Filters to contracts performed in that state. |
agency | string | no | Awarding agency — full toptier name (“Department of Defense”) or the common abbreviation (DOD, DHS, VA, HHS, DOE, NASA, GSA, USDA, EPA…), which is expanded for you. |
start_date | string | no | Start date in YYYY-MM-DD format |
end_date | string | no | End date in YYYY-MM-DD format |
naics | string | no | NAICS code to filter by (e.g., “541512”) |
set_aside | string | no | Small-business set-aside filter. Accepts a family name (“HUBZone”, “8(a)”, “WOSB”, “EDWOSB”, “SDVOSB”, “Veteran”, “Small business”, “Indian”), a FAR code (“HZC”, “8AN”, “SDVOSBC”), or the literal USAspending description (“HUBZONE SET-ASIDE”). Matches both the set-aside and sole-source variants of a family. |
limit | number | no | Number of results per page (1-100, default 10) |
page | number | no | 1-based page number (default 1). total_results can exceed limit; page through with this and read page_metadata.has_next / total_pages to reach every row. The idvs array is served on page 1 only. |
include_idvs | boolean | no | Include umbrella contracts (indefinite delivery vehicles) as a separate idvs array. Default true. Leave it on: these are often a recipient’s largest awards, and excluding them understates a total silently. |
Example call
Arguments
{
"recipient_name": "Lockheed Martin",
"limit": 10
}
curl
curl -X POST https://gateway.pipeworx.io/usaspending/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"usa_award_search","arguments":{"recipient_name":"Lockheed Martin","limit":10}}}'
TypeScript (@pipeworx/sdk)
import { Pipeworx } from '@pipeworx/sdk';
const pipeworx = new Pipeworx();
const result = await pipeworx.call('usa_award_search', {
"recipient_name": "Lockheed Martin",
"limit": 10
});
More examples
{
"keywords": [
"cybersecurity"
],
"start_date": "2024-01-01",
"end_date": "2024-12-31"
}
{
"keywords": [
"cloud",
"infrastructure"
],
"agency": "Department of Defense",
"start_date": "2023-01-01",
"end_date": "2024-12-31",
"naics": "541512",
"limit": 25
}
{
"agency": "Department of Defense",
"start_date": "2024-10-01",
"end_date": "2024-12-31",
"limit": 10
}
Response shape
Always returns: total_results, limit, awards, page, page_metadata, period_note, outlays_note, outlays_unreported_rows
| Field | Type | Description |
|---|---|---|
total_results | number | Total number of matching awards |
limit | number | Number of results returned |
awards | array | List of matching contract awards |
page | number | 1-based page of results this response represents |
page_metadata | object | Where this response sits in the full result set |
period_note | string | States that the date filter selects awards ACTIVE in the window and that award_amount is a lifetime obligation, not window spending |
outlays_note | string | Explains that a null total_outlays means not reported, and why DoD awards usually report none |
outlays_unreported_rows | number | How many rows in this response carry no outlay figure |
total_results_note | string | Present when no verified total is available for the query shape; says total_results is the rows in this response |
Full JSON Schema
{
"type": "object",
"properties": {
"total_results": {
"type": "number",
"description": "Total number of matching awards"
},
"limit": {
"type": "number",
"description": "Number of results returned"
},
"awards": {
"type": "array",
"items": {
"type": "object",
"properties": {
"award_id": {
"type": [
"string",
"null"
],
"description": "Unique award identifier"
},
"recipient_name": {
"type": [
"string",
"null"
],
"description": "Name of the contractor/recipient"
},
"award_amount": {
"type": [
"number",
"null"
],
"description": "Total award amount in dollars"
},
"total_outlays": {
"type": [
"number",
"null"
],
"description": "Total amount paid out, or null when the upstream reports none. null means not reported, not zero paid — see outlays_reported."
},
"start_date": {
"type": [
"string",
"null"
],
"description": "Award start date"
},
"end_date": {
"type": [
"string",
"null"
],
"description": "Award end date"
},
"awarding_agency": {
"type": [
"string",
"null"
],
"description": "Name of the awarding agency"
},
"awarding_sub_agency": {
"type": [
"string",
"null"
],
"description": "Sub-agency that awarded the contract"
},
"description": {
"type": [
"string",
"null"
],
"description": "Award description"
},
"naics_code": {
"type": [
"string",
"null"
],
"description": "NAICS industry code"
},
"contract_type": {
"type": [
"string",
"null"
],
"description": "Type of contract award"
},
"outlays_reported": {
"type": "boolean",
"description": "Whether the upstream published an outlay figure for this award. false means NOT REPORTED (most DoD contract awards are not linked to Treasury File C data), not that nothing was paid."
}
},
"required": [
"award_id",
"recipient_name",
"award_amount",
"total_outlays",
"start_date",
"end_date",
"awarding_agency",
"awarding_sub_agency",
"description",
"naics_code",
"contract_type",
"outlays_reported"
]
},
"description": "List of matching contract awards"
},
"page": {
"type": "number",
"description": "1-based page of results this response represents"
},
"page_metadata": {
"type": "object",
"description": "Where this response sits in the full result set",
"properties": {
"page": {
"type": "number",
"description": "1-based page number"
},
"per_page": {
"type": "number",
"description": "Rows requested per page (max 100)"
},
"returned": {
"type": "number",
"description": "Rows actually in this response"
},
"has_next": {
"type": "boolean",
"description": "Whether a further page exists"
},
"has_previous": {
"type": "boolean",
"description": "Whether an earlier page exists"
},
"total_results": {
"type": [
"number",
"null"
],
"description": "Total matching awards, or null when no total is published"
},
"total_pages": {
"type": [
"number",
"null"
],
"description": "Total pages at this per_page, or null when no total is published"
}
},
"required": [
"page",
"per_page",
"returned",
"has_next",
"has_previous"
]
},
"period_note": {
"type": "string",
"description": "States that the date filter selects awards ACTIVE in the window and that award_amount is a lifetime obligation, not window spending"
},
"outlays_note": {
"type": "string",
"description": "Explains that a null total_outlays means not reported, and why DoD awards usually report none"
},
"outlays_unreported_rows": {
"type": "number",
"description": "How many rows in this response carry no outlay figure"
},
"total_results_note": {
"type": "string",
"description": "Present when no verified total is available for the query shape; says total_results is the rows in this response"
}
},
"required": [
"total_results",
"limit",
"awards",
"page",
"page_metadata",
"period_note",
"outlays_note",
"outlays_unreported_rows"
]
}
Connect
Add this to your MCP client config — every tool in the catalog, including this one — or use one-click install buttons:
{
"mcpServers": {
"pipeworx": {
"url": "https://pipeworx.io/mcp"
}
}
}
Connect to just the usaspending pack
{
"mcpServers": {
"usaspending": {
"url": "https://gateway.pipeworx.io/usaspending/mcp"
}
}
}
See Getting Started for client-specific install steps.