Data sources & methodology
World Prisons is a public reference. Every figure on this site comes from an attributable source. We make our methodology, our limits, and our update cadence explicit so you can decide how much to rely on what you read here.
We currently track 162 countries, 17440 individual facilities, and 37 distinct cited sources.
Primary sources
- World Prison Brief (Institute for Crime & Justice Policy Research, Birkbeck). The principal source for country-level population, rate, occupancy, female/foreign/pre-trial shares.
- National correctional administrations — e.g. US Federal Bureau of Prisons, HMPPS / GOV.UK Find a prison, Norwegian Kriminalomsorgen, Japan's Ministry of Justice, France's Ministère de la Justice, Thailand's Department of Corrections, Brazil's CNJ.
- Independent oversight bodies — HMI Prisons, France's CGLPL, Council of Europe SPACE statistics, UN Special Procedures, UNODC, ECtHR judgements.
- Specialist non-governmental organisations — Human Rights Watch, Amnesty International, Cristosal, OVD-Info, Dui Hua Foundation, Prisoners Abroad.
- Established investigative reporting — Reuters, BBC, The Guardian, New York Times, ProPublica, BBC Verify, AFP — used for facility-specific incidents.
Data quality ladder
Every country and prison page carries a confidence badge. The four tiers:
High confidence
Headline statistics verified against a primary source within the past 12 months. Use freely; still cross-reference for legal or research-grade work.
Medium confidence
Sourced but >12 months stale, or only one source available. Figures are likely directionally correct but the latest data may have shifted.
Low confidence
Derived or estimated; commonly because the government does not publish a consolidated annual figure. Verify against a primary source before relying on it.
Stub
Placeholder entry. We have only minimal data — name, country, perhaps a citation. Useful for completeness; never as a basis for a claim.
Conditions Risk Score — methodology
Every prison page carries a 0–100 Conditions Risk Score. It's a derived signal — not a judgement — built only from data we already publish on the page, so anyone can audit it. The five components:
- Overcrowding (0–30) — current population ÷ design capacity. 0 if under 100%; 30 at 200%+. No points awarded if either figure is missing.
- Oversight reports (0–30) — sum of severity-weighted oversight reports in the last 5 years. Critical = 12, high = 6, medium = 2, low = 0.5. Capped at 30.
- Structural flags (0–15) — +5 if death-row, +5 if privately operated under contract, +5 if a substantial known-issues record exists.
- Death signals (0–15) — mentions of in-custody deaths, suicides, fatalities, riots, massacres in our sourced text.
- Conditions narrative (0–10) — red-flag keywords in the conditions / known-issues sections (torture, ECHR, urgent notification, unconstitutional, etc.).
A facility with no occupancy data, no reports, and minimal narrative text is shown as insufficient datarather than a misleadingly low score. Score tiers: 0–15 low · 16–35 moderate · 36–60 elevated · 61–80 high · 81–100 critical. Each prison page lists exactly which signals contributed.
The score is recomputed every time we refresh the underlying data. It should be read as a starting point for further research, not a substitute for it.
Importers & refresh cadence
We run several pipelines. Each has a different source, scope, and cadence. They're all idempotent (safe to re-run) and produce the same audit trail through the change-events log.
| Importer | Source | Scope | Cadence |
|---|---|---|---|
| wpb_import.py | World Prison Brief country pages | Country-level headline stats + history | Annual (manual; aligned with WPB’s update cycle) |
| us_bop.py | US Federal Bureau of Prisons | ~169 federal facilities | Monthly |
| uk_moj.py | UK Ministry of Justice / HMPPS | England & Wales prisons | Monthly |
| wikidata_import.py | Wikidata SPARQL — instance-of Q40357 (prison) | ~10k prison entities globally | Quarterly (bulk refresh) |
| wikipedia_enrich.py | MediaWiki API for article lead, photo, events | Prisons with wikipedia_slug (~2.7k) | Quarterly (after Wikidata refresh) |
| seed-reform.ts | Editorial reform data (orgs, reports, initiatives) | Curated; corrections-queue updates | On demand |
| /api/admin/nightly | Nightly job: recompute risk scores + send digests | Whole prison dataset | Daily 06:05 UTC (Coolify cron) |
Change-event taxonomy
Every material write to the dataset is logged as a row in change_events. Subscribers to a country or prison receive a digest of these events. Sub-threshold churn (≤5% noise on counts) is deliberately suppressed.
| Event | Trigger | Threshold |
|---|---|---|
| new_facility | Importer inserts a previously-unknown prison | — |
| capacity_changed | Capacity changes | ≥5% delta (or 0↔non-0) |
| population_changed | Current population changes | ≥5% delta |
| security_level_changed | Security-level string differs | Any difference |
| operator_changed | Operator string differs | Any difference |
| contact_changed | Phone, email, or website differs | Any difference (per field) |
| closed | year_closed populated where previously null | — |
| slug_renamed | Slug changes (URL path) | Any difference |
| oversight_report_added | New prison_reports row inserted | — |
| country_stats_updated | WPB returns a delta on country population/rate | ≥3% delta |
Current freshness (live)
Refreshed every hour. Country-level freshness drives the staleness badge on every country/prison page. The full backlog is visible at /insights.
51
Countries verified < 90 days
0
Countries 90–365 days
111
Countries ≥1 year stale
17,440
Prisons touched < 90 days
9,179 change events recorded in the past 30 days.
How we structure each entry
- Country pages carry a quality badge, last-verified date, sparkline of historical population, and a “What we know — and don't” transparency block.
- Prison pages split content into Overview, Conditions, Visiting, Mailing, Practical info, Known issues, and Sources. Each section is independently sourced.
- Sources are normalised — every citation lives once in a
data_sourcestable and is linked to the entries that rely on it, so we can update a URL or accessed-on date once. - Completeness score (0–100) reflects how many profile fields are populated. We show it openly rather than hide gaps.
What we deliberately don't do
- We do not scrape behind paywalls or against terms-of-use.
- We do not publish unverified rumours or unsourced statistics, even widely-cited ones.
- We do not host inmate records — privacy concerns and the patchwork of national laws make that unwise.
- We do not editorialise the policy debates behind these numbers; we link to the bodies that do.
Update cadence
We refresh country headline statistics annually after the World Prison Brief publishes its updated country pages (typically Q1). Prison-level data is updated opportunistically when an oversight report, news story, or government release makes a change material.
Every entry shows the data-as-ofdate (the figure's reference year) separately from the last-verifieddate (when we last checked the figure). If a row hasn't been verified in 12+ months we downgrade its data-quality badge automatically.
Found an error?
Email hello@worldprisons.comwith the URL of the page and a link to a more authoritative source. We'll correct, credit, and date the change. Corrections from people working inside the system — staff, families, counsel — are particularly welcome.