PROOViD AML Docs
Transparency

How our data is built

Everything here is exactly how the service works in production — no black box. PROOViD AML screens names against sanctions and PEP data; this page shows where that data comes from, how it is refreshed, how PEP levels are worked out, and — honestly — what the free bundled data does and does not guarantee. For the deeper technical diagrams see Architecture; for live source counts see Coverage & sources.

1. Where the data comes from

Two tiers. The bundled tier ships with the product; the bring-your-own (BYO) tier is a commercial feed a customer plugs in with their own key for guaranteed, exhaustive coverage.

flowchart LR
  subgraph Free["Bundled — free, daily refresh"]
    S1["UN / OFAC / EU / UK
sanctions (official gov lists)"] S2["Wikidata PEPs (CC0)
leaders, ministers, ambassadors,
central bankers, legislators + families"] S3["Adverse media
(GDELT + NER filter)"] end subgraph Byo["Bring-your-own — commercial, guaranteed"] S4["OpenSanctions / World-Check /
Dow Jones … (customer key)"] end Free --> ENG["PROOViD engine
(one normalized model)"] Byo --> ENG
The bundled data is genuinely free and refreshed every 24 hours. Its ceiling is the free Wikidata endpoint (rate-limited): great value and comprehensive for the important people, but not a contractually-guaranteed, exhaustive global feed. That guarantee is what the BYO commercial tier is for — and we say so plainly rather than imply total coverage.

2. The ingest pipeline (self-healing)

Each daily refresh runs these stages. The last stage is the important one: we accumulate — we never wipe the list and rebuild it.

flowchart TB
  A["Phase A — resolve the political offices
(head of state, gov, ministers, ambassadors,
central bankers, legislators)
by hierarchy AND by direct example"] A2["Phase A2 — office metadata
(jurisdiction country + IGO flag)"] L["Current leaders — sitting holders only
(no end date, alive, recent start)"] ACCL["+ accumulated leaders from earlier runs
(kept by self-healing)"] P["Rank by prominence
(Wikipedia reach — most-notable first)"] R["Relatives / RCA — leaders' families → PEP4"] B["Bulk — the broad PEP set (best-effort)"] ACC["Self-healing merge
add / refresh, stamp 'last seen',
KEEP anything missing this run"] PR["Age-out — prune only what's been
unseen for 30 days"] A --> A2 --> L --> P --> R --> B --> ACC --> PR ACCL --> P

Why "self-healing" matters

The free endpoint occasionally drops a batch. Previously every refresh wiped the data and rebuilt it, so a dropped batch meant those people vanished until a future full rebuild happened to succeed — a fresh gamble every day. Now the ingest only ever adds and refreshes, stamping a "last seen" date, and leaves in place anything merely missing from a run. So once a person is captured on any run they stay; a dropped batch is recovered on a later run; and coverage only ever improves toward complete. A separate, conservative age-out removes only entities that have been unseen for 30 days (a genuine removal, not a flaky miss).
Families self-heal too. The family / associate (RCA) pass doesn't only look at the leaders captured today — it also draws on the accumulated set of leaders seen on earlier runs. So even if a sitting leader's own record is missed by today's flaky fetch, their family is still looked up from the leader we already hold, and once captured it stays. No hand-maintained VIP list — the leader set is simply whatever the pipeline has accumulated.
Real leaders aren't crowded out by generic titles. Public data lumps a generic "president" title (held by ~1,300 heads of companies, academies, film juries and clubs) in with real national offices. Left unchecked, that crowd buries a genuine sitting head of state (whose specific national office has a single holder) when results are paged. We detect such generic, over-subscribed titles by their holder count (purely by the data — no hand-kept list) and set them aside from the leaders pass, so the real national leaders are always captured and ~1,300 non-PEP "presidents" stay out of the family results. Anyone who only ever held the generic title is still screened as a PEP through the broad pass.
Inconsistent public data can't hide a leader. The public source classifies offices inconsistently — some national offices (e.g. "Prime Minister of India") are recorded as an example of a role rather than a kind of it, so a purely hierarchy-based lookup would miss them (and did — a number of sitting presidents and prime ministers were absent). We resolve leadership offices both ways — by hierarchy and by direct example — so those offices, their current holders and their correct country-derived PEP level are all captured. Still no hand-maintained list of names.

Country-anchored leaders index

The most robust safeguard doesn't rely on how the public source organises offices at all. We start from the fixed, closed list of the world's ~200 sovereign countries and follow each country's own link to its head-of-state and head-of-government office. Because we start from the country, no country's leader can be missed by a data-structure quirk — and it's self-checking: one row per country, so a gap is obvious. We capture every holder with the dates they were in office (current and historical) plus their families, and keep the link to the source record on every row.

flowchart TB
  C["~200 sovereign countries
(fixed, closed list)"] O["each country's head-of-state
+ head-of-government office"] H["every holder + term dates
(current AND historical)"] F["families / associates → PEP4"] M["merge into self-healing accumulate"] C --> O --> H --> F --> M
Guaranteed core, honest edges. Every country's head of state (≈100%) and head of government (~98% — the rest genuinely have no separate one) are guaranteed, with their full term history and their families. Central-bank governors are covered for ~125 countries. Finance/foreign ministers and parliamentary speakers have no reliable per-country link in the public data, so they stay covered by the broad pass rather than being faked here. Every result links back to its public source record, so you can verify it yourself.

3. How PEP levels are worked out

A PEP's level is derived from the public office they hold, graded against your tenant's home country — it is not a flat label. Foreign-vs-domestic is inherently relative to you, so it is computed at screen time.

flowchart TB
  O["Office the person holds
(from Wikidata / OpenSanctions)"] O --> Q1{"Family / associate
relationship?"} Q1 -- yes --> P4["PEP4 — Family / associate (RCA)"] Q1 -- no --> Q2{"Intergovernmental
org role?"} Q2 -- yes --> P3["PEP3 — International-org"] Q2 -- no --> Q3{"Office country ==
your home country?"} Q3 -- yes --> P1["PEP1 — Domestic"] Q3 -- no --> P2["PEP2 — Foreign"] Q3 -- "unknown / home not set" --> PD["Documented PEP1 default"]

Set your home country on the risk profile to activate Domestic/Foreign grading, and use coverage presets (or the per-screen pepTiers filter) to choose which levels count. See the PEP-tier column on Coverage.

4. What happens when you screen a name

flowchart LR
  N["Name (+ DoB / nationality / aliases)"] --> C["Candidate retrieval
(trigram + phonetic, tenant lists,
optional freshness window)"] C --> SC["Fuzzy + phonetic + nickname scoring
(+ DoB confirmation)"] SC --> CL["Classify — TP / potential / false-positive"] CL --> TR["Derive PEP tier + adverse-media category"] TR --> D["Decision — Pass / Review / Fail
(+ 0–100 risk score, per-tenant policy)"] D --> CASE["Case created + explainable factors"]

5. Refresh & data freshness

  • Cadence: every source refreshes on a ~24-hour cycle; the self-healing merge means each refresh improves coverage rather than risking it.
  • Last-seen: every entity carries the date it was last confirmed in a source refresh.
  • Per-tenant freshness filter: a tenant can require "only match data seen in the last N days" — the shared dataset can't be pruned per-tenant, so this is your screen-time freshness knob (maxDataAgeDays). A conservative global age-out keeps the shared set clean regardless.

6. The honest boundary — free vs guaranteed

LayerWhat you getGuarantee
Free SanctionsUN / OFAC / EU / UK, direct from source, dailyComprehensive (official lists)
Free Current leadersSitting heads of state / government + their families (PEP4)Guaranteed each refresh (prominence-first + self-healing)
Free Broad PEPsMinisters, ambassadors, central bankers, legislators, historical holdersBest-effort — comprehensive, not exhaustive (self-heals over runs)
BYO CommercialExhaustive graded PEP + full family/associate (RCA) graph, SLA-backedGuaranteed & contractual — see Data providers
Stated plainly: no fully-free, unlimited, continuously-verified global PEP/RCA source exists. Our free tier is genuinely strong and self-healing; where you need a contractual guarantee of exhaustive coverage for named individuals, plug a commercial feed into the same engine via the BYO seam.
© PROOViD AML · Developer Docs Coverage & sources · Architecture · Data providers