# DoD Daily Contract Awards Scraper (`bercikgroup/dod-daily-contract-awards-scraper`) Actor

Extract every US Department of Defense contract award from the official daily announcements — contractor, value, PIID, branch and contracting activity, same day.

- **URL**: https://apify.com/bercikgroup/dod-daily-contract-awards-scraper.md
- **Developed by:** [BERCIK Group](https://apify.com/bercikgroup) (community)
- **Categories:** Lead generation, Business, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

Extract **every US Department of Defense contract award** from the official daily contract announcements at [war.gov](https://www.war.gov/News/Contracts/) — contractor, dollar value, contract number, branch, contracting activity and completion date — as structured data, **the same day it is announced**.

### What does DoD Daily Contract Awards Scraper do?

The Department of Defense publishes every contract award of roughly **$7.5 million or more** each business day as a single prose announcement, organized by branch. That format is readable but useless for analysis — you cannot sort it, filter it, or load it into a CRM.

This Actor reads those announcements and turns each award into a clean record with the **contractor name and location, contract value, PIID (contract number), awarding branch, contracting activity, place of performance, completion date and small-business flag**. Multi-award vehicles are captured with every winning contractor, not just the first.

**Why this beats USAspending for lead generation:** these announcements appear the day the award is made. USAspending, the government's system-of-record database, typically lags by days or weeks. If you want to reach a prime contractor while a teaming decision is still open, this is the fastest public signal there is.

Runs on Apify with scheduling, a REST API, webhooks, and integrations for Google Sheets, Airtable, Slack, Make and Zapier — so you can turn it into a daily defense-contract feed without writing glue code.

### Why use DoD Daily Contract Awards Scraper?

- **Subcontracting and teaming leads** — see who just won a prime contract and approach them while the work is being staffed.
- **Competitive intelligence** — track what your competitors win, from which commands, and at what value.
- **Small business targeting** — the announcements flag small-business awards, so you can isolate set-aside winners.
- **Recruiting** — a company that just won a $40M services contract is about to hire.
- **Market and defense research** — build a time series of DoD spending by branch, contracting activity or technology area.
- **Journalism and policy analysis** — track defense procurement as it happens.

### How to use DoD Daily Contract Awards Scraper

1. Click **Try for free**.
2. Set **Number of daily announcements** — the Department publishes one per business day, so 10 covers about two weeks.
3. Optionally narrow the results by branch, keyword, contract value, or small-business status.
4. Set **Maximum results** to cap how much you pull.
5. Click **Start**.
6. Download the data as **JSON, CSV, Excel, HTML or XML**, or pull it from the API.

To keep a live feed, schedule the Actor to run daily and set **Number of daily announcements** to 2 or 3 — enough to catch up after a holiday without re-scraping history.

### Input

Everything is optional. A typical small-business lead-generation setup:

```json
{
  "maxAnnouncements": 10,
  "branches": ["Army", "Air Force"],
  "keywords": ["cybersecurity", "software"],
  "minContractValue": 10000000,
  "smallBusinessOnly": true,
  "maxResults": 500
}
```

| Field | Type | Description |
| --- | --- | --- |
| `maxAnnouncements` | integer | How many recent daily announcements to read (1–60) |
| `dateFrom` / `dateTo` | string | Only announcements in this date range, `YYYY-MM-DD` |
| `branches` | array | Army, Navy, Air Force, Space Force, Marine Corps, DLA, DARPA, and more |
| `keywords` | array | Keep only contracts whose text or contractor matches a term |
| `minContractValue` / `maxContractValue` | integer | Award value bounds in USD |
| `smallBusinessOnly` | boolean | Keep only awards flagged as small business |
| `maxResults` | integer | Hard cap on records returned |

### Output

Each dataset item is one contract action:

```json
{
  "announcementDate": "2026-08-06",
  "branch": "Army",
  "contractorName": "Teledyne FLIR Unmanned Ground Systems Inc.",
  "contractorCity": "Chelmsford",
  "contractorState": "Massachusetts",
  "contractNumber": "W912CH-26-D-A106",
  "contractValue": 44459699,
  "contractValueText": "$44,459,699",
  "isSmallBusiness": false,
  "isMultipleAward": false,
  "contractorCount": 1,
  "contractors": [
    {
      "name": "Teledyne FLIR Unmanned Ground Systems Inc.",
      "city": "Chelmsford",
      "state": "Massachusetts",
      "contractNumber": "W912CH-26-D-A106",
      "isSmallBusiness": false
    }
  ],
  "isModification": false,
  "contractingActivity": "Army Contracting Command, Detroit Arsenal, Michigan",
  "completionDate": "2031-08-06",
  "description": "Teledyne FLIR Unmanned Ground Systems Inc., Chelmsford, Massachusetts, was awarded a $44,459,699 firm-fixed-price, cost-plus-fixed-fee, indefinite-delivery/indefinite-quantity contract for post-production software sustainment...",
  "announcementUrl": "https://www.war.gov/News/Contracts/Contract/Article/4565715/contracts-for-aug-6-2026/"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Data fields

| Field | Description |
| --- | --- |
| `announcementDate`, `announcementTitle`, `announcementUrl` | Which daily announcement this came from |
| `branch` | Awarding branch or defense agency |
| `contractorName`, `contractorCity`, `contractorState` | Primary awardee |
| `contractNumber` | PIID, e.g. `W912CH-26-D-A106` |
| `contractValue`, `contractValueText` | Parsed dollar value and the original text |
| `cumulativeFaceValue` | Total contract value after a modification, when stated |
| `isSmallBusiness` | Whether the announcement flagged the awardee as small business |
| `isMultipleAward`, `contractorCount`, `contractors` | All winners on multiple-award vehicles |
| `isModification`, `modificationNumber` | Modifications to previously awarded contracts |
| `contractingActivity` | The command or office that issued the award |
| `performanceLocation` | Where the work is performed |
| `completionDate`, `completionDateText` | Estimated completion |
| `awardedOnDate` | Actual award date, when the announcement states one |
| `description` | The full original announcement text for this award |

### How much does it cost to scrape DoD contract data?

Priced **per contract record returned**, and you are charged only for records that pass your filters and land in your dataset. **Maximum results** caps your spend before the run starts.

The Actor is HTTP-only — no headless browser and no proxies — so platform cost is very low. A 15-day pull of roughly 200 contract records completes in about **16 seconds**.

### Tips

- **A typical business day yields 6–30 awards.** Volume varies a lot; end-of-fiscal-year (late September) is dramatically busier.
- **Only awards of about $7.5 million or more are announced.** Smaller awards never appear here — use USAspending for the full universe.
- **Use `announcementUrl` + `contractNumber` to deduplicate** across scheduled runs.
- **`contractValue` is the announced action value**, not necessarily the full ceiling. For modifications, check `cumulativeFaceValue`.
- **Multiple-award vehicles**: one record is emitted per announcement paragraph, with every winner in `contractors`. Expand that array if you want one row per company.
- **Not every award lists a contract number.** About 20% of announcements omit the PIID; the field is `null` rather than guessed.

### FAQ

**Is scraping this data legal?**
The announcements are official US government publications and US federal government works are not subject to domestic copyright. This Actor reads public pages at a polite request rate. This is general information, not legal advice — check your own obligations before redistributing commercially.

**How far back can I go?**
The official feed exposes roughly the 60 most recent announcements, about three months of business days. There is no public archive feed beyond that.

**Why did a contract come back without a contract number?**
Because the announcement itself did not include one. The Actor reports what the source says rather than inventing a value.

**The Department of Defense is now called the Department of War — does that matter?**
No. The site moved from defense.gov to war.gov and this Actor follows the current source. Old defense.gov links redirect.

**Can I get contracts under $7.5 million?**
Not from this source — the Department does not announce them. A USAspending-based Actor covers the complete award universe with a longer reporting lag.

### Support

Found a bug, or did the announcement format change and break a field? Open an issue on the **Issues** tab and I'll fix it. Custom federal-data pipelines and bespoke scraping work are available on request.

# Actor input Schema

## `maxAnnouncements` (type: `integer`):

How many recent daily contract announcements to read. The Department publishes one per business day, so 10 covers roughly two weeks.

## `dateFrom` (type: `string`):

Only include announcements published on or after this date (YYYY-MM-DD).

## `dateTo` (type: `string`):

Only include announcements published on or before this date (YYYY-MM-DD).

## `branches` (type: `array`):

Only keep contracts awarded by these branches or agencies. Leave empty for all.

## `keywords` (type: `array`):

Only keep contracts whose text or contractor name contains at least one of these terms, e.g. "cybersecurity", "shipbuilding", "satellite".

## `minContractValue` (type: `integer`):

Skip contracts below this dollar value. The Department only announces awards of roughly $7.5 million or more.

## `maxContractValue` (type: `integer`):

Skip contracts above this dollar value.

## `smallBusinessOnly` (type: `boolean`):

Keep only awards flagged as small business in the announcement.

## `maxResults` (type: `integer`):

Hard cap on how many contract records to return. You are charged per record returned.

## Actor input object example

```json
{
  "maxAnnouncements": 10,
  "smallBusinessOnly": false,
  "maxResults": 1000
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("bercikgroup/dod-daily-contract-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("bercikgroup/dod-daily-contract-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 '{}' |
apify call bercikgroup/dod-daily-contract-awards-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bercikgroup/dod-daily-contract-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/QKZc47mQQWvg8SbJh/builds/WSwiKwWOF8GHfidha/openapi.json
