Monopigi
Greek Government Data API

One API.
All Greek Government Data.

31 million government decisions. 200,000+ EU procurement notices. 10,000+ energy permits. Millions of open data records. One bearer token. One JSON schema.

The Problem

Greek government data is fragmented.

Each ministry and agency runs its own portal with its own schema, format, and auth. Half the portals are broken. Integrating even two sources takes weeks.

🗃️

Incompatible formats

data.gov.gr returns JSON. Diavgeia uses its own REST schema. RAE uses WFS/GeoJSON. ELSTAT uses SDMX. TED uses XML.

⏱️

Broken portals

data.gov.gr loads a blank page. Mitos services return 500. geodata.gov.gr is offline. Welcome to Greek open data.

🔑

No unified access

Each portal has separate registration, credentials, and rate limits. Some block non-browser requests entirely.

📄

No documentation

Unofficial community-written guides. No OpenAPI spec. No SDK. Field names change without notice.

Features

We did the hard work.
You get clean data.

Monopigi ingests, normalizes, enriches, and serves Greek government data so your team builds products — not scrapers.

🔗

Unified Schema

Every source normalized to one JSON structure. Spending decisions, procurement tenders, org registries — same shape, every time.

💰

Financial Data

Actual EUR amounts, tax IDs (AFM), company names, and contract values extracted from Diavgeia and TED notices.

🔐

Bearer Token Auth

One API key. One Authorization header. Per-key rate limiting, usage tracking, and quota enforcement.

📖

OpenAPI Docs

Full OpenAPI 3.1 spec with interactive Swagger UI. Auto-generated Python SDK included.

🇪🇺

EU-Sovereign

Hosted on Scaleway (Paris). GDPR-native. No US data processors. Built on open source.

📥

Full Content

Not just metadata — we store actual PDFs, full XML notices, GeoJSON geometries, and complete time series data.

# Who got hospital procurement contracts in Greece?
curl "https://api.monopigi.com/v1/search?q=hospital+procurement&limit=2" \
  -H "Authorization: Bearer mp_live_a3Bf9kL2mN4p"

{
  "query": "hospital procurement",
  "total": 2847,
  "results": [
    {
      "source":        "diavgeia",
      "source_id":     "Ψ5Σ9469ΗΔ8-ΝΧΙ",
      "country":       "GR",
      "title":         "Payment order — Atlas Medical, EUR 14,130.42",
      "doc_category":  "government_decisions",
      "quality_score": 1.0,
      "metadata": {
        "organization_afm": "094281730",
        "total_amount_eur": 14130.42,
        "has_extracted_text": true
      }
    },
    {
      "source":        "ted",
      "source_id":     "ted:497181-2023",
      "country":       "GR",
      "title":         "Supply of medical equipment — General Hospital of Athens",
      "doc_category":  "procurement",
      "quality_score": 1.0,
      "metadata": {
        "title_en": "Supply of medical equipment",
        "contract_value": ["1322581"],
        "publication_number": "497181-2023"
      }
    }
  ]
}
Developer Tools

Python SDK & CLI included.

Not just a REST API — we ship a typed Python SDK and a command-line tool so you can query Greek government data from your code or terminal in seconds.

Python SDK

# pip install monopigi            — core SDK + CLI
# pip install monopigi[df]        — + Polars DataFrames
# pip install monopigi[all]       — everything

with MonopigiClient("mp_live_...", cache_ttl=3600) as client:
    # Structured data — not just metadata
    results = client.search("hospital procurement")
    for doc in results.results:
        print(doc.title, doc.metadata["total_amount_eur"])

    # Export to Polars DataFrame or Parquet
    df = results.to_df()
    client.export("ted", "tenders.parquet")

# Async for high-throughput pipelines
async with AsyncMonopigiClient("mp_live_...") as client:
    async for doc in client.search_iter("hospital"):
        print(doc.source, doc.country, doc.title)
  • Sync + async clients with context managers
  • Typed source clients (TED, Diavgeia, ELSTAT, ...)
  • Rich content — PDF text, financials, sponsor names/AFMs
  • Auto-pagination iterators
  • Polars DataFrames via [df] extra
  • Disk caching with configurable TTL
  • Rate-limit aware auto-retry (429 backoff)
  • Bulk export (JSON, CSV, Parquet)

CLI Tool

# Watch for new tenders in real-time
$ monopigi watch "hospital" --interval 30

# What changed since yesterday?
$ monopigi diff ted --since 2026-03-16

# Pipe-friendly — enrich from stdin
$ cat companies.txt | monopigi pipe

# Interactive fuzzy browser
$ monopigi browse ted

# Export with progress bar
$ monopigi export ted tenders.parquet -f parquet
  • Real-time watch (Ctrl+C to stop)
  • Diff — what changed since last check
  • Pipe stdin enrichment
  • Interactive fuzzy browser [fuzzy]
  • Progress bars on exports
  • Colored JSON, JSONL, CSV, Parquet
  • Shell tab completions
  • Config management
Data Sources

Eight sources. Full content. Not just metadata.

We don't just index titles and dates — we store actual documents, financial data, geospatial features, and full time series.

SourceWhat We IndexVolumeStatus
DiavgeiaGovernment decisions with full financial data — sponsor names, tax IDs (AFM), EUR amounts, attached PDFs31M+ decisionsActive
TED (EU)EU public procurement — Greek tenders with contract values, full XML notices, bilingual (EL/EN)200,000+ notices (2006-present)Active
RAE EnergyEnergy permits — wind farms, solar/PV, hydroelectric, biomass, geothermal with GeoJSON geometries172 layers, 10K+ permitsActive
data.gov.grNational open data — vaccines, crime stats, energy consumption, cadastre, elections, and 80 more datasets84 datasets, millions of recordsActive
ELSTATHellenic Statistical Authority — GDP, unemployment, inflation, demographics, trade, health, education28 indicators, decades of dataActive
MitosGovernment org registry — names, addresses, VAT numbers, contact details for every public entity2,886 organizationsActive
KIMDISCentral Electronic Registry of Public Contracts — contract values, contractors, CPV codes, award decisions1M+ contracts/yearActive
geodata.gov.grNational geospatial data infrastructure — GeoServer WFS layers, land use, boundaries, environmental zones180+ GIS layersActive
Answers Layer — Enterprise

Ask questions. Resolve entities.
Connect the dots.

The Answers Layer goes beyond search. Ask questions in plain Greek or English, trace a company across every government database, and let AI agents query Greek public data natively via MCP.

RAG — Ask Questions in Plain Language

Due diligence teams spend weeks pulling government records. Monopigi answers in seconds — with cited sources, extracted text, and cross-referenced financials from actual government PDFs.

# SDK — natural language across all 8 government sources
from monopigi import MonopigiClient

with MonopigiClient("mp_live_...") as client:
    result = client.ask(
        "Which hospitals received the most procurement funding in 2024?"
    )
    print(result.answer)
    # "Based on 847 procurement records across TED and Diavgeia,
    #  Evangelismos Hospital received EUR 4.2M in medical equipment
    #  tenders, followed by AHEPA (EUR 2.8M) and Papageorgiou..."

    for src in result.sources:
        print(src.source_id, src.title, src.relevance)
        # ted:497181-2023  Supply of medical equipment — Evangelismos  0.94
        # Ψ5Σ9469ΗΔ8-ΝΧΙ  Payment order — Atlas Medical, EUR 14,130  0.91

    # The actual extracted text that informed the answer
    print(result.context_preview)
  • Natural language queries in Greek or English — across all 8 sources simultaneously
  • Every answer cites its sources with relevance scores — no hallucinations
  • Context preview shows the actual extracted text from government PDFs — not summaries
  • Compliance-ready: auditors and legal teams can trace every claim to its source document

Entity Resolution

Give us a tax ID (AFM) or company name — we find every contract, decision, and tender across all sources. One call replaces weeks of manual cross-referencing.

# SDK — trace a company across all government data
entity = client.resolve_entity("094281730")

print(entity.name)           # Atlas Medical SA
print(entity.sources_found)   # ["diavgeia", "ted"]
print(entity.total_contracts) # 47
print(entity.total_value_eur) # 2841350.00

# Every linked document with amounts and dates
for doc in entity.documents:
    print(doc.source, doc.title, doc.metadata["total_amount_eur"])

# Export the full entity dossier as a DataFrame
df = entity.to_df()  # Polars DataFrame, ready for analysis
  • Cross-source linking by AFM, company name, or VAT number
  • Total contract values aggregated across Diavgeia + TED
  • Full audit trail — every linked document with amounts and dates
  • Due diligence in one API call — Big4, legal, and compliance teams

Similar Documents + MCP

Find related tenders, decisions, and contracts by semantic similarity. Let AI agents query Greek government data natively via MCP.

# Find tenders similar to a known procurement
similar = client.similar("ted:497181-2023", limit=5)
for doc in similar:
    print(doc.title, doc.similarity)
    # Supply of radiology equipment — AHEPA      0.93
    # Medical imaging devices — Papageorgiou      0.89

# MCP — AI agents connect natively
# claude_desktop_config.json:
# { "mcpServers": { "monopigi": {
#     "url": "https://api.monopigi.com/v1/mcp" }}}
# Tools: search_documents, ask_question,
#        resolve_entity, get_stats
  • Semantic similarity powered by multilingual embeddings — not keyword matching
  • MCP server for Claude, GPT, and other AI agents
  • First Greek government data source AI agents can query natively
  • Compliance workflows: find all tenders similar to a flagged contract

Due Diligence Reports

Automated entity analysis across all government sources. Generate comprehensive reports on any company, organization, or public entity — contracts, spending patterns, compliance history, and risk indicators in one document.

# Generate a due diligence report for any entity
report = client.reports.create(
    entity_id="094281730",  # AFM or company name
    format="pdf",           # pdf | json
)

print(report.status)          # "completed"
print(report.sources_checked) # 6
print(report.total_contracts) # 47
print(report.risk_score)      # 0.23 (low)

# Download the full PDF report
report.download("atlas_medical_dd_report.pdf")

# Schedule recurring reports
client.reports.schedule(
    entity_id="094281730",
    frequency="weekly",       # daily | weekly | on_demand
    webhook="https://your-app.com/hooks/reports"
)
  • One-click PDF/JSON reports with full source citations
  • Cross-source financial summary — Diavgeia + TED + RAE
  • Risk scoring based on procurement patterns and anomalies
  • Scheduled generation — daily, weekly, or on-demand via API

Procurement Alerts

Real-time tender matching against your criteria. Get notified the moment a relevant procurement notice appears on TED or Diavgeia — before your competitors.

# Create a procurement alert profile
profile = client.alerts.create(
    name="Medical Equipment Tenders",
    keywords=["medical", "hospital", "pharmaceutical"],
    cpv_codes=["33100000"],   # Medical equipment
    min_value_eur=50000,
    sources=["ted", "diavgeia"],
    delivery={"webhook": "https://...", "email": "team@co.com"},
)

print(profile.id)             # "alert_3kF9mN2p"
print(profile.matches_today)  # 3

# List recent matches
for match in client.alerts.matches(profile.id, limit=5):
    print(match.title, match.value_eur, match.source)
  • Custom alert profiles with keyword, CPV code, and value filters
  • Webhook + email delivery within minutes of publication
  • Semantic matching — catches related tenders even with different wording
  • Pro: 3 profiles · Enterprise: unlimited profiles

Compliance Monitoring

Continuous entity tracking across all government databases. Know immediately when a company you’re monitoring receives a new contract, appears in a spending decision, or triggers a risk indicator.

# Add entities to your compliance watchlist
client.monitoring.watch("094281730")  # by AFM
client.monitoring.watch("Acme Corp")  # by name

# Check activity timeline for a watched entity
timeline = client.monitoring.timeline("094281730")
for event in timeline:
    print(event.date, event.type, event.source)
    # 2026-03-20  new_contract   ted
    # 2026-03-18  spending_decision  diavgeia
    # 2026-03-15  registry_update    mitos

# Configure notification delivery
client.monitoring.configure(
    digest="daily",           # daily | instant
    webhook="https://your-app.com/hooks/compliance"
)
  • Watchlist-based — add entities by AFM, name, or VAT number
  • Daily digest or instant webhook notifications
  • Change detection across Diavgeia, TED, and Mitos registries
  • Audit-ready timeline of all entity activity
Pricing

Simple pricing. Serious ROI.

What used to take a week of scraping eight portals now takes one API call. Ship your procurement dashboard, compliance report, or market analysis in days instead of months.

Free
0
forever
  • 5 queries / day
  • All eight data sources
  • JSON responses
  • OpenAPI docs
  • No credit card required
Get Free Key
Most Popular
Pro
299
per month · or €249/mo billed annually
  • 100 queries / day
  • All sources + priority access
  • Full document content (PDFs, XML)
  • Bulk export & webhooks
  • Email support (24h SLA)
  • Python SDK
  • 20 due diligence reports/mo
  • 3 procurement alert profiles
  • Full-text search
Start Pro Trial
Enterprise
999
per month + €99/seat · annual contract
  • 1,000 queries / day
  • Custom data sources
  • 99.9% uptime SLA
  • Priority support
  • 100 due diligence reports / mo
  • 10 alert profiles
  • Compliance monitoring (25 entities)
  • MCP server for AI agents
Contact Sales

Ready to query Greek government data?

Create a free account and start querying in minutes.

Get Started Free

EU-sovereign compute · Global edge delivery

Scaleway