Skip to main content
p.—2026·06·06 · 20:55 CR
Work
Civic Data2025· 6 min read

Criminalidad data made navigable for every Costa Rican.

Turning the OIJ’s public crime data from a stack of PDFs into a live, geographic, temporal atlas any Costa Rican can read in five minutes.

Context

The Organismo de Investigación Judicial (OIJ) publishes crime-incidence statistics for the whole country. The data is genuinely open — and almost completely unusable. It arrives as PDFs and spreadsheets, broken across periods, with canton and district names spelled inconsistently between files. To answer a question as basic as “is theft rising in my canton?” a citizen had to download several documents, reconcile them by hand, and trust their own arithmetic.

The problem

The problem was never the data — it was the format. Open data that takes an hour of manual reconciliation to read is, in practice, closed. Journalists on deadline, municipal planners, and ordinary citizens all hit the same wall: the answer existed, but no one could get to it. The build had to survive every quarterly OIJ release without a human re-cleaning the file by hand.

Build a single canonical pipeline: ingest every OIJ release, normalize geography and crime categories to one stable schema, model incidence across space (province → canton) and time (month → year), then render it as fast, interactive maps and charts wrapped in plain-language summaries — all on one indexed, public URL. The standard was “readable in five minutes,” and the architecture had to make new data flow in without breaking that promise.

Architecture

A one-way pipeline, built to absorb the next release.

System architecture
  1. 01Sources
    OIJ open data (PDF / spreadsheet)Official canton & district registry
  2. 02Ingestion & normalization
    Parse + cleanCanonical geo codesCategory mapping
  3. 03Data model
    Geography × category × periodDerived rates & trends
  4. 04Surface
    Interactive mapsTemporal chartsPlain-language summaries
  5. 05Delivery
    Static build · Vercel edgeOne indexed public URL
What we built

A normalization pipeline, not a one-off clean

Every OIJ release runs through the same parsing and normalization step — geography reconciled to canonical codes, categories mapped to a stable taxonomy. New data updates the atlas instead of breaking it.

Geographic + temporal disaggregation

Incidence is navigable by province and canton and across time, so the same tool answers a national-trend question and a single-canton question without a rebuild.

Plain-language summaries over every view

Each cut of the data is wrapped in a sentence a non-analyst can act on — the difference between a chart and an answer.

Stack

TypeScriptReactViteGeo + temporal visualizationStatic generationVercel edge
Liveatlas-criminalidad-cr.vercel.appOpen in new tab
Outcome

< 5 min

From raw PDFs to an answer

7 / 82

Provinces · cantons covered

Live

Public since 2025

1 URL

Indexed, shareable, citable

Atlas Criminalidad CR is live and public. It converts a quarterly OIJ data dump into a five-minute read for citizens, journalists, and municipal planners — and it keeps doing so every release, without a human in the loop re-cleaning the file. It is the clearest proof of the studio’s thesis: the value was never in collecting the data, it was in making it legible.

Have a problem shaped like this one?

Describe it in two sentences. We reply within 24 hours.