TED EU Procurement Scraper - Tenders & Award Notices
Pricing
Pay per event
TED EU Procurement Scraper - Tenders & Award Notices
Scrape EU public procurement from TED: buyer, CPV codes, estimated and awarded value, winner, subcontractors, NUTS region, SME flag. Filter by country, CPV, value band, date.
Pricing
Pay per event
Rating
0.0
(0)
Developer
BowTiedRaccoon
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Scrape EU public procurement notices from TED (Tenders Electronic Daily), the official OJEU portal. Returns tender opportunities, award notices, prior-information notices, and corrigenda with buyer, CPV codes, estimated and awarded value, winner, subcontractors, NUTS region, and SME flag — roughly 1M+ notices published per year across 27 EU member states plus EEA.
No API key. No proxy. No browser. Pure JSON over the TED Public Expert Search API v3.
TED EU Procurement Scraper Features
- Extracts 30+ fields per notice — buyer, CPV, estimated value, awarded value, winner, SME flag, NUTS region, deadlines, subcontractors, document URLs
- Filters by country, CPV code, NUTS region, publication-date range, minimum estimated value, and SME-winner-only
- Covers four notice kinds in one actor — tender opportunities, award notices, prior information, and modifications
- Normalises multi-language free-text fields to a preferred language (default English) with graceful fallback
- Streams through the full TED Expert Search API with 1-based pagination and total-count termination
- Runs in 512MB memory with no proxy requirement
- Two-view output: one view for bidders (open tenders), one for competitor intelligence (award notices)
What Can You Do With TED EU Procurement Data?
- B2G sales teams — Track new tender opportunities in your CPV codes and countries, and feed them into a CRM
- Competitive intelligence — Pull award notices with winner name and awarded value to map who is winning which contracts
- Lobbying and policy research — Aggregate public spending patterns across ministries, agencies, and NUTS regions
- SME market entry — Filter to SME-winner-only results and see which small firms are landing government contracts
- Due diligence — Cross-reference vendors and subcontractors against their EU public-sector revenue
How TED EU Procurement Scraper Works
- Pick your filters — notice types, countries, CPV codes, NUTS regions, date range, minimum value, SME-only
- The scraper composes a TED Expert Search query and paginates the API 100 records per page
- Each notice is flattened into a row-per-notice record with consistent field names across all four notice kinds
- Results stream into the Apify dataset — you can export to JSON, CSV, or Excel, or feed directly into another actor
Input
{"noticeTypes": ["award"],"countries": ["DEU", "FRA"],"cpvCodes": ["71220000"],"publishedAfter": "2024-01-01","publishedBefore": "2024-12-31","minEstimatedValueEur": 100000,"onlySmeWinners": false,"preferredLanguage": "eng","maxItems": 500}
| Field | Type | Default | Description |
|---|---|---|---|
noticeTypes | array | [] (all) | Notice kinds: prior_info, contract, award, modification |
countries | array | [] (all) | Buyer countries as ISO 3-letter codes (e.g. POL, DEU, FRA) |
cpvCodes | array | [] | EU Common Procurement Vocabulary codes, 8 digits |
nutsCodes | array | [] | EU NUTS region codes (e.g. PL418, DE268) |
minEstimatedValueEur | integer | 0 | Lower bound on estimated-value-glo, in the notice's currency unit |
publishedAfter | string | 30 days ago | Earliest publication date (YYYY-MM-DD) |
publishedBefore | string | today | Latest publication date (YYYY-MM-DD) |
onlySmeWinners | boolean | false | On award notices, keep only winners flagged as SMEs |
preferredLanguage | string | eng | Preferred language for titles, buyer names, descriptions |
maxItems | integer | 100 | Maximum notices to return across the whole run |
proxyConfiguration | object | {} | Optional — TED is a public API and does not need proxies |
Example: German contracts over €100K from the last year
{"noticeTypes": ["contract"],"countries": ["DEU"],"minEstimatedValueEur": 100000,"publishedAfter": "2024-01-01","maxItems": 1000}
Example: Award notices to SME winners in architectural services
{"noticeTypes": ["award"],"cpvCodes": ["71220000", "71200000"],"onlySmeWinners": true,"preferredLanguage": "eng","maxItems": 500}
TED EU Procurement Scraper Output Fields
Every record is flat, CSV-friendly, and uses the same schema across all four notice kinds. Empty fields are returned as "" or null, not omitted.
{"noticeId": "192938-2026","noticeType": "contract","noticeSubtype": "cn-standard","publicationDate": "2026-03-20","deadlineDate": "2026-04-24","awardDate": "","country": "DEU","nutsCode": "DE268","title": "Germany – Telephone and data transmission services – Auswahlverfahren Großlangheim - Gigabit-RL 2.0","titleLanguage": "eng","description": "Der Netzbetreiber, dem nach Abschluss dieses Auswahlverfahrens der Zuschlag erteilt wird, erhält eine Dienstleistungskonzession zum Aufbau und Betrieb eines gigabitfähigen Netzes für das Erschließungsgebiet...","buyerName": "Markt Großlangheim","buyerCity": "Großlangheim","buyerCountryCode": "DEU","buyerLegalType": "la","procedureType": "","cpvMain": "64210000","cpvCodes": ["64210000", "32412000", "32561000", "32562000", "32562100", "32562300", "64215000"],"estimatedValueEur": null,"estimatedValueCurrency": "","awardedValueEur": 550000,"awardedValueCurrency": "EUR","placeOfPerformance": "DE268, DEU","frameworkAgreement": false,"winnerName": "","winnerCountry": "","winnerIsSme": false,"subcontractors": "","documentUrls": ["https://ted.europa.eu/en/notice/-/detail/192938-2026","https://ted.europa.eu/en/notice/192938-2026/xml","https://ted.europa.eu/en/notice/192938-2026/pdf"],"url": "https://ted.europa.eu/en/notice/-/detail/192938-2026"}
| Field | Type | Description |
|---|---|---|
noticeId | string | Publication number, e.g. 192938-2026 |
noticeType | string | Category: prior_info, contract, award, or modification |
noticeSubtype | string | Raw TED notice-type code (e.g. cn-standard, can-standard, pin-only, corr) |
publicationDate | string | ISO 8601 publication date |
deadlineDate | string | Submission deadline (ISO 8601), when present |
awardDate | string | Winner-decision date on award notices (ISO 8601), when present |
country | string | Buyer country ISO 3-letter code |
nutsCode | string | Primary NUTS region code for place of performance |
title | string | Notice title in the preferred language |
titleLanguage | string | Actual language returned for the title |
description | string | Notice description in the preferred language, truncated at 2000 characters |
buyerName | string | Buyer organisation name |
buyerCity | string | Buyer city |
buyerCountryCode | string | Buyer country ISO code |
buyerLegalType | string | Buyer legal-type code (la = local authority, cga = central government, 8 = regional, etc.) |
procedureType | string | Procedure-type code (open, restricted, neg-wo-call, comp-dial, etc.) |
cpvMain | string | Primary CPV code |
cpvCodes | array | All CPV codes on the notice |
estimatedValueEur | number | Estimated total contract value (see currency field for unit) |
estimatedValueCurrency | string | Currency code for estimated value |
awardedValueEur | number | Final awarded value on result notices |
awardedValueCurrency | string | Currency code for awarded value |
placeOfPerformance | string | NUTS codes joined comma-separated |
frameworkAgreement | boolean | Whether this notice is part of a framework agreement |
winnerName | string | Awarded winner organisation name |
winnerCountry | string | Winner country ISO code |
winnerIsSme | boolean | Whether the winner is flagged as an SME |
subcontractors | string | Subcontractor names, comma-separated |
documentUrls | array | Deep-link URLs — HTML detail, XML, PDF |
url | string | Canonical TED detail page URL |
FAQ
How do I scrape TED EU procurement data?
TED EU Procurement Scraper uses the public TED Expert Search API v3 — no API key, no account, no proxy. Pick your filters, set maxItems, and run. The actor paginates the API 100 records per page until it hits your cap or exhausts the query.
How much does TED EU Procurement Scraper cost to run?
Pricing is pay-per-event: a small fee per actor start plus a fraction of a cent per record saved. A full year of German contracts (≈50K records) runs roughly a few dollars. Pulling 100 records costs basically nothing.
Can I filter by CPV code or NUTS region?
Yes. Pass cpvCodes as an array of 8-digit codes and nutsCodes as an array of NUTS identifiers. The filters are applied server-side as OR groups, so cpvCodes: ["71220000", "71200000"] returns any notice matching either code.
Does this return award notices with the winner?
Yes — that's the point of the actor. Set noticeTypes: ["award"] and the output includes winnerName, winnerCountry, winnerIsSme, awardedValueEur, awardedValueCurrency, and subcontractors on every record where TED has that data. Coverage varies by publishing authority; large EU central buyers are most consistent.
What languages are the titles and descriptions in?
TED publishes notices in the buyer's language and also provides a translation in each of the 24 EU languages for machine-readable fields. Set preferredLanguage to your desired code (eng, fra, deu, ita, spa, pol, nld, por, ces, swe). The scraper returns the requested language if available and falls back to English or any other available language. The chosen language is reported in titleLanguage.
Does TED EU Procurement Scraper need a proxy?
No. TED is a public EU portal with a rate-friendly API. The actor makes one request every 200ms and handles pagination cleanly up to the API's total-count limit.
Need More Features?
Need row-per-lot output, XML schema parsing, or a different set of fields? File an issue or get in touch.
Why Use TED EU Procurement Scraper?
- Full coverage — All four TED notice kinds in one schema: tenders, awards, prior info, modifications
- Award-notice parsing — Winner name, awarded value, SME flag, and subcontractor list on every award record — the fields most actors stop before reaching
- Clean flat output — One row per notice with consistent field names, ready for CSV, BI tools, or a CRM, instead of the nested XML most TED consumers end up writing their own parser for