# FPDS Federal Procurement Awards Scraper (`jungle_synthesizer/fpds-federal-procurement-awards-scraper`) Actor

Pull federal contract award actions straight from FPDS, the authoritative system of record for US government procurement. Filter by signed/last-modified date range and page through PIID, vendor, dollar value, NAICS/PSC, set-aside type, and parent IDV linkage for every action.

- **URL**: https://apify.com/jungle_synthesizer/fpds-federal-procurement-awards-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## FPDS Federal Procurement Awards Scraper

Pull contract award actions straight from FPDS, the system of record for US federal procurement. Give it a signing-date range and get back vendor names, dollar values, NAICS/PSC codes, set-aside types, and parent contract linkage for every action in that window.

***

### FPDS Federal Procurement Awards Scraper Features

- Filters by signing date, so you can pull yesterday's awards or a historical month without touching anything else
- Returns both the action-level dollar value and the total contract value including options
- Includes the parent IDV/BPA PIID on task and delivery orders, so you can tie an order back to its umbrella contract
- Captures vendor UEI alongside the vendor name for downstream entity matching
- Surfaces set-aside type and competition details on every record where FPDS populates them

***

### Who Uses FPDS Award Data?

- **Govcon business development teams** — track which primes and subs are winning in a given NAICS code or agency
- **Subcontractor-seeking primes** — find vendors already winning adjacent work to approach for teaming
- **Market intelligence analysts** — build spend-by-agency or spend-by-vendor views without re-deriving them from the USAspending summary feed
- **Compliance and audit teams** — pull the action history behind a specific contract or IDV

***

### How FPDS Federal Procurement Awards Scraper Works

1. You set a signing-date range (or let it default to the last day) and a maximum number of records.
2. The actor queries FPDS's public ATOM feed for award actions signed in that window.
3. It pages through results 10 at a time until it hits your record limit or runs out of matches.
4. Each action comes back as one flat record — PIID, vendor, dollar values, dates, codes, and the FPDS detail page URL.

***

### Input

```json
{
  "maxItems": 100,
  "startDate": "2026-10-01",
  "endDate": "2026-10-07"
}
```

| Field       | Type    | Default                | Description                                                       |
|-------------|---------|------------------------|-------------------------------------------------------------------|
| `maxItems`  | Integer | 10                     | Maximum number of award action records to return (required)       |
| `startDate` | String  | 1 day before `endDate` | Only include actions signed on or after this date (`YYYY-MM-DD`)  |
| `endDate`   | String  | Today                  | Only include actions signed on or before this date (`YYYY-MM-DD`) |

Leave `startDate`/`endDate` unset to pull the most recently signed actions. Set both to pull a specific historical window — FPDS's corpus runs back to the early 2000s, so a wide range combined with a high `maxItems` can return a very large result set.

***

### FPDS Federal Procurement Awards Scraper Output Fields

```json
{
  "piid": "0003",
  "agency_id": "DEPT OF DEFENSE",
  "contracting_office_agency": "DEFENSE LOGISTICS AGENCY",
  "vendor_name": "LINDE GAS & EQUIPMENT INC.",
  "vendor_duns_uei": "L1P3D635U756",
  "obligated_amount": -5564.77,
  "base_and_all_options_value": 0,
  "signed_date": "2026-10-14 00:00:00",
  "effective_date": "2026-10-14 00:00:00",
  "completion_date": "2027-04-13 00:00:00",
  "contract_action_type": "DELIVERY ORDER",
  "naics_code": "325120",
  "product_or_service_code": "6830",
  "place_of_performance": "FORT WORTH, TEXAS, UNITED STATES",
  "set_aside_type": "NO SET ASIDE USED.",
  "description_of_requirement": "",
  "title": "DELIVERY ORDER 0003 awarded to LINDE GAS & EQUIPMENT INC. for the amount of -$5,564.77",
  "modification_number": "0",
  "reference_idv_piid": "SP046024D0053",
  "detail_url": "https://www.fpds.gov/ezsearch/search.do?s=FPDS&indexName=awardfull&templateName=1.5.3&q=0003+9700+"
}
```

| Field                        | Type   | Description                                                               |
|------------------------------|--------|---------------------------------------------------------------------------|
| `piid`                       | String | Procurement Instrument Identifier — the unique contract/award ID          |
| `agency_id`                  | String | Awarding department/agency name                                           |
| `contracting_office_agency`  | String | Contracting office that issued the award                                  |
| `vendor_name`                | String | Name of the awarded vendor                                                |
| `vendor_duns_uei`            | String | Vendor Unique Entity Identifier (UEI)                                     |
| `obligated_amount`           | Number | Dollars obligated on this specific action (negative on a deobligation)    |
| `base_and_all_options_value` | Number | Total contract value including all priced options                         |
| `signed_date`                | String | Date the action was signed                                                |
| `effective_date`             | String | Date the action takes effect                                              |
| `completion_date`            | String | Current estimated completion date                                         |
| `contract_action_type`       | String | Type of action (delivery order, definitive contract, BPA call, etc.)      |
| `naics_code`                 | String | Principal NAICS industry code                                             |
| `product_or_service_code`    | String | Product or Service Code (PSC)                                             |
| `place_of_performance`       | String | Principal place of performance (city, state, country)                     |
| `set_aside_type`             | String | Competition set-aside type applied to this action, where FPDS records one |
| `description_of_requirement` | String | Free-text description of the requirement (sparsely populated by FPDS)     |
| `title`                      | String | Human-readable summary of the award action                                |
| `modification_number`        | String | Modification number for this action (0 for the original award)            |
| `reference_idv_piid`         | String | PIID of the parent IDV/BPA this action was placed against, if any         |
| `detail_url`                 | String | FPDS detail page for this award action                                    |

***

### FAQ

#### How do I pull a specific date range of federal contract awards?

Set `startDate` and `endDate` on the input (both `YYYY-MM-DD`). FPDS Federal Procurement Awards Scraper filters by signing date, so a one-week range returns only actions signed inside that week — not a sample filtered down after the fact.

#### What's the difference between this and a USAspending scraper?

USAspending republishes FPDS data as award-level summaries. This actor reads FPDS directly at the action level, so you get every modification, delivery order, and amendment individually — along with set-aside type, PSC, and parent IDV linkage that the USAspending summary drops.

#### How far back does the data go?

FPDS award actions go back to the early 2000s. There's no built-in limit on `startDate`; a wide historical range combined with a high `maxItems` will take longer and return more records, but it's the same query mechanism either way.

#### Do I need an account or API key for FPDS?

No. FPDS Federal Procurement Awards Scraper needs no credentials — FPDS's award-action feed is public.

#### Can I filter by vendor or agency?

Not directly as input fields today — every record already carries `vendor_name`, `agency_id`, and `contracting_office_agency`, so filter the output after the run. File an issue if a built-in vendor or agency filter would help your workflow.

***

### Need More Features?

Need a different filter, an additional field, or a bulk historical pull shaped differently? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use FPDS Federal Procurement Awards Scraper?

- **Direct from the source** — reads FPDS action-level data, not a derivative summary, so modifications and amendments show up individually instead of collapsed into one award
- **Built for date-bounded pulls** — the signing-date filter is a hard filter verified against the live feed, so a one-day pull returns one day of awards, not a loosely-ranked approximation
- **No account required** — FPDS's award feed is public; there's nothing to register for

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `maxItems` (type: `integer`):

Maximum number of records to scrape

## `startDate` (type: `string`):

Only include award actions signed on or after this date (YYYY-MM-DD). Defaults to 1 day before End Date.

## `endDate` (type: `string`):

Only include award actions signed on or before this date (YYYY-MM-DD). Defaults to today.

## Actor input object example

```json
{
  "sp_contact": "Share your email here...",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sp_contact": "Share your email here...",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/fpds-federal-procurement-awards-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sp_contact": "Share your email here...",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/fpds-federal-procurement-awards-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sp_contact": "Share your email here...",
  "maxItems": 10
}' |
apify call jungle_synthesizer/fpds-federal-procurement-awards-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/fpds-federal-procurement-awards-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/k26EqHZhkI5iQ127c/builds/aQbr9XQQsx5evTzkc/openapi.json
