FBI Most Wanted Search — Watchlist Intelligence is an Apify actor on ApifyForge. Watchlist intelligence over the FBI Most Wanted database. Screen people for KYC, score risk and danger, detect captures and watchlist changes, and get prioritised review queues with recommended actions. It costs $0.002 per record-fetched. Best for investigators, analysts, and risk teams conducting due diligence, regulatory tracking, or OSINT research. Not ideal for real-time surveillance or replacing classified intelligence systems. Maintenance pulse: 90/100. Last verified March 27, 2026. Built by Ryan Clinton (ryanclinton on Apify).
FBI Most Wanted Search — Watchlist Intelligence
FBI Most Wanted Search — Watchlist Intelligence is an Apify actor available on ApifyForge at $0.002 per record-fetched. Watchlist intelligence over the FBI Most Wanted database. Screen people for KYC, score risk and danger, detect captures and watchlist changes, and get prioritised review queues with recommended actions. Deterministic decisions, not raw rows. Browse, screening, and case-management modes.
Best for investigators, analysts, and risk teams conducting due diligence, regulatory tracking, or OSINT research.
Not ideal for real-time surveillance or replacing classified intelligence systems.
What to know
- Limited to publicly available and open-source information.
- Report depth depends on the availability of upstream government and public data sources.
- Requires an Apify account — free tier available with limited monthly usage.
Maintenance Pulse
90/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| record-fetched | Charged per FBI wanted person record retrieved. | $0.002 |
Example: 100 events = $0.20 · 1,000 events = $2.00
Documentation

Cut your FBI watchlist review workload. Screen people, prioritize risk, suppress alert noise, and automatically generate analyst review queues from FBI Most Wanted data — so a human works a short prioritised list instead of paging raw records.
The FBI API gives you records. This actor tells you what needs action.
Not a scraper — an intelligence layer. Built for compliance teams, KYC screening, OSINT analysts, journalists, and security operations.
Person → Screening → Risk assessment → Review queue → Action recommendation
Screen people against the FBI's Most Wanted database and get back decisions, not raw rows. This Apify actor queries the FBI's public Wanted Persons API, then classifies every record with a danger level, a crime category, a reward tier, a 0-100 risk score, and a recommended action (escalate / review / monitor / no-action) — plus fuzzy name-matching for KYC screening and cross-run change detection for continuous monitoring. No API key required.
FBI scraper vs intelligence engine
Before vs after
Raw FBI API gives you a poster:
{ "title": "JOHN DOE", "warning_message": "Armed and dangerous", "reward_text": "$100,000" }
…now what should I do?
This actor gives you the decision:
{ "riskLevel": "critical", "reviewPriority": 94, "recommendedAction": { "action": "escalate" },
"eventPriority": "high", "attentionScore": 91, "sla": { "recommendedReviewWithinHours": 2 } }
Escalate immediately — within 2 hours.
Why teams switch from FBI scrapers
| Problem | Traditional FBI scrapers | This actor |
|---|---|---|
| Too many records | ❌ | ✅ Prioritized (review queue) |
| False positives | ❌ | ✅ Explained (match tree) |
| Alert fatigue | ❌ | ✅ Suppressed (alert policy) |
| No screening workflow | ❌ | ✅ Built in |
| No history | ❌ | ✅ Persistent (intelligence history) |
| No action guidance | ❌ | ✅ Recommended |
Capability comparison
| Capability | FBI public API | Competitor scrapers | This actor |
|---|---|---|---|
| Search & filter | ✅ | ✅ | ✅ |
| Name/attribute screening (KYC) | ❌ | ❌ | ✅ |
| Risk score + danger level | ❌ | ❌ | ✅ |
| Review queue + SLA | ❌ | ❌ | ✅ |
| Change detection | ❌ | ⚠️ | ✅ |
| Alert suppression | ❌ | ❌ | ✅ |
| Intelligence history + risk drift | ❌ | ❌ | ✅ |
| Recommended actions | ❌ | ❌ | ✅ |
Who is this for?
Use this if you do:
- ✅ Compliance screening & KYC onboarding —
screeningDecision(escalate / review / no-action) with matching/conflicting factors and ananalystNotesaudit trail - ✅ Due diligence & OSINT investigations — risk scores, danger levels, crime categories,
subjectFingerprint,similarCases - ✅ Security operations — Slack/Discord alerts routed on
intelligenceEvent+eventPriority, noise suppressed - ✅ Watchlist monitoring & journalism — captures, new listings, and reward changes via a named watchlist; the run
digestanswers "what changed?"
Skip this if you only need:
- ❌ Raw FBI records with no scoring or workflow — a free scraper is enough
- ❌ A one-off manual lookup of a single person
- ❌ The verbatim FBI API response (this adds a decision layer on top; set
outputProfile: fullif you want both)
Everything is deterministic — every score, tier, and verdict comes from documented rules, no LLM and no randomness, so the output is reproducible and auditable.

What is watchlist intelligence?
Traditional watchlists (and raw FBI scrapers) answer one question: who is on the list?
Watchlist intelligence answers the four questions an analyst actually has:
- Who matters? — risk score, attention score, review priority
- Why do they matter? — danger level, crime category, threat archetype, match tree
- What changed? — change flags, event priority, risk drift, case journey
- What should happen next? — recommended action, screening decision, review queue + SLA
This actor is built around the second set of questions. The FBI data is public; the decision layer on top is the product.
From a full result set to a ranked queue
A broad FBI query can return hundreds of records. The decision layer collapses that into a short, prioritised work list so an analyst isn't paging raw data:
Full result set → focus filter → risk + screening scoring → alert suppression → ranked review queue
For example, a wide query in case-management mode with focus: critical-only surfaces only the records that cross the bar — the run summary's reviewQueue { critical, high, medium, low } tells you exactly how many landed in each tier. The exact reduction depends on your query and thresholds; the point is the analyst works the queue, not the dump.
The intelligence pipeline
Each record passes through a layered pipeline — the data is public, the decision layer is the product:
Raw FBI record
↓ Identity resolution (screening match — matchedOn / conflicts / missingData)
↓ Threat classification (crimeCategory, threatArchetype, dangerLevel)
↓ Risk prioritization (riskScore + riskBreakdown, attentionScore, operationalStatus)
↓ Change detection (changeFlag, eventPriority, intelligenceHistory + riskDrift + caseJourney)
↓ Alert suppression (alertPolicy.shouldNotify — only what matters)
↓ Operational recommendation (recommendedAction, screeningDecision, analystNotes)
Over scheduled runs the intelligenceHistory block accrues per subject — first-seen, days tracked, update count, reward changes, risk trend, and a caseJourney event timeline. The data is public; the accumulated intelligence record is what compounds.

Typical workflows
- KYC screening —
{ "screeningSubjects": [...] }→ each subject gets ascreeningDecision(escalate / review / no-action) with a per-fieldmatchTree. - Daily monitoring —
{ "watchlistName": "daily" }→ the summary reports{ captures, newListings, statusChanges }; alerts fire only on meaningful change. - Analyst queue —
{ "mode": "case-management" }→ a prioritisedreviewQueue { critical, high, medium }of cases with SLAs, not raw records.
Key features
- Decision layer on every record -- Each wanted person is tagged with
dangerLevel(armed-and-dangerous / caution / standard),crimeCategory(terrorism, violent-crime, crimes-against-children, cyber, financial-crime, kidnapping, missing-person, and more),rewardTier, a 0-100riskScorewithriskLevel, and arecommendedActionyour automation can branch on - KYC / screening mode -- Pass a list of people via
screeningSubjects; each is fuzzy-matched (name + sex + race + age) against returned wanted persons and emitted with amatchScore, band (strong / possible / weak), and a screening verdict (escalate / review / no-action) - Cross-run watchlist monitoring -- Set a
watchlistNameand every record carries achangeFlag(NEW / CAPTURED / STATUS_CHANGED / REWARD_CHANGED / UPDATED / UNCHANGED) diffed against the previous run, so scheduled runs surface captures and new listings - Eight poster classifications -- Browse Ten Most Wanted, standard wanted, seeking information, law enforcement assistance, missing persons, kidnappings, parental kidnappings, and ViCAP cases
- Output profiles --
minimal(automation essentials),standard(full decision layer),full(everything incl. raw fields),llm(compact agent context) - Run summary + KV mirror -- A final summary record with danger/category distributions, coverage, and watchlist deltas; also mirrored to the
SUMMARYkey-value store key - Slack / Discord alerts -- Optional
webhookUrlposts a rich embed when escalation-worthy records, captures, or new listings are found - Deterministic + auditable -- Every score, tier, and verdict comes from documented rules (no LLM, no randomness);
dangerSignalsandriskScoredrivers explain each decision - Automatic pagination + endpoint fallback -- Fetches across API pages (50 per page) and falls back between the FBI's two base URLs automatically
- Clean text + full raw record -- Strips HTML entities from text fields; preserves every raw FBI field (physical description, images, files, reward amounts, field offices) alongside the decision layer
- No API key required -- The FBI's Wanted Persons API is publicly accessible; the actor calls it on your behalf
How to use FBI Most Wanted Search
Using Apify Console
- Navigate to the FBI Most Wanted Search actor page on the Apify Store and click Try for free.
- On the Input tab, configure your search filters. All fields are optional -- leave them blank to browse the most recent wanted persons across all classifications.
- Set Max Results to control how many records to return (default is 20, maximum is 500).
- Click Start to run the actor.
- Once the run finishes, open the Dataset tab to view, filter, and export results as JSON, CSV, or Excel.
Using the API
Call the actor programmatically using the Apify REST API, official client libraries, or cURL:
curl "https://api.apify.com/v2/acts/E1an0B0Syquyf8BXG/runs" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"posterClassification": "ten",
"maxResults": 10
}'
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
title | String | No | -- | Browse mode: search by person name or case title (partial match supported) |
posterClassification | Select | No | -- | Filter by poster type: ten, default, information, law, missing, kidnap, parental, vicap |
fieldOffice | String | No | -- | Filter by FBI field office (e.g., newyork, losangeles, chicago, dallas, miami) |
status | Select | No | -- | Filter by case status: na (Not Captured), captured, recovered, located, surrendered, deceased |
race | String | No | -- | Filter by race (e.g., white, black, asian) |
sex | Select | No | -- | Filter by sex: Male or Female |
maxResults | Integer | No | 20 | Maximum number of results to return in browse mode (1--500) |
screeningSubjects | Array | No | -- | Screening mode: a list of people to fuzzy-match against the FBI database. Each subject: { subjectId, fullName, aliases[], sex, race, nationality, yearOfBirth }. When set, browse filters are ignored. |
screeningListName | String | No | -- | Save the screening subjects under a name (KV-persisted) for continuous screening. Supply both to save/update; supply only the name on later runs to reuse the list without re-uploading. |
focus | Select | No | all | Opinionated result filter applied after scoring: critical-only, armed-and-dangerous, terrorism, children, cyber, financial-crime, ten-most-wanted, reward-above-100k, new-and-changed. Only matching records are emitted and charged. |
mode | Select | No | standard | standard emits full wanted-person records; case-management emits lean recordType: case review-queue records (caseId, priority, status, reviewPriority, queuePosition). |
watchlistName | String | No | -- | Enable cross-run change detection. Records get a changeFlag diffed against the previous run on the same watchlist name. |
outputProfile | Select | No | standard | Field verbosity: minimal, standard, full, llm |
includeSummary | Boolean | No | true | Emit a final run-summary record with distributions, coverage, and watchlist deltas |
webhookUrl | String | No | -- | Slack or Discord webhook for high-priority alerts (escalations, captures, new listings) |
Example input — browse mode
{
"posterClassification": "ten",
"status": "na",
"maxResults": 50
}
Example input — screening mode (KYC / due diligence)
{
"screeningSubjects": [
{ "subjectId": "cust-8842", "fullName": "John Smith", "sex": "Male", "yearOfBirth": 1980 },
{ "subjectId": "cust-8843", "fullName": "Maria Garcia", "sex": "Female" }
],
"outputProfile": "standard"
}
Example input — scheduled monitoring
{
"posterClassification": "ten",
"watchlistName": "ten-most-wanted",
"webhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX"
}
Example input — case-management (analyst review queue)
{
"screeningListName": "customers",
"mode": "case-management",
"watchlistName": "kyc-daily"
}
In case-management mode the dataset is a queue of recordType: case records — caseId, priority, status (open / monitoring / closed), reviewPriority, and queuePosition — so an analyst works a prioritised case list instead of paging raw records. The summary's reviewQueue gives the { critical, high, medium, low } counts.
Tips
- All fields are optional. Running the actor with no input returns the most recent wanted persons across all classifications.
- Field office names are lowercase and concatenated. Enter
newyork,losangeles,saltlakecity-- notNew YorkorLos Angeles. - Combine filters for precision. Setting
posterClassificationtotenandstatustonareturns only currently active Ten Most Wanted Fugitives. - Poster classifications explained:
ten= Ten Most Wanted Fugitives,default= standard wanted posters,information= seeking public tips,law= law enforcement assistance,missing= missing persons,kidnap= kidnappings and missing persons,parental= parental kidnappings,vicap= Violent Criminal Apprehension Program. - Start small, then expand. Use
maxResultsof 20--50 for exploratory searches before scaling up to the full 500-record maximum.
Output

Each record carries the full raw FBI profile plus a deterministic decision layer. Here is a representative standard-profile example (decision fields shown first):
{
"schemaVersion": "2.0",
"recordType": "wanted-person",
"eventId": "9f8a1c4e2b7d6a3f0c5e1d2b",
"dangerLevel": "armed-and-dangerous",
"dangerSignals": ["explicit \"armed and dangerous\" warning", "risk:danger:armed-and-dangerous (+45)"],
"crimeCategory": "violent-crime",
"crimeCategories": ["violent-crime", "financial-crime"],
"rewardTier": "significant",
"rewardUsd": 100000,
"classificationLabel": "Wanted",
"caseStatus": "active",
"isActive": true,
"isCaptured": false,
"riskScore": 78,
"riskLevel": "critical",
"materiality": "blocker",
"recommendedAction": {
"action": "escalate",
"label": "Active armed-and-dangerous subject — do not approach; route to law enforcement.",
"owner": "security",
"reason": "explicit \"armed and dangerous\" warning"
},
"agentContract": { "decision": "act-now", "confidence": 0.85, "nextAction": "escalate", "costToAct": 0.002 },
"eventTaxonomy": "armed-and-dangerous-alert",
"summary": "JOHN DOE — Wanted, violent crime, danger armed-and-dangerous, status active, reward up to $100,000.",
"match": null,
"changeFlag": null,
"uid": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
"title": "JOHN DOE",
"description": "John Doe is wanted for his alleged involvement in a multi-state wire fraud scheme...",
"aliases": null,
"dateOfBirth": ["January 15, 1975"],
"placeOfBirth": "Houston, Texas",
"race": "White",
"sex": "Male",
"hair": "Brown",
"eyes": "Blue",
"heightMin": 510,
"heightMax": 510,
"weightMin": 180,
"weightMax": 200,
"ageMin": 48,
"ageMax": 52,
"nationality": "American",
"scarsAndMarks": "Tattoo on left forearm",
"build": "Medium",
"complexion": "Light",
"warningMessage": "SHOULD BE CONSIDERED ARMED AND DANGEROUS",
"rewardText": "The FBI is offering a reward of up to $100,000 for information leading to the arrest of John Doe.",
"rewardMin": 0,
"rewardMax": 100000,
"details": "John Doe is wanted for allegedly orchestrating a multi-state wire fraud scheme...",
"caution": "John Doe has been known to use multiple aliases and fraudulent identification documents.",
"additionalInformation": null,
"remarks": null,
"status": "na",
"personClassification": "Main",
"posterClassification": "default",
"fieldOffices": ["houston"],
"subjects": ["White-Collar Crime"],
"occupations": "Financial Advisor",
"possibleCountries": null,
"possibleStates": "Texas, California",
"images": [
{
"caption": "Photograph of John Doe",
"original": "https://www.fbi.gov/wanted/fugitives/@@images/image/original",
"large": "https://www.fbi.gov/wanted/fugitives/@@images/image/large",
"thumb": "https://www.fbi.gov/wanted/fugitives/@@images/image/thumb"
}
],
"files": [],
"fbiUrl": "https://www.fbi.gov/wanted/fugitives/john-doe",
"modified": "2024-11-20T14:30:00+00:00",
"publication": "2023-06-15T10:00:00+00:00",
"extractedAt": "2025-01-15T08:45:12.345Z"
}
Output fields
| Field | Type | Description |
|---|---|---|
uid | String | Unique FBI identifier for the record |
title | String | Person's name or case title (typically uppercase) |
description | String or null | Plain-text case summary (HTML stripped) |
aliases | String[] or null | Known aliases |
dateOfBirth | String[] or null | Array of dates of birth used by the individual |
placeOfBirth | String or null | City and state/country of birth |
race | String or null | Racial description |
sex | String or null | Sex -- Male or Female |
hair | String or null | Hair color |
eyes | String or null | Eye color |
heightMin / heightMax | Number or null | Height range in inches (encoded as integer, e.g., 510 = 5'10") |
weightMin / weightMax | Number or null | Weight range in pounds |
ageMin / ageMax | Number or null | Estimated age range |
nationality | String or null | Nationality |
scarsAndMarks | String or null | Description of scars, tattoos, birthmarks, or other identifying marks |
build | String or null | Body build (e.g., Medium, Heavy, Slim) |
complexion | String or null | Skin complexion (e.g., Light, Medium, Dark) |
warningMessage | String or null | Warning to the public (e.g., "ARMED AND DANGEROUS") -- HTML stripped |
rewardText | String or null | Human-readable reward description -- HTML stripped |
rewardMin / rewardMax | Number | Reward amount range in USD (0 if no reward) |
details | String or null | Extended case details -- HTML stripped |
caution | String or null | Caution information -- HTML stripped |
additionalInformation | String or null | Supplementary case information -- HTML stripped |
remarks | String or null | Additional remarks -- HTML stripped |
status | String | Case status: na, captured, recovered, located, surrendered, deceased |
personClassification | String | Person classification (e.g., Main, Victim) |
posterClassification | String | Poster type (e.g., default, ten, missing, information) |
fieldOffices | String[] or null | Array of FBI field offices handling the case |
subjects | String[] or null | Crime categories (e.g., Cyber's Most Wanted, White-Collar Crime) |
occupations | String or null | Known occupation(s) |
possibleCountries | String or null | Countries where the person may be located |
possibleStates | String or null | US states where the person may be located |
images | Object[] | Array of image objects with caption, original, large, and thumb URLs |
files | Object[] | Array of file attachments with url and name |
fbiUrl | String | Direct link to the person's official FBI poster page |
modified | String | ISO 8601 timestamp of the last FBI record update |
publication | String | ISO 8601 timestamp of the original publication date |
extractedAt | String | ISO 8601 timestamp of when this actor extracted the data |
Decision-layer fields
These deterministic fields are computed on top of the raw FBI record. All enums are stable (additive within a major version) so downstream automation can branch on them.
| Field | Type | Description |
|---|---|---|
rank | Number | 1-based rank within the run — by match score in screening mode, by riskScore in browse mode (records are returned highest-risk first) |
dangerLevel | String | armed-and-dangerous | caution | standard | not-applicable (missing persons) | unknown |
dangerSignals | String[] | Plain-English reasons behind the danger level + risk-score drivers |
crimeCategory | String | Primary category: terrorism, violent-crime, crimes-against-children, sexual-offense, cyber-crime, financial-crime, organized-crime, kidnapping, missing-person, drug-crime, public-corruption, other, unknown |
crimeCategories | String[] | All matched crime categories |
riskIndicators | Object | Booleans: terrorism, violent, crimesAgainstChildren, sexualOffense, cyber, financialCrime, organizedCrime, kidnapping, missingPerson, drug |
rewardTier | String | major (≥$1M) | significant (≥$100k) | standard (>$0) | none | unknown |
rewardUsd | Number or null | Reward amount in USD (parsed from reward_max or reward text) |
classificationLabel | String | Official poster classification title (e.g. "Ten Most Wanted Fugitive") |
caseStatus | String | active | resolved | deceased | unknown |
isActive / isCaptured | Boolean | Convenience flags derived from status |
riskScore | Number | 0-100 composite of danger + reward + classification signals |
riskBreakdown | Object | The per-component points that sum to riskScore (e.g. { danger: 45, reward: 15, tenMostWanted: 20 }) — auditable |
riskLevel | String | critical | high | medium | low |
materiality | String | blocker | major | minor | cosmetic |
threatArchetype | String | Human-readable persona: terror-network-affiliate / child-exploitation-subject / violent-repeat-offender / organized-crime-operative / high-value-financial-fraudster / cyber-threat-actor / international-flight-risk / career-fugitive / missing-or-endangered / unclassified |
operationalStatus | String | Operational stage: newly-listed / actively-pursued / high-public-interest / cold-case / captured / resolved / deceased / unknown |
attentionScore / attentionLevel | Number / String | 0-100 "what should I look at today?" axis (recency + salience), distinct from riskScore; level = high/medium/low |
reviewPriority | Number | 0-100 analyst-queue sort key (risk + attention + match + change). Drives queuePosition. |
noiseScore | Number | 0-100 likelihood this record wastes analyst time (high = low value). The noise side of the queue engine. |
reviewEffort | String | Estimated effort to clear: low / medium / high (high = ambiguous match with conflicts/gaps) |
sla | Object | { recommendedReviewWithinHours, tier } — P1 (2h) / P2 (24h) / P3 (72h) / P4 (168h) |
queuePosition | Number or null | 1-based slot in the review queue (escalate/review records ranked by reviewPriority); null otherwise |
benchmarks | Object or null | Percentiles within this run's result set (not population): { riskPercentile, rewardPercentile, attentionPercentile, cohortSize }. Null below 5 records. |
similarCases | Array | Within-run operational similarity: [{ uid, title, reason }] sharing crime category / archetype / field office ("have we seen this before?") |
source | String | Watchlist source id (fbi-wanted) — common-envelope field so this plugs into a multi-watchlist pipeline |
alertPolicy | Object | { shouldNotify, reason } — the alert-fatigue gate that drives the webhook; branch on shouldNotify |
investigationPack | Object | OSINT pivot data analysts gather by hand: { aliases[], possibleCountries[], possibleStates[], fieldOffices[], linkedCases[] } |
executiveSummary / analystSummary | String | Deterministic narratives — exec is risk-framed, analyst is history-framed (days tracked, reward/status changes, risk trend) |
intelligenceEvent | Object | Signal-centric event for automation: { type, severity, summary } — the "what happened" your Slack/Zapier rule routes on |
timeline | Object | { daysWanted, daysSinceUpdate, recordFreshness, freshnessScore, caseVelocity } (caseVelocity = active / dormant / unknown) from the FBI publication/modified dates + watchlist changes |
subjectFingerprint | Object | Compact identity descriptor for matching: { sex, race, ageRange, heightRange, build, aliasCount, aliasRisk, warningFlags[] } |
analystNotes | String[] | Deterministic plain-English audit-trail bullets (status, reward, classification, danger, aliases, changes) — paste-ready for a case file |
confidence | Object | { score, level, components[] } — record completeness (or match confidence in screening mode) |
recommendedAction | Object | { action, label, owner, reason } — action ∈ escalate | review | monitor | no-action |
agentContract | Object | Compact agent surface: { decision, confidence, nextAction, costToAct } |
eventTaxonomy | String | Routing tag (ten-most-wanted, capture-confirmed, screening-match, etc.) |
summary / whyThisMatters / whyNow | String | Plain-English LLM-friendly narratives |
match | Object or null | Screening mode only: { matchedSubjectId, score, band, level, basis[], mismatchSignals[] } |
screeningDecision | Object or null | Screening mode only — consolidated compliance verdict: { decision, confidence, certainty, band, matchingFactors[], conflictingFactors[], matchedOn[], missingData[], matchTree[] }. matchTree is per-field {field, result, weight} — courtroom-grade explainability. |
changeFlag | String or null | Watchlist mode only: NEW | CAPTURED | STATUS_CHANGED | REWARD_CHANGED | UPDATED | UNCHANGED |
eventPriority | String or null | Significance of the change (distinct from danger severity): critical (capture) / high / medium / low / none. Route alerts on this. |
changedFields / changeSummary | Array / String | What changed since the last watchlist run |
intelligenceHistory | Object or null | Persistent cross-run record: { firstSeen, lastChangedAt, daysTracked, runsSeen, updates, rewardChanges, statusChanges, updateFrequency, riskTrend, riskDrift, attentionTrend, caseJourney[] } — accrues over scheduled runs |
Run summary record (recordType: "summary")
When includeSummary is on (default), the last dataset record — also mirrored to the SUMMARY key-value store key — answers "what matters in this run?" without paging every result:
headline— one-line takeaway, paste-ready for Slack/emailrecommendedReview— the records flagged escalate/review, the analyst's work queuereviewQueue—{ critical, high, medium, low }counts for the review queueoverallRisk,highRiskCount,dangerDistribution,categoryDistribution,focus,outputModegeo—topRiskStatesandtopRiskFieldOffices, each{ name, count, totalRisk, maxDanger }aggregated across this run's records (within-run sums, not a population-wide model)digest— curated lists:highestRiskSubjects,capturesDetected,newCriticalCases,rewardChanges,terrorismCases,childExploitationCaseswatchlist—{ newListings, captures, statusChanges }when a watchlist is setcoverage,trust, and amanifestpinning the internal rule-table versions
Use cases
- Journalism and investigations -- Research fugitives, missing persons, and crime patterns across FBI classifications for investigative reporting and data journalism projects
- Compliance screening -- Screen individuals against FBI wanted lists as part of KYC (Know Your Customer), AML (Anti-Money Laundering), or enhanced due diligence workflows
- Public safety applications -- Build alerting systems, dashboards, or notification tools that surface newly added or updated FBI wanted persons for community awareness
- Academic research -- Study law enforcement trends, crime demographics, reward structures, or regional patterns using structured bulk data from an authoritative source
- Open-source intelligence (OSINT) -- Integrate FBI wanted person data into OSINT workflows for threat analysis, investigations, or intelligence aggregation
- Cross-referencing watchlists -- Combine FBI data with Interpol Red Notices, OFAC sanctions, OpenSanctions, and other watchlists for comprehensive person screening
- Missing persons awareness -- Extract missing persons and kidnapping cases to power community alert systems, social media campaigns, or non-profit outreach platforms
- Continuous monitoring -- Schedule daily or weekly runs to detect newly added wanted persons, status changes (captures, recoveries), or updated case details over time
- Reward tracking -- Filter and monitor cases with monetary rewards to build reward aggregation tools or track high-value fugitive cases
- Law enforcement technology -- Feed structured FBI data into intelligence platforms, case management systems, or inter-agency data sharing tools
API & Integration
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run_input = {
"posterClassification": "ten",
"status": "na",
"maxResults": 20,
}
run = client.actor("E1an0B0Syquyf8BXG").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
reward = f"${item['rewardMax']:,}" if item.get("rewardMax") else "None"
print(f"{item['title']} -- Status: {item['status']} -- Reward: {reward}")
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("E1an0B0Syquyf8BXG").call({
posterClassification: "ten",
status: "na",
maxResults: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
const reward = item.rewardMax ? `$${item.rewardMax.toLocaleString()}` : "None";
console.log(`${item.title} -- Status: ${item.status} -- Reward: ${reward}`);
}
cURL
# Start a run
curl "https://api.apify.com/v2/acts/E1an0B0Syquyf8BXG/runs" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{"posterClassification": "ten", "maxResults": 10}'
# Fetch dataset results (use defaultDatasetId from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Integrations
Connect FBI Most Wanted Search to your existing tools and workflows:
- Google Sheets -- Automatically export results to a spreadsheet for team review and record-keeping
- Slack / Email -- Get notified when new wanted persons match your criteria using Apify webhooks
- Zapier / Make -- Route data to CRMs, databases, case management systems, or hundreds of other third-party apps
- REST API -- Fetch results programmatically from any language or platform using the Apify dataset API
- Scheduled runs -- Set up Apify schedules to run daily, weekly, or monthly screenings automatically
- Webhooks -- Trigger downstream actions (notifications, database writes, alerts) whenever a run completes
Use in Dify
Drop this actor into Dify workflows via the Apify plugin's Run Actor node. Every wanted person returns scored, classified, and recommended as structured JSON — dangerLevel (armed-and-dangerous / caution / standard), riskLevel (critical / high / medium / low), and a recommendedAction.action (escalate / review / monitor / no-action) your downstream if/else node branches on. A raw FBI scraper pointed at the same API returns poster fields; this returns decisions.
- Actor ID:
ryanclinton/fbi-wanted-search - Sample input (screen a person for a KYC / onboarding gate):
{
"screeningSubjects": [
{ "subjectId": "applicant-4471", "fullName": "John Smith", "sex": "Male", "yearOfBirth": 1980 }
],
"outputProfile": "standard"
}
- Branching example — a Dify if/else node routes on the decision enum, no prose parsing:
recommendedAction.action == "escalate"→ block onboarding, notify compliancerecommendedAction.action == "review"→ send to an analyst queue withmatch.mismatchSignalsrecommendedAction.action == "no-action"→ proceed
- Opt-in modes Dify workflows can leverage: set
screeningSubjectsfor the KYC match path, or setwatchlistNameon a scheduled run and branch onchangeFlag == "CAPTURED"/"NEW"to fire alerts only when something changed. - The
recommendedActionobject (action + owner + reason) and thedangerSignals[]/match.basis[]arrays are usable verbatim in a Dify message node — no LLM rewriting needed.
How it works
The actor queries the FBI's public Wanted Persons API (with automatic dual-endpoint fallback and pagination), cleans and normalises each record, runs the deterministic decision layer described above, and pushes the result to the Apify dataset — exportable as JSON, CSV, or Excel. No API key required. See The intelligence pipeline for the decision stages.
Performance & cost
This actor is pay-per-result: you are charged $0.002 per record returned, plus minimal Apify platform compute. You only pay for records the actor actually returns.
| Scenario | Records | Approx. duration | Result charge |
|---|---|---|---|
| Quick lookup | 10 | 5--10 seconds | $0.02 |
| Default search | 20 | 10--15 seconds | $0.04 |
| Medium search | 100 | 15--30 seconds | $0.20 |
| Large search | 250 | 30--60 seconds | $0.50 |
| Maximum search | 500 | 45--90 seconds | $1.00 |
- The actor makes lightweight JSON API calls only -- no browser rendering, no proxy required, no heavy crawling, so platform compute is negligible.
- The spending limit is respected mid-run: if a per-run charge cap is reached, the actor stops cleanly rather than over-billing.
- The run summary record is never charged.
- Daily scheduled monitoring of the Ten Most Wanted list (10 records/day) costs roughly $0.60 per month in result charges.
Limitations
- Maximum 500 results per run -- The actor caps output at 500 records per execution. For broader coverage, run multiple searches with different filter combinations.
- FBI API availability -- Results depend on the FBI's public API being accessible. The actor tries two endpoints with automatic fallback, but prolonged API outages will cause the run to fail.
- Public data only -- The actor retrieves only information the FBI makes publicly available through their API. Some records may have limited detail or redacted fields.
- Height encoding -- Height values use the FBI's integer encoding (e.g., 510 means 5 feet 10 inches). You may need to parse this format in downstream processing.
- No real-time push notifications -- The FBI API does not support webhooks or streaming. To detect changes, schedule recurring runs and compare datasets over time.
- Cloud IP restrictions -- The FBI API may occasionally block cloud provider IP ranges. If this occurs, the actor will report the error in the run log.
- Field office naming -- Field office names must be entered as lowercase concatenated strings (e.g.,
newyork,losangeles). There is no published list of valid values -- consult the FBI's website for current field office names.
Responsible use
This actor provides access to publicly available law enforcement data. The FBI's Wanted Persons database contains information about individuals who are wanted, missing, or sought for information -- not necessarily convicted of any crime. Use this data responsibly.
- Do not treat wanted status as a conviction. A person listed as wanted by the FBI has been charged or is sought in connection with an investigation. This does not constitute a finding of guilt. Always consider the legal context and presumption of innocence.
- Human review is essential. Do not use FBI wanted person data as the sole input for automated decisions that affect individuals -- such as denying services, blocking accounts, or taking employment actions. Human review should always be part of any decision process involving this data.
- Handle personal data responsibly. Although this information is published by the FBI for public awareness, it pertains to identified individuals. Comply with applicable privacy laws and regulations in your jurisdiction (including GDPR where applicable) when storing, processing, or redistributing this data.
- Use for legitimate purposes. This actor is intended for journalism, academic research, public safety, compliance screening, and civic technology. Do not use it for harassment, discrimination, vigilantism, or any purpose that could endanger individuals.
- Verify through official channels. For any law enforcement, legal, or high-stakes compliance action, verify information directly through the FBI's official website or by contacting the relevant field office. This actor provides a data access layer, not an authoritative legal determination.
FAQ
Does this actor require an API key? No. The FBI's Wanted Persons API is publicly accessible and does not require authentication. The actor handles all API communication for you.
How is this actor priced? Pay-per-result: $0.002 per record returned, plus minimal platform compute. The run summary record is not charged, and the actor honours your per-run spending limit mid-run.
Can I screen a list of people against the FBI database?
Yes. Use screeningSubjects — pass a list of people and each is fuzzy-matched (name + sex + race + age) against returned wanted persons. Records below the match threshold are not emitted, so you only see credible matches, each with a matchScore, band, and screening verdict.
How do I detect captures and new listings over time?
Set a watchlistName and schedule the actor. Each run diffs against the previous run on that watchlist and tags records with a changeFlag (NEW, CAPTURED, STATUS_CHANGED, etc.). Add a webhookUrl to get a Slack/Discord alert when something changes.
How current is the data?
The actor queries the FBI's live API in real time, so results are always as current as the FBI's own database. Each record includes a modified timestamp showing when the FBI last updated it, and an extractedAt timestamp showing when this actor retrieved it.
Can I search for a specific person by name?
Yes. Use the title input parameter to search by name or case title. The FBI API performs a partial match, so entering a last name is usually sufficient.
What is the difference between poster classifications?
ten = Ten Most Wanted Fugitives (the highest-profile cases), default = standard wanted posters, information = seeking public tips, law = law enforcement assistance requests, missing = missing persons, kidnap = kidnappings and missing persons, parental = parental kidnapping cases, vicap = Violent Criminal Apprehension Program cases involving unsolved violent crimes.
What does the status field mean?
na = not yet captured/at large, captured = arrested, recovered = found (for missing persons), located = found alive, surrendered = turned themselves in, deceased = the person has died.
Can I get photographs of wanted persons?
Yes. Each record includes an images array with URLs for original, large, and thumbnail versions of the person's photograph hosted on FBI servers. Not all records include images.
How do I read the height values? The FBI encodes height as an integer -- for example, 510 means 5 feet 10 inches, 602 means 6 feet 2 inches. The first digit(s) represent feet and the last two digits represent inches.
Can I filter by geographic region?
Yes. Use the fieldOffice parameter to focus on a specific FBI field office. For example, miami returns cases handled by the FBI's Miami field office. Enter the field office name as a single lowercase string.
Can I combine multiple filters?
Yes. All input parameters can be combined. For example, set posterClassification to default, status to na, and fieldOffice to newyork to find currently wanted persons handled by the New York field office.
Can I schedule recurring runs? Yes. Use Apify's built-in scheduler to run the actor daily, weekly, or at any custom interval. Combine with webhooks or integrations to get notified when new results appear or statuses change.
What happens if the FBI API is down? The actor tries two separate API endpoints with automatic fallback. If both endpoints are unavailable, the run will fail with an error message. You can retry the run later or set up Apify's automatic retry feature.
Related actors
| Actor | Description | Link |
|---|---|---|
| Interpol Red Notice Search | Search Interpol's Red Notice database for wanted persons across 195 member countries. Combine with FBI data for comprehensive international fugitive coverage. | apify.com/ryanclinton/interpol-red-notices |
| OFAC Sanctions Search | Search the US Treasury OFAC SDN list for sanctioned individuals, companies, vessels, and aircraft. Pair with FBI data for compliance screening workflows. | apify.com/ryanclinton/ofac-sanctions-search |
| OpenSanctions Search | Search the OpenSanctions aggregated database covering sanctions, watchlists, and PEPs from multiple international jurisdictions (EU, UN, UK, and more). | apify.com/ryanclinton/opensanctions-search |
| UK Police Crime Data | Search UK police crime reports, street-level crime data, and neighbourhood statistics for international law enforcement research and community safety analysis. | apify.com/ryanclinton/uk-police-crime-data |
Related actors
AI Cold Email Writer — $0.01/Email, Zero LLM Markup
Generates personalized cold emails from enriched lead data using your own OpenAI or Anthropic key. Subject line, body, CTA, and optional follow-up sequence — $0.01/email, zero LLM markup.
AI Outreach Personalizer — Emails with Your LLM Key
Generate personalized cold emails using your own OpenAI or Anthropic API key. Subject lines, opening lines, full bodies — tailored to each lead's role, company, and signals. $0.01/lead compute + your LLM costs. Zero AI markup.
Bulk Email Verifier — MX, SMTP & Disposable Detection at Scale
Verify email deliverability in bulk — MX records, SMTP mailbox checks, disposable detection (55K+ domains), role-based flagging, catch-all detection, domain health scoring (SPF/DKIM/DMARC), and confidence scores. $0.005/email, no subscription.
CFPB Complaint Search — By Company, Product & State
Search the CFPB consumer complaint database with 5M+ complaints. Filter by company, product, state, date range, and keyword. Extract complaint details, company responses, and consumer narratives. Free US government data, no API key required.
Ready to try FBI Most Wanted Search — Watchlist Intelligence?
Run it on your own Apify account. Apify offers a free tier with $5 of monthly credits.
Open on Apify Store