# SAM.gov Contract Opportunities: Federal Bids & Awards (`yodeling_november/sam-gov-contract-opportunities`) Actor

🇺🇸 New US federal contract opportunities from SAM.gov's official daily data extract: solicitations, sources sought and awards with full descriptions. Filter by keyword, NAICS, PSC, set-aside, agency, state or deadline, and schedule daily alerts. No API key or SAM.gov account needed.

- **URL**: https://apify.com/yodeling_november/sam-gov-contract-opportunities.md
- **Developed by:** [João Fernandes](https://apify.com/yodeling_november) (community)
- **Categories:** Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## SAM.gov Contract Opportunities: Federal Bids & Awards

**Every new US federal contract opportunity, straight from SAM.gov's official daily data extract, with filters that cut the noise.**

US federal agencies post thousands of notices on SAM.gov every week: solicitations, sources sought, presolicitations and awards. This Actor reads **the official public extract that SAM.gov publishes every night** and gives you clean rows with the **full description**, deadlines, set-asides, NAICS and PSC codes, place of performance and award details. Filter by keyword, NAICS, PSC, set-aside, agency, state or deadline, then schedule it to get **only the notices you haven't seen yet**.

### ✨ Why use it

- 🏛️ **Official source, used the way SAM.gov intends:** the public Contract Opportunities extract from SAM.gov Data Services, not scraped web pages.
- 🔑 **No API key, no SAM.gov account, no daily request quota.**
- 📄 **Full descriptions included,** not just a link, so you can read the requirement, search it or send it to an AI model.
- 🎯 **Filters that match how contractors search:** NAICS and PSC prefixes, set-asides (SBA, 8(a), HUBZone, SDVOSB, WOSB…), agency, place of performance, due date and notice type.
- 🔁 **One row per solicitation:** amendments and updates share the solicitation number, so by default you get the latest notice only, not ten versions of the same bid.
- 🔔 **Daily alerts:** *New* mode remembers what it already sent you.
- 💸 **Pay per notice:** $0.002 each. A daily alert for your NAICS codes usually costs a few cents.

### 🌍 Coverage

- Every **active** notice on SAM.gov: about 70,000 at any time, from all federal departments and agencies.
- Notice types: Solicitation, Combined Synopsis/Solicitation, Presolicitation, Sources Sought, Special Notice, Award Notice, Justification (J\&A), Modification/Amendment/Cancel, Sale of Surplus Property and Consolidate/Bundle.
- Refreshed by SAM.gov once a night, so a notice posted today shows up in tomorrow's extract.

### 💡 Use cases

- **Small businesses and GovCon firms:** a morning list of new bids in your NAICS codes and set-asides, with days left to respond.
- **Capture and BD teams:** sources sought and presolicitations, weeks before the solicitation.
- **Market researchers:** who is buying what, and who just won (award notices with amount and awardee).
- **Developers of GovCon tools and AI agents:** a clean, documented JSON feed through the Apify API or MCP.

### 🚀 How to use it

1. Click **Try for free**.
2. Pick your NAICS or PSC prefixes (e.g. `5415` for IT services), set-asides or keywords, and how many days back to look.
3. Run it and download the results as **Excel, CSV or JSON**, or read them from the **Apify API**.
4. Want alerts? Save it as a task in *New* mode, add a daily **schedule**, and send new notices to Slack, email, Make, Zapier, n8n or a webhook.

### 📥 Input examples

New IT bids for small businesses, every day (schedule it):

```json
{
  "naicsCodes": ["5415", "5182"],
  "setAsides": ["SBA", "8A", "SDVOSBC", "WOSB", "HZC"],
  "noticeTypes": ["solicitation", "combined", "presolicitation", "sources-sought"],
  "mode": "new",
  "monitorId": "it-small-business"
}
```

Janitorial and custodial work in Virginia and Maryland due in the next 30 days:

```json
{ "keywords": ["janitorial", "custodial"], "states": ["VA", "MD"], "dueWithinDays": 30, "postedWithinDays": 60 }
```

Awards over $1M from the Department of Veterans Affairs in the last 30 days:

```json
{ "noticeTypes": ["award"], "agencies": ["Veterans Affairs"], "minAwardAmount": 1000000, "postedWithinDays": 30 }
```

### 📦 Output

One row per notice. For example, a small-business set-aside from NASA:

```json
{
  "noticeId": "56d2fe81e3b1488b8a6938021756a553",
  "solicitationNumber": "80NSSC27947229Q",
  "title": "COD FARO FOCUS I.1 3D LASER SCANNER",
  "noticeType": "Combined Synopsis/Solicitation",
  "postedDate": "2026-10-15",
  "responseDeadline": "2026-10-22T07:00:00-05:00",
  "daysToDeadline": 3,
  "department": "NATIONAL AERONAUTICS AND SPACE ADMINISTRATION",
  "office": "NASA SHARED SERVICES CENTER",
  "setAsideCode": "SBA",
  "setAside": "Small Business Set Aside - Total",
  "naicsCode": "541519",
  "pscCode": "7A20",
  "placeOfPerformanceCity": "Hampton",
  "placeOfPerformanceState": "VA",
  "description": "** THIS IS A BRAND NAME REQUIREMENT ** for COD FARO FOCUS I.1 3D LASER SCANNER ** AUTHORIZED RESELLERS ONLY ** …",
  "url": "https://sam.gov/opp/56d2fe81e3b1488b8a6938021756a553/view"
}
```

An award notice adds the winner:

```json
{
  "title": "DA10--PUPPET ENTERPRISE SOFTWARE (VA-26-00062749)",
  "noticeType": "Award Notice",
  "awardNumber": "NNG15SD27B36C10B26F0302",
  "awardDate": "2026-08-13",
  "awardAmount": 518996.0,
  "awardee": "V3GATE, LLC COLORADO SPRINGS 80921"
}
```

All fields: `noticeId`, `solicitationNumber`, `title`, `noticeType`, `originalNoticeType`, `postedAt`, `postedDate`, `responseDeadline`, `responseDeadlineDate`, `daysToDeadline`, `archiveDate`, `department`, `subTier`, `office`, `officeCode`, `officeCity`, `officeState`, `officeZip`, `officeCountry`, `setAsideCode`, `setAside`, `naicsCode`, `pscCode`, `placeOfPerformanceCity`, `placeOfPerformanceState`, `placeOfPerformanceZip`, `placeOfPerformanceCountry`, `awardNumber`, `awardDate`, `awardAmount`, `awardee`, `description`, `url`, `source` and `fetchedAt`.

The dataset has two views: **Opportunities** (deadlines, codes, agency) and **Awards** (amount, awardee, date).

### 💰 How much does it cost?

| Event | Price |
|---|---|
| Opportunity (one row) | $0.002 |

Higher Apify plans get volume discounts. A daily alert for a few NAICS codes usually returns 5 to 50 notices, so it costs 1 to 10 cents a day. 1,000 notices cost $2. Set *Max results* or a maximum cost per run to stay in control.

### ℹ️ Good to know

- **Keywords match the title** by default. Turn on *Also search descriptions* to search the full text too; expect more noise, because descriptions carry standard clauses (every DoD supply notice mentions the CMMC cybersecurity rules, for example).
- **Place of performance:** many supply notices have none, so they are left out when you filter by state.
- **Freshness:** SAM.gov rebuilds the extract once a night. The run log shows when the extract was built and the newest posting time in it.
- **Attachments** (solicitation documents) are on the notice page linked in `url`.
- **Privacy:** contact names, emails and phone numbers are left out, and emails and phone numbers inside descriptions are replaced by `[email]` and `[phone]`. Awardee names that do not read as an organisation (no LLC, Inc., Corp. or similar) are left empty, because they may be private individuals.
- Runs looking at the last few days take seconds: the extract is sorted newest first and the Actor stops reading when it reaches older notices. *Posted within (days)* = 0 reads all 70,000 active notices (under a minute).

### ❓ FAQ

**Do I need a SAM.gov API key?** No. The Actor uses the public data extract, which needs no key or account.

**Does it include archived or historical notices?** No, only notices that are active on SAM.gov today.

**Can I get every amendment of a solicitation?** Yes: turn off *Latest notice per solicitation*.

### 📚 Source and licence

Data: **SAM.gov Contract Opportunities**, public data extract from SAM.gov Data Services, published by the US General Services Administration (GSA). Works of the US Government are not subject to copyright in the United States.

This Actor is not affiliated with or endorsed by GSA or SAM.gov.

### 🔗 More official data from the same developer

- [Public Tenders: Portugal, Spain & EU](https://apify.com/yodeling_november/public-tenders-pt-es-eu): new calls for tender from BASE, PLACSP and TED.
- [Public Contract Awards: Portugal & Spain](https://apify.com/yodeling_november/public-contract-awards-pt-es): who wins, at what price and against whom.
- [North America Fuel Prices](https://apify.com/yodeling_november/north-america-fuel-prices): Mexican stations plus US and Canada averages.
- [UK Companies House Search](https://apify.com/yodeling_november/uk-companies-house-search): new UK companies by SIC code and postcode.
- [EU Company Verification (KYB)](https://apify.com/yodeling_november/eu-company-verification): bulk checks in 9 official registries.
- [European Public Data MCP Server](https://apify.com/yodeling_november/public-data-mcp): fuel, tenders and company data as tools for your AI agent.

# Actor input Schema

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

Optional. Keep notices whose title contains any of these words or phrases (whole words, case ignored), e.g. cybersecurity, janitorial, HVAC.

## `excludeKeywords` (type: `array`):

Optional. Drop notices whose title contains any of these (or description, with the option below).

## `searchDescriptions` (type: `boolean`):

Match keywords in the full description too. Finds more, but descriptions carry standard clauses (every DoD supply notice mentions CMMC cybersecurity rules), so expect more noise.

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

Optional. Keep notices whose NAICS code starts with any of these, e.g. 5415 (computer systems design), 236 (building construction), 5616 (security services).

## `pscCodes` (type: `array`):

Optional. Product and Service Codes, e.g. D3 or DA (IT services), Y1 (construction), R4 (professional support).

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

Optional. Leave empty for every type. For open bids pick Solicitation, Combined Synopsis/Solicitation, Presolicitation and Sources Sought; for who won, Award Notice.

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

Optional. Keep notices with any of these set-asides.

## `agencies` (type: `array`):

Optional. Keep notices whose department, agency or office contains any of these, e.g. Veterans Affairs, Army, NASA.

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

Optional. Two-letter codes such as VA, TX or DC. Many supply notices have no place of performance and are left out when you use this.

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

How far back to look. 0 means any date (every active notice, a slower run).

## `openOnly` (type: `boolean`):

Drop notices whose response deadline has passed. Notices without a deadline (awards, special notices) are kept.

## `dueWithinDays` (type: `integer`):

Optional. Only notices whose response deadline falls in the next N days.

## `minAwardAmount` (type: `integer`):

Optional. Only award notices with at least this amount.

## `onePerSolicitation` (type: `boolean`):

Amendments, updates and awards share the solicitation number. Keep only the newest notice of each solicitation.

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

Newest first. 0 means no cap.

## `mode` (type: `string`):

Snapshot returns every matching notice. New returns only notices not delivered before for the same Monitor ID, which suits scheduled daily runs.

## `monitorId` (type: `string`):

Name for the saved state in New mode. Use a different ID for each set of filters.

## Actor input object example

```json
{
  "searchDescriptions": false,
  "naicsCodes": [
    "5415",
    "5182",
    "5132"
  ],
  "noticeTypes": [
    "solicitation",
    "combined",
    "presolicitation",
    "sources-sought"
  ],
  "postedWithinDays": 7,
  "openOnly": true,
  "onePerSolicitation": true,
  "maxResults": 50,
  "mode": "snapshot",
  "monitorId": "default"
}
```

# Actor output Schema

## `opportunities` (type: `string`):

Federal contract notices matching the filters, newest first.

# 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 = {
    "naicsCodes": [
        "5415",
        "5182",
        "5132"
    ],
    "noticeTypes": [
        "solicitation",
        "combined",
        "presolicitation",
        "sources-sought"
    ],
    "postedWithinDays": 7,
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("yodeling_november/sam-gov-contract-opportunities").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 = {
    "naicsCodes": [
        "5415",
        "5182",
        "5132",
    ],
    "noticeTypes": [
        "solicitation",
        "combined",
        "presolicitation",
        "sources-sought",
    ],
    "postedWithinDays": 7,
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("yodeling_november/sam-gov-contract-opportunities").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 '{
  "naicsCodes": [
    "5415",
    "5182",
    "5132"
  ],
  "noticeTypes": [
    "solicitation",
    "combined",
    "presolicitation",
    "sources-sought"
  ],
  "postedWithinDays": 7,
  "maxResults": 50
}' |
apify call yodeling_november/sam-gov-contract-opportunities --silent --output-dataset

```

## MCP server setup

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

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/VYflhl5ixfdAZMKnJ/builds/d0rbpbrFyFhoZvTTG/openapi.json
