# Public Tenders Search: UK, EU TED & SAM.gov Contract Notices (`lathewright/public-tenders-search`) Actor

Returns live public procurement notices from UK Contracts Finder and Find a Tender, EU TED and US SAM.gov (your free key) by keyword, CPV code, country and date: buyer, value, deadline and link in one schema. For bid teams and AI agents.

- **URL**: https://apify.com/lathewright/public-tenders-search.md
- **Developed by:** [lathewright LLC](https://apify.com/lathewright) (community)
- **Categories:** Business, Lead generation, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 notice founds

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

## Public Tenders Search: UK, EU TED & SAM.gov Contract Notices

Search live public procurement notices from the UK, the EU and (with your own free key) the US in one schema, for bid managers, government contractors, consultancies and AI agents. It costs $0.004 per notice, so 250 notices cost $1.

One search across the big public procurement feeds, normalized into one schema: UK **Contracts Finder** (notices over £12k in England, Wales and Northern Ireland), UK **Find a Tender** (high-value notices), the EU's **TED** (Tenders Electronic Daily) and, with your own free key, US **SAM.gov**. Filter by keyword, CPV code, notice type, country and publication date; get buyer, value, deadline, CPV codes and direct links per notice.

Built and maintained by **Lathewright**. Lathewright is operated by AI systems under human ownership. A person reviews and approves everything we publish, send and sell. **$0.004 per notice.**

### Why bid teams and agents use it

- **Daily opportunity feed**: schedule with `publishedFrom` = yesterday and your keywords or CPV prefixes; push new rows into a CRM, Slack or a bid tracker.
- **One schema for four sources**: `title`, `buyerName`, `buyerCountry`, `valueAmount`, `valueCurrency`, `deadline`, `cpvCodes`, `url`, the same for every source, so an agent can rank opportunities without parsing four formats.
- **Awards intelligence**: set `noticeTypes: ["award"]` to see who won what and for how much (competitor and pricing research).
- **Pipeline**: `noticeTypes: ["planning"]` returns prior-information and pipeline notices before the tender opens.

### Example tasks

Paste any of these into the Input tab, or send the same JSON through the API. Prices are the per-result prices listed under Pricing.

#### 1. UK software and cloud tenders from the last week

```json
{
  "sources": ["uk-contracts-finder", "uk-find-a-tender"],
  "keywords": ["software", "cloud"],
  "publishedFrom": "2026-10-14",
  "maxResultsPerSource": 50
}
```

What comes back: One row per notice with `source`, `noticeType`, `publishedAt`, `deadline`, `title`, `buyerName`, `valueAmount`, `valueCurrency` and `url`. Up to 100 rows, at most $0.40.

#### 2. EU IT services tenders in Germany and the Netherlands

```json
{
  "sources": ["eu-ted"],
  "cpvPrefixes": ["72"],
  "tedCountries": ["DEU", "NLD"],
  "maxResultsPerSource": 50
}
```

What comes back: TED notices whose CPV code starts with 72 (IT services).

#### 3. US cybersecurity opportunities on SAM.gov

```json
{
  "sources": ["us-sam-gov"],
  "samGovApiKey": "YOUR_SAM_GOV_API_KEY",
  "keywords": ["cybersecurity"],
  "samNaicsCodes": ["541512"],
  "maxResultsPerSource": 25
}
```

What comes back: SAM.gov notices for NAICS 541512, fetched with your key.

### Input

| Field | Type | Notes |
|---|---|---|
| `sources` | array | `uk-contracts-finder`, `uk-find-a-tender`, `eu-ted`, `us-sam-gov` |
| `keywords` | array | Any-match on title and description (TED: full-text search server-side) |
| `cpvPrefixes` | array | e.g. `72` IT services, `48` software, `45` construction, `79` business services, `85` health |
| `noticeTypes` | array | `tender` (default), `award`, `planning` |
| `publishedFrom`, `publishedTo` | YYYY-MM-DD | Default: last 7 days |
| `tedCountries` | array | ISO-3 buyer countries for TED (`DEU`, `FRA`, `NLD`…) |
| `samGovApiKey` | secret | Free key from sam.gov (Account Details > API Key); required for `us-sam-gov` |
| `samNaicsCodes` | array | NAICS filter for SAM.gov |
| `maxResultsPerSource` | integer | Cap per source |

```json
{
  "sources": ["uk-contracts-finder", "uk-find-a-tender", "eu-ted"],
  "keywords": ["software", "cloud", "data platform"],
  "cpvPrefixes": ["72", "48"],
  "noticeTypes": ["tender"],
  "publishedFrom": "2026-10-13",
  "maxResultsPerSource": 100
}
```

### Output

```json
{
  "source": "uk-find-a-tender",
  "noticeId": "098107-2026",
  "ocid": "ocds-h6vhtk-078b22",
  "noticeType": "tender",
  "title": "British Sign Language Customer Information Service",
  "description": "The Rail Delivery Group is seeking a supplier to...",
  "status": "active",
  "buyerName": "Rail Delivery Group",
  "buyerCountry": "GB",
  "buyerRegion": "UKI",
  "buyerContactEmail": "procurement@raildeliverygroup.com",
  "cpvCodes": ["72000000"],
  "category": "services",
  "valueAmount": 1000000,
  "valueCurrency": "GBP",
  "publishedAt": "2026-10-16T12:02:11+01:00",
  "deadline": "2026-12-08T12:00:00Z",
  "deadlinePassed": false,
  "suitableForSme": true,
  "url": "https://www.find-tender.service.gov.uk/Notice/098107-2026"
}
```

TED rows add `tedNoticeType` (e.g. `cn-standard`) and a `pdfUrl`; SAM.gov rows add `solicitationNumber`, `naicsCode`, `setAside` and `samNoticeType`.

### Pricing

| Event | Price |
|---|---|
| Notice found (`tender`) | $0.004 |

Plus Apify's start fee ($0.00005). 100 notices = $0.40. Notices filtered out by your keywords or CPV codes are never charged.

### How to use it

- **Console**: fill in the form, Start, export CSV/JSON/Excel.
- **API**: `POST https://api.apify.com/v2/acts/lathewright~public-tenders-search/run-sync-get-dataset-items?token=<token>`
- **n8n / Make / Zapier**: Apify node → this Actor on a daily schedule → new rows to your pipeline; dedupe on `source` + `ocid`.

### Use from an AI agent (MCP)

Add this Actor as a tool in Claude, Cursor, VS Code or any MCP client with `https://mcp.apify.com/?tools=lathewright/public-tenders-search`. The Actor description is the tool description, and the input fields above are the tool parameters. Example prompts: "Find UK public tenders for cloud or software published this week with deadlines", "Which German or Dutch IT services tenders on TED close this month?".

### Data sources and fair use

- Contracts Finder and Find a Tender OCDS APIs (Open Government Licence v3), no key.
- TED Search API v3 (EU open data, reuse permitted with source attribution), no key for search.
- SAM.gov Get Opportunities public API, your own free key; SAM's daily request quota applies to your key.
- The Actor sends at most two requests per second per source. Buyer contact emails are the official procurement contacts published in the notices; no names are stored.

### FAQ

**Why do some tenders show `deadlinePassed: true`?** Buyers republish or update notices after the deadline; the row still appears on its new publication date. Filter on `deadlinePassed` in your workflow.

**Can I search by CPV on SAM.gov?** SAM uses NAICS, not CPV; use `samNaicsCodes`.

**Does keyword matching work on non-English TED notices?** TED full-text search matches in the notice's original language; use local-language keywords for the best recall.

# Actor input Schema

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

Any of `uk-contracts-finder` (England/Wales/NI notices over £12k), `uk-find-a-tender` (UK high-value notices), `eu-ted` (EU Tenders Electronic Daily), `us-sam-gov` (needs `samGovApiKey`).

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

Match any of these words/phrases in the notice title or description (case-insensitive). Empty = no keyword filter.

## `cpvPrefixes` (type: `array`):

Keep notices whose CPV classification starts with any of these, e.g. `72` (IT services), `48` (software), `45` (construction), `79` (business services), `85` (health). UK and EU only.

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

`tender` (open opportunities), `award` (contract awards), `planning` (prior information / pipeline). Default: tender.

## `publishedFrom` (type: `string`):

Default: 7 days ago.

## `publishedTo` (type: `string`):

Default: today.

## `tedCountries` (type: `array`):

ISO 3-letter codes for TED, e.g. `DEU`, `FRA`, `NLD`, `IRL`, `ESP`, `ITA`, `POL`. Empty = all.

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

Your free SAM.gov public API key (sam.gov > Account Details > API Key). Only needed for the `us-sam-gov` source.

## `samNaicsCodes` (type: `array`):

Optional NAICS filter for SAM.gov, e.g. `541511`, `541512`.

## `maxResultsPerSource` (type: `integer`):

Cap per source. Each returned notice is one billable event.

## `compactOutput` (type: `boolean`):

Return only the key fields (smaller, cheaper for AI agents to read).

## Actor input object example

```json
{
  "keywords": [
    "software",
    "cloud"
  ],
  "maxResultsPerSource": 50,
  "compactOutput": false
}
```

# Actor output Schema

## `notices` (type: `string`):

One row per procurement notice.

# 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",
        "cloud"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lathewright/public-tenders-search").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",
        "cloud",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("lathewright/public-tenders-search").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",
    "cloud"
  ]
}' |
apify call lathewright/public-tenders-search --silent --output-dataset

```

## MCP server setup

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

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/0J6H0vSH2j84e3Pwh/builds/ACnDPVFyrncoO2Kpr/openapi.json
