Francesco Scilipoti

Tools / Public ProcurementApify ActorGermany

German Tender Monitor

A structured feed for German public tenders. The Actor collects publicly accessible procurement data from official sources, normalizes it, removes duplicates and returns usable JSON or CSV rows for monitoring, sales, research and agent workflows.

324CPV 72 rows emitted
143TED rows in CPV 72 run
0duplicate fingerprints
161rows with deadlines

What is Apify?

Apify is the runtime environment for the Actor.

Apify is a platform where small data and automation programs run as Actors. An Actor receives input, executes a job and writes structured results into a dataset.

For users, that means no custom backend, no manual portal clicking and no spreadsheet cleanup. Open the Actor, set filters such as CPV, keyword, region or time window, then receive a table, JSON output or API data.

German Tender Monitor works exactly like that: it turns public procurement data into a normalized, deduplicated feed that can be tested once, scheduled regularly or connected to your own workflows through the API.

User flow3 screens

A normal run looks like this.

01 / open

Open the Actor on Apify.

The Store page shows the description, price per result, input tab, API tab and the run button.

02 / set filters

Keep the input small and precise.

CPV 72 is a strong first run because it is more precise than a very broad keyword such as software.

03 / use dataset

Use the result as a table, JSON or CSV.

Rows include title, buyer, source, CPV, CPV label, deadline status, detail URL and dedupe fields.

Screenshot 01

The public Actor page.

This is where users start: read the description, check pricing, review the README, open the input/API tabs and run a first test.

apify.com / actor pagepublic view
Screenshot of the Apify Store page for German Tender Monitor

Screenshot 02

Input for a good first run.

CPV 72 is the better demo case because the run clearly targets IT services, software development, internet and support. Keyword runs are possible, but broader.

actor inputrecommended first test
{ "pubMonth": "2026-06", "maxItems": 100, "cpv": "72" }

CPV 72 covers IT services: consulting, software development, internet and support. For daily monitoring, `newOnly` can later be combined with a custom `stateKey`.

Screenshot 03

The result: a clean dataset feed.

After the run, users can inspect rows as a table, export JSON/CSV or process the data through the API.

dataset rowexample fields
titleBereitstellung, laufender Betrieb und Support einer IT-Plattform
buyerpublic buyer
sourceOEV / TED / NRW
cpv72000000 · IT services: consulting, software development, Internet and support
leadReasonMatched CPV 72; IT services for buyer
dedupecanonicalFingerprint + sourceNoticeId

FAQShort answers

Questions worth answering before the first run.

Start with scope, sources and limits. That is where most bad data exports go wrong.

What does German Tender Monitor do?

It collects publicly accessible German procurement data from official sources, normalizes rows, removes duplicates and returns results as an Apify dataset, JSON, CSV or API data.

Who is the Actor for?

It is useful for B2B sales teams, agencies, research teams and operators who monitor public-sector demand in Germany by keyword, CPV, region or time window.

What is a good first test?

The best first test is a CPV filter, for example CPV 72 for IT services. It is more precise than a very broad keyword. The checked CPV 72 run is documented in the quality proof.

How does dedupe work?

The Actor uses source IDs, source notice IDs and canonical fingerprints so the same tender from multiple sources does not appear repeatedly as a new result.

What does the Actor not promise?

It is not a complete bidding system, legal advice or a guarantee of full coverage across every German procurement portal. It provides a structured, verifiable monitoring feed from available official and public sources.

Checked run

Verified on real Apify runs, not only locally.

The strongest proof is the CPV 72 monthly run on build 0.1.18. Filtered runs deliberately stay relevance-ranked; source balancing only applies to broad, unfiltered reports.

RunkRFxRSEhBw8BIavg2 / build 0.1.18
InputpubMonth 2026-06, maxItems 500, cpv 72
Source mix164 OEV, 143 TED, 17 NRW
Integrity0 missing core fields, 0 placeholder titles, 0 duplicate fingerprints
Filtered rankingsourceBalance=null, relevance-ranked as expected