Federal Inmate Locator Scraper (BOP) avatar

Federal Inmate Locator Scraper (BOP)

Pricing

from $6.40 / 1,000 results

Go to Apify Store
Federal Inmate Locator Scraper (BOP)

Federal Inmate Locator Scraper (BOP)

Search the Federal Bureau of Prisons inmate locator by name or register number. Get sex, race, age, facility, projected and actual release dates for federal inmates. Export to JSON, CSV or Excel.

Pricing

from $6.40 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

14 days ago

Last modified

Share

Federal Inmate Locator Scraper (BOP)

Federal Inmate Locator Scraper (BOP)

Here is one real result, with every field the actor returns:

{
"inmateNumber": "00123-871",
"inmateNumberType": null,
"firstName": "JOHN",
"middleName": "LEE",
"lastName": "SMITH",
"suffix": null,
"fullName": "JOHN LEE SMITH",
"sex": "Male",
"race": "Black",
"age": 79,
"facilityName": "Detroit",
"facilityCode": "CDT",
"facilityType": "RRM",
"facilityUrl": "https://www.bop.gov/locations/ccm/cdt/",
"projectedReleaseDate": null,
"actualReleaseDate": "02/17/1994",
"status": "Released",
"facilityAddress": "4026 E. ARKONA RD.",
"facilityCity": "MILAN",
"facilityState": "MI",
"facilityZip": "48160",
"facilityPhone": "734-508-9048",
"facilityEmail": "CDT-CCM-S@bop.gov",
"facilityRegion": "North Central Region",
"facilitySecurityLevel": "N/A",
"facilityGender": "n/a",
"facilityTypeDescription": "Residential Reentry Office",
"facilityLatitude": 42.09890703288096,
"facilityLongitude": -83.66957902908325,
"source": "Federal Bureau of Prisons inmate locator",
"observedAt": "2026-08-10T14:39:17.173Z"
}

The most complete BOP inmate locator scraper available. It returns every field the federal locator exposes for each inmate, and enriches each record with the full address, phone, email and GPS coordinates of the facility holding them, from a name or register-number search.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor queries the Federal Bureau of Prisons public inmate locator by name (last name, optionally with a first name) or by federal register number, and writes one normalized record per matching inmate to the run's dataset. Each record carries the register number, name parts and full name, sex, race, age, in-custody or released status, projected and actual release dates, and the facility name, code and type. It then joins the BOP facility directory so every record also carries the facility's street address, city, state, zip, phone, email, region, security level, type description and GPS coordinates. Missing source values are returned as null.

Data covers federal inmates from 1982 onward. The locator returns up to 100 matches per search; add a first name, sex or age to narrow a common name.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 10 federal inmates named John Smith.

{
"maxInmates": 10,
"nameLast": "Smith",
"nameFirst": "John"
}

Provide a last name (optionally with a first name) or a register number. When a register number is set, the name fields are ignored.

Input reference

FieldTypeRequiredDefaultDescription
nameLaststringno*SmithThe inmate's last name to search for. Required unless you provide a register number.
nameFirststringnoJohnFirst name to narrow a common last name.
inmateNumberstringno(none)A federal register number (for example 12345-678) for an exact lookup. When set, the name fields are ignored.
sexenumno(any)Male, Female, or empty for any.
racestringno(any)Race filter (for example White, Black, Asian, Native, Multi).
agestringno(any)Exact age to narrow results.
maxInmatesintegerno10Maximum inmate records to collect (1 to 100). The locator returns up to 100 matches per search.

*Provide either nameLast or inmateNumber.

Output reference

One dataset item per inmate. Types: string, integer, number, or null when the source value is absent.

FieldTypeDescription
inmateNumberstringFederal register number.
inmateNumberTypestringRegister number type, when present.
firstNamestringFirst name.
middleNamestringMiddle name.
lastNamestringLast name.
suffixstringName suffix.
fullNamestringAssembled full name.
sexstringSex.
racestringRace.
ageintegerAge in years.
facilityNamestringFacility name (or IN TRANSIT).
facilityCodestringFacility code.
facilityTypestringFacility type code (for example FCI, RRM).
facilityUrlstringLink to the facility page.
projectedReleaseDatestringProjected release date, when in custody.
actualReleaseDatestringActual release date, when released.
statusstringIn custody or Released.
facilityAddressstringFacility street address.
facilityCitystringFacility city.
facilityStatestringFacility state.
facilityZipstringFacility zip.
facilityPhonestringFacility phone.
facilityEmailstringFacility contact email.
facilityRegionstringBOP region.
facilitySecurityLevelstringSecurity level.
facilityGenderstringFacility gender designation.
facilityTypeDescriptionstringHuman-readable facility type.
facilityLatitudenumberFacility latitude.
facilityLongitudenumberFacility longitude.
sourcestringData source label.
observedAtstringISO 8601 timestamp of when the record was collected.

The facility fields are null when the inmate has no assigned facility (for example while IN TRANSIT).

Example output record

Real record from the same live run (input {"nameLast": "Smith", "nameFirst": "John", "maxInmates": 10}), an in-custody inmate in transit with no assigned facility:

{
"inmateNumber": "00531-196",
"inmateNumberType": null,
"firstName": "JOHN",
"middleName": null,
"lastName": "SMITH",
"suffix": null,
"fullName": "JOHN SMITH",
"sex": "Male",
"race": "White",
"age": null,
"facilityName": "IN TRANSIT",
"facilityCode": null,
"facilityType": null,
"facilityUrl": null,
"projectedReleaseDate": "UNKNOWN",
"actualReleaseDate": null,
"status": "In custody",
"facilityAddress": null,
"facilityCity": null,
"facilityState": null,
"facilityZip": null,
"facilityPhone": null,
"facilityEmail": null,
"facilityRegion": null,
"facilitySecurityLevel": null,
"facilityGender": null,
"facilityTypeDescription": null,
"facilityLatitude": null,
"facilityLongitude": null,
"source": "Federal Bureau of Prisons inmate locator",
"observedAt": "2026-08-10T14:39:17.173Z"
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~inmate-locator-bop-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"nameLast":"Smith","nameFirst":"John","sex":"Male","maxInmates":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~inmate-locator-bop-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"inmateNumber":"12345-678"}'

Apify CLI:

apify call scrapers_lat/inmate-locator-bop-scraper \
--input '{"nameLast":"Smith","nameFirst":"John","maxInmates":10}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per inmate record returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. If a run errors or has no input, the actor writes a single item with a populated error field and does not charge for it. Empty (no-match) searches cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run. Upgrade for higher maxInmates.
  • Source match ceiling. The BOP locator returns up to 100 matches per search. Add a first name, sex or age to narrow a common name.

FAQ and troubleshooting

A run returned 0 records. Why? No federal inmate matched the search. Check the spelling of the last name, or search by register number. No-match searches are not charged.

Which inmates are covered? Federal inmates in the Bureau of Prisons system from 1982 onward. It does not include state or county jail inmates.

Why is the facility information missing on some records? Inmates who are released or IN TRANSIT may have no assigned facility, so the facility fields are null. Missing values are never invented.

How do I look up one specific person? Set inmateNumber to their federal register number for an exact lookup; the name fields are then ignored.

How do I narrow a common name like "Smith"? Add a nameFirst, and optionally sex or age. The locator returns at most 100 matches per query.

Is this an official BOP tool? No. This actor is independent and has no affiliation with the Federal Bureau of Prisons. It reads only data that is publicly available through the BOP inmate locator. Use the results in accordance with the source's terms.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with the Federal Bureau of Prisons. Accesses only publicly available inmate locator data. Use the results in accordance with the source's terms.