The public-tender watcher: stop hearing about the contract after it closed
Councils, hospitals and public bodies publish work you could do. The notices sit on portals nobody has time to read. This sends one short email each morning with the new contracts that match you, each with its deadline.
One morning email with the public contracts you could actually bid on
Paste it into your AI assistant — ChatGPT, Claude, Gemini, whichever you use. It first asks what tools you already have, then rebuilds this blueprint to fit them.
- The buyers you care about must publish to TED or SAM.gov — many small municipal contracts never appear there
- A SAM.gov account and API key if you bid in the US
- A written list of the work you actually bid on, ideally as CPV or NAICS codes
- 8-16 GB of RAM for the local model reading ~80 notices a day
Version history
Public buyers publish roughly 700,000 notices a year in the EU alone, worth around €2 trillion. About 250,000 of those are contracts you can actually bid on. The data is free and public. The reason small firms miss it is not access — it is that nobody has twenty minutes a day to read a procurement portal.
The architecture
the same flow as text
free, no key free key RSS / open data
└─────────────────┴──────────────────┘
▼ 06:30 daily
[ n8n (self-hosted) — the watcher ]
├─ hard filter: your CPV / NAICS codes, country, region, value range
├─ dedupe on notice ID (corrigenda republish the same job)
└─ shortlist out
▼
[ Ollama (local model) — soft scoring ]
│ reads title + scope against your one-page capability profile
│ returns a 0-10 fit score and one plain line: what they want
▼
[ One email, sorted by deadline ] Worth a look · Maybe · Not for you
The model ranks and explains. It never deletes. Rejects stay visible.
Two filters, in this order, and the order is the design decision. The hard filter is deterministic — codes, country, value, deadline — and throws away 95% of the volume for free. Only what survives goes to the model, so a small local model is enough and your daily compute stays near zero. Run it the other way around and you are paying an LLM (large language model) to read 2,000 irrelevant notices a day.
Paste it into your AI assistant — ChatGPT, Claude, Gemini, whichever you use. It first asks what tools you already have, then rebuilds this blueprint to fit them.
The problem
A painting firm, a small IT shop, a translation agency, an engineering consultant: all of them are eligible for public work, and most of them hear about a tender from a colleague two weeks after it closed. The official channels are open — TED (Tenders Electronic Daily) for the EU, SAM.gov for the US federal market — but both are firehoses built for procurement professionals, not for someone running a business between two site visits. The market's answer is a subscription: tender alert services run from about $19-49/month at the entry end (GovConToday, Jorpex) to €300/month (Tendium), £200/month (TenderLake), £500+/month (Stotles) and £1,000+/year (Tracker Intelligence), with per-seat platforms landing above £5,400/year for a three-person team. What you are paying for is a filter. The underlying data is free: TED's Search API is public and needs no key at all, and SAM.gov issues API keys to any registered account. This blueprint builds the filter yourself, once, and keeps it.
Tool choices — and why
POST /v3/notices/search, no authentication, no account, no rate-limit headers observed in the wild. The EU's own developer docs state it plainly: "The Search API does not require a key." You can build the query on the TED website's expert search and paste the same expression into the API. Third-party resellers exist that charge roughly $1 per 1,000 records for this exact endpoint. There is no reason to pay it.Setup outline
- Write the capability profile first, on one page: what you actually do, which CPV codes (EU) or NAICS codes (US) match it, how far you will travel, the smallest and largest contract you can carry, which certifications you hold. This page is the product. Everything below it is plumbing.
- Pick 3-6 codes, not forty. CPV is hierarchical — searching a parent code such as 45000000 (construction works) also matches its subcategories — so a wide net fills your inbox with work you cannot do, and you stop reading the email in week two.
- Test the query on the TED website in expert mode before you build anything. Confirm you get 5-30 hits a week, not 500.
- Deploy n8n behind HTTPS. One workflow, schedule trigger at 06:30 so the digest is waiting with the coffee.
- Build the EU branch: HTTP Request node, POST to the TED search endpoint with your expert query. Dates go in as
YYYYMMDD, and buyer-country takes three-letter codes (BEL,DEU,NLD). - Build the US branch if the US market is relevant: SAM.gov key in the query string, filter on NAICS, set-aside type and posted date.
- Dedupe on the notice ID with Remove Duplicates → "Value Is New". Never on the title.
- Score locally: send title, scope and your profile to Ollama, ask for a 0-10 and one sentence. Group the mail into "Worth a look" (7+), "Maybe" (4-6) and "Not for you" (below 4, listed with the score, one line each).
- Sort the whole mail by deadline, closest first, with days remaining next to each entry. Run it two weeks in parallel with a manual portal check before you trust it.
Pitfalls — what goes wrong when you build this
YYYYMMDD, not ISO-8601, and buyer-country is three letters, not two. That single detail accounts for most failed first attempts.Verified repos
n8n — Sustainable Use License (free self-hosted internal use), 197.8k stars, active (24/07/2026)
Ollama — MIT, 176.8k stars, active (24/07/2026)
Data sources (free, official): TED Search API v3 documentation · TED · SAM.gov Contract Opportunities · EU thresholds 2026-2027 (European Commission)
Get the next blueprint as it publishes — free, practical, verified tooling only.
Subscribe · Want this audited or extended for your business? DM @RXed_EU
What this costs to run
Priced as Classify & route — one email or ticket including a short quoted thread; output is a label plus a one-line reason. one pass per published notice to decide if it is worth your morning email. Adjust the volume to yours; the bill is a range because the assumptions are ranges.
| Model | $/day | $/month | Reasoning |
|---|
Cheapest eight shown — straight per-token
arithmetic on list prices: no caching, no batch discount, thinking tokens bill as output.
All models + every assumption in the full explorer →
Capability & cost data: Artificial Analysis