Python scrapers for collecting all public notices from Interpol's API. Includes two independent scripts:
main.py- Red Notices (wanted persons) with parallel detail fetchingyellow_notice.py- Yellow Notices (missing persons) with auto-verification
Both scrapers use a recursive country/sex/age splitting strategy to bypass the API's 160-result pagination limit and achieve exhaustive collection.
pip install beautifulsoup4 pandaspython main.py [OPTIONS]| Argument | Default | Description |
|---|---|---|
--output |
interpol_red_notices.csv |
Output CSV path |
--workers |
20 |
Parallel threads for detail fetching |
--delay |
0.5 |
Delay between API calls (seconds) |
--max-pages |
None | Limit Phase 0 pages (for testing) |
# Default run
python main.py
# Custom: 30 workers, specific output
python main.py --workers 30 --output red_notices.csvpython yellow_notice.pyRuns all phases automatically. Output files:
interpol_yellow_smart_all.csv- Main datayellow_missing_report.csv- Completeness reportinterpol_yellow_smart_all_final.csv- Final consolidated data after catch-up
Common utilities used by both scrapers:
- HTTP client with retry-safe JSON fetching
- Notice deduplication by entity ID / URL / composite key
- Paginated fetching with automatic country > sex > age splitting
- CSV writer
- Phase 0 - Global page scan to collect notice URLs
- Phase 1 - Per-country scan to find notices missed by global pagination
- Phase 2 - Parallel
ThreadPoolExecutorto fetch and normalize detail pages (age calculation, country name conversion, infraction classification)
- Scrape - All 676 two-letter country codes, by nationality and birth country
- Verify - Compare local counts against API totals
- Catch-up - Re-fetch incomplete countries without filters