Daily EU public tender alerts in Google Sheets with the free TED API
Description and use
Automated collection of new and changed EU tenders via the free TED API, appended daily to a Google Sheet for monitoring.
Problem
Need to automatically collect new or changed EU public tenders matching specific CPV codes and countries and store them in a Google Sheet for daily monitoring.
Outcome
The job runs daily, automatically adding new or updated EU tender notices to a shared Google Sheet, enabling timely alerts.
Workflow
- Query TED search API with CPV and country filters via POST https://api.ted.europa.eu/v3/notices/search
- Parse JSON response, handling pagination with iterationNextToken
- Hash selected fields (notice-title, deadline, buyer-name) to detect changes
- Compare hashes against stored publication-number → hash mapping to identify new or changed notices
- Update local seen.json with latest hashes
- Append new/changed rows to Google Sheet using gspread service account
Evidence
The EU publishes every above-threshold public tender on TED (Tenders Electronic Daily), and it offers a free search API that needs no API key.
The endpoint is POST https://api.ted.europa.eu/v3/notices/search (docs: https://docs.ted.europa.eu/api/latest/search.html).
With gspread and a service account that has edit access to the sheet:
- Record date: 2026-10-16T19:41:33.591Z