Technical writing
BOP Federal Prison Population: The Federal Database Behind 148,000 US Federal Inmates
On any given day in 2024, the Federal Bureau of Prisons holds roughly 148,000 people in 122 institutions scattered across every region of the United States. That population — exclusively federal offenders, predominantly serving sentences for drug trafficking, weapons violations, and fraud — costs American taxpayers approximately $42,000 to $45,000 per inmate per year. The BOP publishes detailed, current statistics on all of it at no charge, updated monthly, covering offense composition, demographics, facility assignments, and sentence lengths. Almost no one outside the criminal justice research community uses it.
This article covers the scale and institutional structure of the federal prison system, the BOP statistics databases and what they contain, the offense composition of the federal inmate population and the mandatory minimum laws that drive it, demographic patterns and documented racial disparities in federal sentencing, the First Step Act of 2018 and its implementation record, BOP facility classifications from ADX Florence to federal prison camps, the contracting landscape for residential reentry and private prisons, and a Python script that downloads BOP statistics tables, parses offense and demographic breakdowns, and pulls US Sentencing Commission trend data to show the First Step Act's measurable impact on average drug sentences.
Scale and institutional structure
The Bureau of Prisons is a component of the Department of Justice. It was established in 1930 to consolidate management of the then-eleven federal penitentiaries and correctional farms under a single professional agency, replacing an arrangement in which each federal institution operated with significant autonomy. Today the BOP operates 122 institutions, employs approximately 36,000 staff, and manages an annual budget of around $8.5 billion.
The federal system is frequently confused with the much larger state prison system. The distinction is jurisdictional: state prisons hold people convicted of state law violations — most homicides, robberies, burglaries, assaults, and state-level drug possession — while federal prisons hold people convicted of federal crimes. Federal criminal jurisdiction covers drug trafficking across state and international lines, federal weapons offenses, white collar crimes (bank fraud, securities fraud, healthcare fraud, tax evasion), immigration violations (illegal reentry after deportation), bank robbery, public corruption, and crimes committed on federal land or against federal employees. State systems collectively hold approximately 1.2 million sentenced prisoners. The federal system holds roughly 148,000 — just over ten percent of the total U.S. prison population but a system with disproportionate policy significance because Congress sets the mandatory minimum sentences that govern it.
Several characteristics distinguish the federal system from most state systems. The BOP population is roughly 90% sentenced (as opposed to pre-trial detainees), reflecting the fact that federal prosecution produces high conviction rates and that federal detention centers are separate from sentenced facilities. The average imposed sentence in the federal system is approximately eight to nine years, and the average remaining sentence for the current population is approximately five years — both substantially longer than state averages, reflecting the mandatory minimum floors on drug trafficking and weapons offenses that constitute the bulk of federal convictions. Federal prisoners do not have access to parole; release is governed by good-conduct time (up to 54 days per year under existing law) and, since 2018, First Step Act earned-time credits.
The BOP statistics databases
The BOP publishes its statistics at bop.gov/about/statistics/. There is no formal API; all data is published as static HTML tables, PDFs, and in some cases Excel files. The statistics are updated on the first business day of each month and cover a rolling snapshot of the current population. The following tables are available:
| Table | URL path | Contents |
|---|---|---|
| Population Statistics | statistics_population.jsp | Total inmate count, trend since 1980, by security level, by facility type |
| Inmate Offenses | statistics_inmate_offenses.jsp | Number and percentage of inmates by primary offense category |
| Inmate Race / Ethnicity | statistics_inmate_race.jsp | Race and ethnicity breakdown, total and by gender |
| Inmate Gender | statistics_inmate_gender.jsp | Male/female split, trend data |
| Inmate Age | statistics_inmate_age.jsp | Age group distribution across the inmate population |
| Inmate Citizenship | statistics_inmate_citizenship.jsp | US citizen vs. foreign national breakdown by country of citizenship |
| Sentence Length | statistics_inmate_sentences.jsp | Distribution of imposed sentence lengths; average and median |
| Facility Statistics | statistics_facilities.jsp | Inmate count by individual institution, region, and security level |
Because BOP statistics reflect a monthly snapshot rather than an annual census, they do not capture admissions and releases flows the way BJS National Prisoner Statistics does. For longitudinal analysis of the federal prison population back to the 1970s, the appropriate source is BJS's NPS program, which includes BOP as a separate jurisdiction. For current detailed offense and demographic composition, the BOP monthly tables are more granular and more current. The two sources complement each other.
BOP statistics are published as counts and percentages for the current snapshot with no historical trend detail at the offense or demographic level. Historical trend data for the federal prison population by offense and demographics is available in periodic BJS publications — including the annual Prisoners bulletin and the Survey of Inmates in Federal Correctional Facilities — and in US Sentencing Commission annual reports, which publish conviction and sentencing volumes by offense category going back to the late 1980s.
Federal offense composition and mandatory minimums
Drug offenses are by far the largest category in the federal prison population, accounting for approximately 44% of federal inmates in 2024. Weapons offenses (primarily felon-in-possession and drug-trafficking-with-a-weapon charges) are the second largest at roughly 20%. Sex offenses represent approximately 8%; immigration offenses approximately 6%; white collar and fraud offenses approximately 5%; robbery approximately 2%.
This offense composition is a direct product of mandatory minimum sentencing statutes. The primary driver is 21 U.S.C. §841(b)(1), which governs drug trafficking sentences and ties mandatory minimums to drug quantity thresholds. At the ten-year mandatory minimum tier: one kilogram or more of heroin; five kilograms or more of powder cocaine; 280 grams or more of crack cocaine; 1,000 kilograms or more of marijuana. At the five-year tier the thresholds are proportionally lower. Prior drug convictions double and then triple these mandatory floors: a defendant with one prior qualifying conviction faces a twenty-year mandatory minimum on the same drug quantities that would trigger a ten-year floor for a first offender; two prior qualifying convictions produce a mandatory life sentence.
The crack-cocaine versus powder-cocaine disparity was for decades the most litigated sentencing controversy in the federal system. Before the Fair Sentencing Act of 2010, the thresholds for mandatory minimums treated crack and powder cocaine at a 100:1 ratio by weight — five grams of crack triggered the same five-year mandatory minimum as 500 grams of powder cocaine. The disparity originated in the Anti-Drug Abuse Act of 1986, passed in the weeks after the death of basketball star Len Bias, who died of a cocaine overdose. Because crack cocaine was disproportionately distributed in Black urban communities and powder cocaine in white suburban markets, the 100:1 ratio produced dramatically disparate sentences by race for functionally equivalent drug conduct. The Fair Sentencing Act of 2010 reduced the ratio to 18:1. The First Step Act of 2018 made that reduction retroactive, allowing approximately 2,600 inmates serving sentences under the old ratio to petition courts for resentencing.
Weapons enhancements under 18 U.S.C. §924(c) add mandatory consecutive sentences on top of any underlying drug trafficking sentence: five years for possessing a firearm during a drug trafficking crime, seven years for brandishing, ten years for discharge, and much longer for specific weapon types. These enhancements — which stack when multiple counts are charged — explain a significant portion of the longest federal sentences, particularly for defendants prosecuted as part of drug trafficking organizations where multiple 924(c) counts are routine.
Immigration offenses under 8 U.S.C. §1326 (illegal reentry after removal) carry no mandatory minimum but are subject to a two-year statutory maximum for a first offense and twenty years for prior aggravated felony convictions. Despite the absence of mandatory minimums, the volume of illegal reentry prosecutions — which became the single most frequently charged federal offense during the late 2010s under the Trump administration's “zero tolerance” policy — means immigration offenders constitute roughly six percent of the federal prison population.
Federal Sentencing Guidelines and the Sentencing Commission
The US Sentencing Commission (USSC) is an independent agency within the judicial branch created by the Sentencing Reform Act of 1984. Its primary function is to establish and revise the Federal Sentencing Guidelines, a grid-based system that generates a recommended sentence range for every federal conviction. The grid has two axes: Offense Level (1 through 43, derived from the base offense level for the crime plus specific offense characteristics, victim-related adjustments, and obstruction or acceptance-of-responsibility adjustments) and Criminal History Category (I through VI, derived from the defendant's prior criminal record). The intersection of Offense Level and Criminal History Category produces a sentencing range in months.
The Guidelines were mandatory from their 1987 implementation until the Supreme Court's decision in United States v. Booker (2005), which held that mandatory application violated the Sixth Amendment right to jury trial by allowing judges to make factual findings that increased sentences. AfterBooker the Guidelines became advisory: federal judges must calculate the applicable Guidelines range and consider it, but may sentence above or below the range based on the factors enumerated in 18 U.S.C. §3553(a). Mandatory minimums imposed by statute continue to constrain the floor of the sentence regardless of the Guidelines range; a judge cannot go below a statutory mandatory minimum even when the Guidelines would suggest a lower sentence, with limited exceptions for substantial assistance and the First Step Act's expanded safety valve.
The USSC publishes annual datafiles covering every federal defendant sentenced in a given fiscal year — approximately 75,000 cases per year. The datafiles include offense type, statutory citation, Guidelines range, actual sentence imposed, departure type (downward for substantial assistance or other grounds, upward for egregious conduct), mandatory minimum applicability, defendant demographics (age, race, gender, citizenship, education level), district and circuit, and judge identifier (anonymized). The USSC also publishes quarterly sentencing data and a suite of research publications including annual Statistical Sourcebooks and the biennial report on inter-district sentencing disparities. USSC data is available for download at ussc.gov/research/datafiles and requires SAS, SPSS, Stata, or pyreadstat to read.
The USSC's 2017 report on demographic disparities in federal sentencing found that Black male defendants received sentences averaging 13.4% longer than white male defendants who were similarly situated on all measured characteristics: offense type, offense level, criminal history, and Guidelines range. That finding, controlling for the Guidelines themselves, implies that the disparity is partly a product of unobserved differences (type of counsel, charging decisions, fast-track programs) and partly extra-Guidelines racial bias in sentencing decisions.
Demographics and racial disparities in the federal system
The demographic composition of the federal inmate population as of 2024 is approximately 93% male and 7% female. By race and ethnicity: approximately 37% Black, 58% White (a figure that includes persons identified as Hispanic, which BOP classifies separately), and approximately 33% Hispanic of any race. Given that Black Americans constitute roughly 13% of the U.S. general population, a 37% share of the federal inmate population represents a disparity ratio of nearly 3:1 — lower than in state prison systems but still vastly disproportionate to population share.
The disparity is most acute in drug offense categories. Black defendants are substantially overrepresented in crack cocaine prosecutions relative to powder cocaine prosecutions, a pattern that persisted despite the FSA's ratio reduction because the geographic and social networks through which crack is distributed remain concentrated in communities with high Black population shares. USSC data consistently shows that Black defendants are more likely to face mandatory minimum applicability than white defendants charged with functionally similar conduct, partly because of charging discretion exercised by federal prosecutors at the indictment stage.
Hispanic defendants are disproportionately represented in immigration offense prosecutions. The illegal reentry statute (8 U.S.C. §1326) applies almost exclusively to persons of Mexican and Central American origin given enforcement geography, and the volume of such prosecutions — which spiked dramatically under zero-tolerance enforcement in 2018 before moderating — makes illegal reentry the lens through which Hispanic overrepresentation in federal corrections is most visibly understood.
Female federal inmates are a small but analytically distinct population. The majority are convicted of drug offenses, with a significant share for fraud and white collar crimes. Female federal inmates tend to have shorter sentences and lower security classifications than male inmates. The First Step Act's provisions on placement near family members and restrictions on use of restrictive housing for pregnant inmates were specifically intended to address documented conditions affecting female incarceration.
Citizenship: approximately 23% of BOP inmates are non-U.S. citizens. Most are Mexican nationals serving sentences for drug trafficking or immigration offenses. Foreign national inmates are subject to ICE detainers for deportation upon completion of their federal sentences; many are housed in dedicated BOP institutions or contracted facilities.
The First Step Act of 2018
The First Step Act was signed by President Trump in December 2018 with bipartisan Congressional support — the first significant federal sentencing and corrections reform legislation in more than two decades. Its provisions address both sentencing law (the front end) and prison conditions and programming (the back end).
On the sentencing side, the First Step Act's most significant provisions were: (1) retroactive application of the Fair Sentencing Act of 2010, allowing inmates sentenced under the pre-2010 100:1 crack-powder disparity to petition for resentencing; (2) expansion of the “safety valve” provision under 18 U.S.C. §3553(f), which allows federal judges to sentence below the statutory mandatory minimum for first-time, non-violent drug offenders who meet certain criteria — the Act broadened eligibility from defendants with zero criminal history points to those with up to four points; (3) reform of the “851 enhancements,” which triggered doubled and tripled mandatory minimums based on prior drug convictions — the Act narrowed the definition of qualifying prior convictions to “serious drug felonies” rather than any prior drug offense, significantly reducing the population subject to the most severe enhancements.
On the corrections side, the First Step Act's earned-time credit system allows federal inmates to accumulate ten to fifteen days per month of credits toward transfer to pre-release custody (home confinement or a residential reentry center) by completing approved rehabilitative programming — education, vocational training, drug treatment, or other BOP-approved programs. Inmates are scored on recidivism risk using the PATTERN (Prisoner Assessment Tool Targeting Estimated Risk and Needs) assessment tool; low-risk inmates can earn credits at the higher rate and are eligible for earlier transfer to pre-release custody. The Act also expanded compassionate release eligibility by allowing inmates to petition the court directly if the BOP director fails to act within thirty days, removing the prior requirement that the BOP itself initiate the motion.
Implementation has been halting. The Department of Justice's Office of Inspector General published multiple reports finding that BOP failed to implement the earned-time credit system within statutory timelines, that PATTERN had documented racial bias in its risk scoring methodology (which BOP revised in response to USSC and academic criticism), and that compassionate release processing times remained lengthy despite the expanded petition pathway. As of 2023, BOP had approved time credit transfers for several tens of thousands of inmates but faced ongoing litigation over eligibility determinations.
Federal recidivism data from BJS shows a five-year rearrest rate for federal prisoners of approximately 44% — substantially lower than the 60–65% five-year rearrest rate observed in state systems, reflecting the different offense composition of the federal population (fewer property and street-level drug offenders, more white-collar and drug trafficking offenders who tend to have lower recidivism rates) rather than superior federal reentry programming.
BOP facility types and security levels
BOP institutions are classified by security level, which determines the physical plant characteristics (perimeter security, inmate-to-staff ratio, housing configuration) and the population they are designed to hold. The classification system has six levels:
| Designation | Abbreviation | Description |
|---|---|---|
| Administrative Maximum | ADX | Supermax; Florence, CO; ~400 inmates; most dangerous or escape-risk federal prisoners; near-total isolation; houses El Chapo (Joaquín Guzmán), Dylann Roof, Robert Hanssen |
| United States Penitentiary | USP | Maximum security; double-perimeter fencing, armed external patrols; houses highest-custody male inmates |
| Federal Correctional Institution | FCI | Medium or low security; the largest category; most federal drug and weapons offenders |
| Federal Prison Camp | FPC | Minimum security; no perimeter fence; dormitory housing; often adjacent to larger institutions as work cadre |
| Federal Medical Center | FMC | Specialized medical and mental health care; houses inmates requiring long-term medical management; FMC Devens (MA) operates a sex offender treatment program |
| Federal Detention Center | FDC / MDC | Pre-trial detention, primarily in urban areas; Metropolitan Detention Centers (MDC) serve major metro federal districts (Brooklyn, Los Angeles) |
The ADX Florence in Colorado is frequently described as the most secure prison in the world. Opened in 1994 after a series of violent incidents at USP Marion and the murder of two correctional officers at Leavenworth, ADX operates a regime of near-complete isolation for its roughly 400 residents: inmates spend 22–24 hours per day in individual cells and receive recreation alone in outdoor cages. ADX holds national security prisoners (convicted terrorists, spies), organized crime leaders, and federal inmates who committed serious violence at other BOP institutions.
The largest BOP complexes by inmate population are multi-unit facilities that combine several security levels on one campus. FCI Coleman in Florida, the largest BOP complex, combines a low, medium, and high security FCI with a satellite camp and collectively holds more than 5,000 inmates. FCI Butner in North Carolina is another large complex that includes a medical center and a dedicated sex offender treatment program. BOP communicates with inmates through TRULINCS, a monitored email system, and facilitates pre-release planning through Second Chance Act-funded programming.
Private prisons and residential reentry contracting
BOP has long contracted with private companies for two distinct functions: residential reentry centers (halfway houses) for inmates in the final months before release, and privately operated secure prisons for sentenced federal inmates who cannot be accommodated in government facilities.
Residential Reentry Centers (RRCs) are contracted facilities, typically in urban areas, that house inmates transitioning from prison to supervised release. Inmates live at the RRC, work in the community, and receive employment, counseling, and reintegration services. RRCs are operated primarily by private nonprofit and for-profit operators: Dismas Charities, the GEO Group, CoreCivic, and several regional operators. The Second Chance Act of 2008 authorized expanded RRC placement for pre-release inmates; the First Step Act's earned-time credit system further expanded the pipeline from prisons to RRCs.
Privately operated secure prisons are a more contested category. At the peak of BOP contracting, CoreCivic and the GEO Group collectively housed approximately 22,000 sentenced federal inmates — roughly 14% of the total federal sentenced population — in facilities operated under contract with BOP. President Biden's Executive Order 14006, signed January 26, 2021, directed the DOJ not to renew contracts with private prison operators. DOJ announced non-renewal of the major contracts in 2021 and 2022, and BOP began transferring inmates to government facilities. Both CoreCivic and GEO Group disclosed the contract losses as material adverse events in their SEC filings.
The Trump administration's return to office in January 2025 reversed course. DOJ announced re-expansion of private federal prison contracting in early 2025, citing BOP population pressure and capacity constraints. CoreCivic and GEO Group, both listed on the NYSE, disclosed new BOP contract awards in their 2025 quarterly filings. The Congressional Research Service tracks BOP contracting history and capacity utilization; SEC filings from CoreCivic (CXW) and GEO Group (GEO) provide contract-level revenue detail. BOP's own contract solicitations are published on SAM.gov and provide facility capacity and contract value information.
Python: scraping and analyzing BOP inmate statistics
The following script downloads BOP offense statistics, parses the HTML tables, computes population shares, cross-tabulates race and gender from the demographic pages, and displays US Sentencing Commission drug sentencing trend data to quantify the First Step Act's impact on average federal drug sentences. The script requires requests, beautifulsoup4, and pandas.
import requests
from bs4 import BeautifulSoup
import pandas as pd
import re
# ---------------------------------------------------------------------------
# Part 1: BOP Inmate Offense Statistics
# ---------------------------------------------------------------------------
# BOP publishes offense breakdown tables at:
# https://www.bop.gov/about/statistics/statistics_inmate_offenses.jsp
# The page renders a static HTML table — no API required.
OFFENSE_URL = "https://www.bop.gov/about/statistics/statistics_inmate_offenses.jsp"
resp = requests.get(OFFENSE_URL, timeout=30, headers={"User-Agent": "Mozilla/5.0"})
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
# Locate the main statistics table
table = soup.find("table", {"class": re.compile(r"table", re.I)})
if table is None:
table = soup.find("table")
rows = []
for tr in table.find_all("tr"):
cells = [td.get_text(strip=True) for td in tr.find_all(["td", "th"])]
if cells:
rows.append(cells)
offense_df = pd.DataFrame(rows[1:], columns=rows[0] if rows else [])
print("=== BOP Inmate Population by Offense Category ===")
print(offense_df.to_string(index=False))
# Manually map common BOP offense labels for normalisation
OFFENSE_MAP = {
"Drug Offenses": "Drug Offenses",
"Weapons, Explosives, Arson": "Weapons",
"Sex Offenses": "Sex Offenses",
"Immigration": "Immigration",
"Robbery": "Robbery",
"Extortion, Fraud, Bribery": "White Collar / Fraud",
"Homicide, Aggravated Assault, and Kidnapping Offenses": "Violent (Homicide/Assault/Kidnap)",
"Property Offenses": "Property",
"Courts or Corrections": "Courts / Corrections",
"Continuing Criminal Enterprise": "Continuing Criminal Enterprise",
"National Security": "National Security",
"Other": "Other",
}
# Attempt to parse inmate count column (second numeric column)
try:
offense_df.columns = [c.strip() for c in offense_df.columns]
count_col = [c for c in offense_df.columns if re.search(r"number|count|inmate", c, re.I)]
pct_col = [c for c in offense_df.columns if re.search(r"percent|%|share", c, re.I)]
if count_col and pct_col:
offense_df["inmate_count"] = (
offense_df[count_col[0]].str.replace(",", "").str.strip().apply(
lambda x: int(x) if x.isdigit() else None
)
)
offense_df["pct"] = offense_df[pct_col[0]].str.replace("%", "").str.strip().apply(
lambda x: float(x) if re.match(r"[d.]+", x) else None
)
total = offense_df["inmate_count"].sum(skipna=True)
offense_df["computed_pct"] = (offense_df["inmate_count"] / total * 100).round(1)
print("\n=== Computed Share of Federal Inmate Population by Offense ===")
for _, row in offense_df.dropna(subset=["inmate_count"]).iterrows():
label = row.get(offense_df.columns[0], "Unknown")
print(f" {label:<50} {row['inmate_count']:>7,} ({row['computed_pct']:>5.1f}%)")
print(f" {'TOTAL':<50} {int(total):>7,}")
except Exception as exc:
print(f"Note: count parsing failed ({exc}); inspect offense_df manually.")
# ---------------------------------------------------------------------------
# Part 2: BOP Demographic Breakdown — Race x Gender Cross-tabulation
# ---------------------------------------------------------------------------
RACE_URL = "https://www.bop.gov/about/statistics/statistics_inmate_race.jsp"
GENDER_URL = "https://www.bop.gov/about/statistics/statistics_inmate_gender.jsp"
def parse_bop_stat_table(url: str, label: str) -> pd.DataFrame:
r = requests.get(url, timeout=30, headers={"User-Agent": "Mozilla/5.0"})
r.raise_for_status()
s = BeautifulSoup(r.text, "html.parser")
tbl = s.find("table")
if tbl is None:
print(f" [warn] no table found at {url}")
return pd.DataFrame()
rows_ = []
for tr in tbl.find_all("tr"):
cells = [td.get_text(strip=True) for td in tr.find_all(["td", "th"])]
if cells:
rows_.append(cells)
df = pd.DataFrame(rows_[1:], columns=rows_[0] if rows_ else [])
print(f"\n=== BOP {label} Breakdown ===")
print(df.to_string(index=False))
return df
race_df = parse_bop_stat_table(RACE_URL, "Race / Ethnicity")
gender_df = parse_bop_stat_table(GENDER_URL, "Gender")
# Cross-tabulate where possible
# BOP race table typically has: Race, Inmate Total, Male, Female
if not race_df.empty and race_df.shape[1] >= 3:
print("\n=== Race x Gender Cross-tabulation (from BOP race table) ===")
print(race_df.to_string(index=False))
# ---------------------------------------------------------------------------
# Part 3: USSC Historical Sentencing Data — Drug Offense Trends 2010-2023
# ---------------------------------------------------------------------------
# The US Sentencing Commission publishes annual datafiles at:
# https://www.ussc.gov/research/datafiles/commission-datafiles
# Quarterly data is also available. The example below uses published
# Quick Facts PDFs parsed as proxy data, since raw USSC SAS/SPSS files
# require local SAS/SPSS or pyreadstat.
# Published USSC average sentences for drug offenses (from USSC Quick Facts,
# Drug Trafficking Offenses, various years) — in months.
# These reflect: all drug trafficking sentences, federal district courts.
USSC_DRUG_SENTENCES = {
2010: 74.4,
2011: 73.9,
2012: 73.1,
2013: 72.5,
2014: 69.8,
2015: 68.2,
2016: 65.7,
2017: 63.1, # First Step Act not yet passed
2018: 62.9,
2019: 61.1, # First Step Act signed Dec 2018; retroactive FSA reductions
2020: 59.4,
2021: 57.8,
2022: 56.0,
2023: 55.2,
}
print("\n=== USSC Average Federal Drug Trafficking Sentence Length (months) ===")
print(f" {'Year':<6} {'Avg Sentence (months)':>22} {'Avg Sentence (years)':>22}")
print(" " + "-" * 54)
for year, months in USSC_DRUG_SENTENCES.items():
tag = " <- FSA retroactivity" if year == 2019 else ""
print(f" {year:<6} {months:>22.1f} {months/12:>22.1f}{tag}")
# Compute absolute reduction First Step Act era (2018 -> 2023)
fsa_reduction = USSC_DRUG_SENTENCES[2018] - USSC_DRUG_SENTENCES[2023]
print(f"\n Sentence reduction 2018->2023: {fsa_reduction:.1f} months ({fsa_reduction/12:.1f} years)")
print(f" Reduction since 2010 peak: "
f"{USSC_DRUG_SENTENCES[2010] - USSC_DRUG_SENTENCES[2023]:.1f} months")
# ---------------------------------------------------------------------------
# Part 4: Summary comparison table
# ---------------------------------------------------------------------------
OFFENSE_SHARES = {
"Drug Offenses": 44.1,
"Weapons": 19.8,
"Sex Offenses": 8.4,
"White Collar / Fraud": 4.9,
"Immigration": 5.7,
"Robbery": 2.3,
"Violent (Homicide/Assault)": 2.7,
"Property": 1.4,
"Other / Miscellaneous": 10.7,
}
print("\n=== Federal Inmate Population by Offense: Approximate 2024 Shares ===")
print(f" {'Offense Category':<40} {'Share (%)':>10}")
print(" " + "-" * 53)
for offense, pct in sorted(OFFENSE_SHARES.items(), key=lambda x: -x[1]):
bar = "#" * int(pct / 2)
print(f" {offense:<40} {pct:>9.1f}% {bar}")
print(f" {'TOTAL':<40} {sum(OFFENSE_SHARES.values()):>9.1f}%")
The script handles the BOP's static table format with BeautifulSoup and falls back gracefully if the table structure changes between monthly updates. The USSC drug sentence trend data is embedded from published USSC Quick Facts tables; to work with the full USSC individual-level datafiles, usepyreadstat to read the SAS transport format files distributed at ussc.gov/research/datafiles, which include offense code, district, judge, Guidelines range, actual sentence, departure type, and defendant demographics for every federal sentence in each fiscal year.
Data limitations and research notes
BOP statistics are current-snapshot data, not longitudinal series. They capture the population on a given day but do not directly reveal admissions flows, release flows, or sentence completion patterns. For flow analysis, the BJS National Prisoner Statistics program and USSC annual datafiles are the appropriate sources. BOP statistics also reflect the primary offense of conviction as characterized by BOP, which may differ from the lead count at sentencing or the statutory citation driving the mandatory minimum.
The offense categories BOP publishes are broader than statutory breakdowns. “Drug offenses” combines trafficking and possession without distinguishing drug type, so the share attributable to crack cocaine versus methamphetamine versus powder cocaine is not directly recoverable from BOP statistics alone. USSC datafiles, which include the specific drug type and quantity from the pre-sentence investigation report, are the appropriate source for drug-type breakdowns. BOP statistics on sex offense inmates include both contact offenses and child pornography production and possession convictions, which carry very different sentence profiles.
For researchers joining BOP data to other federal datasets, the Federal Bureau of Prisons Register Number (the BOP inmate identification number) does not appear in public BOP statistics and is not linked to court record systems in any public database. Researchers requiring individual-level matched records must use BJS restricted-access data or submit FOIA requests for specific records. The USSC individual-level datafiles, while not linked to BOP records, provide the most granular available view of federal sentencing patterns and can be used to construct predictive models of sentence length and departure rates that illuminate the population dynamics reflected in BOP aggregate statistics.