Standard and reduced VAT rates for all 27 EU Member States from the European Commission's Taxes in Europe Database (TEDB): by date, category or CN code, as clean JSON with source and retrieval time. Information only, not tax advice. Not affiliated with the European Commission.
First version. Source: European Commission TEDB VatRetrievalService (SOAP, no auth), docs/compliance/sources.md row k (ALLOW-WITH-CONDITIONS, Petre 2026-10-10, option C).
Input: countries (EU27 TEDB codes, default all; GR accepted for TEDB EL), situationOn (default today UTC) or dateFrom/dateTo (detailed only, ≤ 3,660 days), cnCodes, cpaCodes, categories, outputModesummary | detailed, maxResults, dryRun; hidden mode/healthToken for the maintainer health check.
Output: summary (one record per Member State: general standard rate, other standard rates, distinct reduced/super-reduced/parking rates, other treatments) or detailed (one record per TEDB result: rate type/kind/value, situation date, category, CN/CPA codes, comment). Provenance envelope 1.0.0 with request body digest, TEDB query date, type-XSD hash, record hash, CC BY 4.0 attribution with retrieval date; disclaimer on every record.
Pay per event: country-result (summary) / rate-record (detailed); prices set at publication. On Apify the actor refuses to run without pay-per-event pricing unless PDA_ALLOW_NO_PPE=1 (private builds).
Reliability: strict pinned response shape (unknown element → DRIFT_REPORT, exit 1); TEDB XSD-validation fault on our request → drift; SOAP Client faults (HTTP 500 at TEDB) are not retried; 429/5xx retried with backoff; kill switch checked before every request; ≥ 1 s between requests, 9 countries per request; health mode (RO canary + WSDL/XSD hashes).
Live calls while developing (2026-10-10, UA clearsource/eu-vat-rates@0.1.0 (+https://clearsource.ppftec.com)): WSDL + 2 XSDs (copied to src/schemas/tedb), 3 POSTs rejected as XSD-invalid (wrong child namespace; one kept as a fixture), 3 POSTs recorded as fixtures (27 countries; GR fault; RO+DE CN 0401 range). Greece is EL in TEDB (verified: GR → fault 00002).
src/core copied unchanged from actors/ted-tenders/src/core (npm run check-shared).