In production · City of Helsinki · 2026

PäätöskaivuriAI search and question-answering over City of Helsinki decisions

Ask a question in Finnish or English about any City of Helsinki decision since 2017 — and get a correct, cited answer in seconds, drawn from about 57,000 official decisions the city publishes but nobody could practically search.

Client
City of Helsinki, Urban Environment Division
Status
In production since September 2026
Model
Six-month managed trial, then perpetual source-code licence and full handover to the city
Live at
paatoskaivuri.fi — access for City of Helsinki staff
Scale

The corpus today.

2017 →

About ten years of decisions

15

Committees and sub-committees — 13 current plus 2 predecessor boards for 2017–2022

2,473

Committee meetings ingested (2,463 with finalized minutes)

34,310

Committee agenda items (26,748 with a HEL case code)

97

Officials across 6 service areas of the Urban Environment Division

22,535

Officials' decisions ingested

~545,000

Embedded text chunks — 453,492 committee + 91,198 officials

1,024

Embedding dimensions per chunk, plus a Finnish full-text index

Counted on the production database in November 2026. The crawler grows the archive daily.

The problem

Open data that nobody could actually use.

The City of Helsinki publishes every committee decision and every official's decision. It is fully public — and scattered across 15 decision bodies and nearly a hundred officials, each with its own page structure, in a mix of agendas, minutes and bulletins.

The same case is handled across multiple bodies over months, its history never assembled in one place. Everything is in administrative Finnish, and there is no semantic search. Journalists, researchers, civil servants and engaged citizens all hit the same wall: the data is open, but not accessible.

The solution

One assistant over the whole archive.

The user asks a question in natural language. The system retrieves the relevant decisions across both the committee and officials' corpora, and streams back a grounded answer with citations linking directly to the original source pages.

It unifies two separate worlds — committee meeting decisions and individual officials' decisions — so the user never has to know which one holds the answer.

In production

Live on 1 September. The whole division by the 25th.

1 Sept 2026

Go-live

Päätöskaivuri went live for the City of Helsinki Urban Environment Division: a six-month managed trial, then a perpetual source-code licence, the corpus, handover and three training sessions.

3 Sept 2026

Eleven officials in two days

On launch day users asked for officials the system did not yet cover. Eleven were added within two days.

25 Sept 2026

16 → 97 officials overnight

On 24 September the City asked for every official in the Urban Environment sector. Delivered the next day: 97 officials, 16,717 historical decisions backfilled overnight with zero failures, live on 25 September — a week ahead of the 1 October deadline the City had set.

What it does

Four capabilities, one system.

01

Search & question-answering

  • Natural-language Q&A in Finnish and English, grounded in real decisions, always cited
  • Unified cross-corpus search across committee and officials' decisions in one query
  • Case-handling history — assembles the full chronological chain for a HEL case code
  • Finnish-aware topic search with stem matching for heavy inflection
  • Filtering by date, committee, document type and decision state
  • Citations rendered as direct links to the original paatokset.hel.fi pages
02

Conversational experience

  • Streaming chat UI — answers appear word-by-word as generated
  • Per-user conversation history with a searchable sidebar
  • Bilingual UI, switchable mid-conversation without losing context
  • Light and dark themes, fully mobile-optimised
  • Per-message feedback feeding continuous quality monitoring
  • Inline glossary tooltips for recurring Finnish municipal terms
03

Always-current data

  • Automated crawler ingests the latest meetings and decisions multiple times a day
  • Live integration with the City's official meeting-schedule API
  • Smart re-crawling when an agenda is replaced by finalized minutes
  • Self-healing retries with per-committee health monitoring
04

Programmatic access

  • A REST API turns any HEL case code into clean structured JSON
  • Decision content, rationale, proposal, history, attachments and contacts
  • Per-call token billing, scoped API keys and a managed balance/ledger
  • The same data, productised as a developer-facing offering
How it works

Five layers, all handed over.

Typical query cost ~$0.015, lower with prompt caching. Hallucination and silent failure are treated as bugs, not quirks.

01

Ingestion pipeline (Python)

Two decoupled daily crawlers fetch HTML and PDFs, parse structured fields, chunk text (~800 tokens with overlap), embed, and write to Postgres. Idempotent and self-healing.

02

Data layer (PostgreSQL 18 + pgvector)

Both corpora in one self-hosted database. Each chunk stores a vector embedding alongside a Finnish/English full-text index. Stored procedures encapsulate hybrid search (vector + keyword via Reciprocal Rank Fusion), cross-corpus case lookup and safe read-only queries.

03

AI engine (agentic tool-use)

An Anthropic Claude agent (Claude Sonnet 5.5, with Haiku 5.5 for routing) runs a tool-use loop, calling typed, safe tools rather than generating raw SQL. Retrieved passages are re-ranked with Voyage AI; answers are grounded and cited.

04

Web application (Next.js + React)

Streaming chat, auth, per-user history, bilingual UI, feedback capture and the billing-gated REST API. Every query is logged with timing and result metadata for troubleshooting and auditability.

05

Deployment (self-hosted, client-ownable)

Dedicated Hetzner VPS in Helsinki: self-hosted PostgreSQL 18 + pgvector, nginx + TLS, systemd, scheduled crawls, nightly database dumps plus server-level backups. Nothing depends on a proprietary platform — the city can take the whole thing over.

What was delivered

Everything the city needs to run it without us.

  • 01

    A unified web application — chat UI, AI engine, auth, history, feedback and billing API

  • 02

    A dual data-ingestion system with live schedule-API integration

  • 03

    A complete, idempotent database schema with search functions and access-control policies

  • 04

    The full corpus — about 57,000 decisions and 545,000 embedded chunks as of November 2026 — as a restorable database snapshot

  • 05

    Full documentation: architecture, setup & deployment, and operations manual

  • 06

    Managed operation during the trial, then handover with training

Commercial model

Licence, trial, handover.

Päätöskaivuri was delivered as a perpetual, non-exclusive source-code licence plus a six-month managed trial: SisuMVP runs the service and absorbs hosting and AI costs during the trial, then hands over the server, credentials and operations with orientation sessions and transition documentation. The city owns the code, the data and the hosting — no permanent dependency on SisuMVP. The corpus's pre-computed embeddings are the single heaviest piece of delivered value: paid AI compute the client never has to recreate. Procurable on standard Finnish public-sector terms.

Your archive next?

Have a corpus nobody can search?

The hard parts are built and proven in production. The second system of this kind costs a fraction of the first.