# German Public Tenders & Procurement Scraper (service.bund.de) (`agrunert/german-public-tenders-vergabe-scraper`) Actor

Monitor and extract German public tenders & procurement contracts (service.bund.de / Öffentliche Ausschreibungen) with CPV filter, deadlines & direct document links.

- **URL**: https://apify.com/agrunert/german-public-tenders-vergabe-scraper.md
- **Developed by:** [André Grunert](https://apify.com/agrunert) (community)
- **Categories:** Lead generation, Business, Jobs
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 tender notice scrapeds

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

## 🏛️ German Public Tenders & Procurement Scraper (Bund.de)

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-orange?logo=apify)](https://apify.com)
[![Pricing](https://img.shields.io/badge/Pricing-$0.01%20per%20tender-green)](https://apify.com)
[![Fast Engine](https://img.shields.io/badge/Engine-Zero--Playwright%20Fast%20HTTP-blue)](https://apify.com)

The definitive B2B procurement, lead generation, and tender monitoring scraper for the official German federal tenders portal (**[service.bund.de](https://www.service.bund.de)**).

Monitor public tenders, contract awards, and RFPs across federal ministries (*Bund*), state administrations (*Länder*), and local municipalities (*Kommunen*). Extract structured procurement data including **contracting authority (*Vergabestelle*)**, **submission deadline (*Angebotsfrist*)**, **execution location & postal code**, **CPV classification codes**, **eForms specifications**, and **direct links to official bidding platforms and tender documents** (*e-Vergabe, subreport, DTVP, etc.*).

***

### 🎥 48-Second Live Video Showcase (1080p HD)

[![Watch German B2B Data Suite Live Video Showcase](https://raw.githubusercontent.com/andregrunert-ctrl/german-b2b-data-suite/main/docs/b2b_showcase_banner.png)](https://youtu.be/ERydgz1hGk8)

*Part of the official German B2B Data Suite: Automate B2B lead generation, GDPR-compliant impressum enrichment (§ 5 DDG), real-time Handelsregister (XJustiz) & insolvency KYB audits, ZVG foreclosures, and public tenders via Apify, n8n, Make.com, or AI Agents (MCP).*

***

### 🎯 Why Use This Actor?

Public procurement in Germany exceeds **€500 billion annually**. However, tracking contract opportunities across fragmented public databases is tedious:

- **No Public REST API:** Data is locked behind server-side ASP/HTML form sessions on `service.bund.de`.
- **Formatting Quirks:** Text fields are riddled with soft-hyphens (`&shy;` / `\xad`) that break naive keyword matching and search indexing.
- **Fragmented Bidding Systems:** Tender specifications point to dozens of external state platforms (*evergabe.de, deutsche-evergabe.de, vergabemarktplatz.brandenburg.de, etc.*).

**This Actor solves it completely:**

- ⚡ **Lightweight & Blazing Fast:** Built with high-throughput asynchronous HTTP streaming (`httpx` + `lxml`) without heavy browser engines. Starts in < 1 second and crawls 100 tenders per request.
- 💰 **Transparent Pay-Per-Event (PPE) Pricing:** Pay only **$0.01 USD per extracted tender** ($10.00 / 1,000 tenders). Invalid inputs or empty results are never charged.
- 📑 **Direct Links to Official Documents:** Instantly get direct URLs to download official tender dossiers, participation requirements, and e-Vergabe portals.
- 🔍 **Targeted Multi-Criteria Filtering:** Filter by multiple search keywords, federal states, official German procurement categories (*Lieferleistungen, Bauleistungen, Dienstleistungen, IT*), or local postal codes.
- 🤖 **Ready for AI & Automation Workflows:** Connect seamlessly to **Make.com**, **n8n**, **Zapier**, or use as an **Apify MCP Tool** in Claude, Cursor, and ChatGPT.

***

### 🏢 Supported German Federal States (`states`)

Filter by German federal states using English/German names or standard two-letter codes, or pass `["ALL"]` for nationwide monitoring:

| Code / Name | Federal State | Code / Name | Federal State |
| :--- | :--- | :--- | :--- |
| `Baden-Württemberg` (`bw`) | Baden-Württemberg | `Bayern` (`by`) | Bayern (Bavaria) |
| `Berlin` (`be`) | Berlin | `Brandenburg` (`bb`) | Brandenburg |
| `Bremen` (`hb`) | Bremen | `Hamburg` (`hh`) | Hamburg |
| `Hessen` (`he`) | Hessen (Hesse) | `Mecklenburg-Vorpommern` (`mv`) | Mecklenburg-Vorpommern |
| `Niedersachsen` (`ni`) | Niedersachsen | `Nordrhein-Westfalen` (`nw` / `nrw`) | Nordrhein-Westfalen |
| `Rheinland-Pfalz` (`rp`) | Rheinland-Pfalz | `Saarland` (`sl`) | Saarland |
| `Sachsen` (`sn`) | Sachsen (Saxony) | `Sachsen-Anhalt` (`st`) | Sachsen-Anhalt |
| `Schleswig-Holstein` (`sh`) | Schleswig-Holstein | `Thüringen` (`th`) | Thüringen (Thuringia) |
| `ALL` | **All 16 Federal States (Nationwide)** | | |

***

### 📋 Supported Service Categories (`service_type`)

- `ALL` - All Procurement Categories (Default)
- `Dienstleistungen` - Professional & Consulting Services
- `Bauleistungen` - Construction Works & Infrastructure (VOB)
- `Lieferleistungen` - Supplies, Hardware & Goods
- `Informationstechnik` - IT Hardware, Software & Cloud Services
- `Forschung und Entwicklung` - Research & Development

***

### ⚙️ Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `keywords` | `Array<String>` | `["Software", "IT"]` | List of search terms. Sequential search with automatic deduplication. Leave empty for all current tenders. |
| `states` | `Array<String>` | `["ALL"]` | Federal states to search (e.g. `["Bayern", "Berlin"]` or `["ALL"]`). |
| `service_type` | `String` | `"ALL"` | Procurement category filter (`"Dienstleistungen"`, `"Bauleistungen"`, etc.). |
| `city` | `String` | `null` | Local city name or 5-digit postal code (e.g. `"München"`, `"04109"`). |
| `max_items` | `Integer` | `50` | Maximum number of tenders to extract (controls your budget strictly). |
| `include_details` | `Boolean` | `true` | Scrapes full procurement descriptions, CPV codes, and external document links. |
| `proxyConfiguration`| `Object` | `null` | Optional Apify proxy settings (datacenter or residential). |

***

### 📦 Sample Extracted Record

```json
{
  "tender_id": "7080522",
  "title": "Torgauer Platz in Leipzig, Sanierung Mischwasserleitung und Auswechslung Trinkwasserleitung",
  "contracting_authority": "Kommunale Wasserwerke Leipzig GmbH",
  "published_at": "27.10.2026",
  "submission_deadline": "19.11.2026",
  "location": "04315 Leipzig Sachsen",
  "postal_code": "04315",
  "city": "Leipzig",
  "state": "Sachsen",
  "service_type": "Bauleistungen",
  "procedure_type": "Offenes Verfahren (Sektorenverordnung (SektVO))",
  "cpv_codes": [
    "44000000",
    "44100000",
    "45231000-5"
  ],
  "description": "EU-weite Ausschreibung nach SektVO. Offenes Verfahren. Sanierung Mischwasserleitung und Auswechslung Trinkwasserleitung...",
  "tender_document_urls": [
    "https://www.evergabe.de/auftraege/suche-ueber-vergabestellen/Kommunale%2520Wasserwerke%2520Leipzig%2520GmbH/3470055",
    "https://www.evergabe.de/"
  ],
  "detail_url": "https://www.service.bund.de/IMPORTE/Ausschreibungen/evergabede/2026/10/7080522.html",
  "matched_keyword": "Software",
  "scraped_at": "2026-10-28T09:12:00.000Z"
}
```

***

### 🔒 Strict Pay-Per-Event (PPE) Guarantee

- Charged strictly at **$0.01 USD per pushed tender notice** (`event_name: "tender-scraped"`).
- If a search returns 0 listings, or if invalid parameters are supplied (`max_items <= 0`), **no charge is ever applied**.

***

### 🤖 Plug-and-Play: AI Agents (MCP), n8n & Make.com

Our actors are built natively for the next generation of automation: seamless integration into **Claude Desktop**, **Cursor AI**, **AI Agent Frameworks (LangChain, AutoGen, CrewAI)**, and visual workflow builders like **n8n** and **Make.com**.

#### 1. AI Agents & Model Context Protocol (MCP)

Give your AI coding assistant or desktop agent real-time access to this actor using the official Apify MCP server.

##### Option A: Single-Actor MCP Setup (`claude_desktop_config.json` / Cursor)

Add this to your `%APPDATA%\Claude\claude_desktop_config.json` (Windows) or `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):

```json
{
  "mcpServers": {
    "apify-tenders": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server", "--actors", "AGrunert/german-public-tenders-vergabe-scraper"],
      "env": {
        "APIFY_TOKEN": "YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

> **💡 Pro Tip – Equip your AI Agent with our Complete German B2B & Compliance Suite:**\
> Pass all 6 specialized DACH actors in a single command so your agent can discover B2B leads, extract Impressum data, verify commercial register & insolvency records, search tenders, monitor real estate foreclosures, and issue tax-compliant e-invoices autonomously:
>
> ```bash
> npx -y @apify/actors-mcp-server --actors AGrunert/german-b2b-leads-directory-scraper,AGrunert/german-impressum-b2b-lead-enricher,AGrunert/german-company-kyb-insolvency-scraper,AGrunert/german-public-tenders-vergabe-scraper,AGrunert/german-real-estate-foreclosure-zvg-scraper,AGrunert/german-e-invoice-zugferd-xrechnung-suite
> ```
>
> *Hosted SSE Endpoint (for Cursor / remote agents):*\
> `https://mcp.apify.com?actors=AGrunert/german-public-tenders-vergabe-scraper&token=YOUR_APIFY_TOKEN`

***

#### 2. 1-Click Synchronous API (cURL, n8n, Make.com)

No async job polling required! Call our synchronous endpoint directly in a single HTTP request node to run the actor and receive clean parsed dataset items immediately:

```bash
curl -X POST "https://api.apify.com/v2/acts/AGrunert~german-public-tenders-vergabe-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":"Software Cloud KI","states":["bund","by","nw"],"max_items":10,"include_details":true}'
```

***

#### 3. Schlüsselfertige Workflow-Vorlagen im Repository (`integrations/`)

In our GitHub repository and Actor build package, you will find pre-built, production-tested templates in the `integrations/` folder:

- **`integrations/n8n_workflow.json`**: Ready-to-import n8n workflow with automated procurement monitoring and direct 2-step chaining into our KYB Scraper to verify public authorities and bidding partners. Just copy-paste the JSON into your n8n canvas.
- **`integrations/make_com_blueprint.json`**: Official Make.com scenario blueprint with pre-configured HTTP request & data mapping.
- **`integrations/mcp_claude_cursor_config.json`**: Pre-configured MCP server manifest for Claude Desktop, Cursor AI, and Windsurf.

***

### 🔗 Complete German B2B, Compliance & PropTech Suite by AGrunert

Combine our specialized German business actors to build end-to-end automated pipelines for B2B lead generation, corporate due diligence, public procurement, real estate intelligence, and tax-compliant e-invoicing:

| Actor | Category & Pricing | Key Capabilities | Preconfigured Public Tasks |
| :--- | :--- | :--- | :--- |
| [**German B2B Leads, Crafts & Business Directory Scraper**](https://apify.com/AGrunert/german-b2b-leads-directory-scraper) | **Lead Generation**<br>`$0.008 / lead` ($8.00 / 1k) | Multi-query round-robin extraction across German business directories (`11880`, `Gelbe Seiten`), verified E.164 phone numbers (97.5% coverage), and domain verification (`require_website: true`). | • [German Crafts, Solar & Construction Lead Finder](https://apify.com/AGrunert/german-crafts-trades-lead-finder)<br>• [German B2B Company & Domain Finder](https://apify.com/AGrunert/german-b2b-domains-for-impressum-enrichment) |
| [**German & DACH B2B Impressum, Contact & Legal Enricher (§ 5 DDG)**](https://apify.com/AGrunert/german-impressum-b2b-lead-enricher) | **Data Enrichment**<br>`$0.005 / domain` ($5.00 / 1k) | Automatic legal notice discovery (§ 5 DDG / § 25 MedienG), de-obfuscation of executive emails, management board/CEOs, court & registration number (`HRB`), VAT ID (`DE...`), and social profiles. | • [German B2B Impressum, CEO & Contact Extractor](https://apify.com/AGrunert/german-b2b-impressum-contact-extractor)<br>• [DACH Website to Handelsregister & VAT ID Enricher](https://apify.com/AGrunert/impressum-to-handelsregister-kyb-enricher) |
| [**German Company KYB, Handelsregister & Insolvency Scraper**](https://apify.com/AGrunert/german-company-kyb-insolvency-scraper) | **Risk & Compliance**<br>`$0.025 / check` ($25.00 / 1k) | Official XJustiz 3.5.1 extraction (directors, share capital, business purpose, court) + live insolvency check (`insolvenzbekanntmachungen.de`) with bulk company list support. | • [Complete German KYB Audit](https://apify.com/AGrunert/full-kyb-audit)<br>• [Fast German Insolvency Screener](https://apify.com/AGrunert/fast-insolvency-screener)<br>• [Bulk German Company KYB Batch Check](https://apify.com/AGrunert/bulk-kyb-batch-check) |
| [**German Public Tenders & Procurement Scraper (`service.bund.de`)**](https://apify.com/AGrunert/german-public-tenders-vergabe-scraper) *(Current Actor)* | **B2B Tenders & Contracts**<br>`$0.010 / tender` ($10.00 / 1k) | Daily procurement monitoring across Bund, Länder & Kommunen; zero false positives (filters AI Bietercockpit boilerplates); direct `/unterlagen/` download URLs and submission deadlines (date + time). | • [German IT, Software & AI Public Tenders Monitor](https://apify.com/AGrunert/german-it-software-public-tenders)<br>• [German Construction & Facility Management Tenders](https://apify.com/AGrunert/german-construction-facility-tenders) |
| [**German Real Estate Foreclosure & ZVG-Portal Scraper**](https://apify.com/AGrunert/german-real-estate-foreclosure-zvg-scraper) | **PropTech & Real Estate**<br>`$0.010 / property` ($10.00 / 1k) | Bulk extraction of foreclosure auctions (`zvg-portal.de`) across all 16 states, multi-parcel market value parser (`float`), and direct PDF appraisal links (*Verkehrswertgutachten*). | • [German Foreclosure Real Estate Finder](https://apify.com/AGrunert/german-foreclosures-sample-search)<br>• [High-Value German Foreclosures (> 250k EUR)](https://apify.com/AGrunert/high-value-commercial-residential-foreclosures) |
| [**German E-Invoice (ZUGFeRD / Factur-X / XRechnung 3.0) Suite**](https://apify.com/AGrunert/german-e-invoice-zugferd-xrechnung-suite) | **Finance & Invoicing**<br>`$0.035 / invoice` ($35.00 / 1k) | Generate DIN-5008 compliant PDF/A-3 invoices from JSON, embed CII XML, and validate with official KoSIT Schematron & EN 16931 rules. | *Standalone API & Batch Suite* |

#### 💡 Multi-Actor Chain Workflows & Synergy Pipelines

- **Pipeline 1 (Top-of-Funnel Lead-to-Audit Engine):**\
  Discover companies & crafts via [**German B2B Directory Scraper**](https://apify.com/AGrunert/german-b2b-leads-directory-scraper) $\rightarrow$ Enrich managing directors, direct emails, and HRB numbers via [**German Impressum Enricher**](https://apify.com/AGrunert/german-impressum-b2b-lead-enricher) $\rightarrow$ Verify solvency, officers, and share capital via [**German KYB Scraper**](https://apify.com/AGrunert/german-company-kyb-insolvency-scraper).
- **Pipeline 2 (Public Tender Win to Compliant Billing):**\
  Monitor federal procurement opportunities via [**German Public Tenders Scraper**](https://apify.com/AGrunert/german-public-tenders-vergabe-scraper) $\rightarrow$ Win bid $\rightarrow$ Bill public authorities with compliant EN 16931 XRechnung 3.0 via [**German E-Invoice Suite**](https://apify.com/AGrunert/german-e-invoice-zugferd-xrechnung-suite).
- **Pipeline 3 (Real Estate Foreclosure Due Diligence):**\
  Scrape upcoming foreclosures via [**German Real Estate Foreclosure Scraper**](https://apify.com/AGrunert/german-real-estate-foreclosure-zvg-scraper) $\rightarrow$ Check creditor/owner companies via [**German KYB Scraper**](https://apify.com/AGrunert/german-company-kyb-insolvency-scraper).

***

# Actor input Schema

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

Keywords or search phrases (e.g. 'Software', 'IT', 'Cloud', 'Bauarbeiten', 'Gebäudereinigung'). Multiple keywords will be searched sequentially with automatic deduplication. Leave empty to retrieve all latest tenders.

## `states` (type: `array`):

Filter by German federal states (e.g. 'Bayern', 'Nordrhein-Westfalen', 'Berlin', 'Sachsen', 'Baden-Württemberg', or 'ALL' for nationwide tenders).

## `service_type` (type: `string`):

Filter by official German procurement category (Leistungsart).

## `city` (type: `string`):

Filter tenders by city name or 5-digit postal code of performance (e.g. 'München', 'Berlin', '04109', 'Köln').

## `max_items` (type: `integer`):

Maximum number of tenders to extract across all keywords. Controls your Pay-Per-Event scraping budget precisely.

## `include_details` (type: `boolean`):

When enabled, scrapes the full procurement notice, deadline, execution location (postal code, city, state), CPV codes, and direct links to e-Vergabe and tender document platforms.

## `proxyConfiguration` (type: `object`):

Optional proxy settings. Apify datacenter or residential proxies can be used if desired.

## Actor input object example

```json
{
  "keywords": [
    "Software",
    "IT"
  ],
  "states": [
    "ALL"
  ],
  "service_type": "ALL",
  "max_items": 50,
  "include_details": true
}
```

# Actor output Schema

## `datasetResults` (type: `string`):

No description

## `keyValueStore` (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",
        "IT"
    ],
    "states": [
        "ALL"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("agrunert/german-public-tenders-vergabe-scraper").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",
        "IT",
    ],
    "states": ["ALL"],
}

# Run the Actor and wait for it to finish
run = client.actor("agrunert/german-public-tenders-vergabe-scraper").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",
    "IT"
  ],
  "states": [
    "ALL"
  ]
}' |
apify call agrunert/german-public-tenders-vergabe-scraper --silent --output-dataset

```

## MCP server setup

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

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/kbmobvODuxf0xdtF0/builds/KwB9400Ikt67eF706/openapi.json
