# SAM.gov Contract Opportunities Monitor: Federal RFPs & Awards (`optimistprime/federal-contract-opportunities-monitor`) Actor

US federal contract opportunities from the SAM.gov public extract: RFPs, sources sought & awards by NAICS, set-aside, state. Daily alerts, $1.50/1k. Not affiliated with or endorsed by GSA or SAM.gov.

- **URL**: https://apify.com/optimistprime/federal-contract-opportunities-monitor.md
- **Developed by:** [Derek VanLaningham](https://apify.com/optimistprime) (community)
- **Categories:** Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 contract notice returneds

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 Monitor: Federal RFPs & Awards

**Daily US federal contract opportunities, filtered to your NAICS, set-aside and state, from the official SAM.gov public data extract. No API key, no login, $1.50 per 1,000.**

**Not affiliated with or endorsed by GSA or SAM.gov.**

Every active federal notice (solicitations, RFQs/RFPs, combined synopsis/solicitations, presolicitations, sources sought, special notices, award notices and justifications), returned as clean typed rows with `daysToDeadline`, normalized set-aside codes, award winners with amounts and a link back to the notice on SAM.gov. Use it as a daily bid-alert feed, track solicitations until award, or plug it into AI agents through the [Apify MCP server](https://mcp.apify.com/?tools=optimistprime/federal-contract-opportunities-monitor).

### What you get

One `contract-opportunity` row per notice:

| Field | Meaning |
|---|---|
| `noticeId`, `title`, `solicitationNumber` | Notice ID (32 hex), title, solicitation number |
| `noticeType`, `baseNoticeType` | e.g. `Solicitation`, `Combined Synopsis/Solicitation`, `Sources Sought`, `Award Notice` |
| `department`, `subTier`, `office`, `cgac`, `fpdsCode`, `aacCode` | Contracting agency path and codes |
| `postedAt` | When the notice was posted (UTC) |
| `responseDeadline` | Deadline exactly as published (with its own UTC offset, or date only) |
| `daysToDeadline`, `isOpen` | Computed for you: whole days left and whether bids are still open |
| `setAsideCode`, `setAside` | Normalized code (`SBA`, `8A`, `SDVOSBC`, `WOSB`, `HZC`, …) and its description; `null` = no set-aside |
| `naicsCode`, `pscCode` | NAICS and Product/Service (classification) code |
| `placeOfPerformance`, `officeLocation` | Street/city/state/zip/country (place of performance is often empty) |
| `award` | `{number, date, amountUsd, awardee, awardeeRedacted}` on award notices |
| `description` | Plain-text description, with emails, phone numbers and contact names removed, cut to `descriptionMaxChars` |
| `hasPointOfContact` | Whether the notice lists a contact (contact details are never output) |
| `additionalInfoLink`, `samUrl` | Agency link, and the public notice page on SAM.gov |
| `matchQuery` | Track mode: which of your solicitation numbers / IDs matched |
| `changeType`, `changes`, `previousResponseDeadline` | Monitor mode: `new` / `updated`; `changes` lists `{field, old, new}` for each changed field (`changedFields` is the same list, kept for older integrations); `previousResponseDeadline` is the old deadline when it moved |
| `snapshotDate`, `licence`, `fetchedAt` | Data freshness (extract timestamp), attribution, run time |

Example row (description shortened):

```json
{
  "recordType": "contract-opportunity",
  "noticeId": "464d5cb59b58499d9381ae2c2f5117d2",
  "title": "USNS POINT LOMA (T-EPF 15) Mid-Term Availability",
  "solicitationNumber": "N3220526R6128",
  "noticeType": "Solicitation",
  "baseNoticeType": "Solicitation",
  "department": "DEPT OF DEFENSE",
  "subTier": "DEPT OF THE NAVY",
  "office": "MSCHQ NORFOLK",
  "cgac": "017", "fpdsCode": "1700", "aacCode": "N32205",
  "postedAt": "2026-10-04T15:13:23Z",
  "responseDeadline": "2026-10-20T15:00:00-04:00",
  "daysToDeadline": 15,
  "isOpen": true,
  "setAsideCode": "SBA",
  "setAside": "Small Business Set Aside - Total",
  "naicsCode": "336611",
  "pscCode": "J998",
  "placeOfPerformance": { "street": null, "city": null, "state": null, "zip": null, "country": null },
  "officeLocation": { "city": "NORFOLK", "state": "VA", "zip": "23511-2313", "country": "USA" },
  "award": null,
  "archiveType": "autocustom",
  "archiveDate": "2027-10-04",
  "description": "Prepare for and accomplish the Mid-Term Availability(MTA) for the USNS POINT LOMA (T-EPF 15) as specified in the solicitation…",
  "hasPointOfContact": true,
  "additionalInfoLink": null,
  "samUrl": "https://sam.gov/opp/464d5cb59b58499d9381ae2c2f5117d2/view",
  "matchQuery": null,
  "changeType": null,
  "changedFields": [],
  "snapshotDate": "2026-10-05T03:30:41Z",
  "licence": "US federal contract opportunity notices from the SAM.gov public Data Services extract (US Government work, public domain). Not affiliated with or endorsed by GSA or SAM.gov.",
  "fetchedAt": "2026-10-05T16:00:00Z"
}
```

An award notice looks like `"award": {"number": "36C24927P0029", "date": "2026-10-01", "amountUsd": 236280, "awardee": "PARATA SYSTEMS LLC Durham NC 27703 USA", "awardeeRedacted": false}`.

### Why this Actor

- **Built on GSA's published daily extract, no scraping.** It downloads the public Contract Opportunities file that GSA publishes on SAM.gov Data Services, the channel the SAM.gov terms point to. It never scrapes sam.gov pages or calls internal search endpoints.
- **Monitor mode:** returns only notices you haven't seen, plus notices whose deadline, type, title, set-aside or award changed.
- **Track solicitations to award:** give solicitation numbers and get every current notice for them (presolicitation → solicitation → amendment → award).
- **Set-aside normalization:** clean codes like `SDVOSBC`, `8A` and `WOSB`, plus a one-click `SMALL_BUSINESS_ANY` filter.
- **`daysToDeadline` and `isOpen`**, computed correctly across time zones (EDT, PDT, Guam, Japan…).
- **Award winners with amounts** (`award.amountUsd` is a number).
- **MCP-ready:** typed rows, a time budget and freshness info.
- **Privacy-safe:** no contracting-officer contact details, and emails and phone numbers are removed from notice text.

### Use cases

- **Small-business bid alerts:** new open solicitations for your NAICS codes and set-asides, every morning.
- **Capture tracking:** follow 40 solicitation numbers and get told when an amendment, a deadline change or the award appears.
- **Award / competitor intel:** who won federal construction awards over $100K this week, and from which agencies.
- **Teaming and subcontracting:** sources-sought notices in your PSC codes (early pipeline).
- **Market research:** volumes by agency, NAICS and set-aside.
- **AI agents:** "List open Navy solicitations for ship repair closing in the next 14 days."

### How to use

#### How to get daily federal RFP alerts by NAICS code

1. Create a task with your filters plus `"monitorMode": true` and a `monitorId`:

```json
{
  "naicsCodes": ["541512", "541519"],
  "setAsides": ["SMALL_BUSINESS_ANY"],
  "states": ["TX", "OK", "LA"],
  "postedWithinDays": 3,
  "onlyOpen": true,
  "monitorMode": true,
  "monitorId": "it-bids-south",
  "maxItems": 200
}
```

2. Schedule it daily at **06:00 America/Chicago**. The extract lands nightly around 03:30 UTC (about 10:30 PM CT).
3. Add a webhook or integration on "Run succeeded" to post new rows to Slack, email, Make, Zapier or n8n.

The **first monitor run is a baseline**: every match comes back as `new` and is charged. After that you only get new and updated notices. `postedWithinDays: 3` covers weekends, and the overlap is free because notices you've already seen are skipped. If the extract hasn't changed since your last monitor run, the run skips the download and returns 0 rows (start fee only).

#### How to skip notices you can't respond to in time

```json
{ "naicsCodes": ["5415"], "postedWithinDays": 7, "minDaysToRespond": 14, "maxItems": 50 }
```

Drops notices whose response deadline is fewer than 14 days away. Notices with no deadline are kept, and dropped notices are free. In monitor mode, dropped notices are not marked as seen, so if an agency extends the deadline past 14 days the notice shows up on a later run.

#### How to see what changed on a notice (deadline moved, set-aside changed)

With `monitorMode` on, an updated notice comes back with `changeType: "updated"` and a `changes` list covering response deadline, title, set-aside, NAICS, PSC, place of performance, notice type and archive date (plus award fields):

```json
{
  "changeType": "updated",
  "responseDeadline": "2026-10-27T15:00:00-04:00",
  "previousResponseDeadline": "2026-10-20T15:00:00-04:00",
  "changes": [
    { "field": "responseDeadline", "old": "2026-10-20T15:00:00-04:00", "new": "2026-10-27T15:00:00-04:00" }
  ]
}
```

#### How to find SDVOSB / 8(a) / WOSB / HUBZone set-aside contracts

```json
{ "setAsides": ["SDVOSBC", "SDVOSBS"], "postedWithinDays": 7, "onlyOpen": true, "maxItems": 200 }
```

Use `8A`/`8AN` for 8(a), `WOSB`/`WOSBSS`/`EDWOSB`/`EDWOSBSS` for women-owned, `HZC`/`HZS` for HUBZone, `SMALL_BUSINESS_ANY` for every small-business set-aside, or `NONE` for full and open competition.

#### How to see who won federal contracts (award notices)

```json
{ "noticeTypes": ["award"], "naicsCodes": ["236", "237", "238"], "postedWithinDays": 7, "minAwardUsd": 100000, "maxItems": 200 }
```

Add `awardeeContains: ["ACME"]` to watch a competitor.

#### How to track a solicitation until award

```json
{ "mode": "track", "solicitationNumbers": ["N3220526R6128", "36C249-27-AP-0116"], "monitorMode": true, "monitorId": "capture-list" }
```

Daily, this returns only what changed (for example the award notice appearing or the deadline moving). Each unchanged tracked notice costs $0.0002. Values that match no current notice are listed in `RUN_SUMMARY.notFound`, free of charge.

### Input reference

| Input | Default | Notes |
|---|---|---|
| `mode` | `search` | `search` (filters) or `track` (solicitation numbers / notice IDs) |
| `noticeTypes` | biddable types | `solicitation`, `combined`, `presolicitation`, `sources-sought`, `special-notice`, `award`, `justification`, `modification`, `bundle`, `surplus` |
| `keywords` / `excludeKeywords` | – | Whole words, case-insensitive, any-of; `searchDescriptions` also searches descriptions |
| `naicsCodes` / `pscCodes` | – | Prefixes: `5415` covers 541511/541512/541519; `D3` covers IT services PSCs |
| `setAsides` | any | Codes above; `SMALL_BUSINESS_ANY`; `NONE` |
| `states` | – | Place-of-performance state (falls back to the contracting office state) |
| `agencies` | – | Text in department / sub-tier / office, e.g. `VETERANS AFFAIRS`, `NAVY` |
| `postedWithinDays` | 3 | 0 = any date |
| `onlyOpen` | true | Drops notices whose deadline has passed (notices without a deadline are kept) |
| `deadlineWithinDays` | 0 | Only deadlines in the next N days, soonest first |
| `minDaysToRespond` | blank (off) | Drop notices due in fewer than N days; no-deadline notices kept |
| `minAwardUsd`, `awardeeContains` | – | Award notices only |
| `solicitationNumbers` | – | Track mode, up to 500 (case and spaces ignored; 32-hex values = notice IDs) |
| `includeDescription`, `descriptionMaxChars` | true, 4000 | Average description is about 2,100 characters |
| `monitorMode`, `monitorId` | false, `default` | One monitorId per saved search |
| `maxItems` | 50 | 0 = no limit. Newest first (soonest deadline first with `deadlineWithinDays`) |
| `timeBudgetSeconds` | 120 | Returns partial results with `truncated: true` if reached |

A search needs at least one filter or a posted-within window, which prevents accidental 74,000-row runs.

#### Notice types explained

Sources sought / RFI (market research) → presolicitation (heads-up) → solicitation or combined synopsis/solicitation (bid now) → modification/amendment → award notice (who won). Special notices cover events, industry days and other announcements, and justifications explain sole-source decisions.

#### Set-aside codes

| Code | Meaning |
|---|---|
| SBA / SBP | Small business total / partial |
| 8A / 8AN | 8(a) set-aside / sole source |
| HZC / HZS | HUBZone set-aside / sole source |
| SDVOSBC / SDVOSBS | Service-disabled veteran-owned set-aside / sole source |
| WOSB / WOSBSS, EDWOSB / EDWOSBSS | Women-owned (and economically disadvantaged) set-aside / sole source |
| VSA / VSS | Veteran-owned (VA) set-aside / sole source |
| ISBEE / IEE / BICiv | Indian small business / Indian economic enterprise / Buy Indian |
| LAS, ESB | Local area set-aside, emerging small business |

#### NAICS vs PSC

NAICS describes **the industry** (e.g. 541512 Computer Systems Design Services). PSC describes **the product or service bought** (e.g. D3xx IT services, Z2xx construction repair, 65xx medical supplies). Filter by NAICS to match your size standard and by PSC to match what agencies are buying.

#### Data timing

GSA publishes the extract nightly at around **03:30 UTC (10:30 PM CT)**, so data is up to ~24 hours behind the live site. Every row has `snapshotDate`, and a snapshot older than 48 hours adds a warning to the run status.

### Output reference and RUN_SUMMARY

Dataset views: **Overview**, **Awards**, **Changes**. The key-value store record `RUN_SUMMARY` contains:
`mode, snapshotDate, etag, bytes, rowsScanned, matched, pushed, newCount, updatedCount, checkedUnchanged, skippedSeen, awardeesWithheld, emailsScrubbed, phonesScrubbed, contactNamesScrubbed, unknownNoticeTypes, notFound (track), truncated, stopReason, charged`.

### Pricing

Pay per event, with no platform usage on top:

| Event | FREE | BRONZE | SILVER and up |
|---|---|---|---|
| Contract notice returned (`opportunity`) | $0.0015 | $0.0014 | $0.0012 |
| Tracked notice checked, unchanged (`notice-checked`, track + monitor only) | $0.0002 | $0.0002 | $0.0002 |
| Actor start | $0.002 | $0.002 | $0.002 |

Worked examples (FREE tier):

- **Default run, 50 rows:** $0.002 + 50 × $0.0015 = **$0.077**
- **Prefilled Console run** (NAICS 5415, last 7 days, 11 rows): $0.002 + 11 × $0.0015 = **$0.0185**. Measured Oct 5, 2026: 11 of 33 matching notices.
- **Daily IT bid alert** (NAICS 5415, monitor): about 33 new notices per weekday → about **$1.2 per month**
- **Daily construction bid alert** (NAICS 236–238, monitor): about 110 per weekday → about **$3.7 per month**
- **Weekly award intel** (construction awards ≥ $100K): about 176 rows → about **$1.1 per month**
- **Track 40 solicitations daily:** about 2 changes a day → about **$0.4 per month**

Rows that your filters drop, notices you've already seen in monitor mode, and not-found tracked values are free. The Actor start fee is charged per GB of memory (minimum 1). The default 512 MB costs $0.002, and raising memory to 2 GB costs $0.004. Use **Max cost per run** to cap spending; the run stops cleanly with "Stopped: max cost per run reached after N rows".

### Use as an MCP tool

Add `https://mcp.apify.com/?tools=optimistprime/federal-contract-opportunities-monitor` to Claude, ChatGPT, Cursor or any MCP client. Try:

- "Find open small-business set-aside IT solicitations (NAICS 5415) posted this week."
- "Which companies won federal construction awards over $1M in the last 7 days?"
- "Has solicitation N3220526R6128 been amended or awarded?"

A minimal agent call is `{"naicsCodes":["238220"],"states":["TX"],"postedWithinDays":7,"maxItems":10}`. Agents get `daysToDeadline`, `isOpen`, `award.amountUsd`, `samUrl` for citation and `snapshotDate` for freshness.

### Data source, licence and privacy

Data comes from the public Contract Opportunities extract that GSA publishes daily on SAM.gov Data Services (US Government work, public domain). This Actor is not affiliated with or endorsed by GSA or SAM.gov. To protect individuals, contracting-officer contact details are not included, emails and phone numbers are removed from notice text, and awardees that may be individuals are withheld. Open `samUrl` to see the full notice on SAM.gov.

- When a notice repeats its listed point of contact inside the text ("contact Jane Doe at …"), that person's name and phone number are replaced with `[name removed]` / `[phone removed]`.
- Only the official public extract (`ContractOpportunitiesFullCSV.csv`, privacy "Public") is downloaded, at most once per run. No sam.gov pages, no internal APIs, no login, no proxy.
- Award winners are withheld (`awardee: null`, `awardeeRedacted: true`) for awards dated before 2022-04-04. Under the SAM.gov terms those may contain Dun & Bradstreet data that can't be shared in bulk.
- Citation: "Source: SAM.gov Contract Opportunities public data extract (GSA)". Every row has `licence` and a `samUrl` link back.

### FAQ

**Is this the official SAM.gov API?** No. It uses GSA's public daily extract file from SAM.gov Data Services, which needs no API key. The data is public domain.

**Why are there no contracting-officer emails?** For privacy, we don't redistribute personal contact details. `hasPointOfContact` tells you whether a contact is listed, and `samUrl` opens the notice, where you can read it.

**How fresh is it?** Nightly. Every row carries `snapshotDate`. Schedule monitors after 05:00 UTC (06:00 CT is ideal).

**Can I get attachments?** Not yet. Attachments and resource links aren't in the extract; open `samUrl` to download them.

**Why was an awardee withheld?** Either the award is dated before April 4, 2022 (Dun & Bradstreet data restriction), or the awardee name has no business marker (LLC, INC, CORP, SERVICES…) and may be a person.

**Why do some notices have no deadline?** Award notices, many special notices and justifications don't have one. `onlyOpen` keeps them, and `deadlineWithinDays` drops them.

### Ready-to-run examples

| Example | What it does | Sample run |
|---|---|---|
| [New Federal IT Services RFPs (NAICS 5415)](https://apify.com/optimistprime/federal-contract-opportunities-monitor/tasks/federal-it-rfps-naics-5415-daily) | Open IT RFPs/RFQs/sources sought, last 7 days | 11 rows (33 matching) |
| [Open SDVOSB Set-Aside Opportunities](https://apify.com/optimistprime/federal-contract-opportunities-monitor/tasks/sdvosb-set-aside-opportunities) | SDVOSB set-asides, last 7 days, open | 11 rows (158 matching) |
| [Federal Construction Awards Over $100K](https://apify.com/optimistprime/federal-contract-opportunities-monitor/tasks/federal-construction-awards-over-100k) | Construction awards (NAICS 236–238) ≥ $100K, last 7 days | 11 rows (150 matching) |

### Changelog

See the Changelog tab. 1.0 (Oct 5, 2026): first release, with search, track, monitor, privacy scrubbing and the D\&B awardee rule.

# Changelog

This Actor's version history is a separate document: https://apify.com/optimistprime/federal-contract-opportunities-monitor/changelog.md

# Actor input Schema

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

search = filter all active US federal contract notices. track = follow specific solicitation numbers or notice IDs from presolicitation to award.

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

Search mode. Empty = the biddable types (solicitation, combined synopsis/solicitation, presolicitation, sources sought). Pick 'award' for award notices (who won, amount).

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

Search mode. A notice matches if ANY keyword or phrase appears in the title (or the description, see 'Search descriptions too'). Case-insensitive, whole words. Example: cybersecurity, HVAC, "janitorial services".

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

Search mode. Drop notices whose title or description contains any of these.

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

Match keywords against the description as well as the title. More results, more noise.

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

Search mode. 2 to 6 digit NAICS codes; prefixes match, so 5415 covers 541511, 541512, 541519. Example: 236220, 5415.

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

Search mode. Product and Service Codes; prefixes match. Example: D3 (IT services), Z2 (construction repair), 65 (medical supplies).

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

Search mode. Empty = any (including none). SMALL_BUSINESS_ANY = every small-business set-aside type.

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

Search mode. US two-letter state codes, e.g. TX, VA, DC. Notices without a place of performance are matched on the contracting office state instead.

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

Search mode. Text matched (case-insensitive) against department, sub-tier and office, e.g. 'VETERANS AFFAIRS', 'NAVY', 'NASA'.

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

Search mode. Only notices posted in the last N days (0 = any date). About 1,200 notices are posted per weekday. Prefilled 7 so a first try fills its 11 rows even on Mondays (the daily extract has no weekend postings); the API default stays 3.

## `onlyOpen` (type: `boolean`):

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

## `deadlineWithinDays` (type: `integer`):

Search mode. Only notices whose response deadline is in the next N days (0 = off). Soonest first.

## `minDaysToRespond` (type: `integer`):

Drop notices whose response deadline is fewer than N days away (too little time to bid). Leave blank for off. Notices without a deadline are kept. Dropped notices are free and, in monitor mode, not marked as seen, so if the deadline is later extended past N days the notice comes through.

## `minAwardUsd` (type: `integer`):

Award notices only. Drop awards below this amount (0 = off).

## `awardeeContains` (type: `array`):

Award notices only. Company-name text to match, e.g. a competitor's name.

## `solicitationNumbers` (type: `array`):

Track mode. Up to 500 solicitation numbers (e.g. N3220526R6128) or 32-character notice IDs. Returns every current notice for each.

## `includeDescription` (type: `boolean`):

Add the notice's plain-text description (emails and phone numbers removed).

## `descriptionMaxChars` (type: `integer`):

Truncate descriptions to this length (0 = full text). Average is about 2,100 characters.

## `monitorMode` (type: `boolean`):

Search: return only notices this monitor hasn't returned before, or whose deadline, type, title, set-aside, NAICS, PSC, place of performance, archive date or award changed (each changed row lists `changes` with old and new values). Track: return only new or changed notices for your solicitations; unchanged ones cost $0.0002 each. Schedule daily after 05:00 UTC.

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

Name of the monitor state (letters, digits, dashes). Use different IDs for different searches.

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

Stop after this many rows (0 = no limit). Newest notices first (soonest deadline first when 'Deadline within N days' is set). Prefilled 11 so a first try costs under $0.02.

## `timeBudgetSeconds` (type: `integer`):

Stop scanning after this many seconds and return what was found so far (truncated: true). 0 = no limit. A full scan takes about 20-40 seconds.

## Actor input object example

```json
{
  "mode": "search",
  "noticeTypes": [],
  "keywords": [],
  "excludeKeywords": [],
  "searchDescriptions": false,
  "naicsCodes": [
    "5415"
  ],
  "pscCodes": [],
  "setAsides": [],
  "states": [],
  "agencies": [],
  "postedWithinDays": 7,
  "onlyOpen": true,
  "deadlineWithinDays": 0,
  "minAwardUsd": 0,
  "awardeeContains": [],
  "solicitationNumbers": [],
  "includeDescription": true,
  "descriptionMaxChars": 4000,
  "monitorMode": false,
  "monitorId": "default",
  "maxItems": 11,
  "timeBudgetSeconds": 120
}
```

# Actor output Schema

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

Dataset of notices: agency, NAICS/PSC, set-aside, deadline, daysToDeadline, award, samUrl.

## `runSummary` (type: `string`):

RUN_SUMMARY: snapshotDate, rowsScanned, matched, pushed, notFound (track), truncated, stopReason, charged.

# 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"
    ],
    "postedWithinDays": 7,
    "maxItems": 11
};

// Run the Actor and wait for it to finish
const run = await client.actor("optimistprime/federal-contract-opportunities-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 = {
    "naicsCodes": ["5415"],
    "postedWithinDays": 7,
    "maxItems": 11,
}

# Run the Actor and wait for it to finish
run = client.actor("optimistprime/federal-contract-opportunities-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 '{
  "naicsCodes": [
    "5415"
  ],
  "postedWithinDays": 7,
  "maxItems": 11
}' |
apify call optimistprime/federal-contract-opportunities-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,optimistprime/federal-contract-opportunities-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/z3NuzsfQBihohhbfc/builds/ka7UzDZoVhYTsK3oi/openapi.json
