The entire EU public procurement corpus — €815B/year — searchable offline, with B2B lead generation for construction contract winners.
TED publishes every significant EU public contract (€676K notices/year) but the web interface makes analysis nearly impossible. This CLI syncs the corpus to SQLite, then layers market intelligence nobody else offers: win rates, concentration scores, dark-buyer detection, and opportunity scoring — free, composable, agent-native.
Quick Start
# Find recent construction contract winners who might need rented machinery
eu-tenders-pp-cli leads --cpv 45 --country DEU --min-value 500000 --days 30
# Find open IT contracts in Germany
eu-tenders-pp-cli notices search --country DEU --cpv 72000000 --scope ACTIVE --limit 10
# Pull matching notices into local SQLite for offline analysis
eu-tenders-pp-cli sync --country DEU --cpv 72000000 --since 2023-01-01
# Rank open opportunities by urgency, value, and fit
eu-tenders-pp-cli score --keywords "cloud migration" --country DEU --max-days 30
# Morning briefing: highest-priority expiring tenders
eu-tenders-pp-cli deadline-heat --country DEU --cpv 72 --days 14
# Is this market open? See incumbent repeat rates before writing a proposal
eu-tenders-pp-cli win-rate --cpv 72000000 --country DEU --min-calls 5
Unique Features
These capabilities aren't available in any other tool for this API.
Lead generation
-
leads — Surface recent construction contract award winners as B2B outreach candidates — company name, project location, contract value, and construction type — so you can contact winners who need construction machinery.
Reach for this when prospecting construction companies for B2B outreach — it identifies firms that just won large projects and will need equipment, subcontractors, and services in the near term.
eu-tenders-pp-cli leads --cpv 45 --country DEU --region NW --min-value 500000 --days 30 --agent --select leads.winner_name,leads.project_location,leads.contract_value,leads.contact_url
Market intelligence
-
win-rate — See what fraction of contract competitions in a market go to new winners vs. incumbents — your real odds before writing a proposal.
Reach for this when deciding whether a procurement market is worth entering — high repeat-winner rate means the contract is effectively pre-determined.
eu-tenders-pp-cli win-rate --cpv 72000000 --country FRA --min-calls 5 --show-winners --agent
-
concentration — Compute which companies capture what share of awarded contract value in a sector and country, with HHI score and year-over-year trend.
Reach for this when researching market structure, competitive dynamics, or potential regulatory concentration issues in EU procurement.
eu-tenders-pp-cli concentration --cpv 72000000 --country DEU --top 5 --since 2022-01-01 --agent
-
velocity — See whether a procurement market is heating up, cooling off, or spiking — weekly notice count trends over rolling windows vs. same period last year.
Use this to spot demand surges in your sector before competitors react — especially useful after policy announcements or budget cycles.
eu-tenders-pp-cli velocity --country DEU --cpv 72000000 --window 90d --compare 1y --agent
-
cpv-drift — See which procurement categories are growing or shrinking in a country's spending mix year-over-year — essential for platform builders and policy researchers.
Use this to identify which procurement markets are expanding and worth investing in — particularly useful after major policy shifts like digital transformation mandates.
eu-tenders-pp-cli cpv-drift --country DEU --since 2020-01-01 --top 20 --metric value --agent
Bid intelligence
-
score — Get a ranked shortlist of open tenders scored by deadline urgency, contract value, keyword fit, and market openness — your morning briefing, prioritized.
Use this when you need to decide which tenders deserve proposal effort today — it surfaces fit + urgency + openness in a single ranked list.
eu-tenders-pp-cli score --keywords "cloud migration" --country DEU --cpv 72 --min-value 500000 --max-days 30 --agent
-
buyer — Build a full procurement dossier on any contracting authority: their spending cadence, CPV mix, typical contract values, and repeat winner patterns.
Reach for this when preparing a bid to a specific buyer — understand their preferences, typical timelines, and incumbent relationships before writing.
eu-tenders-pp-cli buyer --name "Bundesagentur für Arbeit" --since 2020-01-01 --show-winners --agent
-
deadline-heat — A ranked calendar of expiring tenders weighted by urgency × value / competition density — your daily prioritized view of what needs attention now.
Use this as a daily morning briefing command — it surfaces high-urgency, high-value, low-competition opportunities that a simple deadline sort misses.
eu-tenders-pp-cli deadline-heat --country DEU --cpv 72 --days 14 --min-value 200000 --agent
Compliance & integrity
-
dark-buyers — Surface contracting authorities whose calls-for-tender rarely produce public awards, or whose awards show suspiciously low winner diversity — a compliance and integrity signal.
Reach for this when investigating procurement compliance, building risk scores for contracting authorities, or preparing investigative journalism.
eu-tenders-pp-cli dark-buyers --country POL --cpv 45000000 --since 2022-01-01 --min-calls 3 --agent
Usage
Run eu-tenders-pp-cli --help for the full command reference and flag list.
Commands
notices
Manage notices
eu-tenders-pp-cli notices search - Search for notices using expert search query. More information about the query format and field names can be found on this page)
Output Formats
# Human-readable table (default in terminal, JSON when piped)
eu-tenders-pp-cli notices
# JSON for scripting and agents
eu-tenders-pp-cli notices --json
# Filter to specific fields
eu-tenders-pp-cli notices --json --select id,name,status
# Dry run — show the request without sending
eu-tenders-pp-cli notices --dry-run
# Agent mode — JSON + compact + no prompts in one flag
eu-tenders-pp-cli notices --agent
Agent Usage
This CLI is designed for AI agent consumption:
- Non-interactive - never prompts, every input is a flag
- Pipeable -
--json output to stdout, errors to stderr
- Filterable -
--select id,name returns only fields you need
- Previewable -
--dry-run shows the request without sending
- Read-only by default - this CLI does not create, update, delete, publish, send, or mutate remote resources
- Agent-safe by default - no colors or formatting unless
--human-friendly is set
Exit codes: 0 success, 2 usage error, 3 not found, 5 API error, 7 rate limited, 10 config error.
Health Check
eu-tenders-pp-cli doctor
Verifies configuration and connectivity to the API.
Configuration
Config file: ~/.config/eu-tenders-pp-cli/config.toml
Troubleshooting
Not found errors (exit code 3)
- Check the resource ID is correct
- Run the
list command to see available items
API-specific
- timedOut: true in response — Add --limit 50 or narrow query with more filters; TED search times out at 30s
- Empty results on narrow query — Try --scope ALL (not ACTIVE) — the notice may be published but deadline passed
- sync takes very long — Add --since 2024-01-01 to scope the sync window; iteration mode pulls unlimited but takes time for large corpora
- CPV code not found — Run 'eu-tenders-pp-cli cpv search ' to find the right 8-digit code
Sources & Inspiration
This CLI was built by studying these projects and resources:
Generated by CLI Printing Press