# Public Tenders - UK, US, Australia, Brazil, Ukraine Contracts (`actor-forge/public-tenders`) Actor

Government tenders and contract awards from official open-data APIs: UK Find a Tender and Contracts Finder, Australia AusTender, Brazil PNCP, Ukraine Prozorro, US USAspending (and SAM.gov with your key). Buyer, values, winners, deadlines, CPV/NAICS. $1.20 per 1,000 notices.

- **URL**: https://apify.com/actor-forge/public-tenders.md
- **Developed by:** [ActorForge](https://apify.com/actor-forge) (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

from $1.20 / 1,000 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

## Public Tenders - UK, US, Australia, Brazil, Ukraine Contracts

Government tenders and contract awards from official open-data APIs: UK Find a Tender and Contracts Finder, Australia AusTender, Brazil PNCP, Ukraine Prozorro, US USAspending (and SAM.gov with your key). Buyer, values, winners, deadlines, CPV/NAICS. $1.20 per 1,000 notices.

**Government tenders and contract awards from five countries in one clean table, straight from the official open-data APIs.** Pick sources and a date window and get every new **public procurement notice**: **UK Find a Tender** (above-threshold tenders, awards and contracts) and **UK Contracts Finder** (lower-value UK opportunities and awards), **Australia AusTender** (every Australian Government contract notice), **Brazil PNCP** (licitações, pregões and dispensas from all Brazilian public bodies), **Ukraine Prozorro** (tenders and awards) and **US USAspending** (federal contract awards), plus **SAM.gov** federal opportunities if you add your own free API key. Each row: title, description, **buyer** and location, **estimated and awarded value** with currency, **winning suppliers**, bid **deadline**, status, procedure, CPV / UNSPSC / NAICS / PSC codes and a link to the official notice. Filter by **keywords**, notice type (open tenders, awards, contracts, planning), minimum value and buyer name. Switch on **monitor mode** for daily schedules and each run returns only notices you haven't seen yet: a cheap **tender alert and bid-sourcing feed** for sales teams, bid writers, consultancies and SMEs, plus market intelligence on **who wins public contracts** and data for **AI agents**. Works with Make, n8n, Zapier and Slack. Sibling of our EU Tenders (TED) actor with the same row style. **$1.20 per 1,000 notices**, no compute bill on top; runs that find nothing return a free status row.

### What data does it return?

Every run outputs clean, schema-validated rows like these:

| publicationDate | source | noticeType | title | buyerName | estimatedValue | awardedValue |
| --- | --- | --- | --- | --- | --- | --- |
| 2026-10-23T12:06:13+01:00 | uk-find-a-tender | planning | Cloud-based income management software solution | London Borough of Lambeth | 1,234,000 GBP |  |
| 2026-10-23T07:51:22Z | australia-austender | contract | Short Term Accommodation | Department of Foreign Affairs and Trade |  | 15,774.55 AUD |
| 2026-10-21 | us-usaspending | award | ANNUAL ENTERPRISE QR CODE GENERATOR SOLUTION RENEWAL | District of Columbia Courts |  | 17,970 USD |
| 2026-10-18T15:52:31 | brazil-pncp | tender | Contratação de empresa especializada em engenharia… | EMPRESA BRASILEIRA DE PESQUISA AGROPECUARIA | 259,010.54 BRL |  |

### How much does it cost?

Transparent pay-per-event pricing — you only pay for what you get, and the
actor **always respects your run budget**: set a maximum total charge and it
stops cleanly at the cap instead of overrunning.

| Event | Price | Charged | Worked example |
| --- | --- | --- | --- |
| `notice` | $0.0012 | per tender notice, award or contract row | 1,000 notices = $1.20 |
| `apify-actor-start` | $0.00005 | per run per GB of memory (platform start fee) | One run at 512 MB = $0.00005 |

### Input options

| Field | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `sources` | array | no | `["uk-find-a-tender","uk-contracts-finder","australia-austender","brazil-pncp","ukraine-prozorro","us-usaspending","us-sam"]` | UK Find a Tender (above-threshold tenders and awards), UK Contracts Finder (lower-value UK notices and awards), AusTender (Australian Government contract notices), Brazil PNCP (all public purchases under Lei 14.133), Ukraine Prozorro (tenders and awards), USAspending (US federal contract awards) and SAM.gov (US federal opportunities; needs your free API key, skipped without one). |
| `keywords` | array | no | — | Only notices whose title or description contains one of these words or phrases (whole words, case- and accent-insensitive), e.g. "software", "cleaning", "cybersecurity". Use the notice's language for Brazil ("limpeza") and Ukraine ("програмне"). Leave empty for all notices. |
| `publishedFrom` | string | no | `"7 days"` | First publication date: YYYY-MM-DD or relative ('7 days', '2 weeks', '1 month', 'yesterday', 'today'). The window is at most 366 days. |
| `publishedTo` | string | no | — | Last publication date (inclusive): YYYY-MM-DD or relative. Empty = today. |
| `noticeTypes` | array | no | — | Tender = open opportunities you can bid on; Award = who won and for how much; Contract = signed contracts (AusTender, UK); Planning = prior information and market engagement. Empty = all. |
| `minValue` | integer | no | — | Only notices with an estimated or awarded value of at least this amount, in the notice's own currency (GBP, AUD, BRL, UAH, USD). Notices without a value are excluded when this is set. |
| `buyerName` | string | no | — | Only notices from buyers whose name contains this text, e.g. 'NHS', 'Department of Defence', 'Prefeitura'. |
| `brazilModalities` | array | no | `[6,4,8]` | PNCP modalidade codes to read (the API needs one per request): 6 = Pregão eletrônico, 4 = Concorrência eletrônica, 8 = Dispensa, 9 = Inexigibilidade, 1 = Leilão eletrônico, 3 = Concurso, 12 = Credenciamento (1-13). |
| `samApiKey` | string | no | — | Your free public API key from SAM.gov (Account Details > API Key). Needed only for the us-sam source; without it SAM.gov is skipped with a note and the run continues. Personal keys allow a limited number of requests per day. |
| `onlyNewSinceLastRun` | boolean | no | `false` | For scheduled runs: skip notices already delivered by an earlier run with the same sources and filters, so each run returns (and charges for) only new ones. Hashed IDs are kept in the key-value store 'public-tenders-monitor' in your account. |
| `maxResults` | integer | no | `200` | Stop after this many notices in total, split evenly between the selected sources, newest first. You are charged only for notices delivered. |

### Limits & honest notes

- Sources and licences (each row's dataLicense names it; please keep the attribution when you republish): UK Find a Tender and Contracts Finder, Cabinet Office, Open Government Licence v3.0 ("Contains public sector information licensed under the Open Government Licence v3.0"). AusTender, Department of Finance, CC BY 3.0 AU. Brazil PNCP public consultation API. Ukraine Prozorro public API. USAspending.gov, U.S. Treasury (public domain). SAM.gov Contract Opportunities (GSA), with your own API key. Not affiliated with any of these bodies.
- SAM.gov needs a free personal API key (samApiKey). Without one, the SAM source is skipped with a note in the run summary and the run continues with the others; it never fails. Personal keys have a small daily request quota, so the actor asks for 1,000 opportunities per request.
- Each source is paced under its own limits (about 1 request per second for the UK, AusTender, USAspending and SAM, 2/s for PNCP, 4/s for Prozorro), with Retry-After honoured. Prozorro lists tenders only by modification time, so its details are fetched one by one (up to 1,000 per run).
- What each source covers: AusTender's open-data API publishes contract notices (awarded contracts), not open approaches to market. USAspending gives federal contract awards (not open solicitations; use SAM.gov for those). PNCP needs a modality per request (default: pregão eletrônico, concorrência eletrônica, dispensa). UK sources include tenders, awards and contracts.
- Keywords are matched in the title and description in the notice's language (USAspending also searches server-side). Values are in each notice's own currency, with no conversion.
- maxResults is split evenly between the selected sources, newest first; a source with fewer matches leaves its share unused.
- Contact persons, e-mail addresses and phone numbers in notices are never output; buyers and winning suppliers are organisations as published.
- Respects your run budget: set a maximum total charge and the run stops cleanly at the cap, with nothing charged twice. A run with no matches returns one free status row explaining why.

### Related ActorForge actors

- [EU Tenders (TED)](https://apify.com/actor-forge/eu-tenders) — the same feed for the 27 EU countries, Norway and more
- [Company Registry Lookup](https://apify.com/actor-forge/company-registry-lookup) — check the buyers and winners in official registers

### Changelog

- **2026-10-23** — Initial release: UK Find a Tender, UK Contracts Finder, AusTender, Brazil PNCP, Ukraine Prozorro, USAspending and SAM.gov (BYO key), keyword/type/value/buyer filters, monitor mode, free status rows.

***

*Built and maintained by **ActorForge**. Reliability first: every actor in the
portfolio is monitored by an automated nightly self-test, and breakages are
typically fixed the same day.*

# Actor input Schema

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

UK Find a Tender (above-threshold tenders and awards), UK Contracts Finder (lower-value UK notices and awards), AusTender (Australian Government contract notices), Brazil PNCP (all public purchases under Lei 14.133), Ukraine Prozorro (tenders and awards), USAspending (US federal contract awards) and SAM.gov (US federal opportunities; needs your free API key, skipped without one).

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

Only notices whose title or description contains one of these words or phrases (whole words, case- and accent-insensitive), e.g. "software", "cleaning", "cybersecurity". Use the notice's language for Brazil ("limpeza") and Ukraine ("програмне"). Leave empty for all notices.

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

First publication date: YYYY-MM-DD or relative ('7 days', '2 weeks', '1 month', 'yesterday', 'today'). The window is at most 366 days.

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

Last publication date (inclusive): YYYY-MM-DD or relative. Empty = today.

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

Tender = open opportunities you can bid on; Award = who won and for how much; Contract = signed contracts (AusTender, UK); Planning = prior information and market engagement. Empty = all.

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

Only notices with an estimated or awarded value of at least this amount, in the notice's own currency (GBP, AUD, BRL, UAH, USD). Notices without a value are excluded when this is set.

## `buyerName` (type: `string`):

Only notices from buyers whose name contains this text, e.g. 'NHS', 'Department of Defence', 'Prefeitura'.

## `brazilModalities` (type: `array`):

PNCP modalidade codes to read (the API needs one per request): 6 = Pregão eletrônico, 4 = Concorrência eletrônica, 8 = Dispensa, 9 = Inexigibilidade, 1 = Leilão eletrônico, 3 = Concurso, 12 = Credenciamento (1-13).

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

Your free public API key from SAM.gov (Account Details > API Key). Needed only for the us-sam source; without it SAM.gov is skipped with a note and the run continues. Personal keys allow a limited number of requests per day.

## `onlyNewSinceLastRun` (type: `boolean`):

For scheduled runs: skip notices already delivered by an earlier run with the same sources and filters, so each run returns (and charges for) only new ones. Hashed IDs are kept in the key-value store 'public-tenders-monitor' in your account.

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

Stop after this many notices in total, split evenly between the selected sources, newest first. You are charged only for notices delivered.

## Actor input object example

```json
{
  "sources": [
    "uk-find-a-tender",
    "australia-austender"
  ],
  "publishedFrom": "3 days",
  "brazilModalities": [
    6,
    4,
    8
  ],
  "onlyNewSinceLastRun": false,
  "maxResults": 10
}
```

# Actor output Schema

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

One row per tender notice, award or contract, normalised across the UK, Australia, Brazil, Ukraine and the US.

## `summary` (type: `string`):

Notices delivered per source, per-source notes (e.g. SAM.gov skipped without a key), the date window and billing.

# 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 = {
    "sources": [
        "uk-find-a-tender",
        "australia-austender"
    ],
    "publishedFrom": "3 days",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("actor-forge/public-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 = {
    "sources": [
        "uk-find-a-tender",
        "australia-austender",
    ],
    "publishedFrom": "3 days",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("actor-forge/public-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 '{
  "sources": [
    "uk-find-a-tender",
    "australia-austender"
  ],
  "publishedFrom": "3 days",
  "maxResults": 10
}' |
apify call actor-forge/public-tenders --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,actor-forge/public-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/MhroUcKVgbQNtnXpb/builds/yNVvwtmgdtLs2u8kr/openapi.json
