Construction Tender Radar DE — TED
Pricing
$10.00 / 1,000 qualified ted notices
Construction Tender Radar DE — TED
Monitor single-lot German construction notices on TED. Track source-linked deadline changes, published outcome codes and official notice links. Includes coverage reasons, JSON and CSV; excludes multi-lot notices and does not cover all German tenders.
Pricing
$10.00 / 1,000 qualified ted notices
Rating
0.0
(0)
Developer
Daniel Michałek
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Construction Tender Radar DE - TED
Find single-lot German construction works in TED notices, with source deadlines, official links and exact parent-linked comparisons. Coverage excludes unsupported notices, German tenders absent from TED and complete cancellation history.
Quick start
Choose an inclusive publication window of 1-31 days, optional cpvPrefixes/performance nutsPrefixes and a small result limit. Download the dataset/CSV and read coverage. These historical dates include expired notices; update them for current monitoring.
{"dateFrom":"2026-10-01","dateTo":"2026-10-20","cpvPrefixes":["45"],"maxResults":3,"maxPages":2,"maxParentLookups":2,"maxRunTimeMs":30000}
No TED account, key or proxy is needed. No contacts, full descriptions or attachments are requested. German titles are retained; missing facts are not invented.
Qualification and fields
Only cn-standard/can-standard notices with exactly one lot qualify. Lot MAIN CPV must match a configured prefix beginning 45, main nature must be works, and performance countries must identify Germany alone (DEU). NUTS filters lot performance. Buyer/procedure fields or additional CPV never substitute.
Multi-lot notices are excluded because flat arrays cannot prove each lot's field associations. Absence/exclusion does not prove no tender exists. Identical UUID/version rows are deduplicated per run; conflicting copies are excluded.
| Fields | Meaning |
|---|---|
recordKey, publicationNumber, noticeId, noticeVersion, procedureId, lotId, noticeType | Source identity and notice type. |
titleDe, mainCpv, additionalCpv, mainNature, performanceCountries, performanceNuts | German title and lot classification/location. |
publicationDateRaw, deadlineDateRaw, deadlineTimeRaw, deadline | Raw dates/time; combined deadline requires unambiguous values and matching offsets, otherwise null. |
eventType, winnerSelectionStatus, nonAwardReason, reportedNoticeState, changeReason | Source codes and the classifications explained below. |
changeParentBusinessId, parentReference, comparison, lineageComplete | Explicit parent evidence; lineageComplete is always false. |
sourceUrl, sourceXmlUrl, observedAt, sourceAttribution, transformations | Official links, observation time, credit and processing labels. |
qualityFlags, observationChange | Missing/ambiguous fields and comparison with your supplied snapshot. |
Lifecycle meaning
competition_observation does not mean bidding remains open. deadline_changed requires the exact parent UUID/version, same procedure/lot and two known deadlines. comparison gives before/after, delta seconds and both official links. Both UUIDs can have version 1; version number alone proves no chronology.
lot_closed_no_winner preserves clos-nw: no winner chosen and competition closed. It is not automatically formal cancellation. award_reported preserves selec-w: at least one winner chosen; no winner identity, award value or signed-contract claim is extracted. all-rej includes tenders, requests or projects withdrawn or found inadmissible, not simply "all bids rejected."
reported_notice_state preserves explicit cancel, cancel-intent or susp-review codes separately; it does not infer the status of the entire procedure. Missing, ambiguous, unavailable, out-of-scope or capped parents yield comparison.status: unresolved, with no invented prior value. Only one explicit parent is compared, never full ancestry.
Historical pair 644373-2026 to 674305-2026 proves a move from 2026-10-05T10:30:00+02:00 to 2026-10-07T10:30:00+02:00 (+172800 seconds), not a live opportunity.
Outputs and snapshots
Dataset: qualified observations in JSON or standard Apify exports. OUTPUT: counts, exclusions, unresolved comparisons, errors and coverage. TENDERS: CSV with formula-like cells escaped. SNAPSHOT: compact {recordKey,contentHash} pairs for the next input's previousSnapshots.
observationChange is new/unchanged/changed against supplied source-field hashes, not a legal amendment. Hashes do not authenticate history; absence never means removal. Parent availability alone does not change that hash.
Bounds and coverage
Limits: maxResults 20, maxPages 2, pageSize 20, maxParentLookups 10, maxHttpAttempts 14 including retries, maxRetries 1, timeoutMs 30000 per request/body, 2 MiB per response and 16 MiB total. maxRunTimeMs is at most 60000 including spacing/backoff; storage adds time. Input: at most 1 MiB and 1000 snapshots.
Requests start at least 2.1 seconds apart: our policy, not a claimed TED limit. Bounded Retry-After waits are respected. HTTP 401/403 stops source calls; no challenge bypass. Interrupted fetching fails closed on restart so request/byte/spacing budgets cannot reset; start a fresh explicitly scoped run. Prepared output, delivery and artifact phases support safe same-run recovery.
Stateless page-number results can change mid-run; there is no stable continuation cursor. complete:true requires a short page consistent with the API total, no exclusions/errors and resolved comparisons. It applies only to this bounded query observation, not all German procurement, full lineage or cancellation coverage. Caps, ambiguity and source failures produce partial/failed reports. Narrow or overlap publication windows deliberately.
Pricing and recovery
Pricing is USD 0.01 per delivered qualified distinct observation (USD 10 per 1,000) via notice-returned, with platform usage included. Check the Actor Pricing tab for the actual configuration. No startup fee or notice event applies to empty, excluded or failed observations. Delivered notices with unresolved comparisons are billable; parent lookups and artifacts have no separate event. Separate runs can deliver and charge for the same notice again, including unchanged observations.
A zero spending limit stops before retrieval/delivery. Paid same-run recovery checks exact stored rows and named charge counts; ambiguous acknowledgement stops for reconciliation instead of blindly appending/charging again. Free configuration emits no product event; platform usage follows its selected pricing model.
Source and authority
Source: TED (Tenders Electronic Daily), Publications Office of the European Union, via the Search API. Metadata is normalized; deltas, hashes and quality flags are computed. This independent service is not an official/endorsed TED product. The official notice is authoritative.
Official API documentation supports anonymous access and commercial added-value services. This is not a licence to mirror all content or attachments. The separate TED legal notice applies; no blanket CC BY licence is asserted.