FPDS Federal Contracts Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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 group | Examples |
|---|---|
| Award IDs | PIID, award ID, modification, referenced IDV PIID |
| Vendors | Vendor name, UEI/DUNS when present, city, state, country |
| Agencies | Department, contracting agency, contracting office, funding agency |
| Values | Obligated amount, total obligated amount, base/all options value |
| Dates | Signed, effective, current completion, ultimate completion |
| Classification | NAICS, PSC, action type, pricing type |
| Competition | Extent competed, set-aside type |
| Geography | Place-of-performance state/country |
| Source | FPDS 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 size | What it is good for | Estimated actor charge on the Free tier* |
|---|---|---|
| 20 records | Quick validation with the default prefill | about $0.0055 |
| 100 records | Small agency, NAICS, or vendor sample | about $0.0077 |
| 1,000 records | Larger market sizing export | about $0.0322 |
| 10,000 records | Broad monitoring or historical backfill segment | about $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 asSIGNED_DATE:[2024/01/01,2024/12/31].signedFromandsignedToโ date range helper when the raw query does not already includeSIGNED_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
- Open the actor on Apify.
- Enter a raw FPDS query or fill in the date and keyword helpers.
- Set
maxItemsto the number of contract records you need. - Run the actor.
- 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 ApifyClientclient = 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().itemsprint(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.
Is it legal to scrape FPDS?
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.
Related scrapers
- https://apify.com/automation-lab/samgov-government-contracts-scraper โ pre-award SAM.gov opportunities.
- https://apify.com/automation-lab/usaspending-scraper โ related U.S. federal spending data where applicable.
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.