# Grant/RFP Opportunity Radar — SAM.gov, Filtered & Ranked (`alaudinburki/grant-rfp-radar`) Actor

Federal contract opportunities and solicitations from SAM.gov's own official database, filtered by NAICS code or keyword and ranked by response deadline. Gov-contracting consultants pay $300+/mo for third-party tools to do this by hand. Requires your own free SAM.gov API key.

- **URL**: https://apify.com/alaudinburki/grant-rfp-radar.md
- **Developed by:** [alaudin burki](https://apify.com/alaudinburki) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 results

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

## Grant/RFP Opportunity Radar — SAM.gov, Filtered & Ranked

Every US federal contract opportunity is legally required to post on
SAM.gov — solicitations, presolicitations, sources-sought notices, the
full pipeline. Gov-contracting consultants currently pay $300+/mo for
third-party tools (GovWin and similar) just to get it filtered by NAICS
code and alerted by deadline.

This is SAM.gov's own official free API, filtered and ranked by response
deadline so you see what needs action this week versus what's still weeks out.

### ⚠️ Requires your own free SAM.gov API key

SAM.gov's public/unregistered quota is only **10 requests/day** — too thin
to share across users. Get a free key: sign in at [sam.gov](https://sam.gov),
open **Account Details**, **Request Public API Key**. Pass it as
`samGovApiKey` in the input. A registered key gets 1,000 requests/day.

### Input

```json
{
  "samGovApiKey": "your-free-key",
  "searches": [{ "naicsCode": "541512", "state": "VA" }],
  "daysBack": 30
}
```

Each search needs a NAICS code and/or keyword; state and set-aside type are
optional filters.

### Sample output

```json
{
  "title": "Cloud Migration Support Services",
  "solicitationNumber": "SOL-2026-001",
  "noticeType": "Solicitation",
  "postedDate": "2026-08-15",
  "responseDeadline": "2026-09-10T17:00:00-04:00",
  "urgency": "urgent",
  "urgencyNote": "Only 4 day(s) left to respond.",
  "naicsCode": "541512",
  "setAside": "Total Small Business Set-Aside",
  "department": "GENERAL SERVICES ADMINISTRATION",
  "uiLink": "https://sam.gov/opp/abc123/view"
}
```

### Typical uses

- **Gov-contracting business development** — replace a paid alert tool
  with a direct, official-source feed filtered to your NAICS codes.
- **Weekly opportunity scan** — schedule this to run daily and never miss
  a solicitation in your space.
- **Small-business set-aside tracking** — filter by `setAsideType` to find
  opportunities specifically reserved for small/disadvantaged businesses.

### Pricing

**$4.00 / 1,000 results** (`$0.004` per matched opportunity).

### ⚠️ Read before you act

- **The API key is required for every request** — there is no fallback
  path. SAM.gov's gateway returns a bare 404 (not 401) for a missing or
  invalid key, which this actor translates into an actionable error
  message rather than a generic HTTP failure.
- **`daysBack` is capped at 364 days** — this mirrors SAM.gov's own
  documented window limit for the search API.
- **Urgency is calculated from the response deadline**, not the posted
  date — a notice posted today with a deadline next week is `urgent`; one
  posted a month ago with a deadline next month is not.

### FAQ

- **Why do I need my own key?** SAM.gov's public quota (10 req/day,
  unregistered) is too thin to share across every user of this actor.
  Your own free key gets 1,000/day.
- **What if my key is wrong?** You'll see "No response from SAM.gov... this
  usually means the API key is missing or invalid" in the problems report —
  SAM.gov's own gateway doesn't distinguish a bad key from a dead endpoint,
  so this actor spells out the likely cause.
- **Can I search multiple NAICS codes at once?** Yes — add multiple entries
  to the `searches` array.

### Related actors

- **Funded-Lab Sales Radar** — the same "official public database as a
  lead list" pattern, for NIH research grants instead of federal contracts.
- **SEC EDGAR Filings** — another official-source, deadline/event-driven
  signal actor.

# Actor input Schema

## `samGovApiKey` (type: `string`):

Your own free SAM.gov API key. Get one at sam.gov: sign in, open Account Details, Request Public API Key. SAM.gov requires a key for every request; the unregistered quota is only 10/day.

## `searches` (type: `array`):

One or more searches, each with a NAICS code and/or keyword, plus optional state and set-aside type. Example: \[{"naicsCode": "541512", "state": "VA"}]

## `daysBack` (type: `integer`):

How many days of posted opportunities to search, up to 364 (SAM.gov's own window limit).

## `maxResultsPerSearch` (type: `integer`):

How many SAM.gov results to pull per search.

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

Hard cap on items returned across all searches. You are never charged beyond this.

## Actor input object example

```json
{
  "searches": [
    {
      "naicsCode": "541512"
    }
  ],
  "daysBack": 30,
  "maxResultsPerSearch": 100,
  "maxItems": 500
}
```

# Actor output Schema

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

Matched federal contract opportunities, ranked by response deadline.

## `qualityReport` (type: `string`):

Searches run, urgency breakdown, and problems.

# 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 = {
    "searches": [
        {
            "naicsCode": "541512"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("alaudinburki/grant-rfp-radar").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 = { "searches": [{ "naicsCode": "541512" }] }

# Run the Actor and wait for it to finish
run = client.actor("alaudinburki/grant-rfp-radar").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 '{
  "searches": [
    {
      "naicsCode": "541512"
    }
  ]
}' |
apify call alaudinburki/grant-rfp-radar --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,alaudinburki/grant-rfp-radar"
        }
    }
}
```

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/5vXtugvDfjfuGQTYp/builds/ZMcWrqAqO78WDi02X/openapi.json
