Global Tender Monitor — UK & EU Public Procurement avatar

Global Tender Monitor — UK & EU Public Procurement

Pricing

from $2.10 / 1,000 tender delivereds

Go to Apify Store
Global Tender Monitor — UK & EU Public Procurement

Global Tender Monitor — UK & EU Public Procurement

Monitor UK and EU public tenders in one feed. Returns only notices published since your last run, with buyer, contract value, deadline and CPV codes. Official sources, no API key.

Pricing

from $2.10 / 1,000 tender delivereds

Rating

0.0

(0)

Developer

Dottti

Dottti

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Security

Limited permissions

Share

Watch UK and EU public tenders in one feed and get only the notices published since your last run. Buyer, contract value, deadline, CPV codes and a direct link, normalised into one schema across both sources.

Official government APIs. No API key, no scraping, no proxy needed.

Sources

SourceEndpointWhat it gives
UK Find a TenderOCDS release packagesContract value and currency, buyer, status, deadline
TED (European Union)Expert search API322,000+ notices across all member states

Output

Both sources produce the same fields, so a CSV export stays rectangular and you can sort UK and EU notices together.

{
"source": "uk",
"sourceName": "UK Find a Tender",
"noticeId": "ocds-h6vhtk-05a1b2",
"title": "Assertive Outreach Rough Sleepers",
"buyer": "Caerphilly County Borough Council",
"country": "GB",
"valueAmount": 2400000,
"valueAmountGross": 2880000,
"currency": "GBP",
"status": "active",
"publishedDate": "2026-09-14T13:45:47.000Z",
"deadline": "2026-10-16T11:00:00.000Z",
"cpvCodes": ["85300000"],
"url": "https://www.find-tender.service.gov.uk/Notice/..."
}

Three things handled properly

TED is multilingual and not always in English. Every TED text field arrives as a language map — {"eng": "...", "fra": "...", "hun": "..."} — and some notices carry no English at all. A preferred language is chosen, English is the fallback, and whatever the notice actually has is the last resort. Returning null because English was missing would silently drop real tenders.

IDs are namespaced by source. UK and EU both use plain numeric identifiers, so tracking them in a shared list would let one source's notice hide behind the other's. State is keyed source:id, with a test that asserts two notices numbered 100 both survive.

The first run shows you the current notices. It delivers up to maxItemsPerSource per source and remembers them. Every later run returns only what is new since the run before. RUN_SUMMARY says exactly what was delivered.

Input

FieldWhat it does
sourcesuk, eu, or both.
modenew returns only unseen notices. all returns everything each run.
keywordsKeep only notices whose title, description or buyer matches.
tedQueryTED's own expert-search syntax. It rejects a bare wildcard.
languageThree-letter code for picking from TED's language maps.
stateKeyOne key per watchlist so separate schedules do not interfere.

TED query examples

notice-title ~ (software)
classification-cpv IN (72000000)
buyer-country = NLD

Example: daily watch for IT contracts

{
"sources": ["uk", "eu"],
"mode": "new",
"keywords": ["software", "IT services", "cloud"],
"tedQuery": "classification-cpv IN (72000000)",
"stateKey": "it-contracts"
}

Schedule that daily. The first run returns the current notices; every run after returns only newly published ones.

Notes and limits

  • Contract values are published by the UK source. TED does not include a value in this response shape, so valueAmount is null for EU rows rather than estimated.
  • A rejected TED query returns its error message directly instead of being retried, since a syntax error will not fix itself.
  • If one source fails, the other still delivers and RUN_SUMMARY records the reason.
  • Deleting the named state store resets the baseline, and the next run records a fresh one.

Development

npm install
npm test
node src/main.js