EU TED Public Procurement & Tenders Scraper (MCP-Ready)
Pricing
from $2.00 / 1,000 results
EU TED Public Procurement & Tenders Scraper (MCP-Ready)
Extract live European Union public procurement notices, government tenders, contracting authorities, CPV codes, and contract values via the official EU TED Search API v3 with eForms UBL XML fallback.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Vladimir Tsaplin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
EU TED Public Procurement & Tenders Scraper — Self-Healing Apify Actor & MCP Server (eu-ted-procurement-tenders-mcp)
{"id": "ted:15980-2026","publication_number": "15980-2026","publication_date": "2026-01-12","title": "Ireland - Security software development services - Provision of Security Operations Centre and Cyber Defence services to the Rehab Group","buyer_name": "The Rehab Group","country_code": "IRL","cpv_codes": ["72212730", "72212732", "72611000"],"notice_type": "cn-standard","total_value": 500000.0,"ted_url": "https://ted.europa.eu/en/notice/-/detail/15980-2026","pdf_url": "https://ted.europa.eu/en/notice/15980-2026/pdf","ppe_event": "ted_notice_extracted","billable": true,"network_mode": "live_eu_ted_v3_api","extracted_at": "2026-10-28T19:15:00Z"}
Keywords: EU TED Tenders, European Public Procurement, CPV Code Tender Monitor, B2B Government Contracts, MCP Server, eu-ted-api-v3, eforms-ubl-xml
Why B2B Bid Teams, GovTech Vendors & RevOps Use This Actor (ROI vs. DIY)
Public sector procurement across the 27 EU Member States and EEA exceeds EUR 2 trillion annually on Tenders Electronic Daily (TED). Following the European Commission's migration to the TED Search API v3 (api.ted.europa.eu/v3/notices/search) and eForms UBL XML (Regulation 2019/1780), legacy HTML scrapers and v2 integrations fail or return unnormalized multilingual dictionaries. This Actor converts complex CPV, ISO country, and keyword filters into clean, English-prioritized B2B contract records ready for CRM ingestion or AI agent tool-calling via the Apify MCP Server.
| Approach | Setup & Maintenance Effort | eForms & Multilingual Normalization | MCP / AI Agent Ready | Cost Structure |
|---|---|---|---|---|
| In-House Script (DIY) | 18-30 hrs (TED v3 Expert Query syntax + 24-language map + UBL XML parser) | Breaks when notices omit English titles or switch eForms subtypes | Manual wrapper required | EUR 900+ engineering setup |
| Enterprise Tender Portals | Multi-week sales onboarding & annual seat lock-in | High | Closed proprietary web UI | EUR 350-EUR 1,200/mo minimum |
This Actor (eu-ted-procurement-tenders-mcp) | 0 hrs (Instant Apify API, CLI, or MCP) | 3-Tier Self-Healing (TED API v3 + eForms UBL XML + HTML/JSON-LD) | Native JSON & MCP Schema | Pay-Per-Event ($0.002 / notice) |
30-Second Copy-Paste Quickstart
Run a live EU TED procurement query filtering by keyword, 8-digit CPV codes (72000000 IT Services, 48000000 Software Packages), and 2-letter or 3-letter ISO buyer countries:
python3 workspaces/actors/eu-ted-procurement-tenders-mcp/main.py \--query "cybersecurity" \--cpv "72000000,48000000" \--countries "DE,FR,NL,IE" \--published-after "2026-01-01" \--max-items 5
Or pass an inline JSON configuration payload matching INPUT_SCHEMA.json:
python3 workspaces/actors/eu-ted-procurement-tenders-mcp/main.py \--input-json '{"searchQuery":"cloud","cpvCodes":["72000000","48000000"],"countries":["DEU","FRA","NLD","IRL","CYP"],"publishedAfter":"2026-01-01","maxItems":10}'
Run the built-in deterministic self-test and unit test suite:
python3 workspaces/actors/eu-ted-procurement-tenders-mcp/main.py --self-testpython3 -m unittest discover -s workspaces/actors/eu-ted-procurement-tenders-mcp -p "test_*.py" -v
3-Tier Self-Healing EU TED Extraction Architecture
- Pre-Flight Query Builder & ISO/CPV Normalizer (
build_ted_expert_query):- Automatically maps 2-letter ISO-3166-1 alpha-2 country codes (
DE,FR,NL,IE,CY,EL/GR,UK/GB,SE,PL, etc.) to the mandatory 3-letter ISO-3166-1 alpha-3 codes required by TED v3 (DEU,FRA,NLD,IRL,CYP,GRC,GBR,SWE,POL). - Sanitizes 8-digit CPV codes (
normalize_cpv_codes), stripping optional check digits (48000000-8->48000000). - Validates
publishedAfterdates (YYYY-MM-DDorYYYYMMDD) and compiles valid TED v3 Expert Search queries (publication-date >= 20260101 AND buyer-country IN (DEU FRA) AND classification-cpv IN (72000000) AND FT ~ "cybersecurity").
- Automatically maps 2-letter ISO-3166-1 alpha-2 country codes (
- Tier 1 Primary — Official EU TED Search API v3 (
POST https://api.ted.europa.eu/v3/notices/search):- Queries the official European Union Publications Office REST v3 endpoint with pagination, exponential backoff on HTTP
429/5xx, and deterministic multilingual resolution (extract_multilingual_text) across all 24 official EU languages (prioritizing Englisheng, thendeu,fra,nld,esp,ita).
- Queries the official European Union Publications Office REST v3 endpoint with pagination, exponential backoff on HTTP
- Tier 2 Fallback — Official EU TED eForms UBL XML Parser (
parse_ted_eforms_xml):- If the TED Search API gateway experiences transient maintenance, the Actor automatically falls back to parsing official eForms UBL XML notices (
https://ted.europa.eu/en/notice/{publication_number}/xml), extracting<efbc:NoticePublicationID>,<cac:PartyName>,<cac:ProcurementProject>,<cbc:EstimatedOverallContractAmount>, and<cbc:ItemClassificationCode listName="cpv">.
- If the TED Search API gateway experiences transient maintenance, the Actor automatically falls back to parsing official eForms UBL XML notices (
- Tier 3 Self-Healing HTML & JSON-LD Fallback (
extract_with_fallbacks):- Multi-tier regex and
application/ld+jsonselector chain with strictBrokenSelectorErrorenforcement so corrupt or empty responses are never billed.
- Multi-tier regex and
Input & Output Schema Reference
Input Parameters (INPUT_SCHEMA.json)
searchQuery(string, optional): Keyword (e.g."software","cloud","cybersecurity") or raw TED v3 Expert Search expression.cpvCodes(array of strings, optional): 8-digit CPV classification codes (e.g.["72000000", "48000000"]).countries(array of strings, optional): Buyer countries in 2-letter (DE,FR,CY) or 3-letter (DEU,FRA,CYP) ISO format.publishedAfter(string, optional): Publication date floor inYYYY-MM-DDorYYYYMMDDformat (default"2026-01-01").maxItems(integer, required, default25, min1, max500): Maximum number of procurement notices to extract.
Output Record Fields
publication_number: Official TED publication identifier (e.g."15980-2026").publication_date: Notice publication date (YYYY-MM-DD).title: Normalized tender title (English preferred with automatic EU multilingual fallback).buyer_name: Official legal name of the contracting authority.country_code: 3-letter ISO-3166-1 alpha-3 buyer country code (DEU,FRA,IRL, etc.).cpv_codes: Deduplicated array of 8-digit CPV classification codes.notice_type: Official TED notice type (cn-standard,can-standard,pin-only, etc.).total_value: Disclosed estimated or total contract value (numeric ornullwhen not disclosed by the buyer).ted_url: Canonical URL to the notice onted.europa.eu.pdf_url: Direct link to the official notice PDF.ppe_event:"ted_notice_extracted".billable:truewhen the record passes schema validation.network_mode:"live_eu_ted_v3_api"(or"live_eu_ted_eforms_xml"on Tier 2 failover).extracted_at: ISO-8601 UTC extraction timestamp.
Scope & Compatibility (What's Included / What's Not Included)
- What's Included:
- Zero-dependency Python 3.11+ Apify Actor (
main.py) querying the official EU TED Search API v3 (POST https://api.ted.europa.eu/v3/notices/search) with automatic 2-to-3 letter ISO country code normalization, 8-digit CPV code sanitization, multilingual field extraction, and eForms UBL XML fallback. - Direct links to the official TED HTML notice (
ted_url), multilingual PDF (pdf_url), and machine-readable eForms XML (xml_url). - Full Apify Store and Model Context Protocol (MCP) compatibility (
INPUT_SCHEMA.json,.actor/actor.json,.actor/dataset_schema.json,.actor/output_schema.json,Dockerfile, andtest_actor.py).
- Zero-dependency Python 3.11+ Apify Actor (
- What's Not Included (Anti-Refund Warranty Boundary):
- Does not bypass password-protected national e-Tendering portals (such as external buyer login portals linked inside tender specifications for submitting sealed bids).
- Does not populate
total_valuewhen the contracting authority has legally omitted or redacted the estimated contract value in the official TED notice (total_valuewill benullin those cases). - Does not cover municipal micro-tenders below EU publication thresholds that are not published in the Supplement to the Official Journal of the European Union (OJ S / TED).