# SAM.gov New Bid Monitor - Federal Contract Alerts (`real_mccoy/samgov-bid-monitor`) Actor

Daily alerts for new federal contract opportunities on SAM.gov. Filter by keyword, NAICS, set-aside, notice type and state. Get deadlines, contracting contacts and full descriptions - only bids you haven't seen yet.

- **URL**: https://apify.com/real_mccoy/samgov-bid-monitor.md
- **Developed by:** [Josh McCoy](https://apify.com/real_mccoy) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 bids

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/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

## SAM.gov New Bid Monitor — Federal Contract Alerts

Get a daily feed of **new federal contract opportunities from SAM.gov** that match your business — filtered by keyword, NAICS code, set-aside, notice type and state — with deadlines, contracting officer contacts and full descriptions.

Schedule it once a day and it returns **only the bids you haven't seen yet**. No SAM.gov account or API key needed.

### Who it's for

- **Small businesses and contractors** who don't want to check SAM.gov by hand every morning
- **Bid writers and capture managers** tracking opportunities for several clients
- **Consultants and agencies** building lead lists of agencies buying what they sell
- **AI agents and automations** (n8n, Make, Zapier, Slack, email) that need clean federal bid data

### What you get for each opportunity

| Field | Example |
|---|---|
| Title, notice type, solicitation number | "NISC Enterprise Support Tasking (NEST)", Solicitation, 693KA9-26-R-00003 |
| Response deadline + **days left** | 2026-11-15T10:00-04:00, 25 |
| Set-aside | Women-Owned Small Business Program Set-Aside (FAR 19.15) |
| NAICS and PSC codes | 541511, DA01 |
| Department / sub-tier / office | Transportation / FAA / 693KA9 Acquisition & Grants |
| Place of performance | Washington, DC 20591 |
| **Contracting contacts** | name, email, phone (primary + secondary) |
| Full description (plain text) | Scope, requirements, instructions |
| Direct SAM.gov link | sam.gov/opp/…/view |

### How "only new" works

With **Only new since last run** on (the default), the Actor remembers every notice it has returned for a given **Monitor name**. The next run skips those and returns only fresh ones.

- Use one monitor name per saved search (e.g. `janitorial-texas`, `cyber-8a`).
- Notices whose deadline has already passed are skipped by default.
- Turn **Only new** off to get the full current list every time.

### Example inputs

**Janitorial bids in Texas and Arkansas, small-business set-asides:**

```json
{
  "naicsCodes": ["561720"],
  "states": ["TX", "AR"],
  "setAsides": ["SBA", "SBP"],
  "monitorName": "janitorial-tx-ar"
}
```

**Software & IT opportunities, any state, solicitations only:**

```json
{
  "keywords": ["software development", "cloud migration"],
  "naicsCodes": ["541511", "541512"],
  "noticeTypes": ["o", "k"],
  "monitorName": "it-solicitations"
}
```

**Veteran-owned businesses — everything new in the last 3 days:**

```json
{
  "setAsides": ["SDVOSBC", "VSA"],
  "postedWithinDays": 3
}
```

### Set it up as a daily alert

1. Fill in your filters and a **Monitor name**, then **Save as a new task**.
2. Add a **Schedule** (e.g. every weekday at 7 AM).
3. Connect an **integration** — email, Slack, Google Sheets, n8n, Make or Zapier — to get new bids delivered automatically.

### Pricing

**$3 per 1,000 opportunities returned** ($0.003 each). You only pay for opportunities in your results — runs that find nothing new cost next to nothing. Set a maximum cost per run and the Actor stops cleanly when it's reached.

### Input reference

| Field | Description | Default |
|---|---|---|
| `keywords` | Words that must appear; each keyword searched separately | any |
| `naicsCodes` | NAICS codes | any |
| `noticeTypes` | `o` Solicitation, `k` Combined Synopsis/Solicitation, `p` Presolicitation, `r` Sources Sought, `s` Special Notice, `a` Award, `u` J\&A, `i` Intent to Bundle, `g` Surplus Sale | o, k, p, r |
| `setAsides` | SBA, SBP, 8A, 8AN, HZC, HZS, SDVOSBC, SDVOSBS, WOSB, WOSBSS, EDWOSB, EDWOSBSS, VSA, VSS, LAS, IEE, ISBEE, BICiv | any |
| `states` | Place-of-performance state codes | nationwide |
| `postedWithinDays` | Posted or updated in the last N days (0 = no limit) | 7 |
| `onlyNew` | Return only notices not seen in earlier runs | true |
| `monitorName` | Separate memory per saved search | default |
| `includeExpired` | Include notices past their deadline | false |
| `maxResults` | Max opportunities per run | 100 |

### Notes

- Data comes live from SAM.gov's public opportunity search at run time.
- SAM.gov returns at most 10,000 records per search; narrow your filters for very broad queries.
- Not affiliated with SAM.gov or the U.S. General Services Administration. Always confirm details on the official notice before bidding.

# Actor input Schema

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

Words or phrases to look for (all words must appear). Each keyword is searched separately and results are merged. Leave empty to match everything. Examples: janitorial, cybersecurity, HVAC maintenance, software development.

## `naicsCodes` (type: `array`):

Only opportunities with these NAICS codes. Examples: 541511 (custom programming), 561720 (janitorial), 238220 (plumbing & HVAC), 541330 (engineering).

## `noticeTypes` (type: `array`):

Which kinds of notices to include.

## `setAsides` (type: `array`):

Only opportunities set aside for these business types. Leave empty for all.

## `states` (type: `array`):

Two-letter state codes where the work is performed, e.g. TX, AR, VA. Leave empty for nationwide.

## `postedWithinDays` (type: `integer`):

Only notices posted or modified in the last N days. Use 0 for no limit.

## `onlyNew` (type: `boolean`):

Remember which notices you've already received and return only new ones. Turn this on and schedule the Actor daily for a bid-alert feed.

## `monitorName` (type: `string`):

Keeps separate 'already seen' memory for different searches. Use a different name for each saved search (e.g. 'janitorial-texas').

## `includeExpired` (type: `boolean`):

Include notices whose response deadline has already passed.

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

Maximum opportunities to return per run. You pay per opportunity returned.

## `concurrency` (type: `integer`):

How many SAM.gov requests to make at once.

## Actor input object example

```json
{
  "noticeTypes": [
    "o",
    "k",
    "p",
    "r"
  ],
  "postedWithinDays": 7,
  "onlyNew": true,
  "monitorName": "default",
  "includeExpired": false,
  "maxResults": 100,
  "concurrency": 8
}
```

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

// Run the Actor and wait for it to finish
const run = await client.actor("real_mccoy/samgov-bid-monitor").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("real_mccoy/samgov-bid-monitor").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 real_mccoy/samgov-bid-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,real_mccoy/samgov-bid-monitor"
        }
    }
}
```

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/SqXom0lo09TJ22bqe/builds/XsBSG0FQxvhY1b9O0/openapi.json
