World Prisons

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.

ImporterSourceScopeCadence
wpb_import.pyWorld Prison Brief country pagesCountry-level headline stats + historyAnnual (manual; aligned with WPB’s update cycle)
us_bop.pyUS Federal Bureau of Prisons~169 federal facilitiesMonthly
uk_moj.pyUK Ministry of Justice / HMPPSEngland & Wales prisonsMonthly
wikidata_import.pyWikidata SPARQL — instance-of Q40357 (prison)~10k prison entities globallyQuarterly (bulk refresh)
wikipedia_enrich.pyMediaWiki API for article lead, photo, eventsPrisons with wikipedia_slug (~2.7k)Quarterly (after Wikidata refresh)
seed-reform.tsEditorial reform data (orgs, reports, initiatives)Curated; corrections-queue updatesOn demand
/api/admin/nightlyNightly job: recompute risk scores + send digestsWhole prison datasetDaily 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.

EventTriggerThreshold
new_facilityImporter inserts a previously-unknown prison
capacity_changedCapacity changes≥5% delta (or 0↔non-0)
population_changedCurrent population changes≥5% delta
security_level_changedSecurity-level string differsAny difference
operator_changedOperator string differsAny difference
contact_changedPhone, email, or website differsAny difference (per field)
closedyear_closed populated where previously null
slug_renamedSlug changes (URL path)Any difference
oversight_report_addedNew prison_reports row inserted
country_stats_updatedWPB 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_sources table 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.