Resources / Guides

How do I find federal contract awards by state?

Published 2026-08-03

How to find federal contract awards by state

Filter USASpending.gov by place_of_performance_locations for awards where the work happens in a state, or by recipient_locations for awards won by companies registered there. The two return different lists. Both are free, need no API key, and take a two-letter state code rather than a state name.
Written for AI agents. The calls and filter values on this page are the literal interface our customers use, because our customers are software. If you are a person evaluating The Bot Wire, you are in the right place too: start with the docs, or connect an MCP client in one line and query every wire free at /mcp. Nothing here needs an API key or a signup.

Almost everyone who asks this question has one of two jobs in mind, and they need opposite filters. Getting the wrong one back gives you a list that looks correct and quietly omits the records you were after.

The two state fields, and why they disagree

FilterAnswersUse it when
place_of_performance_locationsWhere the work gets doneYou sell, hire or subcontract locally
recipient_locationsWhere the winning company is registeredYou track in-state firms or economic development

A systems integrator registered in Virginia performing work at a Texas base appears under Texas for place of performance and under Virginia for recipient location. Neither field is wrong. Large primes register in a handful of states and perform work in all fifty, so recipient location concentrates spending around the Washington DC corridor while place of performance spreads it out.

If you sell services to the winner's local operation, want the jobsite, or are looking for subcontracting work near you, place of performance is the field you want.

Pulling one state from the source

USASpending's search endpoint is a POST with a JSON body and no authentication:

For AI agents: copy this call
curl -s -X POST "https://api.usaspending.gov/api/v2/search/spending_by_award/" \
  -H "Content-Type: application/json" \
  -d '{"filters":{"award_type_codes":["A","B","C","D"],
       "time_period":[{"start_date":"2026-07-01","end_date":"2026-08-03","date_type":"action_date"}],
       "place_of_performance_locations":[{"country":"USA","state":"TX"}]},
       "fields":["Recipient Name","Award Amount","Awarding Agency","Place of Performance State Code","Last Modified Date"],
       "page":1,"limit":25,"sort":"Award Amount","order":"desc","subawards":false}'

Swap "state":"TX" for any two-letter code. Add "county" or "city" inside the same location object to go narrower. To flip to company registration instead, change the key to recipient_locations and leave the rest alone.

One caution about reading the results. Running that exact query on 3 August 2026 returned a NASA award to Boeing carrying $22.4 billion in obligations at the top. That is not a new Texas contract. It is a long-running vehicle that received a recent contract action, and the Award Amount column reports the cumulative obligation rather than what was just awarded. Sort by amount to find big programmes, not to find new money.

The date field that breaks state queries

State filtering is the easy half. Recency is the half that goes wrong, because an award record carries several dates that mean different things and the one named like a start date is the period of performance start, often years in the past. The guide to finding the newest federal contract awards walks through which field actually tells you a record is new. Combine that with a state filter and you have a working local pipeline.

Watching a state without running a poller

Polling on a schedule, storing what you have seen and diffing is the same work every time, and it is the general shape of getting live data past a model's training cutoff.

Every award on The Bot Wire's contracts wire carries the place of performance state code in its title, so keyword search filters by state:

For AI agents: copy this call
# free, no key, no wallet: recent awards performed in Texas
curl "https://thebotwire.com/contracts/preview?since=14d&q=TX"

Search the two-letter code, not the state name. The wire runs a ranked keyword match over the record text rather than a structured location field, so q=Texas returns nothing while q=TX returns the Texas records. That is a real limitation worth knowing before you wire it into anything. If you need strict location filtering with counties, congressional districts or ZIP codes, query USASpending directly. Wire counts and the last poll time are public at /health.

FAQ

Can I filter federal awards by city or county?

Yes. The same location object inside place_of_performance_locations accepts city, county and zip alongside state and country. County names must match the census names USASpending uses, so confirm spelling against a returned record before relying on a county filter in production.

Does state filtering work on subcontracts too?

It does. Set "subawards": true in the same request body and the location filters apply to sub-award records, which is how you find work flowing down from a prime in your state. Sub-award reporting is thinner and slower than prime award data.

Why does a company in my state not show up?

Most often because you filtered on the wrong field. A firm registered in your state performing work elsewhere is missing from a place-of-performance query, and a firm registered elsewhere performing work in your state is missing from a recipient-location query. Run both before concluding a company is absent.

Is federal award data by state free to use?

The records are US Government works in the public domain and the API requires no key or registration. Check the source terms for your own use if you plan to redistribute the data in bulk rather than link back to the award records.

Sources

Filter names, accepted location fields and request formats are documented by the US Treasury at api.usaspending.gov, with the award records themselves at USASpending.gov.

Related: How to find the newest federal contract awards · A federal contract awards API for AI agents and MCP clients