# SAM.gov Contract Opportunities Pro (`red.cars/sam-gov-contracts-pro`) Actor

Search live SAM.gov federal contract opportunities by keyword, NAICS code, response deadline and state. Returns solicitation numbers, agency hierarchy, set-aside type, buyer contacts with email and phone, and full descriptions in clean rows.

- **URL**: https://apify.com/red.cars/sam-gov-contracts-pro.md
- **Developed by:** [AutomateLab](https://apify.com/red.cars) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 contract 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 Pro

Search live federal contract opportunities on SAM.gov by keyword, NAICS code, response deadline window, and place-of-performance state. Every row carries the solicitation number, agency hierarchy, set-aside type, buyer contacts with email and phone, and the full opportunity description as clean text.

SAM.gov is where every US federal bid starts. Contractors, primes, and consultants who answer RFPs need a fast feed of relevant opportunities the moment they post. This actor returns those opportunities as structured rows you can pipe straight into CRM, Sheets, or an alert pipeline.

### Why this beats the alternatives

The top SAM.gov actors on the store (fortuitous_pirate/sam-gov-scraper, 23 users in the last 30 days, $3.00 per 1,000; jungle_synthesizer/samgov-scraper) return thin listing rows. This one adds the fields buyers actually work from: buyer contacts with direct email and phone, agency and office hierarchy, set-aside and original set-aside codes, posted and response-due dates, archive dates, and the full description text per row.

### Input

| Field | Type | Description |
| --- | --- | --- |
| keyword | string | Free-text keyword search (default: cybersecurity). |
| naics | string | Comma-separated NAICS codes, e.g. `541512, 541519`. |
| activeOnly | boolean | Exclude archived/inactive notices (default true). |
| includeCanceled | boolean | Include canceled notices (default false). |
| postedAfter / postedBefore | string | Publish-date window, `YYYY-MM-DD`. |
| dueAfter / dueBefore | string | Response-deadline window, `YYYY-MM-DD`. |
| state | string | Place-of-performance state, 2-letter (e.g. `TX`). |
| maxItems | integer | Hard cap on rows (default 10). |
| pageSize | integer | Results per request, up to 25 (default 25). |

### Output

| Field | Description |
| --- | --- |
| noticeId / url | SAM.gov notice id and direct link to the opportunity page. |
| solicitationNumber | The solicitation number agencies publish. |
| title / opportunityType | Title and notice type (e.g. Combined Synopsis/Solicitation). |
| agency / subAgency / office | Department, agency, and office from the organization hierarchy. |
| naics | NAICS codes and names attached to the opportunity. |
| setAside / originalSetAside | Set-aside code and name (e.g. SDVOSBC, 8(a)). |
| postedDate / responseDueDate / archiveDate | Key dates as YYYY-MM-DD. |
| placeOfPerformance | City, state, country where work is performed. |
| contacts | Buyer contacts: name, title, email, phone, primary/secondary. |
| description | Full opportunity description as clean text. |

### Pricing

$0.005 per run start + $0.003 per opportunity ($3.00 per 1,000 opportunities). Filtered-out rows are never billed: opportunities rejected by your date, state, activity, or cancellation filters are removed before they reach the dataset.

### Use cases

- Federal contractors building a daily bid pipeline by NAICS code and keyword.
- BD teams alerting on set-aside opportunities (SDVOSBC, 8(a), HUBZone) before competitors.
- Consultants tracking agency spending themes across departments and offices.
- CRM enrichment: opportunities with buyer names, emails, and phones per row.

### FAQ

**Does this need a SAM.gov account?** No. The actor queries the same search infrastructure the SAM.gov website uses and returns results without any login.

**How current are results?** Opportunities come straight from SAM.gov's search index at run time, including same-day postings.

**Can I monitor for new opportunities?** Yes. Combine a keyword, a NAICS code, and a postedAfter window (for example, yesterday's date) and schedule the actor daily; set maxItems to your alert batch size.

**Is the description complete?** Yes, the full description text is included per row, so qualification can happen downstream without opening SAM.gov.

### Send your leads straight to your pipeline

Every run lands as clean JSON/CSV in the run dataset, ready to push into HubSpot, Pipedrive, HighLevel, Instantly, Smartlead, or Lemlist through Apify's built-in Zapier, Make, and n8n integrations, or straight into Google Sheets. Scrape in the morning, sequence outreach the same day.

# Actor input Schema

## `keyword` (type: `string`):

Free-text keyword search across opportunity titles and descriptions.

## `naics` (type: `string`):

Comma-separated NAICS codes, e.g. 541512, 541519. Leave empty for all industries.

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

Exclude archived and inactive notices.

## `includeCanceled` (type: `boolean`):

Include notices marked canceled.

## `postedAfter` (type: `string`):

Only opportunities published on or after this date.

## `postedBefore` (type: `string`):

Only opportunities published on or before this date.

## `dueAfter` (type: `string`):

Only opportunities with a response deadline on or after this date.

## `dueBefore` (type: `string`):

Only opportunities with a response deadline on or before this date.

## `state` (type: `string`):

Only opportunities whose place of performance lists this state, e.g. TX.

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

Hard cap on opportunities returned.

## `pageSize` (type: `integer`):

Opportunities fetched per request, up to 25.

## Actor input object example

```json
{
  "keyword": "cybersecurity",
  "naics": "",
  "activeOnly": true,
  "includeCanceled": false,
  "postedAfter": "",
  "postedBefore": "",
  "dueAfter": "",
  "dueBefore": "",
  "state": "",
  "maxItems": 10,
  "pageSize": 25
}
```

# Actor output Schema

## `results` (type: `string`):

Opportunity rows with solicitation number, agency, set-aside, dates, contacts and 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("red.cars/sam-gov-contracts-pro").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("red.cars/sam-gov-contracts-pro").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 red.cars/sam-gov-contracts-pro --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,red.cars/sam-gov-contracts-pro"
        }
    }
}
```

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/H5OR7GnWoivd4pfzh/builds/ZDkL5bxafeDCcIolG/openapi.json
