# SAM.gov Contract Opportunities: RFPs, Set-Asides, Deadlines (`gouda_studios/sam-gov-opportunities-feed`) Actor

Get new federal contract opportunities from SAM.gov as clean JSON. Filter by keyword, NAICS, set-aside, notice type and state. Includes deadlines, agency and contracting officer contacts. Monitor mode returns only new notices.

- **URL**: https://apify.com/gouda_studios/sam-gov-opportunities-feed.md
- **Developed by:** [Gouda Studios](https://apify.com/gouda_studios) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 opportunities

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 Contract Opportunities Feed: RFPs, Set-Asides, Deadlines

Get every U.S. federal contract opportunity from **SAM.gov** as clean rows: solicitations, RFQs, sources sought, presolicitations and award notices. Each row has the NAICS code, PSC code, set-aside, place of performance, response deadline, **days left to respond**, contracting officer contacts and a direct SAM.gov link.

No SAM.gov account or API key needed. Schedule it daily with **Only new since last run** and you get a feed of just the new opportunities that match your filters.

### For AI agents and developers

Agent-ready docs, pricing, an OpenAPI spec and example calls for this tool live on [Gouda Studios Agent Tools](https://gouda-studios-agent-tools.vercel.app/tools/sam-gov-opportunities-feed/). The full catalog is at [gouda-studios-agent-tools.vercel.app](https://gouda-studios-agent-tools.vercel.app) and [llms.txt](https://gouda-studios-agent-tools.vercel.app/llms.txt).

### Who uses it

- **Small businesses and 8(a), HUBZone, SDVOSB and WOSB firms** watching set-asides in their NAICS codes
- **Bid and capture teams** building a daily pipeline without clicking through SAM.gov
- **GovCon consultants and proposal writers** running opportunity alerts for many clients
- **Sales and market-research teams** tracking which agencies are buying what

### What you get (per opportunity)

| Field | Example |
|---|---|
| `title` | Defense Health Agency (DHA) Program Acquisition... |
| `noticeType` | Solicitation / Combined Synopsis/Solicitation / Sources Sought / Award Notice |
| `solicitationNumber` | N68335-27-Q-1021 |
| `department`, `subTier`, `office`, `agencyPath` | DEPT OF DEFENSE > DEPT OF THE NAVY > NAVAIR |
| `naicsCodes`, `pscCode` | \["541512"], "DA01" |
| `setAside` | SBA, 8A, HZC, SDVOSBC, WOSB... |
| `postedDate`, `responseDeadline`, `daysUntilResponse` | 2026-10-30T15:00-04:00, 13 |
| `placeOfPerformanceCity/State/Country` | Joint Base MDL, NJ, USA |
| `awardee`, `awardAmount`, `awardDate` | for award notices |
| `description` | full notice text, HTML removed |
| `contacts` | contracting officer name, email, phone (can be turned off) |
| `url` | https://sam.gov/opp/<id>/view |

### Input

| Field | What it does |
|---|---|
| `keywords` | Full-text search, e.g. `cybersecurity`, `janitorial`, `drone` |
| `naicsCodes` | One or more NAICS codes, any match |
| `noticeTypes` | Solicitation, Combined Synopsis, Presolicitation, Sources Sought, Award... |
| `setAsides` | Total Small Business, 8(a), HUBZone, SDVOSB, WOSB, EDWOSB, VOSB |
| `states` | Place-of-performance state codes, e.g. `VA`, `MD`, `DC` |
| `agencyContains` | e.g. `Navy`, `Veterans Affairs` |
| `postedWithinDays` | Only notices posted or updated in the last N days |
| `minDaysUntilResponse` | Skip anything closing sooner than N days (set 1 to drop expired) |
| `onlyNew` | Monitor mode. Returns only notices this filter has not delivered before |
| `maxResults` | Hard cap on rows, which caps your spend |
| `apiKey` | Optional. Your own free api.sam.gov key to read the official Opportunities API instead |

Example: open IT work in the DC area, at least a day left to respond:

```json
{ "naicsCodes": ["541511","541512"], "noticeTypes": ["o","k","r"], "states": ["VA","MD","DC"], "minDaysUntilResponse": 1, "maxResults": 200 }
```

### Pricing

**$2.00 per 1,000 opportunities** ($0.002 each), pay per result. You pay only for rows delivered. Notices removed by your state, agency, deadline or "only new" filters are free. A daily alert for one NAICS code usually costs a few cents.

### Daily alerts in 2 minutes

1. Set your filters and turn on **Only new since last run**.
2. Save as a task, then add a daily **Schedule**.
3. Connect the dataset to Google Sheets, Slack, email, Zapier or Make with Apify integrations.

### For AI agents

- Call through the Apify API, the Apify MCP server (mcp.apify.com), or agentic payments (x402 / MPP prepaid token, Skyfire). No Apify account needed for agentic payments.
- Runs with **limited permissions** and no Standby. It only uses its own storages (one named key-value store for the "only new" state).
- Pay per event only: **$0.002 per opportunity row**, no platform usage added. `maxResults` caps spend.
- All inputs are optional. Good default: `{"keywords":"software","postedWithinDays":7,"maxResults":50}`.
- Output: flat JSON dataset (`GET /v2/datasets/{datasetId}/items?format=json`); `RUN_SUMMARY` in the key-value store has counts.

### Reliability

Plain HTTP and JSON, no browser and no proxy needed. Retries with backoff, polite request pacing, and every run writes a `RUN_SUMMARY` (scanned, delivered, skipped).

### Data source and use

Data comes from SAM.gov, the U.S. government's official contract opportunities system. Federal procurement notices are public information. This Actor is not affiliated with or endorsed by GSA or SAM.gov. Always check the official notice and its attachments before you bid. Contact fields are the work contacts government officers publish on each notice. Use them only for bid-related communication.

# Actor input Schema

## `keywords` (type: `string`):

Optional free-text search over SAM.gov notice titles and text, e.g. "cybersecurity" or "janitorial services". Leave empty to return all notices that match the other filters.

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

Optional list of 6-digit NAICS industry codes (strings), e.g. \["541511","541512"]. A notice matches if it has any of them. Empty = all industries.

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

Optional list of notice type codes: o=Solicitation, k=Combined Synopsis/Solicitation, p=Presolicitation, r=Sources Sought, s=Special Notice, a=Award Notice, u=Justification, i=Intent to Bundle, g=Surplus sale. Empty = all types.

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

Optional small-business set-aside codes, e.g. \["SBA","8A","SDVOSBC","WOSB","HZC"]. Empty = any set-aside or none.

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

Optional 2-letter US state codes for the place of performance, e.g. \["VA","MD"]. Requires includeDetails=true. Empty = all locations.

## `agencyContains` (type: `string`):

Optional case-insensitive text the agency path must contain, e.g. "Navy" or "Veterans Affairs".

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

Only notices posted or updated in the last N days. 0 = no date limit. Use 1-7 for daily/weekly monitoring.

## `minDaysUntilResponse` (type: `integer`):

Optional. Skip notices whose response deadline is fewer than N days away, so you only get ones you can still bid on.

## `activeOnly` (type: `boolean`):

true (default) = skip archived/inactive notices.

## `includeDetails` (type: `boolean`):

true (default) = fetch each notice for NAICS, PSC, set-aside, place of performance, full description and contacts. false = faster, fewer fields.

## `includeContacts` (type: `boolean`):

true (default) = include the contracting officer work name, email and phone published on the notice.

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

true = return only notices not delivered in an earlier run with the same filters (state is kept between runs). Use with a schedule for an alert feed.

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

Maximum rows to return (1-10000). You are charged per row returned, so this caps the cost: 100 rows = $0.20 at $0.002/row.

## `apiKey` (type: `string`):

Optional. Your own free api.sam.gov public API key; when set, the Actor reads the official SAM.gov Opportunities API instead of the public search feed.

## Actor input object example

```json
{
  "keywords": "software",
  "naicsCodes": [],
  "noticeTypes": [],
  "setAsides": [],
  "states": [],
  "postedWithinDays": 0,
  "activeOnly": true,
  "includeDetails": true,
  "includeContacts": true,
  "onlyNew": false,
  "maxResults": 100
}
```

# 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 = {
    "keywords": "software"
};

// Run the Actor and wait for it to finish
const run = await client.actor("gouda_studios/sam-gov-opportunities-feed").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 = { "keywords": "software" }

# Run the Actor and wait for it to finish
run = client.actor("gouda_studios/sam-gov-opportunities-feed").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 '{
  "keywords": "software"
}' |
apify call gouda_studios/sam-gov-opportunities-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gouda_studios/sam-gov-opportunities-feed"
        }
    }
}
```

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/rhgVeqs3spAxJqAms/builds/E1B2JrFmlwgwNYfk7/openapi.json
