# 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Government Tenders API - SAM.gov, EU TED & UK Contract Alerts",
        "description": "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.",
        "version": "0.1",
        "x-build-id": "vPCHCbFFNRTjwISOZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/apeye~government-tenders-api/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-apeye-government-tenders-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/apeye~government-tenders-api/runs": {
            "post": {
                "operationId": "runs-sync-apeye-government-tenders-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/apeye~government-tenders-api/run-sync": {
            "post": {
                "operationId": "run-sync-apeye-government-tenders-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "includeTed": {
                        "title": "EU: TED (Tenders Electronic Daily)",
                        "type": "boolean",
                        "description": "Include procurement notices from the EU's official TED portal. No API key needed.",
                        "default": true
                    },
                    "includeSam": {
                        "title": "US: SAM.gov federal opportunities",
                        "type": "boolean",
                        "description": "Include US federal contract opportunities from SAM.gov. Needs a free API key (see the samApiKey field below).",
                        "default": true
                    },
                    "includeUk": {
                        "title": "UK: Find a Tender",
                        "type": "boolean",
                        "description": "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).",
                        "default": true
                    },
                    "keywords": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "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.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "cpvCodes": {
                        "title": "CPV codes (TED)",
                        "type": "array",
                        "description": "Optional EU Common Procurement Vocabulary codes, e.g. <code>72000000</code> (IT services), <code>45000000</code> (construction). Applies to TED only.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "naicsCodes": {
                        "title": "NAICS codes (SAM.gov)",
                        "type": "array",
                        "description": "Optional NAICS industry codes, e.g. <code>541511</code> (custom programming). Applies to SAM.gov only.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "countries": {
                        "title": "Buyer countries (TED)",
                        "type": "array",
                        "description": "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>.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "daysBack": {
                        "title": "Days back",
                        "minimum": 1,
                        "maximum": 90,
                        "type": "integer",
                        "description": "How many days of publications to search.",
                        "default": 7
                    },
                    "maxItemsPerSource": {
                        "title": "Max tenders per source",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Cap on collected tenders per source.",
                        "default": 200
                    },
                    "samApiKey": {
                        "title": "SAM.gov API key",
                        "type": "string",
                        "description": "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": {
                        "title": "Custom TED expert query",
                        "type": "string",
                        "description": "Optional extra condition in TED expert-query syntax, ANDed to the generated query, e.g. <code>contract-nature IN (services)</code>."
                    },
                    "monitorMode": {
                        "title": "Monitor mode (only new tenders)",
                        "type": "boolean",
                        "description": "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.",
                        "default": false
                    },
                    "monitorId": {
                        "title": "Monitor ID",
                        "type": "string",
                        "description": "Name of the saved comparison state. Use a different ID per Schedule that monitors different filters.",
                        "default": "default"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
