How to Scrape EU TED Procurement Notices
Search and export structured EU public procurement notices from the official TED API without maintaining a browser scraper.

the European Union's official TED Search API v3 already exposes structured records, so browser scraping would add fragility without adding data. The EU TED Tenders Scraper handles pagination, retries, normalization, deduplication, and Apify dataset output.
Pick a bounded query
The Actor accepts keywords, ISO alpha-3 buyer countries, CPV codes, and publication dates. Start with one narrow query and a small result cap. Inspect the returned rows before increasing volume. A broad default is convenient for a demo, but it is a poor production specification.
{
"queries": [
"artificial intelligence"
],
"maxResultsPerQuery": 100
}Each row contains buyer names, country and city, CPV codes, publication date, bid deadlines, estimated value, currency, form type, and notice type. The natural key is publication_number. Use it when merging reruns; dataset row order is not an identity.
Export and verify
Run the Actor from the Apify Console, API, or a saved Task. JSON preserves arrays and nulls best. CSV is convenient for a quick spreadsheet review, but inspect how arrays were serialized before importing it into a warehouse.
Open several source links and compare identifiers, dates, and one multi-value field with the published record. TED text is multilingual. The Actor prefers English where the notice supplies it, but some titles remain in another source language. Buyers and CPV codes are arrays because one notice can contain several of each.
A good first run answers two questions: does the query find the intended population, and can every important row be traced back to the publisher? Scale only after both answers are yes.
Frequently asked questions
Does this Actor use an official data source?
Yes. It queries the publisher's official public API and returns normalized records with traceable identifiers and source links.
Can I schedule this workflow?
Yes. Save the validated input as an Apify Task, attach a schedule, and compare each successful dataset with the previous snapshot.