# Germany Public Tender Alerts - oeffentlichevergabe.de (`orange_briefcase_hrj/germany-tender-alerts`) Actor

$1.50 per 1,000 notices. Daily German public tender alerts (Ausschreibungen, öffentliche Aufträge) from the official Bekanntmachungsservice open data (CC0). Filter by keyword, CPV, federal state, contract type, value and deadline; only new notices are returned.

- **URL**: https://apify.com/orange_briefcase_hrj/germany-tender-alerts.md
- **Developed by:** [Fast Agent](https://apify.com/orange_briefcase_hrj) (community)
- **Categories:** Lead generation, 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 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

**Price: $1.50 per 1,000 tender notices** ($1.35 on Apify Scale, $1.20 on Business and above) · no API key, login or proxy · official German open data (CC0)

### Auf Deutsch

**Tägliche Alerts für öffentliche Ausschreibungen in Deutschland.** Der Actor liest die amtlichen täglichen Bekanntmachungsexporte von oeffentlichevergabe.de (Datenservice Öffentlicher Einkauf) und liefert EU-weite und nationale Ausschreibungen als JSON, CSV oder Excel.
Die Daten stehen unter CC0; jeder Datensatz nennt trotzdem Quelle und Abrufdatum.
Filtern Sie nach Suchbegriff, CPV-Code, Bundesland, Auftragsart, Auftragswert und Angebotsfrist. Mit *Only new since last run* erhalten Sie bei täglicher Planung nur neue Bekanntmachungen.
Beispiel: `"keywords": ["Software"], "regions": ["Bayern"]` liefert IT-Ausschreibungen aus Bayern.
Preis: 1,50 $ pro 1.000 Bekanntmachungen plus 0,00005 $ pro Lauf.
**Mit KI-Assistenten:** Funktioniert auch in ChatGPT, Claude und Cursor über den Apify-MCP-Server – siehe *Use it from ChatGPT, Claude or Cursor* unten.

Get **daily German public tender alerts** (*Ausschreibungen*, *öffentliche Aufträge*, *Bekanntmachungen*) from the **Bekanntmachungsservice** of the *Datenservice Öffentlicher Einkauf* at **oeffentlichevergabe.de**, the federal hub that collects EU-wide and national procurement notices from every German e-tendering platform. You get clean JSON, CSV or Excel, filtered by keyword, CPV code, federal state (*Bundesland*), contract type, value and deadline. In **"only new since last run"** mode, a scheduled run works as a tender alert service: you only get notices you haven't seen.

Bid teams, SMEs, consultancies and international suppliers can follow German public sector opportunities (*Vergabe*) without checking dozens of portals by hand, and send them to email, Slack, Google Sheets or a CRM.

### What does Germany Public Tender Alerts do?

- Reads the official **daily notice exports** of the Bekanntmachungsservice open-data API (`/api/notice-exports`), published under **CC0 1.0**. It needs no API key, login or proxy, and downloads one OCDS file and one eForms file per publication day.
- Returns **contract notices** (*Auftragsbekanntmachungen*) by default, plus **contract award notices** (*vergebene Aufträge*, with winning suppliers and values where published), prior information notices, contract modifications, voluntary ex-ante notices and corrections if you want them.
- Covers **EU-wide procedures** (above the EU thresholds) and **national procedures** under UVgO and VOB/A that never reach TED.
- **Filters** by keywords (any or all; case-, accent- and umlaut-insensitive substring match, so `reinigung` also finds *Gebäudereinigung*), excluded words, **CPV prefixes**, **federal states or NUTS codes** (buyer or place of performance), contract type, EU or national scope, minimum estimated value, buyer name and open deadlines.
- Adds the **submission deadline** from the eForms notice, the **procedure type**, **legal basis**, CPV codes with English descriptions, lots, the link to the **tender documents** on the e-tendering platform (DTVP, Vergabe Bayern, evergabe-online and others) and the notice link on oeffentlichevergabe.de.
- **Merges re-published and corrected notices**: versions of the same procedure (OCID) and stage are combined into one record, keeping the latest, so you don't pay twice. Award notices for different suppliers stay separate.
- **"Only new since last run" mode** remembers what each alert has already delivered. It's **off by default**, so one-off searches always return results; the example alert tasks switch it on.
- Saves an optional **summary digest** with counts by type, contract type and state, top buyers, the largest notices and those closing soonest.

### Why use it?

- **One source for all of Germany**: federal, state and municipal buyers from every platform, EU-wide and national, in one consistent format.
- **English field names and normalised codes** (`tender`, `works`, `open`) next to the German originals, so non-German teams can filter easily.
- **Cheap and fast:** official bulk files with no browser, so a daily run takes seconds.

### Use it from ChatGPT, Claude or Cursor

Ask your AI assistant about German public tenders (Ausschreibungen) and get live answers from the official oeffentlichevergabe.de open data, in English if you like.

This Actor works as a tool in any AI assistant that supports the [Model Context Protocol (MCP)](https://modelcontextprotocol.io), through the official [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). You ask in plain language; the assistant fills in the filters, runs the Actor and answers from the results.

**MCP server URL (this Actor only):**

```text
https://mcp.apify.com?tools=orange_briefcase_hrj/germany-tender-alerts
```

**Set it up once (you need a free Apify account):**

- **Claude (claude.ai and Claude Desktop):** open **Settings → Connectors → Add → Add custom connector**. Enter a name (for example `German tenders`), paste the URL above as the **Remote MCP server URL**, select **Continue**, keep the detected settings and select **Add**. Sign in to Apify when your browser opens. On Team and Enterprise plans, an Owner adds the connector for the organisation.
- **ChatGPT:** custom connectors need ChatGPT **Developer mode** (beta). Go to **Settings → Apps & Connectors → Create**, paste the URL above as the **MCP Server URL**, choose **OAuth** authentication and select **Create**, then sign in to Apify. In a new chat, select **+ → More** and pick the connector.
- **Cursor:** add this to `~/.cursor/mcp.json` (or `.cursor/mcp.json` in a project). Cursor opens your browser to sign in to Apify:

```json
{
  "mcpServers": {
    "germany-tender-alerts": {
      "url": "https://mcp.apify.com?tools=orange_briefcase_hrj/germany-tender-alerts"
    }
  }
}
```

- **VS Code, Windsurf and other MCP clients:** add the same URL as a remote (Streamable HTTP) MCP server. If a client can't do OAuth, send the header `Authorization: Bearer <YOUR_APIFY_TOKEN>` instead (token from **Apify Console → Settings → API & Integrations**).

Already connected to the full Apify server (`https://mcp.apify.com`) or the Apify plugin for Cursor, Claude Code or VS Code? Just mention `orange_briefcase_hrj/germany-tender-alerts` in your request.

**Try asking:**

> "Find open German tenders for software development or IT services in Bayern or Berlin published in the last 2 days, with buyer, deadline and link."
>
> "List new German construction tenders (CPV 45000000) in Nordrhein-Westfalen with an estimated value over €500,000."
>
> "Which tenders for building cleaning (Gebäudereinigung) were published this week, and when do they close?"

**Cost:** a run started by your assistant is a normal run of this Actor, billed to your Apify account at the usual pay-per-event price ($1.50 per 1,000 notices, see the pricing section below). This Actor charges nothing extra for runs that come through an assistant. Asking for a small number of results (for example "the top 20") keeps runs cheap, and the Apify Free plan's monthly credit covers plenty of tests.

### Screenshots

Real output from the saved example tasks (test runs on 26 October 2026):

![German IT and software tenders: title, buyer, federal state, contract type, published, deadline, main CPV and EU or national scope](https://api.apify.com/v2/key-value-stores/NpvgdYoKm28QhbrG7/records/germany-tenders-output.png)

![German public contract awards: buyer, winning suppliers, federal state, awarded value and main CPV](https://api.apify.com/v2/key-value-stores/NpvgdYoKm28QhbrG7/records/germany-tenders-awards.png)

#### Ready-made example tasks

- **German IT & software tenders, daily alert**: CPV `72000000` + `48000000`, open contract notices, only new.
- **Construction tenders in Bavaria (Bauleistungen Bayern)**: CPV `45000000`, region `Bayern`, only new.
- **German public contract awards**: award notices from the last 7 days, with winners and values, for market intelligence.

### How to use it

1. Enter **keywords** (German terms find the most: `Software`, `Reinigung`, `Planungsleistungen`, `Straßenbau`) and/or **CPV codes** (for example `72000000` for IT services).
2. Optionally pick **federal states**, **contract types**, **EU or national** procedures and the **notice types** you want (contract notices by default).
3. Switch on **Only new since last run** and add a **daily schedule** in Apify Console. Each day's export is complete after midnight German time, so a morning run catches the whole previous day.
4. Connect the output to email, Slack, Google Sheets, Zapier or Make, or download it as CSV, Excel or JSON.

#### Input example

```json
{
  "keywords": ["Software", "Cloud"],
  "cpvCodes": ["72000000", "48000000"],
  "regions": ["Bayern", "Berlin"],
  "contractTypes": ["services"],
  "noticeTypes": ["tender"],
  "lookbackDays": 2,
  "onlyNew": true
}
```

#### Output example

```json
{
  "noticeId": "e0ed08a6-951a-437d-ba2c-57b4a187e42c",
  "noticeVersion": "01",
  "ocid": "ocds-mnwr74-ee7548b2-a287-476c-9e30-93e20a39865e",
  "noticeType": "tender",
  "eformsNoticeType": "cn-standard",
  "title": "VMWare",
  "buyerName": "rku.it GmbH",
  "buyerCity": "Herne",
  "buyerNuts": "DEA55",
  "buyerState": "Nordrhein-Westfalen",
  "contractType": "supplies",
  "procedure": "open",
  "legalBasis": "32014L0025",
  "european": true,
  "publishedAt": "2026-10-25T18:06:04Z",
  "deadline": "2026-11-06T09:00:00Z",
  "mainCpvCode": "48820000",
  "cpvCodes": [
    "48820000"
  ],
  "cpvDescriptions": [
    "Servers"
  ],
  "lotCount": 1,
  "tenderDocumentsUrl": "https://www.vergabe.metropoleruhr.de/VMPSatellite/notice/CXPSYD1D700/documents",
  "noticeUrl": "https://oeffentlichevergabe.de/ui/de/search/details?noticeId=e0ed08a6-951a-437d-ba2c-57b4a187e42c&noticeVersion=01",
  "dataLicence": "Source: Bekanntmachungsservice / Datenservice Öffentlicher Einkauf (oeffentlichevergabe.de), public procurement notices published as open data under CC0 1.0. Retrieved 2026-10-26."
}
```

The dataset has an **overview table view** (title, buyer, state, type, contract type, published, deadline, estimated value, main CPV, link). The **SUMMARY** record in the run's key-value store holds the digest.

#### Output fields

| Field | Description |
|---|---|
| `noticeId`, `noticeVersion`, `ocid`, `noticeUrl`, `ocdsUrl` | Notice id and version, procurement id (shared by all notices of one procedure) and links |
| `noticeType`, `eformsNoticeType`, `procedure`, `legalBasis`, `european` | Normalised stage and procedure, eForms subtype, legal basis (EU directive or `de-vob` / `de-vol` / `de-uvgo`) |
| `title`, `description`, `lots`, `lotCount` | What is being bought |
| `buyerName`, `buyerCity`, `buyerPostCode`, `buyerNuts`, `buyerState` | Contracting authority and location |
| `contractType`, `estimatedValue`, `currency`, `deadline`, `publishedAt` | Contract type, value where published, submission deadline and publication time (UTC) |
| `mainCpvCode`, `cpvCodes`, `cpvDescriptions`, `placeOfPerformanceNuts`, `placeOfPerformance` | Classification and place of performance |
| `tenderDocumentsUrl` | Where to download the documents and submit |
| `suppliers`, `awardedValues` | Winning suppliers and awarded values (award notices) |
| `mergedNoticeIds`, `matchedKeywords`, `firstSeenAt`, `dataLicence` | De-duplication, alert metadata and attribution |

### Tips

- **CPV prefixes:** `72000000` matches every code starting with `72`, and `45000000` matches all construction work.
- **Regions:** use federal states in German or English (`Bayern`/`Bavaria`, `NRW`) or NUTS codes for districts (`DE21` = Oberbayern, `DEA2` = Köln). A notice matches if the buyer **or** the place of performance is in the region.
- **Values:** most German notices don't publish an estimated value, so the *Minimum estimated value* filter narrows results a lot.
- **Award notices** often name the winning suppliers; values are only included where the buyer published them.
- **Several alerts:** give each one its own **Alert name (state key)**, or use different filters. Each filter set keeps its own memory.

### How much does it cost?

This Actor uses pay-per-event pricing. You pay only for what it delivers, and Apify platform costs are included.

| Apify plan (Store discount tier) | Price per notice | Per 1,000 |
|---|---|---|
| Free, Starter (Bronze) | $0.0015 | $1.50 |
| Scale (Silver) | $0.00135 | $1.35 |
| Business (Gold) and above | $0.0012 | $1.20 |

Each run also has an **Actor start** charge of $0.00005, and a **run summary** charge of $0.002 when *Save a summary* is on (the default). With *Only new since last run* switched on (as in the example alert tasks) you never pay twice for the same notice.

**Worked examples (Free/Starter prices):**

- **Daily IT & software alert, about 10 new notices a day:** 30 runs × ($0.00005 + $0.002) + 300 notices × $0.0015 = **about $0.51 a month**.
- **Every construction tender in Bavaria, about 40 a working day, daily:** 30 × $0.00205 + 880 × $0.0015 = **about $1.38 a month**.
- **One-off 30-day export of 5,000 notices:** $0.00205 + 5,000 × $0.0015 = **about $7.50**.

The **Apify Free plan includes $5 of platform usage every month** (see [apify.com/pricing](https://apify.com/pricing)), and pay-per-event charges are paid from that credit. That covers the daily IT alert above about nine times over. Use **Max notices per run** and Apify's maximum cost per run to cap spend.

### Use via API (Python, JavaScript, cURL)

You can start the Actor from your own code with the official [Apify API clients](https://docs.apify.com/api/client). Get your API token from **Apify Console → Settings → API & Integrations**.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("orange_briefcase_hrj/germany-tender-alerts").call(run_input={
    "keywords": ["Software"],
    "cpvCodes": ["72000000"],
    "noticeTypes": ["tender"],
    "lookbackDays": 2,
    "onlyNew": False,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

Install with `pip install apify-client`.

#### JavaScript / Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('orange_briefcase_hrj/germany-tender-alerts').call({
    keywords: ['Software'],
    cpvCodes: ['72000000'],
    noticeTypes: ['tender'],
    lookbackDays: 2,
    onlyNew: false,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Install with `npm install apify-client`.

#### cURL

This runs the Actor and returns the dataset items in the same request (best for short runs):

```bash
curl -X POST "https://api.apify.com/v2/acts/orange_briefcase_hrj~germany-tender-alerts/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["Software"], "cpvCodes": ["72000000"], "noticeTypes": ["tender"], "lookbackDays": 2, "onlyNew": false}'
```

For longer runs, call `POST /v2/acts/orange_briefcase_hrj~germany-tender-alerts/runs` and read the dataset when the run finishes. You can also add the Actor to Zapier, Make, n8n or a webhook from the **Integrations** tab.

### Data source, licence and attribution

- **Source:** Bekanntmachungsservice of the Datenservice Öffentlicher Einkauf, operated for the German federal government (Beschaffungsamt des BMI), at [oeffentlichevergabe.de](https://oeffentlichevergabe.de). Its open-data API ([documentation](https://oeffentlichevergabe.de/documentation/swagger-ui/opendata/index.html)) offers the daily notice exports used here for bulk download.
- **Licence:** the notice data is published under **CC0 1.0** (stated in every OCDS file). Every record carries a `dataLicence` attribution anyway, and we recommend keeping it.
- **Not affiliated** with the German government or any e-tendering platform. Always check the official notice and tender documents before you bid.
- **Data protection:** buyer contact details are only included if you switch on *Include buyer contact details*. They can be personal data; use them only to take part in the procurement, in line with the GDPR.

### Related tools

Other tools from the same publisher, all built on official open-data APIs:

| Tool | What it does |
|---|---|
| [UK Public Tender Alerts](https://apify.com/orange_briefcase_hrj/uk-tender-alerts) | Daily alerts for new UK government tenders and contract awards from Find a Tender and Contracts Finder. |
| [Netherlands Public Tender Alerts (TenderNed)](https://apify.com/orange_briefcase_hrj/netherlands-tender-alerts) | Daily alerts for new Dutch government tenders from TenderNed, filtered by keyword, CPV and province. |
| [Ukraine Prozorro Tender Alerts](https://apify.com/orange_briefcase_hrj/ukraine-prozorro-tender-alerts) | New Ukrainian public tenders from the official Prozorro API, filtered by keyword, CPV, oblast and value. |
| [France Public Tender Alerts (BOAMP)](https://apify.com/orange_briefcase_hrj/france-boamp-tender-alerts) | Daily alerts for new French public tenders (appels d'offres) from BOAMP open data, filtered by keyword, CPV, department and contract type. |
| [UK Company Check & Change Monitor](https://apify.com/orange_briefcase_hrj/uk-company-check) | Bulk Companies House checks with a RED/AMBER/GREEN risk flag, plus a monitor mode that outputs only changes. |
| [German Case Law Search & Ruling Alerts](https://apify.com/orange_briefcase_hrj/german-case-law-search) | Search BGH, BVerfG, BAG, BFH and other German federal court decisions, with full text and new-ruling alerts. |
| [Austria Case Law Search & Ruling Alerts (RIS)](https://apify.com/orange_briefcase_hrj/austria-case-law-search) | Search OGH, VfGH, VwGH, BVwG and other Austrian court decisions from the official RIS API, with full text and new-ruling alerts. |
| [Sweden Job Ads API (Platsbanken)](https://apify.com/orange_briefcase_hrj/sweden-job-ads-platsbanken) | Swedish job ads from Arbetsförmedlingen's official JobTech API, with English labels and daily alerts. |
| [Czech Job Ads API (Úřad práce ČR)](https://apify.com/orange_briefcase_hrj/czech-job-ads-urad-prace) | Czech job vacancies from the official MPSV / Úřad práce ČR open data, filtered by keyword, region, CZ-ISCO, salary and foreign-worker eligibility, with English labels and daily alerts. |

**Tip:** for EU-wide tenders in other countries, combine this with **Netherlands**, **France** and **UK** tender alerts using the same keywords or CPV codes.

### FAQ

**Is this legal?** Yes. The Bekanntmachungsservice publishes the notices as open data under CC0 and provides the export API specifically for bulk downloads. The Actor only uses that official API, with no scraping of e-tendering platforms.

**Do I need an API key or account at oeffentlichevergabe.de?** No.

**How fresh is the data?** Each publication day is exported as one file that is complete after midnight German time, so the newest notices are from yesterday. A daily morning schedule gives you every notice the day after it's published.

**Does it cover national (below-threshold) tenders?** Yes, notices published through the Bekanntmachungsservice under UVgO and VOB/A are included, not only EU-wide ones. Coverage depends on what buyers and platforms publish there.

**Can I get all German tenders in bulk?** Yes. Leave the filters empty and set *Look back* up to 31 days and *Max notices per run* up to 20,000.

**Why is a field empty?** Many notices don't publish values, and national notices don't always state a contract type. The Actor never invents data.

**Where can I see what changed?** See the Changelog tab. Each release is listed there.

# Changelog

This Actor's version history is a separate document: https://apify.com/orange_briefcase_hrj/germany-tender-alerts/changelog.md

# Actor input Schema

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

Words to look for in the title, description, lot titles and CPV descriptions. Case-, accent- and umlaut-insensitive substring match, so 'reinigung' also finds 'Gebäudereinigung'. Leave empty for every notice that matches the other filters.

## `keywordMatch` (type: `string`):

Match notices containing ANY of the keywords, or ALL of them.

## `excludeKeywords` (type: `array`):

Skip notices whose text contains any of these words.

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

Prefix matching on all CPV codes of the notice: 72000000 matches every IT service, 45000000 all construction work, 79000000 business services. Leave empty for all.

## `regions` (type: `array`):

Matches the buyer's address or the place of performance. Use federal states in German or English (Bayern/Bavaria, Berlin, Nordrhein-Westfalen/NRW, Baden-Württemberg, Hessen, Sachsen, ...) or NUTS codes (DE21 = Oberbayern, DE300 = Berlin, DEA2 = Köln). Leave empty for all of Germany.

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

Contract notices (tender) by default. Add award notices to see winners and values, plus prior information, modifications, voluntary ex-ante notices and corrections.

## `contractTypes` (type: `array`):

Services, supplies or works. National notices under VOB/A count as works; other national notices may not state a type and are skipped when this is set.

## `scope` (type: `string`):

EU-wide procedures (above the EU thresholds, also published on TED) or national procedures (UVgO, VOB/A), which never reach TED.

## `openOnly` (type: `boolean`):

Skip contract notices whose submission deadline has already passed.

## `minEstimatedValue` (type: `integer`):

Only keep notices with an estimated value at or above this. Most notices don't publish a value, so this narrows results a lot.

## `buyerContains` (type: `array`):

Only keep notices whose buyer name contains one of these strings (e.g. 'Bundeswehr', 'Stadt München', 'Deutsche Bahn').

## `lookbackDays` (type: `integer`):

How many past publication days to read on a normal run, or on the first run in 'only new' mode (1-31). Each day is one official export file; today's file is complete after midnight German time, so the newest day read is yesterday.

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

Remember notices already delivered (per filter set) and only output new ones. Re-published or corrected versions of a notice you already have are not delivered again. Off by default so one-off searches always return results; switch it on for scheduled alerts.

## `stateKey` (type: `string`):

Optional name for this alert's memory. By default it is derived from your filters, so changing filters starts a fresh alert.

## `includeBuyerContacts` (type: `boolean`):

Add the buyer's published contact email, phone and website. Contact details can be personal data: use them only to take part in the procurement, in line with the GDPR.

## `includeSummary` (type: `boolean`):

Save a digest (counts by type and state, top buyers, largest and closing-soonest notices) as SUMMARY in the run's key-value store.

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

Stop after this many notices (newest first). In 'only new' mode anything left over is picked up on the next run.

## `requestIntervalSecs` (type: `number`):

Minimum pause between export downloads.

## Actor input object example

```json
{
  "keywords": [
    "Software"
  ],
  "keywordMatch": "any",
  "excludeKeywords": [],
  "cpvCodes": [],
  "regions": [],
  "noticeTypes": [
    "tender"
  ],
  "contractTypes": [],
  "scope": "all",
  "openOnly": true,
  "buyerContains": [],
  "lookbackDays": 2,
  "onlyNew": false,
  "includeBuyerContacts": false,
  "includeSummary": true,
  "maxResults": 10,
  "requestIntervalSecs": 1
}
```

# Actor output Schema

## `results` (type: `string`):

No description

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

No description

# 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"
    ],
    "lookbackDays": 2,
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("orange_briefcase_hrj/germany-tender-alerts").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"],
    "lookbackDays": 2,
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("orange_briefcase_hrj/germany-tender-alerts").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"
  ],
  "lookbackDays": 2,
  "maxResults": 10
}' |
apify call orange_briefcase_hrj/germany-tender-alerts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,orange_briefcase_hrj/germany-tender-alerts"
        }
    }
}
```

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/DQmlqq7rePqKYblY1/builds/hOmVjW1iuwh4scDG1/openapi.json
