Try it now — no code
Open the screening page, paste an API key, type a name, and get a clear Pass / Review / Fail verdict with risk score and matched entities. Built-in example names to try.
Open the Try-it pageSanctions · PEP · Adverse media
PROOViD AML is a multi-tenant, API-first screening service for sanctions, PEP and adverse-media checks. We run our own matching and risk engine, so there's no per-lookup aggregator lock-in — buy it as a hosted API, or self-host the whole thing in your own cloud with one Docker stack.
Building an integration? Read the API docs →
Get started
Try it in your browser with no code, onboard a tenant for a real API key, or build straight against the API.
Open the screening page, paste an API key, type a name, and get a clear Pass / Review / Fail verdict with risk score and matched entities. Built-in example names to try.
Open the Try-it pageUse the guided wizard to create a tenant and get an API key in about a minute — no code required. It hands the key straight to the Try-it page.
Onboard a tenantA 5-minute quickstart, the full interactive API reference, webhook verification and an AI-agent automation guide — plus a ready-to-run MCP server for agents.
Read the developer docsHow it works
No SDK gymnastics, no batch ceremony. A single REST call returns a normalized, actionable verdict.
One POST /v1/tenants provisions a tenant, an API key, a default risk profile and an optional signed webhook. Multi-tenant from the first request.
Send a name (plus optional DoB, nationality, aliases). Sanctions and PEP matching is fuzzy, phonetic and nickname-aware; adverse-media binding is exact by design — a nickname or alternate spelling in the news will be missed.
Back comes a normalized isMatch + score, a classification (True / Potential / False / Unknown), a risk band and a Pass / Review / Fail decision you can act on.
Flag a subject for ongoing monitoring and we re-screen on every watchlist change, firing an HMAC-signed monitoring.alert webhook only when the outcome moves.
Radically transparent
Most vendors won't show you where their data comes from. We publish the whole pipeline: the sources, how they refresh, how PEP levels are worked out, and exactly what we hold — with a public source link on every leader.
Head of state + head of government for ~200 countries, with the dates each held office and their relatives — every row links back to its public source. What we hold →
PEP1 Domestic / PEP2 Foreign / PEP3 International-org / PEP4 Family — derived from the office's country versus your home country, at screen time. No black box. How tiers work →
Every source refreshes on a 24-hour cycle; once a person is captured they stay, so coverage only improves over time — no daily gamble, no hand-maintained lists.
Query the leaders catalog directly — GET /v1/leaders (JSON) or a CSV export — filter by country, role and period; every row links back to its public source. Leaders API →
Every PEP category — heads of state & government, speakers, ministers, central bankers, ambassadors, legislators, IGO officials and families — is mapped to the FATF definition and measured against the live source on every refresh, so gaps surface automatically. We publish exactly what's Full, Broad or Commercial-via-BYO. See the coverage matrix →
Adverse media
Adverse media is where screening vendors are vaguest. Ours is fully in the open: the source is GDELT, an open global news-monitoring project, and every hit returns a headline, publisher, date, category and the matched person entity. When we haven't checked a subject yet, we say so.
Adverse media here is continuous monitoring, not a point-in-time lookup. Screen a brand-new name and you will usually get “Unavailable”; the same subject under ongoing monitoring accumulates coverage over the following days. It fits monitoring a known book of customers. It does not fit “onboard a stranger and decide right now” — be sure that is the job you are buying it for.
The first time you screen a person, adverse media has nothing for them — the name is queued for later, not fetched on the spot. That is exactly the onboarding moment, so design for it: a first screen returning “Unavailable” is normal, and it is not a clean pass.
Coverage of fresh news arrives within about 15 minutes, as the next GDELT file is tailed. Reaching back into a name's older history depends on a separate, on-demand historical backfill run, not a per-name queue.
The source is GDELT, a public near-real-time index of world news, and we chose it substantially for its licence: it permits commercial use and redistribution outright, where most alternatives forbid reselling results derived from them. That is precisely what lets us sell this, let you self-host it, and publish exactly how it works. What we owe in return is attribution, so a GDELT citation travels with every result.
GDELT's bulk news feed is a file you download by time window, not something you can search by name. So there is no way to look a person up live during your screen — evidence has to be built ahead of time by background workers that read each new file as it arrives, plus a one-time pass over older files. Your screen then does one fast read against that index.
Every 15 minutes GDELT publishes a complete batch of everything it just indexed — the articles plus the people, organisations, places and topics it extracted from them — as a plain file with no key and no rate limit. We take all 96 batches a day, match them against the names we already monitor, keep the matches and throw the rest away. We are not short of data — we receive all of it and filter down to the names we track. A separate historical backfill works back through the same free archive to extend coverage further back than the day-to-day tailer alone would reach.
GDELT's bulk feed is a plain file, published on a schedule, with no rate limit. That is the only route our index uses to build coverage — a background tailer for new files and a separate backfill for older ones. A tenant's own GDELT-compatible endpoint, if configured, is independent of this index.
Not a naked link. Each hit carries the headline, publisher, date, a FATF-style category (financial crime, cyber, regulatory, high-risk) and the person entity that matched — so an analyst can triage without clicking out, and an auditor can resolve it after the link rots.
Names bind as an ordered, adjacent span — never a bag of tokens that merges two people into one. Above that sits a rarity gate from our own 490,072-name corpus: on a high-collision surname, a name match alone is never accepted as identification. Precision lever and fairness control at once — a matcher that floods on common names discriminates by surname.
No World-Check, LexisNexis, Dow Jones or ComplyAdvantage. Adverse media is open GDELT; sanctions and PEP come direct from the primary publishers (UN, OFAC, EU, UK, Wikidata). That's exactly why we can let you self-host the whole thing and price it in the open — no per-lookup licence rides behind our API.
If we have not checked a subject, you get Unavailable — never a clean pass. “We did not check” and “we checked and found nothing” are different answers, and we return different ones.
We do not score how negative an article sounds. We measured that it discards 44% of genuinely relevant articles while promoting irrelevant ones. Tone is shown, never used to decide.
On subjects we've already fetched, at the shipped threshold (0.7): 38.9% recall (14 of 36 positives) and 100.0% precision on common names (15 of 15). Reading the entities GDELT already extracted — not the headline alone — lifted recall from 16.7% (6 of 36) while holding common-name precision: better evidence, not a lower bar.
That recall is the matcher's quality on evidence we hold — not the coverage you get on an arbitrary name today. When we last measured against a real customer population, we had evidence for about 1 subject in 500. Everyone else got “Unavailable” — we did not check — never a clean pass. A newer forward-coverage mechanism is live but its effect has not been re-measured, so we quote the number we have, not the one we hope for. The set is small (36 positives, 15 common-name negatives) — indicative, not a number to tune a compliance control on. Rare names: 1 of 2 (n=2). We publish the curve, not a slogan.
How far back we can find coverage depends on what our own index actually holds. Coverage starts 2026-05-28, plus anything a historical backfill run has added further back — there is no separate years-back setting to tune.
Screens no longer fetch news live, and the old switch for that now does nothing. Every screen reads our own news index. Until that index reaches back over the whole retention period, a screen with no findings says it could not fully check, rather than reporting a clean result.
Adverse media produces a Review for a human to judge — never an automatic rejection. Only your own tenant policy can escalate it further.
Adverse media here is a discovery layer that produces a Review, not a verdict, and we would rather you knew its limits before you bought it than after:
A commercial vendor sells human-curated, entity-resolved dossiers. This is not that, and we won't imply it is.
Adverse media on a natural person is GDPR Article 10 data. Criminal offences and alleged offences carry stricter conditions than ordinary personal data. Establishing your lawful basis is your responsibility, to settle with your own counsel — we state the classification, we do not give legal advice, and we make no compliance claim on your behalf. One limitation to plan around: stored adverse-media evidence is not currently aged out automatically, so assume it persists until you remove it. A retention and erasure capability is in development.
Adverse-media results are derived from The GDELT Project (gdeltproject.org). Headlines, publishers and links are the property of their respective publishers.
Features
Everything you need to stand up screening — and everything an auditor will ask for later.
Sanctions (UN, OFAC, EU, UK), PEP and adverse media, ingested per watchlist into one model. PEP levels are derived from office jurisdiction (PEP1–PEP4), backed by the country-anchored leaders index. Per-list transparency →
Levenshtein/trigram, Jaro-Winkler, token-based phonetic and nickname-aware matching with DoB confirmation to cut false positives. See the benchmark →
Configurable country, category and criminal-record weights map matches to a 0–100 score and a Low / Medium / High band.
Enrol a subject once; we re-screen on list changes and on a schedule, alerting only when the decision actually moves. Turn it on and set the cadence per tenant, right from your console.
screening.completed and monitoring.alert delivered with SHA-256 signatures and replay protection, payloads PII-light. Register endpoints and watch a full delivery log from your console.
Screen a portfolio in one request with POST /v1/screenings/bulk, or upload a CSV/XLSX right in the console — onboarding back-books and periodic sweeps, not just one-offs.
Review and disposition matches (open / cleared / confirmed / escalated) with an audit-note thread and a bundled back-office console.
Every state change is recorded immutably and exportable to CSV — built for the conversation you'll have with a regulator.
A dedicated OpenIddict-based IdP — machine and human auth — so there's no hard dependency on an external identity system.
Measured, not marketed
We validated the engine against an independent 1,736-name benchmark — every name also screened through OpenSanctions as the reference — and measured recall and precision against its verdicts. These are our own numbers, run against production, reproducible in the playground or the API.
Overall recall at the recall-first default (fuzzy threshold 0.70) — the recall-maximizing end of the curve.
Genuine precision at the default; 100% on the Balanced and Precision-first presets.
Genuine FPs across the entire 1,736-name benchmark set at the default.
Fuzzed real entities our engine caught that the reference screener missed.
Why us
Aggregators such as Dilisense, SumSub and sanctions.io resell a shared data layer behind their API. We took the other road.
Pricing
Screening against our built-in sanctions & PEP watchlists costs us essentially nothing to run — so it's free. You only pay, at cost, for the premium data and volume that costs us money. No markup games, no surprise bills, and every screen is counted and shown.
€0 / month
A generous monthly allowance for any team. No card, no setup.
At cost / screen
Beyond the free allowance you buy credits — priced at what it costs us.
Unlimited built-in
For trusted teams — unlimited built-in screening, on us.
The public sanctions & PEP lists — and the open news source behind adverse media — are open data we aggregate and maintain, so a screen against them costs us essentially nothing and we don't charge for it. You pay only when we pay: premium feeds you bring, monitoring at scale, or volume above the free allowance — passed through at cost. And we count every screen, free ones included, so usage is never a mystery.
Built to be trusted
EU-focused, PII-light webhooks and field-level handling of personal data.
Strict per-tenant isolation, keys, quotas and risk profiles out of the box.
Versioned /v1 REST, idempotency keys, RFC 7807 errors, signed webhooks.
Cloud-agnostic Docker — Postgres, S3-compatible storage, no managed-cloud lock-in.
Reference customers and case studies coming soon — be one of the first to pilot.
Onboard a tenant, screen your first subject and wire a webhook in well under an hour.
Prefer to talk first? Email us at [ enable JavaScript to view ].