---
name: ted-search-api-ingestion
description: "How to get EU TED Search API data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load keyless TED procurement notices into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/ted-search-api
Provider: https://docs.ted.europa.eu/api/latest/search.html
Checked against the provider's documentation: 2026-11-02

## Access
- The Search API for published notices is anonymous and does not require an EU Login or API key.
- Other TED APIs that manipulate unpublished notices require an API key.

## Request
```bash
curl -X POST 'https://api.ted.europa.eu/v3/notices/search' -H 'Content-Type: application/json' -d '{"query":"publication-date=20261102","fields":["publication-number","publication-date","notice-title"],"page":1,"limit":5}'
```

## Format
JSON with notices, a total-notice count, timeout state and optional iteration token. Notice fields can contain multilingual objects and links to XML, PDF and HTML renditions.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""TED notices published on 2026-11-02 -> pandas -> Parquet."""
import requests
import pandas as pd

URL = "https://api.ted.europa.eu/v3/notices/search"
body = {
    "query": "publication-date=20261102",
    "fields": ["publication-number", "publication-date", "notice-title"],
    "page": 1,
    "limit": 5,
}
r = requests.post(URL, json=body, timeout=60)
r.raise_for_status()
notices = r.json()["notices"]
df = pd.DataFrame([{
    "publication_number": x.get("publication-number"),
    "publication_date": x.get("publication-date"),
    "title_en": (x.get("notice-title") or {}).get("eng"),
} for x in notices])
df.to_parquet("ted_notices_2026_11_02.parquet", index=False)
print(len(df), "notices; publication date", df["publication_date"].iloc[0])
```
Run by us on 2026-11-02 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 5 notices; publication date 2026-11-02+01:00

## Limits
- Rate limit: Not stated.
- Page-number mode retrieves at most 15,000 notices, with at most 250 notices and 10,000 fields per page.
- Iteration mode has no total-notice cap but retains the 250-notice and 10,000-field per-page limits.

## Quirks
- Expert-query syntax uses field names such as publication-date=20261102; invalid syntax returns a structured HTTP 400 response.
- notice-title is a language-code object, so select a language such as eng or retain the full mapping.
- publication-date values can include a UTC offset after a date without a time, such as 2026-11-02+01:00; preserve the source string unless a downstream convention is defined.

## Terms and attribution
- TED documentation presents published notices for reuse and analysis without Search API authentication.
- Acknowledge the source and indicate changes for EU-owned editorial content.
- Check individual notices for third-party works, identifiable-person rights and any specific copyright notice.
- Terms page: https://ted.europa.eu/en/legal-notice

## Sources
- https://docs.ted.europa.eu/api/latest/index.html: "TED API allows anonymous access to all services manipulating published notices (i.e., searching for or retrieving notices already published on TED)."
- https://docs.ted.europa.eu/api/latest/search.html: "The Search API allows access to published procurement notices for analysis and reuse, promoting transparency."
- https://docs.ted.europa.eu/ODS/latest/reuse/search-api.html: "Maximum number of retrievable notices: 15k."
- https://docs.ted.europa.eu/ODS/latest/reuse/search-api.html: "Maximum number of notices per page: 250."
- https://op.europa.eu/en/web/about-us/legal-notices/publications-office-of-the-european-union-copyright: "This means that you can reuse it provided you acknowledge the source and indicate any changes you have made."

## Help improve this skill
Missing a source, or see something to improve? Call the MCP tool suggest_source or feedback (or POST /api/suggest or /api/feedback). Reviewed ideas: https://signal-lab-jet.vercel.app/agent-suggestions

Information for educational purposes only. Free tiers, limits and licenses belong to the providers and may change; check the provider's own terms before using the data.
