Skip to content
    ↑↓ to choose · Enter to open

    · 13 min read

    BOP Inmate Locator Scraper: 22 Data Fields per Record (2026)

    By CrawlerBros Engineering Team

    Each record carries 22 output fields, including register number, full name, facility details, age, race, sex, and release dates. A thousand results cost $5.00 on the free plan, and Apify's free plan includes $5.00 of monthly usage without a credit card. You can search by inmate name, query register numbers directly, or run common-name sweeps across federal custody records. This tool is built for legal researchers, reentry coordinators, journalists, and policy analysts tracking federal custody statuses. It is not for anyone needing state prison records, county jail logs, or court case dockets, as the federal locator data excludes non-federal facilities and case transcripts.

    Try it: open BOP Inmate Locator Scraper on Apify, sign in on the free plan and run the prefilled example.

    Can you try BOP Inmate Locator Scraper before paying?

    Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.005 per result, that covers up to 1,000 results of BOP Inmate Locator Scraper a month, before run-start charges and platform usage.

    The example request further down caps maxItems at 10, so a first run returns at most 10 results and costs at most $0.05 in result charges. That is enough to see the real shape of the data before deciding anything.

    BOP Inmate Locator Scraper was last updated on 2026-08-14. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 686,270 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.

    What does it cost to run BOP Inmate Locator Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    The number of dataset items emitted directly drives your total charges, making maxItems the primary control governing overall costs. Lowering maxItems caps the output items per run, protecting your spending. Running an initial query with maxItems set to 10 costs at most $0.05 in result charges on the free plan to confirm your schema mapping.

    How do you run BOP Inmate Locator Scraper from the API?

    The schema marks 1 of its 13 controls as required: mode. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for BOP Inmate Locator Scraper, so the request works once your token is in place.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~bop-inmate-locator-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"mode":"searchByName","nameFirst":"john","nameLast":"smith","numberType":"IRN","race":"","sex":"","maxItems":10,"proxyConfiguration":{"useApifyProxy":false}}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "mode": "searchByName",
      "nameFirst": "john",
      "nameLast": "smith",
      "numberType": "IRN",
      "race": "",
      "sex": "",
      "maxItems": 10,
      "proxyConfiguration": {
        "useApifyProxy": False
      }
    }
    
    run = client.actor("crawlerbros~bop-inmate-locator-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "mode": "searchByName",
      "nameFirst": "john",
      "nameLast": "smith",
      "numberType": "IRN",
      "race": "",
      "sex": "",
      "maxItems": 10,
      "proxyConfiguration": {
        "useApifyProxy": false
      }
    }
    
    const run = await client.actor('crawlerbros~bop-inmate-locator-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.

    Which BOP Inmate Locator Scraper inputs matter, and which can you skip?

    The mode parameter determines how the Actor searches, requiring either nameFirst and nameLast for name searches or registerNumber for direct lookups. Controls like ageMin, ageMax, race, and sex narrow down the returned results. It is best to avoid adjusting proxyConfiguration on initial runs, as a proxy is only automatically engaged if bop.gov blocks direct requests.

    • mode (string): What to fetch. Default: "searchByName".
    • nameFirst (string): First name or initial. Required together with last name (mode=searchByName). Default: "john".
    • nameLast (string): Last name. Required together with first name (mode=searchByName). Default: "smith".
    • numberType (string): Type of number to look up (mode=searchByNumber). Default: "IRN".
    • race (string): Restrict results by race. Default: "".
    • sex (string): Restrict results by sex. Default: "".
    • maxItems (integer): Hard cap on emitted records. The BOP API returns at most 100 records per query. Default: 100.
    • proxyConfiguration (object): Optional Apify proxy. Automatically engaged only if bop.gov blocks direct requests (403/429). Default: {"useApifyProxy":false}.
    • nameMiddle (string): Optional middle name or initial (mode=searchByName).
    • registerNumber (string): BOP register number, e.g. 00123-871 or 12345678 (mode=searchByNumber).
    • ageMin (integer): Drop inmates younger than this age.
    • ageMax (integer): Drop inmates older than this age.

    The other 1 controls, with their defaults, are listed in the input schema on BOP Inmate Locator Scraper on Apify.

    Fixed-choice controls: mode accepts searchByName (Search by name), searchByNumber (Search by register number), browseAll (Browse the register (common-name sweep)); numberType accepts IRN (BOP Register Number), DCDC (DCDC Number), FBI (FBI Number), INS (INS Number); race accepts "" (Any), I (American Indian), A (Asian), B (Black), W (White); sex accepts "" (Any), M (Male), F (Female).

    What does BOP Inmate Locator Scraper return?

    Returned records provide structured demographic and location data, including facility names, release status codes, and projected or actual release dates. They do not contain legal case files, sentencing judge transcripts, or defense attorney contact details. The output allows you to immediately verify whether an individual is currently incarcerated or has been released within the federal system.

    • registerNumber - BOP register number, e.g. 00123-871
    • numberType - type of number the lookup matched (IRN / DCDC / FBI / INS)
    • nameFirst, nameMiddle, nameLast, suffix, fullName
    • age, race, sex
    • releaseCode, releaseStatus - Released / Deceased / Escaped / Absconded / Not in BOP Custody
    • projectedReleaseDate - projected release date (in custody)
    • actualReleaseDate - actual release date (released)
    • releaseDate - whichever release date applies
    • facilityCode, facilityName, facilityType - e.g. CDT, Detroit, RRM
    • facilityUrl - BOP facility page for the location
    • sourceUrl - canonical locator deep-link for this register number
    • recordType: "inmate", scrapedAt

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open BOP Inmate Locator Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Select mode searchByName, supplying both nameFirst and nameLast. The BOP locator requires both for a valid search.
    2. Set maxItems to 10 for your initial query to cap the output while you confirm the schema mapping.
    3. Inspect the returned JSON payload to ensure essential keys like registerNumber, facilityName, and releaseStatus are present and correctly populated.
    4. Apply filters such as race, sex, ageMin, or ageMax to refine broad name-based searches.
    5. Use containsKeyword to narrow results by specific facilities or parts of a name when dealing with larger output sets.
    6. To look up an exact inmate, switch mode to searchByNumber and provide the registerNumber, ensuring numberType is set to IRN.
    7. For wider exploration of the register, select mode browseAll and configure ageMin and ageMax to cover a specific demographic segment.
    8. Export the finalized dataset to JSON or CSV via the Apify Dataset tab once all desired items have been collected.

    How do you apply it? Three worked playbooks

    These are BOP Inmate Locator Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: Legal research

    Outcome: Locate federal defendants and verify register numbers and release dates

    Configure: Set mode to searchByNumber, supply the target registerNumber, set numberType to IRN, and set maxItems to 10.

    Working method: Begin by querying an exact registration number. Validate that the returned record's full name matches the individual, then extract the releaseStatus and facilityName fields.

    Deliverable: A structured JSON object containing the verified registerNumber, full legal name, facility name, and release date details.

    Stop condition: The returned dataset contains 0 records for a known valid register number, indicating an input mismatch or a source issue.

    Use case 2: Reentry services

    Outcome: Discover projected release dates and receiving facilities for case planning

    Configure: Set mode to searchByName, set nameFirst and nameLast, configure ageMin and ageMax to match the client's demographic, and set maxItems to 50.

    Working method: Execute the search by name and age range. Inspect the resulting dataset for projectedReleaseDate and facilityCode to identify current placement and expected release timeframes.

    Deliverable: A CSV export detailing inmate full names, register numbers, facility names, facility codes, and projected release dates.

    Stop condition: Output records show releaseStatus as Released or Not in BOP Custody when actively in-custody records are required.

    Use case 3: Journalism & policy analysis

    Outcome: Demographic breakdowns (race, sex, age) of the federal register

    Configure: Set mode to browseAll, set race to W, set sex to M, set ageMin to 18, set ageMax to 80, and set maxItems to 1000.

    Working method: Initiate a systematic name-sweep run across specified demographic filters. Aggregate the returned records by age, race, and sex to compile dataset statistics.

    Deliverable: An aggregated dataset containing age, race, sex, and facility distributions across returned records.

    Stop condition: The run repeatedly hits the hard maxItems limit without returning new deduplicated records across adjacent sweeps.

    What breaks, and how do you design around it?

    • 100-record cap per query - the BOP service returns at most 100 records per name lookup. The actor paginates within that cap and reports when a query is truncated.
    • browseAll is a name sweep, not a census - bop.gov has no "show everyone" query, so browse mode queries the most common US first/last name combinations and deduplicates. It covers a large share of the register but is not a complete enumeration of every inmate.
    • First AND last name are required - bop.gov itself rejects searches with only one part.
    • No sentence or case data - the public locator exposes only the fields listed above; case files require the BOP's FOIA portal.
    • Captcha under aggressive use - the service may demand a captcha when queried too quickly; the actor spaces requests and retries automatically.
    • Some fields are always absent for some records - e.g. released inmates have no projected release date. Empty fields are never emitted.

    The BOP service returns at most 100 records per query. When searching wide name ranges, narrow your target set using ageMin, ageMax, sex, or containsKeyword to avoid a truncated query. Because browseAll uses a name sweep rather than a full register export, use direct register numbers if you need to track specific individuals precisely.

    When should you not use BOP Inmate Locator Scraper?

    Do not use this Actor if your research requires comprehensive court filing histories, criminal dockets, or full sentencing transcripts. The BOP locator only outputs custody status, facility assignments, and release dates. For complete case records, request access through official court PACER systems or the BOP FOIA portal. Additionally, this Actor cannot query state prison systems or local county jails. If you need non-governmental locator data like commercial dumpster placement, consider using Dumpsters.com Rental Locator Scraper instead.

    What should you check before trusting the output?

    • Verify that empty fields are omitted rather than populated with nulls, especially projectedReleaseDate for inmates already released.
    • Ensure actualReleaseDate is present when releaseStatus indicates a past release date.
    • Check that registerNumber matches the standard BOP formatting pattern, such as 00123-871.
    • Confirm facilityCode and facilityName correspond to known BOP locations when releaseStatus indicates the individual is in custody.
    • Halt execution if an inverted age range is passed where ageMin exceeds ageMax, as this will yield 0 results.

    None of this proves a record is correct. It gives a scheduled BOP Inmate Locator Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    What is the primary cost factor when running this Actor?

    Billing depends on dataset items returned, charged at $0.005 per result or $5.00 per 1,000 results on the free plan. Platform compute usage is billed additionally. Limiting maxItems during initial runs controls spending.

    Why does a search by name return fewer records than expected?

    The BOP service returns at most 100 records per query. If a common name matches more than 100 individuals, the response will be truncated. Use age or keyword filters to narrow results.

    Can I search using only a first name or last name?

    No. The bop.gov service requires both a first name and a last name for name-based searches. Submitting only one field returns no results.

    Does this Actor provide court dockets or sentencing records?

    No. The public BOP locator only provides custody status, facility location, and release dates. Court documents and case dockets must be obtained via PACER or FOIA requests.

    Are proxies required to extract data from bop.gov?

    No. A proxy is engaged automatically only if bop.gov blocks direct requests. Otherwise, the public service works without credentials or proxy.

    Where to go next

    When you are ready to run it, open BOP Inmate Locator Scraper on Apify; the free plan covers up to 1,000 results a month.

    Start with the BOP Inmate Locator Scraper Actor page for the current input schema, pricing tier, and run history.

    Other Actors we maintain for related data:

    • Dumpsters.com Rental Locator Scraper: Scrape dumpster rental pricing and availability from dumpsters.com by city/state, dumpster size (10-40 yard), or waste/project type.
    • Coop Sverige Store Locator Scraper: Scrape Coop Sverige's store locator - every Coop, Stora Coop, X:tra, Coop Forum, Coop Mini and Coop Kök & Café location in Sweden with address, phone, coordinates, opening hours, and services.
    • Ontario Dentist Register Scraper (RCDSO): Scrape RCDSO's public register of Ontario dentists (rcdso.org).
    • UK Osteopath Register Scraper: Search the General Osteopathic Council's public register (osteopathy.org.uk) by postcode/town, surname, or practice features, or look up exact registration numbers.
    • UK Chiropractor Register Scraper: Scrape the General Chiropractic Council (GCC) public register of UK-regulated chiropractors.
    • UK Architect Register Scraper: Scrape the official UK Architects Register (ARB) - search 30,000+ registered architects by name, practice, address, country, website or email, or look up specific architects by registration number.
    • Nintendo eShop Scraper: Scrape the Nintendo eShop - search for games by title, browse by platform/genre, or look up games by ID.

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-28.

    • Actor last updated by its maintainers on 2026-08-14.

    • Run outcome figures cover the 30 day public window ending 2026-09-28.

    • BOP Inmate Locator Scraper on Apify

    Featured actors

    BOP Inmate Locator Scraper

    Scrape the U.S. Federal Bureau of Prisons Inmate Locator. Search federal inmates by name or register number, browse the register, and get register number, age, race, sex, release dates, and facility details.

    Run on Apify ↗