# Government Tenders API - EU TED, UK & US SAM.gov (`practicalmodules/eu-uk-tenders`) Actor

Search public tenders, RFPs, solicitations and contract awards from EU TED, UK Find a Tender, UK Contracts Finder and US SAM.gov in one normalized, deduplicated feed. Filter by keyword, country, CPV and NAICS. Monitor mode returns only new notices.

- **URL**: https://apify.com/practicalmodules/eu-uk-tenders.md
- **Developed by:** [Dennis Huckabee](https://apify.com/practicalmodules) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 tender notices

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

## Government Tenders API - EU TED, UK & US SAM.gov

Find new **public sector tenders, RFPs, solicitations and contract awards** across the **European Union, the United Kingdom and the United States** in one clean feed. This Actor searches the official portals, normalizes every notice into the same format, removes duplicates, and returns only what matches your keywords, countries, categories and budget.

| Source | Coverage |
|---|---|
| **TED (Tenders Electronic Daily)** | All EU member states, EEA and candidate countries: above-threshold public procurement |
| **UK Find a Tender** | UK above-threshold contracts |
| **UK Contracts Finder** | UK lower-value contracts (England and non-devolved bodies) |
| **SAM.gov** | US federal contract opportunities: solicitations, presolicitations, sources sought and awards |

### Why use it

- **One schema for four portals.** Titles, buyers, deadlines, values, categories and links arrive in the same fields whichever portal published the notice. US notices add NAICS, PSC, set-aside and solicitation number.
- **Deduplicated.** The same UK tender published on both Find a Tender and Contracts Finder appears once, with the other link kept in `alsoPublishedOn`. Amended notices replace their earlier versions.
- **Monitor mode.** Schedule it daily with *Only new notices* on, and you receive (and pay for) only notices you haven't seen before.
- **Readable EU titles.** TED titles come in your chosen language, with the original-language title kept alongside.
- **Official open-data APIs.** No scraping of HTML pages, no proxies, fast and reliable runs.

### Use cases

- **Bid and sales teams:** a daily feed of new opportunities in your sector, pushed to Slack, email, a CRM or Google Sheets through Apify integrations.
- **Market research:** who buys what, how often, and at what contract values.
- **Competitor tracking:** use *Contract awards* mode to see which companies win contracts and for how much.
- **AI agents:** give your agent live procurement data through Apify's MCP server.

### Ready-made searches

Start from a preset instead of building the input yourself. Each one runs this Actor with a filter set already filled in:

| Preset | What it returns |
|---|---|
| [US Federal Contract Opportunities](https://apify.com/practicalmodules/eu-uk-tenders/us-federal-contract-opportunities) | SAM.gov solicitations, presolicitations and sources sought from the last 3 days |
| [IT & Software Tenders](https://apify.com/practicalmodules/eu-uk-tenders/it-software-tenders-eu-uk) | CPV 72/48 and NAICS 5415/5112/518210 across all four portals |
| [Healthcare & Medical Tenders](https://apify.com/practicalmodules/eu-uk-tenders/healthcare-medical-tenders) | Medical equipment, pharmaceuticals and health services |
| [Consulting & Professional Services Tenders](https://apify.com/practicalmodules/eu-uk-tenders/consulting-professional-services-tenders) | Consulting, research, training and other professional services |
| [Construction Tenders over 1M](https://apify.com/practicalmodules/eu-uk-tenders/construction-tenders-over-1m-daily) | Daily alert, monitor mode, minimum value 1,000,000 |
| [UK Public Sector Tenders](https://apify.com/practicalmodules/eu-uk-tenders/uk-public-sector-tenders) | Find a Tender and Contracts Finder, deduplicated |
| [EU Contract Awards](https://apify.com/practicalmodules/eu-uk-tenders/eu-contract-awards-winners) | Who won which contract, and for how much |

### Input examples

**IT and software opportunities in Germany, France and the UK, last 3 days:**

```json
{
  "keywords": ["software", "cloud", "cybersecurity"],
  "countries": ["DE", "FR", "GB"],
  "publishedWithinDays": 3
}
```

**Daily alert: construction tenders over €1M anywhere in the EU and UK (schedule daily):**

```json
{
  "cpvCodes": ["45"],
  "minValue": 1000000,
  "publishedWithinDays": 2,
  "onlyNew": true
}
```

**US federal IT opportunities, small-business set-asides included (NAICS 5415 = computer systems design):**

```json
{
  "countries": ["US"],
  "naicsCodes": ["5415", "518210"],
  "publishedWithinDays": 3
}
```

**IT tenders on both sides of the Atlantic (CPV for EU/UK, NAICS for US):**

```json
{
  "cpvCodes": ["72", "48"],
  "naicsCodes": ["5415", "5112"],
  "onlyNew": true,
  "publishedWithinDays": 2
}
```

**Who won IT contracts in Poland this month?**

```json
{
  "noticeTypes": "awards",
  "countries": ["PL"],
  "cpvCodes": ["72"],
  "publishedWithinDays": 30
}
```

**Category codes are regional.** The EU and UK use CPV codes; the US uses NAICS. If you give only CPV codes, US notices are skipped (and vice versa), so give both to cover all regions.

Common NAICS prefixes: `236` building construction · `237` heavy and civil construction · `5415` computer systems design · `5416` management consulting · `5413` engineering · `5617` building services and janitorial · `4234` medical equipment wholesale.

Common CPV prefixes: `45` construction · `48` software packages · `72` IT services · `79` business services · `71` engineering and architecture · `85` health and social · `90` cleaning and environmental · `33` medical equipment · `34` transport equipment · `50` repair and maintenance.

### Output

Each notice looks like this:

```json
{
  "id": "ted:665993-2026",
  "source": "TED (EU)",
  "noticeType": "opportunity",
  "title": "Germany – IT services: consulting, software development, Internet and support – EUDI-Wallet Support Organisation Technische Infrastruktur der EUDI Wallet Support Organisation (EWSO) - \"Tooling\"",
  "originalTitle": "EUDI-Wallet Support Organisation Technische Infrastruktur der EUDI Wallet Support Organisation (EWSO) - \"Tooling\"",
  "description": "Gegenstand dieser Ausschreibung ist die Vergabe von Leistungen für die Technische Infrastruktur…",
  "buyerName": "Common Codes GmbH",
  "buyerCountry": "DE",
  "buyerCity": "Berlin",
  "buyerRegion": "DE300",
  "buyerContactEmail": "sprind.ausschreibungen@fgvw.de",
  "mainCpv": "72000000",
  "mainCpvCategory": "IT services: consulting, software development, Internet and support",
  "cpvCodes": ["72000000", "72253000", "72254000"],
  "contractType": "services",
  "procedureType": "Open",
  "estimatedValue": null,
  "currency": null,
  "publishedAt": "2026-09-28",
  "deadline": "2026-10-02T12:00:00+02:00",
  "daysUntilDeadline": 4,
  "winners": [],
  "url": "https://ted.europa.eu/en/notice/-/detail/665993-2026",
  "pdfUrl": "https://ted.europa.eu/en/notice/665993-2026/pdf",
  "alsoPublishedOn": [],
  "scrapedAt": "2026-09-28T02:59:36.567Z"
}
```

| Field | Notes |
|---|---|
| `noticeType` | `opportunity` (open call for bids), `award` (contract awarded) or `planning` (prior information) |
| `deadline` / `daysUntilDeadline` | Earliest submission deadline across lots. Negative means it has passed. |
| `estimatedValue` / `currency` | Estimated value for opportunities, awarded value for awards. `null` when the buyer didn't publish one. |
| `winners` | Awarded suppliers (awards only) |
| `buyerRegion` | NUTS region code for EU/UK (e.g. `DE300`, `UKE42`); state code for the US |
| `naicsCode`, `pscCode`, `setAside`, `solicitationNumber`, `department`, `placeOfPerformance` | US only (`null` for EU/UK notices) |
| `alsoPublishedOn` | Other portals where the same notice appeared |

Download results as JSON, CSV, Excel or HTML, or fetch them through the Apify API.

### Pricing

You pay **per notice delivered**, with no subscription. In monitor mode you pay only for notices that are new to you. Set *Maximum results* or a maximum cost per run to control spending.

### Data source & licence

- TED notices: © European Union, reused under [Commission Decision 2011/833/EU](https://ted.europa.eu/en/help/data-reuse), which allows commercial and non-commercial reuse with acknowledgement of the source.
- UK notices: contain public sector information licensed under the [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/).
- US notices: from SAM.gov's public Contract Opportunities data extract. US federal government works are in the public domain.

This Actor is not affiliated with the European Union, the Publications Office, the UK Cabinet Office, GSA or SAM.gov. Always check the official notice before bidding.

### FAQ

**How fresh is the data?** EU and UK runs query the official APIs live: TED publishes every working day, and the UK portals publish continuously. US data comes from SAM.gov's daily public extract, refreshed each morning (US Eastern time).

**Why do some notices have no value?** Many buyers don't publish an estimated value. Use *Minimum estimated value* only if you're happy to skip those.

**Which US notices are included?** Federal contract opportunities posted on SAM.gov. *Opportunities* returns solicitations and combined synopsis/solicitations; *Everything* adds presolicitations, sources sought and special notices; *Awards* returns award notices with the awardee and amount. State and local US tenders aren't covered.

**Does one busy source crowd out the others?** No. When *Maximum results* is reached, each source gets a fair share.

**Something broke or a field is missing?** Open an issue on the Issues tab. Issues are answered quickly.

# Actor input Schema

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

Return notices that mention any of these words in the title or description, e.g. "software", "cleaning", "solar". Leave empty for all notices.

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

2-letter country codes of the buyer, e.g. DE, FR, IE, GB, US. Leave empty for all EU/EEA countries, the UK and the US.

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

Common Procurement Vocabulary codes or prefixes for EU and UK notices. Sub-categories are included, e.g. "72" = all IT services, "45" = construction work, "79341000" = advertising services. If you set CPV but no NAICS codes, US notices are skipped.

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

NAICS industry codes or prefixes for US (SAM.gov) notices, e.g. "5415" = computer systems design, "236" = building construction, "561720" = janitorial services. If you set NAICS but no CPV codes, EU/UK notices are skipped.

## `noticeTypes` (type: `string`):

Opportunities are open calls for bids. Awards show who won past contracts and for how much.

## `publishedWithinDays` (type: `integer`):

How far back to search. For daily monitoring, use 2 together with "Only new notices".

## `onlyOpenDeadlines` (type: `boolean`):

Skip opportunities whose submission deadline has already passed.

## `minValue` (type: `integer`):

Skip notices below this value, in the notice's own currency (EUR, GBP, USD, PLN…). Notices without a published value are skipped when this is set. US opportunities rarely publish a value, but US awards do.

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

Remember what earlier runs with the same filters returned and deliver only notices you haven't seen. Ideal for a daily schedule - you only pay for new notices.

## `sources` (type: `array`):

Which portals to search.

## `language` (type: `string`):

TED publishes titles in all EU languages. 2-letter code, e.g. en, de, fr.

## `maxResults` (type: `integer`):

Stop after this many notices. You pay per notice delivered.

## Actor input object example

```json
{
  "keywords": [
    "software"
  ],
  "noticeTypes": "opportunities",
  "publishedWithinDays": 3,
  "onlyOpenDeadlines": true,
  "onlyNew": false,
  "sources": [
    "ted",
    "uk-fts",
    "uk-cf",
    "us-sam"
  ],
  "language": "en",
  "maxResults": 100
}
```

# Actor output Schema

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

All delivered notices in a table: title, buyer, country, deadline, value, category and link.

## `awards` (type: `string`):

The same notices with awarded suppliers and values. Most useful with Notice type = awards.

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

// Run the Actor and wait for it to finish
const run = await client.actor("practicalmodules/eu-uk-tenders").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 = { "keywords": ["software"] }

# Run the Actor and wait for it to finish
run = client.actor("practicalmodules/eu-uk-tenders").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 '{
  "keywords": [
    "software"
  ]
}' |
apify call practicalmodules/eu-uk-tenders --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,practicalmodules/eu-uk-tenders"
        }
    }
}
```

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/UGhsbJPa28xesZ3MG/builds/elkiZYkZrKVMqyUZw/openapi.json
