Documentation

EU Tenders CLI

eu-tenders-pp-cli

Install

npx -y @mvanhorn/printing-press-library install eu-tenders

Installs the CLI binary and the agent skill for Claude Code, Codex, Cursor, Gemini CLI, Copilot, and more. Add --cli-only or --skill-only for one half. Requires Node.

Documentation

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.

Created by @m91michel (Mathias Michel).

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

For agents: pass /documentation/eu-tenders/agents.md to install this CLI from a prompt.