Sanctions · PEP · Adverse media

Screen any name against the world's watchlists — on an engine you actually own.

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.

  • Own engine, not a reseller
  • Self-hostable Docker
  • GDPR-minded, EU focus

Get started

Three ways to start — pick your path

Try it in your browser with no code, onboard a tenant for a real API key, or build straight against the API.

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 page

Onboard a tenant

Use 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 tenant

Build with the API

A 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 docs

How it works

From a name to a decision in one call

No SDK gymnastics, no batch ceremony. A single REST call returns a normalized, actionable verdict.

  1. 1

    Onboard a tenant

    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.

  2. 2

    Screen a subject

    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.

  3. 3

    Get a clear verdict

    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.

  4. 4

    Monitor continuously

    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.

Your appREST · SDK · MCP
PROOViD APIauth · quota · rate limit
Matching enginefuzzy · phonetic · nickname
Risk + adverse mediascore · indexed news evidence
DecisionPass / Review / Fail
Signed webhookOngoing & turnover monitoringImmutable audit trail
Watchlists (UN · OFAC · EU · UK · PEP) are ingested and normalized into one model; matching, risk scoring and the decision all run on our own engine — self-hostable end to end.

Built for these jobs

Onboarding KYCScreen every new customer at signup.
Portfolio re-screeningBulk / batch-screen your back-book on a schedule.
Ongoing monitoringAlert only when a subject's outcome changes.
Case review & auditDisposition matches and export a regulator pack.

Radically transparent

How the screening data is built — in the open

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.

SourcesUN · OFAC · EU · UK · Wikidata PEP
Daily ingestnormalize · self-healing
Country-anchored leaders~200 countries · head of state + gov
Families + PEP tierrelatives · office jurisdiction
Screenable indexsource link per row
We anchor on the fixed list of ~200 sovereign countries and follow each country's own link to its head-of-state and head-of-government office — so no leader is missed by a taxonomy quirk, and one row per country makes any gap obvious.

Country-anchored leaders

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 →

PEP levels, explained

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 →

Self-healing, daily

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.

Browse the raw data

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 →

Self-audited coverage

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 →

See exactly how it works: the full data-build pipeline, with diagrams and the honest free-vs-commercial boundary, is public. Read the methodology →

Adverse media

Negative news — evidenced, categorised, and honest about what it misses.

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.

This is continuous monitoring, not point-in-time screening.

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.

Why GDELT — the licence, not just the price.

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.

Why the evidence is indexed ahead of time instead of searched during your screen.

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.

How our own index is built.

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.

Nothing here is metered.

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.

GKG 2.0tells us which people an article is actually about
bulk 15-minute sliceswatches new news as it is published
Bind the subjectordered name span · rarity gate
Your screenone indexed read · no network call
Indexed ahead of time, not live-fetchedOne indexed read per screenSource-linked & auditable
A screening request never calls the news source — evidence is gathered by background workers, so a third-party outage cannot slow your live screen or silently turn the control off. 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.

Every hit is evidenced

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.

A common name can't clear the bar alone

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.

Zero commercial data feeds

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.

“We didn't check” ≠ “we found nothing”

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.

No sentiment gate — and here's why

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.

Measured, with its caveats

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.

Years of history, not just this quarter

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.

The live look-up switch, and why it's off

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.

A Review, not a verdict

Adverse media produces a Review for a human to judge — never an automatic rejection. Only your own tenant policy can escalate it further.

What it does not do — said out loud

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 name we have never seen before will usually come back “Unavailable” the first time.
  • Unlike our sanctions matching, adverse-media name binding is exact — a nickname or a different spelling in the news will be missed.
  • On a common surname we refuse to treat a name match as proof of identity.
  • Some people are missed because the news source never names them — no tuning fixes that.
  • Our search terms are English, so non-English coverage is under-represented.
  • We store headlines, not article text, and one story carried by many outlets can appear more than once.
  • We surface candidate news for a human to judge. We do not confirm identity, and we are not a curated dossier service.

A commercial vendor sells human-curated, entity-resolved dossiers. This is not that, and we won't imply it is.

Evidence on every hit Unavailable ≠ pass Tone never decides Commercial feeds none Limits published

The whole pipeline is documented: the source, the indexing model, what Unavailable means for your integration, the evidence fields, the categories and the measured limits. Read how adverse media works →

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

A full compliance engine, not a lookup proxy

Everything you need to stand up screening — and everything an auditor will ask for later.

Broad watchlist coverage

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 →

Fuzzy & phonetic matching

Levenshtein/trigram, Jaro-Winkler, token-based phonetic and nickname-aware matching with DoB confirmation to cut false positives. See the benchmark →

Per-tenant risk scoring

Configurable country, category and criminal-record weights map matches to a 0–100 score and a Low / Medium / High band.

Ongoing monitoring

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.

HMAC-signed webhooks

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.

Bulk screening

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.

Case management

Review and disposition matches (open / cleared / confirmed / escalated) with an audit-note thread and a bundled back-office console.

Full audit log

Every state change is recorded immutably and exportable to CSV — built for the conversation you'll have with a regulator.

Own identity provider

A dedicated OpenIddict-based IdP — machine and human auth — so there's no hard dependency on an external identity system.

Measured, not marketed

The matching, benchmarked in the open

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.

95.1% recall

Overall recall at the recall-first default (fuzzy threshold 0.70) — the recall-maximizing end of the curve.

96.8% → 100% precision

Genuine precision at the default; 100% on the Balanced and Precision-first presets.

2 false positives

Genuine FPs across the entire 1,736-name benchmark set at the default.

26 evasion catches

Fuzzed real entities our engine caught that the reference screener missed.

How it was tested: every name was actually screened at each fuzzy threshold (not extrapolated); the three presets — Recall-first / Balanced / Precision-first — differ only in that threshold, so the published figures map one-to-one to the preset you pick. Read the full benchmark & methodology →

Why us

Own the engine. Own your data. Own your costs.

Aggregators such as Dilisense, SumSub and sanctions.io resell a shared data layer behind their API. We took the other road.

Typical aggregator

  • × Per-lookup pricing on someone else's data layer
  • × Hosted only — your PII leaves your perimeter
  • × Matching logic is a black box you can't tune
  • × Vendor lock-in: switching means re-integrating

PROOViD AML

  • ✓ Our own matching & risk engine — no aggregator middleman
  • ✓ Self-host the full stack in your own cloud (any cloud)
  • ✓ Transparent, per-tenant tunable matching and risk weights — benchmarked in the open
  • ✓ Bring your own commercial provider on top, with your key, when you want more depth

Buy it hosted, or self-host it — same engine, same API. Talk to us about volume and self-host licensing. See the Self-Hosted Edition live →  ·  See the pricing →

Pricing

You pay what we pay.

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.

Free

€0 / month

A generous monthly allowance for any team. No card, no setup.

  • 500 free screenings / month against every built-in list
  • UN, OFAC (SDN), EU, UK (HMT), PEP (Wikidata) & adverse media (GDELT)
  • All built-in features: case management, dispositions, notes, CSV export, source links
  • Playground & full API access
  • Your usage & balance always visible
Start free

Partner

Unlimited built-in

For trusted teams — unlimited built-in screening, on us.

  • Unlimited screening on built-in lists — no metering, no rate limit
  • Dedicated support & SLA
  • Premium data & add-ons billed at cost
Talk to us

Honest by design

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-in lists free Premium at cost Usage always shown No markup

Your limits, credits and per-screen cost are set per tenant and always visible to you in the console. Open the console →

Built to be trusted

Designed for compliance teams & the engineers who serve them

GDPR

EU-focused, PII-light webhooks and field-level handling of personal data.

Multi-tenant

Strict per-tenant isolation, keys, quotas and risk profiles out of the box.

API-first

Versioned /v1 REST, idempotency keys, RFC 7807 errors, signed webhooks.

Self-host

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.

Stand up screening this week.

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 ].