FPDS Federal Contracts Scraper avatar

FPDS Federal Contracts Scraper

Pricing

Pay per event

Go to Apify Store
FPDS Federal Contracts Scraper

FPDS Federal Contracts Scraper

Extract FPDS contract awards with vendors, agencies, NAICS, PSC, dates, values, competition, set-asides, and source URLs.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Extract U.S. federal contract award records from the public FPDS Atom/XML feed. Use this actor to monitor awarded contracts, vendors, agencies, NAICS/PSC markets, obligated amounts, competition, set-asides, dates, and places of performance.

What does FPDS Federal Contracts Scraper do?

FPDS Federal Contracts Scraper turns the public FPDS search feed into clean dataset rows. Instead of manually opening FPDS search pages and copying XML fields, you provide a query or filters and receive normalized contract award records ready for spreadsheets, dashboards, CRMs, and capture workflows.

Who is it for?

  • ๐Ÿงญ GovCon business development teams tracking competitor awards.
  • ๐ŸŽฏ Capture managers watching agencies, offices, NAICS codes, and recompete markets.
  • ๐Ÿ“Š Market researchers building federal spending intelligence datasets.
  • ๐Ÿงพ Compliance and operations teams reviewing contract actions and modifications.
  • ๐Ÿงช Data analysts who need repeatable FPDS extraction without maintaining feed parsers.

Why use this actor?

FPDS is rich but inconvenient. The Atom feed contains nested XML, namespaces, attributes, and one page of records at a time. This actor handles pagination, XML parsing, field normalization, and Apify dataset export so your workflow can focus on analysis.

Data you can extract

Field groupExamples
Award IDsPIID, award ID, modification, referenced IDV PIID
VendorsVendor name, UEI/DUNS when present, city, state, country
AgenciesDepartment, contracting agency, contracting office, funding agency
ValuesObligated amount, total obligated amount, base/all options value
DatesSigned, effective, current completion, ultimate completion
ClassificationNAICS, PSC, action type, pricing type
CompetitionExtent competed, set-aside type
GeographyPlace-of-performance state/country
SourceFPDS source URL and scrape timestamp

How much does it cost to scrape FPDS federal contract awards?

The actor uses pay-per-event pricing: a small start fee plus a per-record charge for each FPDS award row saved. Your first prefilled run is limited to 20 records, so it is suitable for a quick test before larger monitoring jobs.

Run sizeWhat it is good forEstimated actor charge on the Free tier*
20 recordsQuick validation with the default prefillabout $0.0055
100 recordsSmall agency, NAICS, or vendor sampleabout $0.0077
1,000 recordsLarger market sizing exportabout $0.0322
10,000 recordsBroad monitoring or historical backfill segmentabout $0.2767

*Estimate uses the configured Free-tier event prices: $0.005 per run start plus $0.00002717 per saved FPDS award record. Paid Apify plans may use lower per-record tiers. Apify platform compute/proxy costs, if applicable to your account, are separate from actor event charges.

A Free-plan user can usually run multiple small FPDS tests because the default 20-record run is only about half a cent in actor charges. For budget control, start with maxItems between 20 and 100, inspect the output, and then increase the limit for scheduled monitoring.

Input options

You can use a raw FPDS query, convenience filters, or both.

  • query โ€” raw FPDS ezsearch query such as SIGNED_DATE:[2024/01/01,2024/12/31].
  • signedFrom and signedTo โ€” date range helper when the raw query does not already include SIGNED_DATE.
  • agency โ€” agency or department keyword.
  • vendor โ€” vendor keyword.
  • naicsCode โ€” NAICS keyword/code.
  • pscCode โ€” Product or Service Code keyword/code.
  • maxItems โ€” maximum records to save.
  • startOffset โ€” advanced pagination offset.

Example input

{
"query": "SIGNED_DATE:[2024/01/01,2024/12/31]",
"naicsCode": "541330",
"maxItems": 100
}

Example output

{
"awardId": "9700-0001-10-0",
"piid": "0001",
"vendorName": "STRATEGIC ANALYSIS, INC.",
"contractingDepartmentName": "DEPT OF DEFENSE",
"contractingAgencyName": "WASHINGTON HEADQUARTERS SERVICES (WHS)",
"signedDate": "2024-03-08",
"obligatedAmount": -1252.89,
"totalObligatedAmount": 1550938.36,
"naicsCode": "541330",
"pscCode": "R499",
"extentCompetedDescription": "FULL AND OPEN COMPETITION",
"sourceUrl": "https://www.fpds.gov/ezsearch/search.do?..."
}

How to scrape FPDS contract awards

  1. Open the actor on Apify.
  2. Enter a raw FPDS query or fill in the date and keyword helpers.
  3. Set maxItems to the number of contract records you need.
  4. Run the actor.
  5. Export the dataset as JSON, CSV, Excel, XML, RSS, or via API.

Query tips

  • Use a date range to keep searches focused.
  • Use NAICS and PSC keywords for market sizing.
  • Use vendor keywords to monitor competitors.
  • Use agency names to monitor buying offices.
  • Start with 100 records before increasing to thousands.

Common workflows

  • ๐Ÿข Competitor tracking: search a vendor name and collect recent awards.
  • ๐Ÿ›ฐ๏ธ Agency monitoring: track a target agency's recent awards.
  • ๐Ÿงฎ NAICS analysis: extract awards in one NAICS code for market sizing.
  • ๐Ÿงพ Modification review: include modifications to understand contract growth.
  • ๐Ÿ“ Regional analysis: filter exported data by place of performance.

Integrations

Send the dataset to:

  • Google Sheets for capture lists.
  • Airtable for opportunity and competitor databases.
  • BI tools such as Power BI, Tableau, or Looker Studio.
  • CRMs for account intelligence.
  • Data warehouses through Apify API clients or webhooks.

API usage: Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/fpds-federal-contracts-scraper').call({
query: 'SIGNED_DATE:[2024/01/01,2024/12/31]',
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

API usage: Python

from apify_client import ApifyClient
client = ApifyClient('MY-APIFY-TOKEN')
run = client.actor('automation-lab/fpds-federal-contracts-scraper').call(run_input={
'query': 'SIGNED_DATE:[2024/01/01,2024/12/31]',
'maxItems': 100,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items[0])

API usage: cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~fpds-federal-contracts-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"query":"SIGNED_DATE:[2024/01/01,2024/12/31]","maxItems":100}'

MCP usage

Use this actor from Claude Desktop, Claude Code, Cursor, or VS Code through Apify MCP:

https://mcp.apify.com/?tools=automation-lab/fpds-federal-contracts-scraper

Claude Code setup:

$claude mcp add --transport http apify-fpds "https://mcp.apify.com/?tools=automation-lab/fpds-federal-contracts-scraper"

Claude Desktop setup uses the same HTTP MCP endpoint in your Desktop configuration file:

{
"mcpServers": {
"apify-fpds": {
"transport": "http",
"url": "https://mcp.apify.com/?tools=automation-lab/fpds-federal-contracts-scraper"
}
}
}

Cursor setup: open Cursor settings for MCP servers, add a new HTTP server named apify-fpds, and use this URL:

https://mcp.apify.com/?tools=automation-lab/fpds-federal-contracts-scraper

VS Code setup: add the same server to your MCP extension or Copilot MCP configuration as an HTTP server named apify-fpds with the URL above. After saving the configuration, restart or reload the MCP server list so the FPDS federal contracts tool appears.

Example prompts:

  • "Scrape 100 FPDS awards signed in 2024 and summarize top vendors."
  • "Find recent FPDS contract awards for NAICS 541330."
  • "Monitor federal contract awards for this vendor and export agency names."

Output quality notes

FPDS XML fields vary by award type and source record. Some rows may not include UEI, DUNS, set-aside, or funding-office values. Missing source fields are returned as null rather than guessed.

Performance notes

The public Atom feed returns about 10 records per page. Large jobs require multiple feed requests. Keep very broad searches bounded with maxItems and date filters.

Troubleshooting

If you receive zero records, try a broader raw query such as SIGNED_DATE:[2024/01/01,2024/12/31]. If a convenience keyword is too narrow, remove it and filter the exported dataset instead.

Legality

The actor uses the public FPDS feed for government procurement records. You are responsible for using exported data in compliance with applicable laws, policies, and platform terms.

FPDS is a public government procurement data source, and this actor reads public Atom/XML feed responses. Always apply your organization's data governance and attribution requirements.

FAQ

Does this require an FPDS login?

No. It uses the public FPDS Atom/XML feed.

Can I scrape more than 100 records?

Yes. Increase maxItems. For first tests, keep the default small.

Does it return contract documents?

No. It returns structured FPDS award metadata and source links.

Can I use raw FPDS query syntax?

Yes. Put the raw query in query. The helper fields are optional.

Changelog

  • 0.1 โ€” Initial FPDS Atom feed scraper with normalized award records.