# Government Tenders API: EU (TED), Canada & Japan in One Schema (`jp-data-lab/government-tenders-eu-canada-japan`) Actor

Open public procurement notices from official government APIs only: all EU/EEA tenders from TED, Canadian federal tenders from CanadaBuys, and Japanese national and local tenders from the official portal. One schema with deadline, buyer, country, CPV/UNSPSC codes, estimated value and status.

- **URL**: https://apify.com/jp-data-lab/government-tenders-eu-canada-japan.md
- **Developed by:** [JP Data Lab](https://apify.com/jp-data-lab) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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), Canada & Japan in One Schema

Get open public procurement notices from three government sources in **one JSON schema**, using **official APIs and official open data only**. No scraping of login pages and no blocked sites.

| `source` | Coverage | Official source |
|---|---|---|
| `ted` | All EU and EEA public tenders above EU thresholds (27 member states plus EEA) | TED (Tenders Electronic Daily) Search API |
| `canada` | Canadian federal government tenders | CanadaBuys open data (updated daily) |
| `japan` | Japanese national ministries, prefectures, cities, universities and other public bodies | Government Procurement Information Portal (官公需情報ポータルサイト) Search API |

Use it to feed tender alerts, B2G lead lists, CRM pipelines, market research or AI agents that need to answer "which governments are buying X right now?".

### Output

One item per notice:

```json
{
  "id": "ted:749460-2026",
  "source": "ted",
  "country": "ROU",
  "buyer": "Spitalul Clinic de Urgenta Bucuresti",
  "buyerCity": "Bucuresti",
  "title": "Romania – Magnetic resonance imaging equipment – FURNIZARE SISTEM MOBIL DE REZONANȚĂ MAGNETICĂ",
  "titleOriginal": "România – Echipament de imagistică cu rezonanţă magnetică – FURNIZARE SISTEM MOBIL DE REZONANȚĂ MAGNETICĂ",
  "category": "goods",
  "procedure": "open",
  "noticeType": "cn-standard",
  "classification": [{"scheme": "CPV", "code": "33113000"}],
  "publishedAt": "2026-10-29",
  "deadline": "2026-12-02",
  "deadlineSource": "api",
  "status": "open",
  "estimatedValue": 3445000.0,
  "currency": "RON",
  "url": "https://ted.europa.eu/en/notice/-/detail/749460-2026",
  "externalUrl": null,
  "description": "Obiectul contractului îl constituie furnizarea unui sistem mobil de rezonanță magnetică (IRM mobil cu câmp redus), desti…",
  "attribution": "© European Union, https://ted.europa.eu — reused under Commission Decision 2011/833/EU",
  "scrapedAt": "2026-10-29T15:46:03+00:00"
}
```

| Field | Meaning |
|---|---|
| `country` | Buyer country, ISO 3166-1 alpha-3 (`DEU`, `CAN`, `JPN` …) |
| `title` | English where the source provides it (TED, Canada). Japan titles are in Japanese |
| `titleOriginal` | Title in the buyer's language (TED), French (Canada) |
| `category` | `goods`, `services`, `works` or `mixed` |
| `classification` | CPV codes (TED), UNSPSC and GSIN codes (Canada) |
| `deadline` | Date bids are due (`YYYY-MM-DD`). For TED with several lots, the earliest lot deadline |
| `deadlineSource` | `api` = from the source's own field. `text` = read from the Japanese notice text. `opening-date` = Japanese bid opening date, used when no deadline is written |
| `status` | `open` (deadline today or later, UTC), `closed`, or `unknown` (no deadline found) |
| `estimatedValue` / `currency` | As published by the buyer (TED). Not provided by Canada or Japan |
| `url` | Notice page on the official portal. Japan links to the buyer's own notice document (often a PDF) |
| `externalUrl` | Canada only: the bidding system named in the notice (for example SAP Ariba or MERX) |
| `description` | First 1,000 characters of the notice description |

Personal contact details (names, emails, phone numbers of contracting officers) are **not** included.

### Input

| Field | Default | |
|---|---|---|
| `sources` | all | Any of `ted`, `canada`, `japan` |
| `keywords` | none | Title or description contains any keyword. Pushed down to the TED and Japan APIs |
| `publishedWithinDays` | 2 | `0` = all currently open notices (up to the per-source limit) |
| `countries` | none | ISO alpha-3 buyer countries, for example `DEU`, `FRA`, `POL` |
| `categories` | none | `goods`, `services`, `works` |
| `statuses` | `open`, `unknown` | Add `closed` to include notices whose deadline has passed |
| `maxItemsPerSource` | 300 | Newest first. You pay per result |

A default run takes about a minute. Schedule it daily with `publishedWithinDays: 1` to get each day's new tenders.

### Limitations

- **Japan deadlines** are read from the notice text, because the portal's API rarely fills its date fields. About half of Japanese notices get a deadline this way. The rest are `unknown`. Always check the original notice.
- **Japan** without keywords is fetched prefecture by prefecture, at most 1,000 notices each per run. Use `publishedWithinDays` of 7 or less.
- **TED** keyword search runs on the full notice text in every language. To find most notices, search in the buyer's language too (for example `Software` and `logiciel`).
- Not affiliated with the European Union, the Government of Canada or the Government of Japan.

### Data sources and attribution

- **TED**: © European Union, https://ted.europa.eu. Reuse is authorised under Commission Decision 2011/833/EU, provided the source is acknowledged.
- **CanadaBuys**: Contains information licensed under the Open Government Licence – Canada.
- **Japan**: This Actor uses the search API of the Government Procurement Information Portal (官公需情報ポータルサイト), operated by the Small and Medium Enterprise Agency: https://www.kkj.go.jp/

Each item carries its own `attribution` field, so you can keep the credit when you pass the data on.

***

### 日本語

EU 全体（TED）、カナダ連邦政府、日本の国・自治体の入札公告を、公式 API と公式オープンデータだけから同じ形式で取得します。日本の分は、官公需情報ポータルサイト（中小企業庁）の検索 API を利用しています（https://www.kkj.go.jp/）。締切は公告文から読み取っているため、申請の前に必ず元の公告を確認してください。

# Actor input Schema

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

ted = European Union and EEA (TED official API). canada = Canadian federal government (CanadaBuys open data). japan = Japanese national and local governments (official procurement portal API).

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

Keep notices whose title or description contains any of these words, e.g. software, cybersecurity, 清掃. Case-insensitive. TED searches all notice languages, so English words find mostly English-language matches. Leave empty for all notices.

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

Only notices published in the last N days. 0 = no date limit (all currently open notices, up to the per-source limit).

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

Optional. For example DEU, FRA, POL for EU countries, CAN for Canada, JPN for Japan. Leave empty for all.

## `categories` (type: `array`):

Optional. Notices whose type is unknown are dropped when you set this.

## `statuses` (type: `array`):

open = deadline today or later (UTC). closed = deadline passed. unknown = no deadline found.

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

Newest first. You are charged per result.

## Actor input object example

```json
{
  "sources": [
    "ted",
    "canada",
    "japan"
  ],
  "keywords": [],
  "publishedWithinDays": 2,
  "countries": [],
  "categories": [],
  "statuses": [
    "open",
    "unknown"
  ],
  "maxItemsPerSource": 300
}
```

# Actor output Schema

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

One item per procurement notice: source, country (ISO alpha-3), buyer, title (English where available), category, published date, deadline, status, estimated value, classification codes (CPV / UNSPSC), notice URL and attribution.

## `runSummary` (type: `string`):

Number of notices fetched and returned per source in this run.

# 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": [
        "ted",
        "canada",
        "japan"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jp-data-lab/government-tenders-eu-canada-japan").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": [
        "ted",
        "canada",
        "japan",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("jp-data-lab/government-tenders-eu-canada-japan").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": [
    "ted",
    "canada",
    "japan"
  ]
}' |
apify call jp-data-lab/government-tenders-eu-canada-japan --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jp-data-lab/government-tenders-eu-canada-japan"
        }
    }
}
```

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/LPzmszhRmu324q55G/builds/1ahZcIA8EynTtGRYL/openapi.json
