TL;DR — WHAT THE CLIENT GOT
A Kyiv construction company was spending 1.5+ hours daily monitoring Prozorro manually — and still missing contracts. We deployed a two-scanner n8n bot: one runs every 15 minutes against the live Prozorro API, one monitors procurement plans 30+ days before tenders are published. Every match hits the team's Telegram with a full document summary. Their monitoring headcount dropped to zero.
Monthly infrastructure cost: ~$12. Manual hours eliminated: 30+. Bids submitted per month: tripled.
THE REAL COST
Prozorro publishes 2,800–3,200 new tenders every business day. A construction company competing for government contracts must watch dozens of CPV categories simultaneously: roads, municipal buildings, infrastructure, materials. Manual monitoring means:
Daily grind — a manager spending 1–2 hours filtering irrelevant tenders by hand, every single day
Slow discovery — tenders found 12–24 hours after publication, handing competitors the preparation time you lost
Document blindness — reading tender metadata but skipping the actual specification PDFs where real disqualifiers hide
Zero advance notice — no visibility into procurement plans that signal a contract 30–90 days before it goes live
This client submitted 3–4 bids per month before automation. At 1.5 hours of daily monitoring, that's 33 hours per month of human time spent on a task that a script now handles in 4 minutes — around the clock.
THE NUMBERS
HOW IT WORKS
Error Trigger — active on every node. Sends failure details to owner via Telegram instantly.
PHASE 1
The main scanner wakes up every 15 minutes and queries the Prozorro API for new publications. It doesn't scan everything — it filters immediately against the client's CPV codes, budget range, and procurement region. Tenders already in the database are skipped in a single Postgres lookup. Only genuinely new, potentially relevant tenders continue through the pipeline.
While a competitor's manager starts their morning Prozorro check at 9am, this client's bot already sent 37 overnight alerts — and their team has been reviewing documents since 6am.
PHASE 2
Most monitoring tools stop at tender metadata. This bot goes further. Two branches fire in parallel after a CPV match is confirmed:
Each tender is scored against the company profile: CPV code weight, estimated budget vs. company capacity, procurement region, buyer history, and keyword matches in the title and description. Tenders scoring below 50 are logged silently. High-score tenders trigger an alert.
Specification files (PDF, DOC, DOCX) are downloaded and parsed using mammoth, pdf-parse, and antiword. Claude AI extracts key requirements: materials spec, qualification criteria, timeline, special conditions. The summary appears in the Telegram alert — no PDF-opening required.
PHASE 3
Ukrainian government entities publish procurement plans before tenders go live. Most companies ignore plans entirely — they're harder to parse and feel too abstract. This scanner turns them into a concrete advantage.
30–90 days early — the bot detects a planned tender before it's published, giving the team time to prepare documentation, line up subcontractors, and price the bid without rushing
Budget signals in advance — planned budgets are visible before the tender drops, letting the client decide early whether the contract is worth the effort
Repeat customer alerts — buyers from the company's win history are flagged automatically as high-priority when their plans appear
In the first month alone, the Plans scanner identified 23 upcoming tenders the client had never seen in their manual process. Preparation started 6 weeks before those tenders went live on Prozorro.
PHASE 4
Alerts are not raw JSON dumps. Each Telegram message is structured for a 10-second decision: pursue or skip.
0–100 score with color coding. 80+ = high priority, pursue immediately. Below 50 = not sent.
Title, buyer, estimated budget, submission deadline, procurement region. Everything needed to decide in one glance.
Requirements pulled from spec files by Claude AI: materials, qualifications, timeline, special conditions. No PDF-opening required.
Direct link to the Prozorro tender page. Direct link to download documents. No navigation, no search bar.
The Telegram bot also accepts commands: /stats shows pipeline summary, /analyze runs on-demand tender analysis, /settings adjusts scoring thresholds without touching the workflow.
FULL WORKFLOW
| Node | Type | Function |
|---|---|---|
| Cron Trigger (15 min) | scheduleTrigger | Wakes the main scanner every 15 minutes, 24/7 |
| Fetch New Tenders | httpRequest | Prozorro API — tenders published in the last 15-min window |
| Filter by CPV Codes | code (JS) | Match against company CPV list; skip tenders already in DB |
| Check Bid Pipeline | postgres | Dedup check against bid_pipeline table |
| Score Tender | code (JS) | 0–100 score: CPV weight, budget, region, keyword match, buyer history |
| Route by Score | if | Score ≥ 50 → full analysis. Below 50 → log only, no alert. |
| Save to Bid Pipeline | postgres | INSERT into bid_pipeline with score, metadata, status |
| Fetch Tender Documents | httpRequest | Download all attached specification files from Prozorro |
| Parse Documents | code (JS) | mammoth (DOCX), pdf-parse (PDF), antiword (legacy DOC) |
| AI Document Analysis | httpRequest → OpenRouter | Claude AI: extract requirements, qualifications, timeline, red flags |
| Format Telegram Alert | code (JS) | Structured message: score + tender summary + doc extract + links |
| Send Telegram Alert | telegram | Push to company group chat or individual manager |
| Plans Cron (daily 09:00) | scheduleTrigger | Daily procurement plans scan |
| Fetch Procurement Plans | httpRequest | Prozorro plans API — upcoming tender intentions by government buyers |
| Score Plans | code (JS) | Same scoring logic + repeat buyer flag from company win history |
| Save to Plans Pipeline | postgres | INSERT into plans_pipeline table |
| Send Early Alert | telegram | "Tender planned in 30+ days" with budget estimate and buyer |
| Telegram Bot Webhook | webhookTrigger | Handles /start /analyze /settings /stats /mycompany /help /plans |
| Error Trigger | errorTrigger | Global error catcher for both scanner workflows |
| Notify Owner (Error) | telegram | Error details with node name and context sent instantly to owner |
TECH STACK
BOTTOM LINE
Government procurement is a volume game. The company that submits more bids — with better-prepared documentation — wins more contracts. Manual monitoring caps your bid volume at what one person can process in a day. Automation removes that ceiling entirely.
This client went from 3–4 bids per month to 10–12. Not because they hired more people — but because they stopped wasting 33 hours a month on discovery that a 15-minute cron job now handles for free.
A VPS or cloud server to self-host n8n, an OpenRouter API key for Claude AI, a Telegram bot token (free), and your CPV codes + company profile. No Prozorro API key needed — it's a public platform.
Every deployment is custom: your CPV codes, your budget thresholds, your scoring weights, your team's Telegram setup. Ukraine-only — we know every edge case in the Prozorro API.
If you're competing for government contracts and your competitor already has this running — you're already behind. Every 15 minutes they don't check manually is 15 minutes they were faster than you.
We deploy a bot like this for your company — tuned to your CPV codes, connected to your team's Telegram, live in 3–5 days. The first tender you catch pays for the whole project.
How quickly will we receive alerts after a tender is published?
Within 4–5 minutes. The scanner polls the Prozorro API every 15 minutes around the clock. Once a matching tender is found, it fetches the specification documents, runs Claude AI analysis, and sends a structured Telegram alert — all before a competitor's manager starts their morning review.
Which CPV codes can we monitor?
Any CPV codes relevant to your business. During deployment we configure the bot with your specific CPV code list, budget thresholds, and procurement regions. The filter runs server-side on every API call, so only genuinely relevant tenders advance to the AI scoring stage.
Does the bot read the actual specification documents?
Yes. It downloads all attached files (PDF, DOCX, legacy DOC) from Prozorro and parses them using mammoth, pdf-parse, and antiword. Claude AI then extracts key requirements: materials spec, qualification criteria, timeline, and special conditions. The full summary arrives in your Telegram alongside the alert.
What does it cost to run?
Infrastructure cost is approximately $12/month — a VPS hosting n8n, PostgreSQL, and the bot workers. The Prozorro API is free and public. OpenRouter API costs scale with usage volume but stay under $5/month for most deployments, making the total monthly cost under $20.
How long does deployment take?
48 hours. That includes setting up your n8n instance, configuring CPV codes and scoring weights, connecting the Telegram bot to your team, end-to-end testing with live Prozorro data, and handing over full documentation. Critical issues get a 2-hour response during the 30-day post-launch support window.
We map exactly which workflows cost your team the most time and give you a specific deployment plan — in one 30-minute call.
Book Free 30-Min Process Audit →