# SAM.gov Contract Opportunities: Daily RFP Alerts, No API Key (`alpine-data/sam-gov-contract-opportunities`) Actor

Get new federal contract opportunities from SAM.gov as Excel, no API key and no coding: filter by NAICS, set-aside (8(a), WOSB, SDVOSB, HUBZone), notice type, state and keywords. Schedule it daily for government RFP alerts.

- **URL**: https://apify.com/alpine-data/sam-gov-contract-opportunities.md
- **Developed by:** [Alpine Data Labs](https://apify.com/alpine-data) (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 $1.50 / 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.
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: daily RFP alerts and Excel export (no API key)

Get **new federal contract opportunities from SAM.gov** (solicitations, RFPs, RFQs, sources sought, presolicitations and award notices) as **Excel, CSV or JSON**. Filter by **NAICS code**, **set-aside** (8(a), WOSB, SDVOSB, HUBZone, small business), notice type, state and keywords. You don't need a SAM.gov API key, a login or any coding. Pick your industry, click **Start**, download. It reads the official SAM.gov public data file, so it does not run into the 10-requests-a-day API limit.

### How to use it (no code)

1. **Fill in the form:** pick your industry (NAICS code), e.g. *54 – Professional, scientific and technical services* or *5415 – IT services*. If you like, also pick a **set-aside** (e.g. 8(a) or SDVOSB) and **states**. The form already has a working example filled in.
2. Click **Start**. A typical run takes 2–10 seconds.
3. **Download:** open the **Output** tab and click **Export** to download **Excel**, **CSV** or **JSON**.
4. **Optional: get a daily alert.** Switch on *Only new opportunities since my last run*, click **Save as a new task**, then **Schedule** (see below).

You never need to write JSON or code: every option is a dropdown, list field or checkbox in the form.

### What you get from each federal contract opportunity

![SAM.gov contract opportunities example output: federal RFPs with agency, NAICS, deadline and set-aside](https://api.apify.com/v2/key-value-stores/jVsR1fgZbtwc50gQM/records/sam-gov-contract-opportunities-example-output)

| Posted | Deadline | Days left | Title | Type | Agency | NAICS | Set-aside | State | Link |
|---|---|---|---|---|---|---|---|---|---|
| 2026-10-22 | 2026-11-11 | 19 | SILVAH software coding | Sources Sought | Forest Service | 541511 | Small Business Set Aside - Total | WV | [open](https://sam.gov/opp/4924a9998b8444c3ace265513047df72/view) |
| 2026-10-21 | 2026-10-30 | 7 | ePMO Support Services | Sources Sought | Dept of the Army | 541611 | 8(a) Set-Aside (FAR 19.8) | VA | [open](https://sam.gov/opp/29f73db76e7a484b814aae78558520ec/view) |
| 2026-10-21 | 2026-10-30 | 7 | Draft RFP for DRPM RAS ME RAS 1.0 and MCM RAS 2.0 Professional Support | Presolicitation | Dept of the Navy | 541330 | Small Business Set Aside - Total | – | [open](https://sam.gov/opp/07ffa9495d334260ab03488c5b5ee856/view) |

*(Real rows from a test run on 23 Oct 2026 with the pre-filled example.)* Every row also has the solicitation number, department, sub-tier and office, PSC code, place of performance (city, state, ZIP, country), office location, the response deadline with time zone, archive date, a 400-character description snippet and award details (awardee, amount, date) for award notices. See the *All details* view. The official point of contact and the full description are optional extras.

### Daily RFP alert: schedule it

> **Schedule it daily:** click **Schedule** (or *Saved tasks → Schedule*), run it every morning at 08:00 with **Posted in the last 3 days** and **Only new opportunities since my last run** switched on. Each run then returns only opportunities you have not received before, which gives you a government bid alert without a subscription. Under *Integrations* you can send the results to email, Slack, Google Sheets, Zapier or Make.

SAM.gov refreshes its public data file once a day (early morning U.S. Eastern time), so one run a day is enough.

### Typical uses

- **Daily bid alert** for your NAICS codes, e.g. IT services (5415) set aside for SDVOSB firms in Virginia and Maryland
- **Bid/no-bid pipeline**: send new solicitations with deadlines to Google Sheets, a CRM, Slack, n8n, Make or Zapier
- **Proposal writers and bid consultants**: one alert per client, each with its own NAICS codes and set-asides
- **Market research**: switch on *Award Notice* to see who won which federal contract and for how much

### Input fields in plain words

![SAM.gov contract opportunities input form: keywords, NAICS codes and notice types](https://api.apify.com/v2/key-value-stores/jVsR1fgZbtwc50gQM/records/sam-gov-contract-opportunities-input-form)

| Field | What it does | Example |
|---|---|---|
| **1. Which industry? (NAICS code)** | A short code includes all longer codes (54 = all professional services). You can type any 2–6 digit code or a word such as `janitorial` or `cybersecurity`. Leave it empty for all industries. | 54, 5415, 236220 |
| **2. Posted in the last … days** | How far back to look by posting date. Default and form value: 3 days. Choose *All active notices* for everything still open on SAM.gov. You can type a whole number from 1 to 3650 (e.g. 45). Text (e.g. `abc`), 0 or a negative number stops the run with a message and nothing is charged. | 3 |
| **3. Set-aside type** | Only notices reserved for a small-business program. Leave it empty for everything. | 8(a), SDVOSB |
| **4. Notice types** | Default: notices you can still respond to (Solicitation, Combined Synopsis/Solicitation, Presolicitation, Sources Sought). Add *Award Notice* to see winners. | Solicitation |
| **5. Place of performance: state** | Where the work is done. `Virginia` and `VA` both work. | VA, MD, DC |
| **6. Keywords** | Keeps notices whose title or description mentions any of these words. `cloud*` matches cloud and clouds. | cybersecurity, HVAC |
| **Max opportunities (cost limit)** | The run stops here, so you never pay more than you expect. | 100 (max. $0.19) |
| **Only new opportunities since my last run** | For daily alerts: skips notices you already received. Skipped notices are free. | on |
| *More filters:* Agency | Department or agency. Short forms work: VA, GSA, Army, NASA, DLA, Forest Service. | VA |
| *More filters:* Minimum days left | Drops notices whose response deadline is sooner. 0 drops deadlines that have already passed. Days are counted in U.S. Eastern time, like the posting-date window. | 7 |
| *More filters:* Exclude keywords | Drops notices that mention these words. | brand name |
| *More filters:* PSC code | Product/service code prefix. | D3, R4 |
| *More filters:* Posted from | An exact start date instead of "last … days". | 2026-10-01 |
| *Output:* Contact / full description | Adds the official point of contact or the full notice text. Both are off by default. | on |

### Pricing

Pay per result:

- **$0.0019 per opportunity** returned, which is **$1.90 per 1,000 opportunities** ($0.0017 on the Apify Scale plan, $0.0015 on Business and higher)
- plus **$0.002 per run** (the fee for downloading and reading the roughly 200 MB SAM.gov file)

There is no monthly fee. **Worked example:** a daily alert that returns 25 new opportunities costs 25 × $0.0019 + $0.002 = **$0.0495 per day**, about $1.50 a month. The pre-filled example (max 100 opportunities) costs at most **$0.192**.

**What is free:** notices removed by your filters, notices skipped by *Only new*, and runs that fail. If the input is invalid or the SAM.gov file cannot be downloaded, the run stops and **nothing is charged**. A valid run that finds 0 new opportunities costs only the $0.002 run fee. Platform usage is included in the price.

These are launch prices. If they change, Apify tells existing users in advance, as its rules require.

### FAQ and common mistakes

**Do I need a SAM.gov API key or account?** No. The Actor reads the official public *Contract Opportunities* data file that SAM.gov publishes every day for everyone. The SAM.gov API allows non-federal users only about 10 requests a day; this Actor does not use it, so that limit does not apply.

**How do I find government contracts for small businesses?** Pick your NAICS code and choose *Small business set-aside* (or 8(a), WOSB, SDVOSB, HUBZone) under *Set-aside type*. Choose *Any set-aside* to get every notice reserved for small businesses.

**Which NAICS code do I need?** Use the one from your SAM.gov registration. If you are not sure, pick a short code from the dropdown: 2 digits is a whole sector (23 = construction), 4 digits a group (5415 = IT services). Words such as `janitorial`, `construction` or `cybersecurity` also work.

**How do I get daily government bid alerts?** Turn on *Only new opportunities since my last run*, set *Posted in the last … days* to 3 and add a daily Schedule. Each different search keeps its own memory, so you can run several alerts side by side.

**Is this the same as SAM.gov saved searches?** It covers the same notices, but the result is a clean table you can filter in Excel, send to Google Sheets or a CRM, or feed into Zapier/Make. Nothing gets lost in a cluttered email.

**I got 0 results. What now?** Your filters are too narrow. Try more days (e.g. 14), a 2-digit NAICS sector, fewer keywords, more notice types or no state. Remember that many notices leave the place of performance empty (see *Limits*).

**I typed "Virginia", "8a" or "RFP". Is that OK?** Yes. State names and codes, set-aside short forms (8a, SDVOSB, WOSB, HUBZone) and words like RFP, RFQ or RFI are understood. Input that cannot be understood stops the run with a plain-English message, before anything is charged.

**Are attachments (SOW, PWS) included?** No. The public file has no attachments. Each row links to the notice on SAM.gov, where you can download them.

**How fresh is the data?** SAM.gov refreshes the file once a day. Notices posted today usually show up the next morning. For same-hour alerts you would need SAM.gov's own API.

**Can I get federal contract award data?** Yes, for award notices posted on SAM.gov: add *Award Notice* under *Notice types* and use the *Awards* view (awardee, amount, date). For complete spending history, USAspending.gov is the official source.

### Limits

- One update a day: the data is as fresh as the SAM.gov public file (refreshed daily, early morning U.S. Eastern time).
- The file contains **active** notices only. Archived and cancelled notices are not in it.
- Many notices leave the place of performance empty. With the state filter on, the Actor then uses the contracting office's state; you can switch that off under *More filters*.
- No attachments, and no state or local (SLED) bids. Federal opportunities only.
- The description is cut at 32,000 characters, the Excel cell limit.
- The data is only as good as what agencies publish: deadlines, NAICS codes and set-asides are sometimes missing or wrong.

### Data source and legal notes

This Actor uses the **official SAM.gov Contract Opportunities public data extract**, published by the U.S. General Services Administration for public download (sam.gov/data-services). It does not scrape the SAM.gov website and does not log in. It only uses public U.S. government data, and every row carries a `source` attribution. Contact details are the official government points of contact published on each notice. They are off by default and should only be used to ask about that procurement. SAM.gov is a U.S. government system. This Actor is not affiliated with, endorsed by, or connected to GSA or SAM.gov. Trademarks belong to their owners.

### Related tools from Alpine Data Labs

- [EU Tenders (TED): Tender Alerts to Excel](https://apify.com/alpine-data/ted-tender-monitor): the same kind of daily bid alert for public tenders in the EU, Austria and Germany.
- [Zefix Swiss Company Register](https://apify.com/alpine-data/swiss-company-register): company lists and bulk UID checks from the Swiss commercial register.
- [Career Page Job Scraper](https://apify.com/alpine-data/career-site-jobs): see which government contractors are hiring, straight from their career pages.
- [All tools from Alpine Data Labs](https://apify.com/alpine-data): no-code data tools for public data, business research and monitoring.

### Support

Found a bug, or need a field or another filter? Open an issue in the **Issues** tab of this Actor page. Alpine Data Labs answers there, usually within one working day.

Built and maintained by **Alpine Data Labs**.

### For developers / API & integrations

Everything in the form is also available through the API, so the Actor fits into your own workflows, websites and scripts. The input field names, their formats and the output fields are stable: inputs that worked before keep working.

**Minimal JSON input** (all other fields use the form defaults):

```json
{
  "naicsCodes": [
    "5415"
  ],
  "maxItems": 10
}
```

**Full example input:**

```json
{
  "naicsCodes": ["5415", "541330"],
  "postedWithinDays": "3",
  "setAside": ["sdvosb", "8a"],
  "noticeTypes": ["solicitation", "combined", "sources_sought"],
  "states": ["VA", "MD", "DC"],
  "keywords": ["cybersecurity", "cloud*"],
  "maxItems": 200,
  "onlyNew": true
}
```

**cURL** (runs the Actor and returns the dataset rows as JSON):

```bash
curl -X POST "https://api.apify.com/v2/acts/alpine-data~sam-gov-contract-opportunities/run-sync-get-dataset-items" \
  -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"naicsCodes": ["5415"], "maxItems": 10}'
```

**JavaScript** (`npm install apify-client`):

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('alpine-data/sam-gov-contract-opportunities').call({"naicsCodes": ["5415"], "maxItems": 10});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("alpine-data/sam-gov-contract-opportunities").call(run_input={"naicsCodes": ["5415"], "maxItems": 10})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

**Example output row:**

```json
{
  "noticeId": "4924a9998b8444c3ace265513047df72",
  "title": "SILVAH software coding",
  "solicitationNumber": "12760426Q0195",
  "noticeType": "Sources Sought",
  "postedDate": "2026-10-22",
  "responseDeadline": "2026-11-11",
  "responseDeadlineFull": "2026-11-11T15:00:00-05:00",
  "daysUntilDeadline": 19,
  "department": "AGRICULTURE, DEPARTMENT OF",
  "subTier": "FOREST SERVICE",
  "office": "USDA FOREST SERVICE",
  "naicsCode": "541511",
  "naicsSector": "Professional, Scientific, and Technical Services",
  "pscCode": "DA01",
  "setAside": "Small Business Set Aside - Total",
  "setAsideCode": "SBA",
  "placeOfPerformance": "Parsons, WV, USA",
  "awardAmount": null,
  "descriptionSnippet": "The United States Department of Agriculture (USDA) Forest Service (FS) is conducting market research to identify capable sources to repair SILVAH version 8 in C++ code …",
  "samUrl": "https://sam.gov/opp/4924a9998b8444c3ace265513047df72/view"
}
```

The input is forgiving: `"states": ["Virginia", "md"]`, `"setAside": "8(a), WOSB"`, `"naicsCodes": "541511 - Custom Computer Programming"`, `"noticeTypes": ["RFP", "RFI"]` or `"days": 7` work as well. Output field names (`noticeId`, `title`, `responseDeadline`, `samUrl`, …) do not change between versions.

**Input field names (API) and accepted alternatives:**

| Form field | API field | Also accepted |
|---|---|---|
| Which industry? (NAICS) | `naicsCodes` | `naics`, `naicsCode`, `naicsSectors`, `industry`, `sector`; codes or words like "janitorial" |
| Posted in the last … days | `postedWithinDays` (string, e.g. `"3"`, or `"all"`; default `"3"`; 1–3650; text, 0 or negative fail with $0) | `days`, `daysBack`, `postedLastDays`, `lastDays`; numbers work |
| Set-aside type | `setAside` | `setAsides`, `setAsideTypes`, `setAsideType`, `set_aside`; "8a", "SDVOSB", "WOSB" |
| Notice types | `noticeTypes` | `noticeType`, `types`, `type`; "RFP", "RFQ", "RFI" |
| Place of performance: state | `states` | `state`, `placeOfPerformance`, `popStates`; codes or names |
| Keywords / exclude keywords | `keywords`, `excludeKeywords` | `keyword`, `query`, `search`, `searchTerms`, `q` / `excludeKeyword`, `exclude` |
| Max opportunities | `maxItems` | `maxResults`, `limit`, `max`, `maxRecords`, `count`, `maxOpportunities` |
| Only new since my last run | `onlyNew` | – |
| Alert name | `stateKey` | `monitorName`, `alertName` |
| Agency | `agencies` | `agency`, `departments` |
| Minimum days left | `minDaysUntilDeadline` | `minDaysLeft` |
| PSC code | `pscCodes` | `psc`, `pscCode` |
| Posted from | `postedFrom` | `from`, `dateFrom` |
| Contact / full description | `includeContacts`, `includeFullDescription` | `contacts`, `fullDescription` |

**Integrations:**

- **Schedules:** save your input as a Task and add a Schedule (Apify Console → Schedules). Every scheduled run uses the same input.
- **Webhooks:** under *Integrations → Webhooks*, call your URL on "Run succeeded" and fetch the rows from `https://api.apify.com/v2/datasets/<datasetId>/items?format=json` (or `format=xlsx` / `csv`).
- **Make, Zapier, n8n:** use the Apify app/node, "Run Actor" or "Run task", then "Get dataset items". Google Sheets, Slack and email integrations are available in the *Integrations* tab without any code.
- **Apify MCP:** AI agents can call this Actor through the Apify MCP server (mcp.apify.com) as the tool `alpine-data/sam-gov-contract-opportunities`.

Do not put your API token into public code or web pages. Keep it on your server or in the integration's credentials.

# Actor input Schema

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

Pick one or more NAICS codes. A short code includes all longer codes, e.g. 54 = all professional services, 5415 = all IT services. You can also type any 2–6 digit code (e.g. 236220) or a word such as janitorial or cybersecurity. Leave empty for all industries.

## `postedWithinDays` (type: `string`):

How far back to look by posting date. 1 = yesterday and today. For a daily alert pick 2 or 3 together with 'Only new opportunities since my last run' (weekends and late uploads are then covered). You can also type a whole number from 1 to 3650, e.g. 45. Negative numbers, 0 or text stop the run with a message; nothing is charged.

## `setAside` (type: `array`):

Only opportunities reserved for a small-business program, e.g. 8(a), WOSB, SDVOSB or HUBZone. Leave empty for all opportunities, set-aside or not.

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

Which kinds of notices. The default = notices you can still respond to: Solicitations (RFP/RFQ), Combined Synopsis/Solicitations, Presolicitations and Sources Sought (RFI). Add 'Award Notice' to see who won.

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

Where the work is done. Names or 2-letter codes both work (Virginia, VA). Leave empty for all states and overseas.

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

Keeps opportunities whose title or description mentions ANY of these words. Example: cybersecurity, HVAC, janitorial. A \* at the end matches word endings (cloud\* = cloud, clouds). One word or phrase per line (commas also work).

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

The run stops after this many opportunities, so you never pay more than you expect. Example: 100 opportunities cost at most $0.19 + $0.002 run fee.

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

Remembers which notices you already got (in a key-value store named 'sam-gov-contract-opportunities-state' in your own Apify account) and skips them next time. Skipped notices are free.

## `stateKey` (type: `string`):

Optional. Each different search already keeps its own 'already seen' list. Give a name only if you want to keep that list when you change the filters. Example: va-it-alert.

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

Only opportunities from these departments or agencies. You can also type a name or short form, e.g. VA, GSA, Army, NASA, Forest Service, Corps of Engineers.

## `minDaysUntilDeadline` (type: `integer`):

Skips opportunities whose deadline is sooner than this. 0 = drop deadlines that have already passed; 7 = at least a week to respond. Notices without a deadline (e.g. awards) are kept. Leave empty to keep everything.

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

Drops opportunities whose title or description mentions any of these words. Example: brand name, Japan.

## `keywordsIn` (type: `string`):

Where to look for your keywords.

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

Optional. Only opportunities whose PSC starts with these codes. Example: D3 (IT services), R4 (professional support), Z2 (building repair).

## `matchOfficeState` (type: `boolean`):

Many notices leave the place of performance empty. When on, such notices match your state filter by the contracting office's state.

## `postedFrom` (type: `string`):

Optional. Use an exact start date instead of 'Posted in the last … days'. Example: 2026-10-01 (10/01/2026 also works).

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

Adds the official government point of contact published on the notice (the person to send questions to). Off by default.

## `includeFullDescription` (type: `boolean`):

Adds the complete notice description (up to 32,000 characters, the Excel cell limit). Off by default: a 400-character snippet is always included.

## Actor input object example

```json
{
  "naicsCodes": [
    "54"
  ],
  "postedWithinDays": "3",
  "setAside": [],
  "noticeTypes": [
    "solicitation",
    "combined",
    "presolicitation",
    "sources_sought"
  ],
  "states": [],
  "keywords": [],
  "maxItems": 100,
  "onlyNew": false,
  "minDaysUntilDeadline": 0,
  "keywordsIn": "title_or_description",
  "matchOfficeState": true,
  "includeContacts": false,
  "includeFullDescription": false
}
```

# Actor output Schema

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

One row per opportunity. Open the 'All details' view for every column.

## `details` (type: `string`):

All columns: office, PSC, place of performance, award, description snippet.

# 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": [
        "54"
    ],
    "postedWithinDays": "3",
    "setAside": [],
    "noticeTypes": [
        "solicitation",
        "combined",
        "presolicitation",
        "sources_sought"
    ],
    "states": [],
    "keywords": [],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("alpine-data/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": ["54"],
    "postedWithinDays": "3",
    "setAside": [],
    "noticeTypes": [
        "solicitation",
        "combined",
        "presolicitation",
        "sources_sought",
    ],
    "states": [],
    "keywords": [],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("alpine-data/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": [
    "54"
  ],
  "postedWithinDays": "3",
  "setAside": [],
  "noticeTypes": [
    "solicitation",
    "combined",
    "presolicitation",
    "sources_sought"
  ],
  "states": [],
  "keywords": [],
  "maxItems": 100
}' |
apify call alpine-data/sam-gov-contract-opportunities --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,alpine-data/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/8zyg8qtLczn8f4jEm/builds/pVpDwXDj2a9rgf8Ve/openapi.json
