Blog · 2026-10-14

FPDS Is Gone: Where Contract Award Data Lives Now (2026)

FPDS Is Gone: Where Contract Award Data Lives Now (2026)
ezSearch closed in February. The ATOM feed is past its own retirement date. The data moved, it did not vanish.

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.

Key takeaway: GSA decommissioned FPDS ezSearch on February 24, 2026, and contract award search now lives in SAM.gov behind a free account. For code, the SAM.gov Contract Awards API replaces the FPDS ATOM feed: it needs an API key, allows 10 calls a day without a SAM.gov role, and renames most fields. USAspending's API serves the same awards free and keyless, about two days behind. The ATOM feed still answered on October 14, 2026, past its announced FY 2026 retirement, so migrate now.

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.

Timeline of the FPDS wind-down
GSA's mapping document, the ezSearch shutdown, the end of FY 2026, and a feed that was still answering on October 14.

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.

RouteKey needed?Daily limitRecord levelFreshnessBest for
SAM.gov Contract Awards APIYes, SAM.gov API key10 without a role, 1,000 with oneEvery contract actionClosest to sourceReplacing an ATOM integration 1:1
USAspending APINoNot publishedAward summariesAbout 2 days behindResearch, analytics, free pulls
Edgrapi /v1/awardsEdgrapi keyCredit-meteredAward summariesSame as USAspendingFlat JSON, one key for other federal data, AI agents
SAM.gov website searchFree accountManualEvery contract actionClosest to sourceOne-off lookups by a person
FPDS ATOM feed (legacy)No10 records per callEvery contract actionLive todayNothing 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.

FPDS replacement routes for developers
Every contract action with a key, or award totals with no key. That is the real fork.

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 fieldSAM.gov Contract Awards API
VENDOR_UEIawardeeUniqueEntityId
UEI_NAME / VENDOR_NAMEawardeeLegalBusinessName
SIGNED_DATEdateSigned
PRINCIPAL_NAICS_CODEnaicsCode
PRODUCT_OR_SERVICE_CODEproductOrServiceCode
MODIFICATION_NUMBERmodificationNumber
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.

FPDS ATOM feed to SAM.gov Contract Awards API changes
Protocol, format, auth, and field names all change. Three request parameters do not survive at all.

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.

Nightly sync pattern for the SAM.gov Contract Awards API
One bulk extract to start, then a changes call and a deletions call every night.

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.

The Department of Defense 90-day disclosure window
Defense awards signed in the last 90 days are visible only to DoD users.

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.

Get a free API key