FPDS Is Gone: Where Contract Award Data Lives Now (2026)
Your FPDS script still runs. That's the dangerous part.
The FPDS replacement depends on how you used it. GSA shut FPDS ezSearch on February 24, 2026 and moved award search into SAM.gov, which now needs a free account. For code, the closest swap is the SAM.gov Contract Awards API, which needs a key and allows 10 calls a day until you hold a SAM.gov role. If you'd rather skip the key, USAspending's API serves the same award data free.
I build on federal award data every day. This guide is for the person whose script has to keep working after the feed goes dark.
What replaced FPDS in 2026?
FPDS was replaced by SAM.gov in three pieces. Award search moved to SAM.gov's Contracting section on February 24, 2026, when GSA decommissioned ezSearch. Programmatic access moves from the FPDS ATOM feed to the SAM.gov Contract Awards API. And the same award records still flow into USAspending.gov, which stays free and needs no key. The data is all still there; only the ways in changed.
FPDS was never really a website. Agencies report their contract actions into it, and everything downstream feeds off it.
What changed in 2026 is how you get the data out. GSA's FPDS transition page says it "decommissioned ezSearch on February 24, 2026," and that you now need a SAM.gov account to see public award data, though no special role.
I checked the redirects myself on October 14, 2026. Typing fpds.gov now lands you on sam.gov/contracting, and the old ezSearch URL forwards to sam.gov/search.
It's a lot of money to lose track of. Federal agencies obligated about $808 billion in contracts in fiscal 2025, a record, per Bloomberg Government. FPDS is where those obligations get recorded, action by action.
Is the FPDS ATOM feed still working?
Yes, for now, and that's the trap. When I called the FPDS ATOM feed on October 14, 2026, it returned HTTP 200 with real XML, 10 entries per response. But SAM.gov's own notice says the feed "will be retired later in FY 2026," and fiscal 2026 ended on September 30. The feed is running past its announced end, so it can stop any day with no further warning.
This is the call I ran, for a Defense Health Agency contract.
GET https://www.fpds.gov/ezsearch/FEEDS/ATOM?FEEDNAME=PUBLIC&q=PIID:HT940216C0001
HTTP 200
<feed xmlns="http://www.w3.org/2005/Atom">
<title>FPDS-NG search results for: PIID:HT940216C0001</title>
...10 <entry> records...
The vendors can't agree on a shutdown date either. GovSpend's FPDS sunset page says the feed "goes offline on July 31, 2026." It didn't.
So nobody outside GSA knows the real date. That's exactly why you shouldn't wait for it.
If a cron job of yours still calls that URL, it works today. Plan as if it fails tomorrow, because when it does, a lot of scripts will quietly log zero new awards instead of crashing.
Add two checks to that job right now. Fail loudly if the HTTP status isn't 200, and alert if a feed that normally returns entries suddenly returns zero for two runs in a row.
That's maybe ten lines of code, and it means you hear about a dead feed the next morning instead of weeks later.
What are your FPDS replacement options?
You have three real FPDS replacement options for code. The SAM.gov Contract Awards API is the closest match, with transaction-level records, but it needs an API key. USAspending's API is keyless and free, but it works at the award level and runs about two days behind. And a wrapper like Edgrapi turns USAspending into a simple GET call with flat JSON. The SAM.gov website is the fourth route, for people, not code.
Side by side, they look like this.
| Route | Key needed? | Daily limit | Record level | Freshness | Best for |
|---|---|---|---|---|---|
| SAM.gov Contract Awards API | Yes, SAM.gov API key | 10 without a role, 1,000 with one | Every contract action | Closest to source | Replacing an ATOM integration 1:1 |
| USAspending API | No | Not published | Award summaries | About 2 days behind | Research, analytics, free pulls |
Edgrapi /v1/awards | Edgrapi key | Credit-metered | Award summaries | Same as USAspending | Flat JSON, one key for other federal data, AI agents |
| SAM.gov website search | Free account | Manual | Every contract action | Closest to source | One-off lookups by a person |
| FPDS ATOM feed (legacy) | No | 10 records per call | Every contract action | Live today | Nothing new. It is past its retirement date |
What decides it is whether you need every modification or only the award.
FPDS records each contract action, so a single contract can have dozens of rows. USAspending rolls those up into one award with a running total.
If you were tracking modifications, stay with SAM.gov's API. If you just need who won what and for how much, USAspending is easier.
How do you migrate an FPDS ATOM feed script to the SAM.gov Contract Awards API?
Migrating an FPDS ATOM script comes down to swapping the protocol, the field names, and the auth. GSA's own comparison document says the old feed was SOAP and XML with a username and password, while the SAM.gov Contract Awards API is REST and JSON with an API key. Field names change too, so VENDOR_UEI becomes awardeeUniqueEntityId and SIGNED_DATE becomes dateSigned. Three old query parameters are gone.
Start with the key. Sign in to SAM.gov, open your profile, and copy the Public API Key. I covered that step in how to get a SAM.gov API key.
Then rewrite the request. The same lookup against the new API looks like this.
GET https://api.sam.gov/contract-awards/v1/search
?api_key=YOUR_SAM_KEY
&piid=HT940216C0001
&limit=100
Most of the real work hides in the field names. These come straight from GSA's FPDS Atom Feed vs SAM Contract API document, last updated September 8, 2025.
| FPDS ATOM field | SAM.gov Contract Awards API |
|---|---|
| VENDOR_UEI | awardeeUniqueEntityId |
| UEI_NAME / VENDOR_NAME | awardeeLegalBusinessName |
| SIGNED_DATE | dateSigned |
| PRINCIPAL_NAICS_CODE | naicsCode |
| PRODUCT_OR_SERVICE_CODE | productOrServiceCode |
| MODIFICATION_NUMBER | modificationNumber |
| obligatedAmount (response) | actionObligation |
Three request parameters didn't make the move at all: DESCRIPTION_OF_REQUIREMENT, CONTRACTING_OFFICE_NAME, and FUNDING_OFFICE_NAME. If your script filtered on any of them, you'll filter client-side now.
Then there are the limits. Per GSA's Contract Awards API docs, a page holds at most 100 records, and the API only returns the first 400,000 records of any search.
For anything bigger, request an async extract with format=json or format=csv. You get a download link instead of rows, and an extract can hold up to 1,000,000 records.
One more gotcha. Dates go in as MM/DD/YYYY, and a range looks like [01/01/2026,03/31/2026]. Send an ISO date and you get a 400.
When is USAspending the better FPDS replacement?
USAspending is the better FPDS replacement when you want award totals rather than every modification, and you don't want to manage a SAM.gov key. Its API is free and keyless, and Treasury's data-flow guide says FPDS data shows up there two days after it's finalized. When I counted fiscal 2025 contract awards through it on October 14, 2026, it returned 5,782,850 records with no key at all.
That count came from one POST to the award-count endpoint.
POST https://api.usaspending.gov/api/v2/search/spending_by_award_count/
{"filters": {
"time_period": [{"start_date": "2024-10-01", "end_date": "2025-09-30"}],
"award_type_codes": ["A", "B", "C", "D"]}}
{"results": {"contracts": 5782850, ...}}
The two-day figure comes from Treasury's GSDM information flow diagram. For most research, two days doesn't matter.
USAspending isn't free of sharp edges, though. Search requests are POST bodies with required sort fields, and deep pagination quietly stops at 10,000 rows. I wrote up that bug in the USAspending 10,000-record wall.
If you'd rather skip the POST bodies, Edgrapi's /v1/awards wraps the same data as a plain GET.
GET https://api.edgrapi.com/v1/awards?category=contracts&recipient=Lockheed&limit=3
Authorization: Bearer YOUR_EDGRAPI_KEY
You get flat records with the award id, recipient, amount, agency, dates, and a USAspending link, for 2 credits a call. The same key reads SAM.gov opportunities, Grants.gov, and SEC filings, and it works as an MCP server for AI agents.
To be clear about its limits: it serves award summaries from USAspending, not every modification. For transaction-level history, use SAM.gov's API.
How do you keep a local copy of contract awards in sync?
Keeping a local copy of contract awards in sync takes two pulls: what changed since your last run, and what was deleted. The SAM.gov Contract Awards API supports both. GSA added a publicDeltaDate filter in August 2026 that matches a contract's last-modified or reveal date, and deletedStatus=yes returns contracts deleted in the last six months. Run both nightly, upsert on the contract id, and remove the deletions.
FPDS made this part easy, and none of the migration guides I read cover it.
With the ATOM feed, you asked for everything modified since a date and got it. The new API is a search, so you have to rebuild the "what changed" logic yourself.
I'd run this pair of calls every night.
# 1. Records changed or added yesterday
GET https://api.sam.gov/contract-awards/v1/search
?api_key=YOUR_SAM_KEY&publicDeltaDate=10/13/2026&limit=100
# 2. Records deleted recently
GET https://api.sam.gov/contract-awards/v1/search
?api_key=YOUR_SAM_KEY&deletedStatus=yes&limit=100
Skip the second call and your copy slowly fills with contracts that no longer exist.
That reveal date is a quiet bonus. When a Defense award clears its 90-day hold, publicDeltaDate picks it up that day, so your nightly sync backfills DoD contracts on its own.
For the first load, don't page through the search. At 100 records a page, 400,000 records is 4,000 calls, which is four days on a 1,000-a-day key.
Use the async extract instead. Add format=csv, and the API hands back a download link for up to 1,000,000 records. Add emailId=Yes and it emails the link to the address on your key.
The file may not be ready the moment you get the link, per GSA's docs, so retry the download with a short wait.
USAspending has a bulk route too. Its award download endpoints build zipped files for big date ranges, which beats paging through 10,000-row searches.
Why are recent Defense contracts missing from FPDS replacement data?
Recent Defense contracts are missing on purpose. Department of Defense awards are held back for 90 days for national security reasons, and the delay carried over to SAM.gov. GSA's Contract Awards API docs say DoD contracts signed in the last 90 days appear only in "unrevealed" data, which only DoD users can access. Public users and USAspending get them only after that window closes.
It's an easy thing to misread.
Say you search for a big Army award announced last month, find nothing, and assume your filter is wrong. It probably isn't. The award is likely still inside its 90-day window.
And DoD is most of the money. Bloomberg Government's fiscal 2025 analysis put Defense procurement near $521 billion, so a 90-day hole is a big one.
If you track defense work, label anything under 90 days old as incomplete in your own data. Then backfill it on a schedule.
Do you need a SAM.gov account to search contract awards now?
Yes. To search contract awards on the SAM.gov website, you need a free SAM.gov account signed in through Login.gov, but no special role. GSA's transition page says a user account is required to access public data. For code, the SAM.gov Contract Awards API needs a SAM.gov API key. Only USAspending lets you pull federal contract award data with no account and no key at all.
For casual users, that's the biggest change.
FPDS ezSearch was open to anyone. You could share a search link with a colleague and they'd see the results.
Now that colleague needs a Login.gov account first. Annoying for a quick check, and for anything a whole team uses, it pushes you toward an API anyway.
The role question matters for API limits, not for the website. A key with no SAM.gov role gets 10 calls a day, and a role, usually from registering your entity, lifts it to 1,000. I covered the details in SAM.gov API rate limits.
Which FPDS replacement should you use?
Pick the SAM.gov Contract Awards API if you're replacing an ATOM integration and need every contract action, and get a SAM.gov role first so you have 1,000 calls a day. Free award totals with a two-day lag point to USAspending. Edgrapi fits when you want award data as flat JSON on the same key as opportunities, grants, and SEC filings. For one-off lookups, the SAM.gov website is enough.
In practice, I'd split it by who reads the data.
A contract-writing or compliance system that mirrored FPDS should move to SAM.gov's API. It's the closest match, and it's the official successor.
A dashboard, a market-sizing model, or a sales list is better on USAspending. Award totals are what you want there anyway.
If you're feeding an AI agent, pick a source with an MCP server, so the agent can query awards without you writing the glue code. My government data MCP server guide shows the setup.
And whatever you pick, stop calling the ATOM feed now, while you can still compare the old output against the new.
Move off the ATOM feed this week, while you can still compare outputs
Run your old FPDS ATOM query and your new SAM.gov or USAspending query side by side today, and diff the results for a handful of PIIDs you know well. That one comparison catches renamed fields, missing filters, and the DoD 90-day gap before the old feed goes dark. If you want award data without a SAM.gov key, grab a free Edgrapi key and pull your first contract awards in under a minute.
Frequently asked questions
What replaced FPDS?
SAM.gov replaced FPDS. On February 24, 2026, GSA decommissioned FPDS ezSearch and moved contract award search into SAM.gov's Contracting section. For code, the FPDS ATOM feed's successor is the SAM.gov Contract Awards API, which requires an API key. USAspending.gov still receives the same award data and offers a free, keyless API for award-level records.
Is the FPDS ATOM feed still working?
As of October 14, 2026, yes: a test call came back HTTP 200 with 10 records of real XML. SAM.gov, though, says the ATOM feed retires later in fiscal 2026, and that year ended September 30, so the feed is already past its announced end date. Move scripts to the SAM.gov Contract Awards API or USAspending now, before it stops without warning.
How do I migrate my FPDS ATOM feed script to the SAM.gov Contract Awards API?
First get a SAM.gov API key. Then move from SOAP and XML to REST and JSON, renaming fields with GSA's mapping document, so VENDOR_UEI becomes awardeeUniqueEntityId and SIGNED_DATE becomes dateSigned. Dates go in as MM/DD/YYYY, pages hold 100 records, and anything over 400,000 records needs the async extract instead of paging.
Should I use the SAM.gov Contract Awards API or USAspending?
Choose the SAM.gov Contract Awards API when you need every contract action, modifications included, and can manage a SAM.gov key, which gets 10 calls a day without a role. If award-level totals are enough, USAspending is simpler: it is free, needs no key, and per Treasury reflects FPDS data two days after it is finalized.
Do I need a SAM.gov account to search contract awards?
For the SAM.gov website, yes. Searching contract award data there has required a free account, signed in through Login.gov, since February 24, 2026, though you don't need a special role. The SAM.gov Contract Awards API requires an API key instead. Among official routes, only USAspending.gov serves federal contract award data with no account and no key.
Why are recent Department of Defense contracts missing?
For national security reasons, Department of Defense contract awards stay out of public view for 90 days. Per GSA's Contract Awards API docs, DoD contracts signed in the last 90 days show up only in unrevealed data that DoD users can access. Public users and USAspending get them after that window, so treat any recent DoD data as incomplete.