31 million government decisions. 200,000+ EU procurement notices. 10,000+ energy permits. Millions of open data records. One bearer token. One JSON schema.
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.
data.gov.gr returns JSON. Diavgeia uses its own REST schema. RAE uses WFS/GeoJSON. ELSTAT uses SDMX. TED uses XML.
data.gov.gr loads a blank page. Mitos services return 500. geodata.gov.gr is offline. Welcome to Greek open data.
Each portal has separate registration, credentials, and rate limits. Some block non-browser requests entirely.
Unofficial community-written guides. No OpenAPI spec. No SDK. Field names change without notice.
Monopigi ingests, normalizes, enriches, and serves Greek government data so your team builds products — not scrapers.
Every source normalized to one JSON structure. Spending decisions, procurement tenders, org registries — same shape, every time.
Actual EUR amounts, tax IDs (AFM), company names, and contract values extracted from Diavgeia and TED notices.
One API key. One Authorization header. Per-key rate limiting, usage tracking, and quota enforcement.
Full OpenAPI 3.1 spec with interactive Swagger UI. Auto-generated Python SDK included.
Hosted on Scaleway (Paris). GDPR-native. No US data processors. Built on open source.
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"
}
}
]
}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.
# 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)# 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 parquetWe don't just index titles and dates — we store actual documents, financial data, geospatial features, and full time series.
| Source | What We Index | Volume | Status |
|---|---|---|---|
| Diavgeia | Government decisions with full financial data — sponsor names, tax IDs (AFM), EUR amounts, attached PDFs | 31M+ decisions | Active |
| TED (EU) | EU public procurement — Greek tenders with contract values, full XML notices, bilingual (EL/EN) | 200,000+ notices (2006-present) | Active |
| RAE Energy | Energy permits — wind farms, solar/PV, hydroelectric, biomass, geothermal with GeoJSON geometries | 172 layers, 10K+ permits | Active |
| data.gov.gr | National open data — vaccines, crime stats, energy consumption, cadastre, elections, and 80 more datasets | 84 datasets, millions of records | Active |
| ELSTAT | Hellenic Statistical Authority — GDP, unemployment, inflation, demographics, trade, health, education | 28 indicators, decades of data | Active |
| Mitos | Government org registry — names, addresses, VAT numbers, contact details for every public entity | 2,886 organizations | Active |
| KIMDIS | Central Electronic Registry of Public Contracts — contract values, contractors, CPV codes, award decisions | 1M+ contracts/year | Active |
| geodata.gov.gr | National geospatial data infrastructure — GeoServer WFS layers, land use, boundaries, environmental zones | 180+ GIS layers | Active |
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.
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)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 analysisFind 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_statsAutomated 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"
)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)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"
)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.
Create a free account and start querying in minutes.
Get Started FreeEU-sovereign compute · Global edge delivery