{"id":50673080,"url":"https://github.com/stiles/alcatraz","last_synced_at":"2026-06-08T13:04:22.717Z","repository":{"id":363202622,"uuid":"1262313657","full_name":"stiles/alcatraz","owner":"stiles","description":"Data collection for the 1962 Alcatraz escape and related history","archived":false,"fork":false,"pushed_at":"2026-06-07T21:48:46.000Z","size":70345,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-07T23:11:16.933Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stiles.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-07T21:01:39.000Z","updated_at":"2026-06-07T21:48:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/stiles/alcatraz","commit_stats":null,"previous_names":["stiles/alcatraz"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/stiles/alcatraz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stiles%2Falcatraz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stiles%2Falcatraz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stiles%2Falcatraz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stiles%2Falcatraz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stiles","download_url":"https://codeload.github.com/stiles/alcatraz/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stiles%2Falcatraz/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34063179,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-08T13:04:21.962Z","updated_at":"2026-06-08T13:04:22.699Z","avatar_url":"https://github.com/stiles.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Alcatraz research\n\nReplicable data collection for the 1962 Alcatraz escape and related history.\n\n## Setup\n\n```bash\nuv sync\n```\n\n## Scripts\n\n| Script | Source | Output |\n|--------|--------|--------|\n| `scripts/scrape_inmates.py` | [National Archives – Former Alcatraz Inmates](https://www.archives.gov/san-francisco/finding-aids/alcatraz-alpha) | `data/inmates.json`, `data/inmates.csv` |\n| `scripts/scrape_notable.py` | [Wikipedia – List of inmates](https://en.wikipedia.org/wiki/List_of_inmates_of_Alcatraz_Federal_Penitentiary) | `data/notable_inmates.json`, `data/inmates_enriched.json`, `data/inmates_enriched.csv` |\n| `scripts/scrape_escapes.py` | [BOP – Alcatraz History](https://www.bop.gov/about/history/alcatraz.jsp) | `data/escape_attempts.json`, `data/escape_attempts.csv` |\n| `scripts/scrape_places.py` | [NPS Developer API – Places](https://developer.nps.gov/api/v1/places?parkCode=alca) | `data/places.json`, `data/places.csv`, `data/places.geojson` |\n| `scripts/scrape_boundary.py` | [OpenStreetMap – relation 20197830](https://www.openstreetmap.org/relation/20197830) | `data/boundary.geojson` |\n| `scripts/fetch_fbi_docs.py` | [FBI Vault – Alcatraz Escape](https://vault.fbi.gov/Alcatraz%20Escape/) | `data/fbi_docs.json`, `documents/*.pdf` |\n\nRun scripts in order — `scrape_notable.py` and `scrape_escapes.py` both read from `data/inmates.csv`:\n\n```bash\nuv run python scripts/scrape_inmates.py\nuv run python scripts/scrape_notable.py\nuv run python scripts/scrape_escapes.py\nuv run python scripts/scrape_places.py\nuv run python scripts/scrape_boundary.py\nuv run python scripts/fetch_fbi_docs.py   # large download, ~600 MB\n```\n\n## Data\n\n### `data/inmates.json` / `data/inmates.csv`\n\n1,576 prisoner records from the National Archives alphabetical index.\n\n| Column | Description |\n|--------|-------------|\n| `register_number` | Bureau of Prisons register number |\n| `name_raw` | Original all-caps string from source (`LAST, FIRST MIDDLE`) |\n| `name_last` | Last name in title case |\n| `name_given` | Given name(s) in title case |\n| `name_suffix` | Generational suffix (Jr., Sr., II, III, IV) if present |\n| `name_full` | Reconstructed full name: `First Middle Last [Suffix]` |\n\nSome names include alternate surnames in brackets (e.g. `Best [Besmanoff]`) or nicknames in quotes — these are preserved from the source.\n\n### `data/inmates_enriched.json` / `data/inmates_enriched.csv`\n\nAll 1,576 records with three columns added by `scrape_notable.py`:\n\n| Column | Description |\n|--------|-------------|\n| `notable` | `true` if the prisoner appears on Wikipedia's notable inmates list |\n| `wikipedia_name` | Display name as it appears on Wikipedia |\n| `wikipedia_url` | Link to Wikipedia article, if one exists |\n\nThree Wikipedia entries are unmatched in the Archives list: Wilhelm von Brincken (pre-1934 military era), Robert Simmons, and Irving \"Waxey Gordon\" Wexler.\n\n### `data/escape_attempts.json` / `data/escape_attempts.csv`\n\n14 escape attempts from the BOP history page. The JSON version includes a full `participants` array with register numbers, matched names, and how each name appears in the BOP narrative. The CSV flattens participants to a pipe-delimited `participant_registers` column.\n\n| Column | Description |\n|--------|-------------|\n| `attempt_number` | 1–14 in chronological order |\n| `year` | Year of the attempt |\n| `nickname` | BOP's informal label (e.g. \"Hollywood\", \"Battle of Alcatraz\") |\n| `date_start` / `date_end` | ISO dates (equal for single-day events) |\n| `description` | Narrative text from BOP |\n| `participant_registers` | Pipe-delimited register numbers of matched prisoners (CSV only) |\n\nKnown matching gaps: Thomas Limerick (#3, 1938) is called \"James Limerick\" in the BOP text but \"Thomas Robert\" in the Archives; two William Martins (registers 370 and 1308) can't be disambiguated from text alone.\n\n### `data/places.json` / `data/places.csv` / `data/places.geojson`\n\n65 named locations on Alcatraz Island from the NPS Developer API, including coordinates, descriptions, tags, and amenities. The GeoJSON file is ready to drop into any mapping tool.\n\n`scrape_places.py` uses `DEMO_KEY` by default. For higher rate limits, set `NPS_API_KEY` to a [free key from the NPS developer portal](https://www.nps.gov/subjects/developer/get-started.htm).\n\n| Column | Description |\n|--------|-------------|\n| `id` | NPS UUID for the place |\n| `title` | Location name |\n| `latitude` / `longitude` | WGS84 coordinates |\n| `listing_description` | Short description |\n| `tags` | Pipe-delimited tags (e.g. tour stops, wayside exhibits) |\n| `url` | NPS.gov page for the location |\n| `is_open_to_public` | Whether publicly accessible |\n| `is_passport_stamp` | Whether a National Parks Passport stamp location |\n| `nps_map_id` | Internal NPS map pin ID |\n\n### `data/boundary.geojson`\n\nIsland boundary polygon from the OpenStreetMap `natural=coastline` way ([relation 20197830](https://www.openstreetmap.org/relation/20197830)) — 135 coordinate points, roughly one vertex every 4 metres around the ~500 m perimeter. This is the highest-resolution island outline available from a free public API. Properties include `wikidata`, `wikipedia`, `gnis_feature_id`, and the OSM way id. Drop it alongside `places.geojson` for a complete map layer stack.\n\n### `data/fbi_docs.json`\n\nIndex of the 17 FBI vault PDFs with `title`, `view_url`, and `download_url`.\n\n## Notes\n\n- All scripts can be re-run safely; `fetch_fbi_docs.py` skips PDFs that already exist in `documents/`.\n- The FBI vault requires a browser-like User-Agent header; the script sets one automatically.\n- The Archives prisoner list has no real pagination — all five alphabetical sections are on a single page.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstiles%2Falcatraz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstiles%2Falcatraz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstiles%2Falcatraz/lists"}