# EU Tenders Scraper - TED Notices, Deadlines & Contract Values

Search official EU TED tenders by CPV, country, date or keyword. Get buyers, notice stages, published deadlines, separate estimated and awarded values, currencies and source links. No API key.

Canonical product page: https://mayd-it.com/data-tools/actors/eu-tenders-scraper/
Public Actor: https://apify.com/maydit/eu-tenders-scraper

## Example input

```json
{
  "cpvCodes": [
    "72000000"
  ],
  "lookbackDays": 30,
  "maxItems": 10
}
```

## Full guide

![TED notices, with the context intact — illustrative workflow](https://api.apify.com/v2/key-value-stores/YGxD9JRpduom8Q5Zd/records/eu-tenders-scraper-4f083135fc49.png?signature=1JdCOQINbuGpyXyHOmvKS)

## TED notices, with the context intact

Build a sourced procurement research list for business development or market analysis. Each row is an official TED notice, with its stage, buyer information and available published values.

[Open this Actor in Console](https://console.apify.com/actors/vAwVHKhF21WQqlfqr/input) · [First run](#try-this-actor) · [Results](#result-preview) · [Cost](#usage-and-pricing) · [Full guide](#full-guide)

## Try this Actor

1. **Choose a small scope.** Use the existing IT-services example below: CPV `72000000`, a thirty-day lookback and at most twenty notices. Add buyer countries or notice types only when you want a narrower search.
2. **Run and review.** Open the dataset and check `noticeStage` before treating a row as a bidding opportunity. The run's key-value-store `SUMMARY` records the exact query, saved counts and stop reason.
3. **Use the results.** Export CSV for a notice list or JSON for multiple buyers, countries and deadlines. Keep the official notice link when sharing results.

**Read this before using the data:** Not every notice is an open competition. Dates may be unpaired across lots, and a deadline today may already have passed locally. Estimated and awarded values are different fields; missing amounts stay null.

**Copyable input** — use the JSON editor in Console.

```json
{"cpvCodes":["72000000"],"lookbackDays":30,"maxItems":20}
```

## Result preview

The dataset view highlights these columns:

- **Publication number** · `publicationNumber`
- **Publication date** · `publicationDate`
- **Title** · `title`
- **Language** · `titleLanguage`
- **Notice type** · `noticeType`
- **Notice stage** · `noticeStage`

Use the original source links and the field definitions below when interpreting the results. CSV works well for flat columns; JSON preserves nested values.

## Usage and pricing

Base result rate on the FREE tier: **$2 per 1,000 procurement notices**. The [Pricing tab](https://apify.com/maydit/eu-tenders-scraper/pricing) shows your plan's result rate and any Actor Start charge. Set a small result limit for the first run; the requested limit is not a guarantee of that many results.

---

## Full guide

Search the official EU TED procurement feed and get one row per notice. Filter by CPV category, buyer country, publication date, notice type or a word/phrase. Each result keeps the source notice number, original language, published deadlines, estimated value and awarded value with their separate currencies.

No API key, browser or proxy is needed. Empty input returns up to 20 recent notices from the last 30 days. Notices are ordered by publication date, newest first, and only the latest notice versions are requested.

### Useful searches

Use the [copyable first-run input](#try-this-actor) above.

This finds IT services procurement notices in TED's CPV hierarchy. To focus on German competition notices:

```json
{"buyerCountries":["DEU"],"noticeTypes":["cn-standard"],"maxItems":20}
```

For software notices across countries:

```json
{"keywords":"software","maxItems":20}
```

### What the results mean

| Output | Meaning |
| --- | --- |
| `publicationNumber`, `noticeId`, `noticeVersion` | Stable source identifiers. One publication number per row. |
| `publicationDate`, `publicationDateRaw` | Calendar date plus the source value, which may include an offset. |
| `title`, `titleLanguage`, `description` | Preferred language when published; otherwise an explicitly identified fallback. No translation. |
| `noticeType`, `noticeStage` | Source code and broad planning/competition/award-or-result/other grouping. This is not a bidding-eligibility decision. |
| `buyerNames`, `buyerCountries` | Buying organizations and where they are based. Countries may differ from the place of performance. |
| `cpvCodes` | Deduplicated procurement classification codes. |
| `estimatedValue`, `estimatedCurrency` | Procedure-level estimate when published. |
| `awardedValue`, `awardedCurrency` | Notice-level result value when published. Kept separate from the estimate; never converted to another currency. |
| `deadlineDates`, `deadlineDatesRaw`, `deadlineTimesRaw` | Published lot submission dates and times. TED's search response does not reliably pair these arrays to individual lots; the Actor does not invent that relationship. |
| `earliestFutureDeadlineDate`, `daysUntilEarliestFutureDeadline` | Earliest published date on or after today's UTC calendar date, and calendar days until it. A deadline today may already have passed at its local time. |
| `deadlineStatus` | Whether a date is absent, unparseable, all past, or includes today/future. This does not assert that a procedure is open. |
| `sourceUrl`, `xmlUrl`, `retrievedAt` | Official records to verify details and the collection time. |

Budget and awarded values are frequently absent, especially for planning/competition notices. Missing values are `null`, never zero. The Actor does not add personal contact details or download procurement attachments.

### Inputs

| Input | Default | Meaning |
| --- | --- | --- |
| `keywords` | empty | Full-text search. Multiple words are one exact phrase. |
| `cpvCodes` | empty | 8-digit codes or prefixes such as `72*`; any may match. Parent codes include the source's CPV hierarchy. |
| `buyerCountries` | empty | Any three-letter country codes, e.g. `DEU`, `FRA`, `IRL`. |
| `noticeTypes` | empty | Any TED codes, e.g. `cn-standard`, `can-standard`, `pin-only`. |
| `fromDate`, `toDate` | recent window / no end | Inclusive publication dates, `YYYY-MM-DD`. |
| `lookbackDays` | 30 | Recent window used when `fromDate` is absent. |
| `preferredLanguage` | `eng` | Three-letter language code; fallback language is shown. |
| `maxItems` | 20 | Maximum saved notices, 1–10,000. |
| `pageSize` | 50 | API results per request, 1–100. |
| `includeRaw` | false | Include selected API fields, not full XML. |
| `maxRunSeconds` | 240 | Wall-clock budget, at least 30 seconds. |

Filters are combined with AND; entries within a list use OR. `SUMMARY` records the exact query sent to TED, so results can be audited against the source.

### Coverage and recurring use

The Actor follows TED iteration tokens and deduplicates publication numbers. `SUMMARY` reports the source match count, scanned and saved counts, pages, skipped malformed records, field fill counts and the stop reason. `complete: true` means the requested source query was exhausted without detected errors. The default 20-row sample is usually capped and therefore has `complete: false`; this is expected. A larger limit or narrower filters returns more of the query. When the platform's spending cap is reached, `stoppedOnChargeLimit: true` identifies the stop, only notices actually saved are counted, and the run warns rather than reporting a source outage or an empty search.

Schedule the same search for current snapshots. This version does not keep a cross-run change baseline; deduplicate or compare `publicationNumber` and `noticeVersion` in your workflow. A broad newest-first query can contain award notices, planning notices and corrections as well as bidding opportunities. Read the official notice before acting on a deadline.

An honestly empty search warns and returns no rows. Transient network/server failures and rate limits retry up to three attempts while honoring `Retry-After` and the run budget. An API outage, malformed response or exhausted time budget before the first usable notice fails visibly. Later failures preserve already collected rows and mark the coverage partial.

### Data source and reuse

The [TED Search API](https://docs.ted.europa.eu/api/latest/search.html) is public and requires no authentication. TED's [legal notice](https://ted.europa.eu/en/legal-notice) allows commercial and noncommercial reuse of procurement notices unless otherwise noted and dedicates system metadata to CC0. Source: TED / Publications Office of the European Union. Fields are selected, normalized and derived as described above. This Actor is independent of TED.

### Pricing

Launch price: $0.002 per saved notice on FREE/BRONZE, with plan discounts. Actor Start: $0.00005. Check the live Pricing tab for the applied rate. A 20-notice run costs $0.04 in result charges; empty searches have no result charge. Run summaries and errors are not dataset result rows.

## Help with your run

Open the **Issues** tab on this Actor with the run URL, the input field that caused trouble and what you expected to receive. Remove API keys and private information before posting.

[Explore more Mayd-It Actors](https://apify.com/maydit)

## Understand your run

Open **Run report** in the run’s Output tab for saved-record counts, reported source issues and limits, and suggested next steps. Use **CSV export** to take the saved results into a spreadsheet. The existing JSON results and detailed machine-readable summary remain available.

The report reflects this run’s recorded coverage. A successful run or a saved result does not establish that every possible source record was collected.
