# Government Tenders API - SAM.gov, EU TED & UK Contract Alerts (`apeye/government-tenders-api`) Actor

Search and monitor government tenders, RFPs and contract opportunities from SAM.gov (US), TED (EU) and UK Find a Tender in one unified schema. Filter by keyword, CPV or NAICS code and country. Monitor mode alerts only on new tenders. Official government APIs.

- **URL**: https://apify.com/apeye/government-tenders-api.md
- **Developed by:** [Pasquale Nirta](https://apify.com/apeye) (community)
- **Categories:** Business, Automation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 tenders

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Government Tenders API: SAM.gov, EU TED and UK Find a Tender procurement monitor

Search and monitor government tenders from the three largest Western public procurement systems through one Actor: **TED** (Tenders Electronic Daily, the EU's official journal for public contracts), **SAM.gov** (US federal contract opportunities) and **Find a Tender** (the UK's official service for public sector contracts). Results come back in one unified JSON schema, filterable by keyword, CPV or NAICS code, buyer country and publication window.

All three sources are official government open-data APIs. Nothing is scraped from HTML, so results are complete, stable and legally clean.

### Who this is for

- **Bid and proposal teams** tracking every relevant tender in their sector without checking three portals daily
- **Consultancies and agencies** watching for opportunities matching their services
- **Sales teams** using public procurement as buying signals (an agency tendering for "cloud migration" is about to spend money on cloud migration)
- **Analysts and journalists** studying public spending
- **AI agents**: ask an agent "any new EU tenders for cybersecurity services this week over 1M EUR?" and it can call this Actor via Apify's MCP server

### Input

```json
{
    "includeTed": true,
    "includeSam": true,
    "includeUk": true,
    "keywords": ["cloud", "cybersecurity"],
    "cpvCodes": ["72000000"],
    "naicsCodes": ["541511"],
    "countries": ["DEU", "FRA"],
    "daysBack": 7,
    "maxItemsPerSource": 200,
    "monitorMode": false
}
```

All filters are optional. CPV codes filter the EU and UK sides (e.g. `72000000` for IT services, `45000000` for construction), NAICS codes filter the US side (e.g. `541511` for custom programming). TED and Find a Tender need no key. SAM.gov needs a free API key (sam.gov, sign in, Account Details, API Key) in the `samApiKey` field, unless the Actor is configured with a built-in one.

Power users can pass `customTedQuery` in TED expert-query syntax; it's ANDed to the generated query.

### Output

One row per tender, same shape for every source:

```json
{
    "id": "ted:497810-2026",
    "source": "ted",
    "noticeNumber": "497810-2026",
    "title": "IT infrastructure modernisation services",
    "buyer": "Finansu ministrija",
    "country": "LVA",
    "publishedAt": "2026-07-20T00:00:00.000Z",
    "deadline": "2026-08-25",
    "codes": ["72262000"],
    "codeSystem": "cpv",
    "noticeType": "cn-standard",
    "category": "services",
    "estimatedValue": 2400000,
    "currency": "EUR",
    "url": "https://ted.europa.eu/en/notice/-/detail/497810-2026"
}
```

Export as JSON, CSV or Excel, or read the dataset through the Apify API.

### Monitor mode: only new tenders

Turn on `monitorMode` and the Actor remembers what it has seen and outputs only tenders that are new since the previous run (rows get `changeType: "new"`). Put it on a daily Schedule and wire the dataset to Slack or email through Apify integrations, and you have a tender alert service for exactly your sector and countries. You pay only for new tenders, and a temporary source outage never causes duplicates or gaps.

### Use from AI agents

This Actor works out of the box with AI agents through [Apify's MCP server](https://mcp.apify.com). Agents can search tenders on demand or check a monitor for new ones, then reason over titles, buyers, deadlines and values directly.

### FAQ

**Is this legal?** Yes. TED, SAM.gov and Find a Tender are official government open-data services published precisely so the public can access procurement information.

**Why do I need a key for SAM.gov but not the others?** That's how the services work: TED and Find a Tender expose open APIs, SAM.gov requires a free registered key with per-key rate limits.

**Which notice types are included?** All types the sources return for the period, including contract notices, awards and modifications. Use keywords, codes or `customTedQuery` to narrow down.

### Support

If something breaks or you want another procurement source added (UN Global Marketplace, national portals), open an issue on the Issues tab. I check most days and usually reply within a day or two.

# Actor input Schema

## `includeTed` (type: `boolean`):

Include procurement notices from the EU's official TED portal. No API key needed.

## `includeSam` (type: `boolean`):

Include US federal contract opportunities from SAM.gov. Needs a free API key (see the samApiKey field below).

## `includeUk` (type: `boolean`):

Include UK public sector tenders from the official Find a Tender service. No API key needed. Keyword and CPV filters apply (CPV matched at division level).

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

Optional keywords matched against tender titles, e.g. <code>cloud</code>, <code>cybersecurity</code>, <code>consulting</code>. A tender is kept if ANY keyword matches. Leave empty for all tenders in the period.

## `cpvCodes` (type: `array`):

Optional EU Common Procurement Vocabulary codes, e.g. <code>72000000</code> (IT services), <code>45000000</code> (construction). Applies to TED only.

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

Optional NAICS industry codes, e.g. <code>541511</code> (custom programming). Applies to SAM.gov only.

## `countries` (type: `array`):

Optional 3-letter country codes to filter TED notices by buyer country, e.g. <code>DEU</code>, <code>FRA</code>, <code>ITA</code>, <code>ESP</code>.

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

How many days of publications to search.

## `maxItemsPerSource` (type: `integer`):

Cap on collected tenders per source.

## `samApiKey` (type: `string`):

Your free SAM.gov API key (sam.gov → sign in → Account Details → API Key). Only needed for the SAM.gov source. If the Actor is configured with a built-in key, this can stay empty.

## `customTedQuery` (type: `string`):

Optional extra condition in TED expert-query syntax, ANDed to the generated query, e.g. <code>contract-nature IN (services)</code>.

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

Remember previous runs and output only tenders not seen before (rows get <code>changeType: "new"</code>). Ideal on a daily Schedule wired to Slack or email.

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

Name of the saved comparison state. Use a different ID per Schedule that monitors different filters.

## Actor input object example

```json
{
  "includeTed": true,
  "includeSam": true,
  "includeUk": true,
  "cpvCodes": [
    "72000000"
  ],
  "daysBack": 7,
  "maxItemsPerSource": 200,
  "monitorMode": false,
  "monitorId": "default"
}
```

# Actor output Schema

## `tenders` (type: `string`):

All collected tenders as JSON.

## `csvExport` (type: `string`):

The same tenders as a CSV download.

# 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 = {
    "cpvCodes": [
        "72000000"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("apeye/government-tenders-api").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 = { "cpvCodes": ["72000000"] }

# Run the Actor and wait for it to finish
run = client.actor("apeye/government-tenders-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "cpvCodes": [
    "72000000"
  ]
}' |
apify call apeye/government-tenders-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=apeye/government-tenders-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/S7DQNqNpOJ8nwCJTY/builds/vPCHCbFFNRTjwISOZ/openapi.json
