Results updated 19 Sep 2026

Open source PII detection benchmark

Compare PII detectors on Russian, English and multilingual datasets using exact masking and character-level metrics.

ScopeAll languagesPII datasets31 datasets223,338 normalized annotationsPooled annotations2026-09-19
01

Start with what you need to protect

Compare personal data, secrets, and the datasets where detectors struggle.

Performance from easy to extreme

Dataset average · see how much sensitive data each detector hides completely at every difficulty level. Higher is better.

DetectorEasyMediumHardExtreme
86.7%79.6%75.1%36.3%
94.7%81.6%39.9%26.0%
75.0%72.6%61.4%26.4%
79.9%62.5%70.6%22.2%
69.6%66.3%68.1%27.7%
69.4%66.3%56.8%33.8%
68.7%62.7%58.6%31.9%
79.5%65.2%37.7%10.9%
80.0%62.3%29.4%17.1%
59.9%61.1%70.0%23.9%
72.7%58.8%30.9%9.4%
54.4%56.9%35.6%13.0%
77.2%58.8%39.5%19.9%
59.9%50.0%61.4%27.3%
62.3%54.4%47.3%19.6%
65.3%54.7%35.9%18.7%
69.9%52.8%32.9%15.6%
68.1%50.8%28.9%10.6%
63.0%51.9%31.3%21.7%
46.5%46.8%50.3%18.9%
49.5%40.7%60.9%18.7%
53.7%44.7%39.1%19.3%
50.8%39.4%71.0%11.3%
66.8%52.7%32.5%18.2%
46.8%37.7%60.1%16.4%
45.6%38.1%55.6%41.4%
34.4%30.0%47.3%17.5%
34.1%23.8%37.4%5.6%
28.1%20.2%47.0%25.6%
24.8%18.3%42.5%8.8%
12.8%24.8%3.4%1.7%
pplx+cpu-int8Not all datasets
98.8%94.3%47.9%—
pplx+homoglyphNot all datasets
—93.8%78.7%—
gliner2-fastino-ruNot all datasets
78.6%80.0%78.6%35.8%
HiveTrace OmniNot all datasets
84.5%74.6%64.5%36.3%
gliner-nvidia+sent300Not all datasets
65.9%72.7%73.2%—
gliner25-fastino+sent300Not all datasets
66.8%72.5%72.1%—
nym-base+homoglyphNot all datasets
—71.3%72.0%—
79.0%73.3%62.8%35.9%
openai-base-onnxNot all datasets
76.7%71.7%22.3%—
gliner25-fastino+ov100Not all datasets
69.2%71.9%71.8%—
nym-base+sent300Not all datasets
61.4%66.3%62.2%—
pplx+sent300Not all datasets
84.3%70.3%27.9%—
gliner25-fastino-ruNot all datasets
75.4%65.4%62.5%31.4%
nym-baseNot all datasets
73.9%62.7%67.4%16.5%
gliner-nvidiaNot all datasets
82.8%68.9%63.6%25.9%
nym-base+ov100Not all datasets
60.8%63.6%67.1%—
ru-legal-ner+cpuNot all datasets
—62.9%——
nym-smallNot all datasets
73.8%61.0%63.8%11.8%
gliner-nvidia+homoglyphNot all datasets
—68.7%60.1%—
pplx+ov100Not all datasets
87.2%68.2%23.3%—
ru-legal-ner+homoglyphNot all datasets
—68.6%57.3%—
nym-base+cpu-int8Not all datasets
94.4%63.4%41.5%—
gliner-nvidia+ov100Not all datasets
63.5%60.0%65.4%—
openmed-multilingualNot all datasets
67.7%53.7%30.7%6.1%
gliner-nvidia-ruNot all datasets
67.5%60.9%58.9%21.4%
gliner2-hivetrace-uniNot all datasets
65.2%53.3%28.2%23.2%
opf-ru-v2+homoglyphNot all datasets
—68.7%44.7%—
opf-ruNot all datasets
62.1%54.9%32.7%11.7%
openmed-nemotronNot all datasets
61.4%48.1%29.4%8.3%
presidio-ruNot all datasets
—54.5%——
gliner25-fastino+nochunkNot all datasets
64.8%58.1%49.9%—
—60.8%42.4%—
59.3%53.8%50.7%—
gliner-urchade-ruNot all datasets
50.7%51.0%45.7%20.3%
gravitee-small+cpu-int8Not all datasets
71.1%51.9%40.2%—
ru-legal-ner+sent300Not all datasets
61.4%40.6%32.5%—
gliner-multi-v21-ruNot all datasets
51.8%42.6%50.3%25.0%
kalyan-ettinNot all datasets
60.2%45.0%27.8%8.8%
gliner2-vladlinv-ruNot all datasets
72.6%53.3%39.7%21.7%
opf-ru-v2+sent300Not all datasets
64.4%41.8%22.7%—
ru-legal-ner+ov100Not all datasets
59.5%34.4%29.7%—
opf-ru-v2+ov100Not all datasets
64.1%39.4%22.0%—
ru-legal-ner+cpu-int8Not all datasets
43.4%44.4%6.1%—
fef2-secret-ru+cpu-int8Not all datasets
3.6%31.9%2.1%—
davlan-mbert+cpu-int8Not all datasets
55.3%25.0%54.5%—
ner-ru-gherman+homoglyphNot all datasets
—1.4%31.2%—
mmbert32k+cpu-int8Not all datasets
50.9%29.1%5.9%—
gliner2-hivetrace-uni-ruNot all datasets
26.3%22.5%31.3%16.1%
kalyan-ettin+cpu-int8Not all datasets
41.6%21.0%7.8%—
mmbert32k+nochunkNot all datasets
24.9%31.4%16.6%—
ner-ru-gherman-onnxNot all datasets
55.0%18.0%14.4%—
davlan-xlmr+cpu-int8Not all datasets
51.4%18.7%36.2%—
ner-ru-gherman+cpu-int8Not all datasets
52.1%16.9%13.8%—
spacy-alrosaitNot all datasets
15.7%11.8%20.3%7.0%
gliner-pii-edge+cpu-int8Not all datasets
17.5%15.8%3.3%—
detect-secretsNot all datasets
—1.6%——
kingfisherNot all datasets
—1.0%——
noseyparkerNot all datasets
—1.0%——
titusNot all datasets
—1.0%——
credsweeper-nomlNot all datasets
—0.7%——
gliner-pii-base+cpu-int8Not all datasets
<0.1%1.2%2.3%—
credsweeperNot all datasets
—0.5%——
deepsecretsNot all datasets
—0.1%——
trufflehogNot all datasets
—0.1%——
betterleaksNot all datasets
0.0%0.2%——
gitleaksNot all datasets
0.0%0.2%——
—0.0%——
0.0%0.0%0.0%—
—0.0%——
gliner-nvidia+cpu-int8Not all datasets
0.0%0.0%0.0%—
—0.0%——
gliner-urchade+cpu-int8Not all datasets
0.0%0.0%0.0%—

PII datasets vs secrets datasets

Pooled annotations · compare how well each detector hides labeled items in datasets assigned to each task.

DetectorPII datasetsSecrets datasets
80.1%
—
74.6%
—
71.9%
—
66.5%
—
62.0%
—
59.2%
—
55.9%
—
53.7%
—
50.3%
—
48.0%
—
46.9%
—
44.8%
—
44.0%
—
43.9%
—
42.8%
—
40.2%
—
27.2%
—
24.6%
—
23.8%
—
pplx+cpu-int8Not all datasets
93.2%
—
pplx+homoglyphNot all datasets
82.2%
—
gliner2-fastino-ruNot all datasets
77.8%
—
HiveTrace OmniNot all datasets
75.4%
—
gliner-nvidia+sent300Not all datasets
75.2%
—
gliner25-fastino+sent300Not all datasets
72.1%
—
nym-base+homoglyphNot all datasets
71.9%
—
71.8%
—
openai-base-onnxNot all datasets
70.9%
—
gliner25-fastino+ov100Not all datasets
70.5%
—
nym-base+sent300Not all datasets
67.2%
—
pplx+sent300Not all datasets
65.2%
—
gliner25-fastino-ruNot all datasets
64.6%
—
nym-baseNot all datasets
64.3%
—
gliner-nvidiaNot all datasets
64.0%
—
nym-base+ov100Not all datasets
63.1%
—
ru-legal-ner+cpuNot all datasets
63.0%
—
nym-smallNot all datasets
62.7%
—
gliner-nvidia+homoglyphNot all datasets
62.1%
—
pplx+ov100Not all datasets
61.5%
—
ru-legal-ner+homoglyphNot all datasets
60.0%
—
nym-base+cpu-int8Not all datasets
59.7%
—
gliner-nvidia+ov100Not all datasets
56.7%
—
openmed-multilingualNot all datasets
51.3%
—
gliner-nvidia-ruNot all datasets
51.0%
—
gliner2-hivetrace-uniNot all datasets
50.7%
—
opf-ru-v2+homoglyphNot all datasets
50.3%
—
opf-ruNot all datasets
48.9%
—
openmed-nemotronNot all datasets
48.3%
—
presidio-ruNot all datasets
47.6%
—
gliner25-fastino+nochunkNot all datasets
46.7%
—
46.6%
—
45.5%
—
gliner-urchade-ruNot all datasets
45.5%
—
gravitee-small+cpu-int8Not all datasets
43.7%
—
ru-legal-ner+sent300Not all datasets
43.4%
—
gliner-multi-v21-ruNot all datasets
43.1%
—
kalyan-ettinNot all datasets
43.1%
—
gliner2-vladlinv-ruNot all datasets
42.5%
—
opf-ru-v2+sent300Not all datasets
41.4%
—
ru-legal-ner+ov100Not all datasets
38.2%
—
opf-ru-v2+ov100Not all datasets
37.4%
—
ru-legal-ner+cpu-int8Not all datasets
36.0%
—
fef2-secret-ru+cpu-int8Not all datasets
27.1%
—
davlan-mbert+cpu-int8Not all datasets
24.7%
—
ner-ru-gherman+homoglyphNot all datasets
24.3%
—
mmbert32k+cpu-int8Not all datasets
21.8%
—
gliner2-hivetrace-uni-ruNot all datasets
21.6%
—
kalyan-ettin+cpu-int8Not all datasets
20.7%
—
mmbert32k+nochunkNot all datasets
20.7%
—
ner-ru-gherman-onnxNot all datasets
19.2%
—
davlan-xlmr+cpu-int8Not all datasets
18.7%
—
ner-ru-gherman+cpu-int8Not all datasets
17.6%
—
spacy-alrosaitNot all datasets
14.6%
—
gliner-pii-edge+cpu-int8Not all datasets
9.6%
—
detect-secretsNot all datasets
1.6%
—
kingfisherNot all datasets
1.0%
—
noseyparkerNot all datasets
1.0%
—
titusNot all datasets
1.0%
—
credsweeper-nomlNot all datasets
0.7%
—
gliner-pii-base+cpu-int8Not all datasets
0.6%
—
credsweeperNot all datasets
0.5%
—
deepsecretsNot all datasets
0.1%
—
trufflehogNot all datasets
0.1%
—
betterleaksNot all datasets
0.1%
—
gitleaksNot all datasets
0.1%
—
0.0%
—
0.0%
—
0.0%
—
gliner-nvidia+cpu-int8Not all datasets
0.0%
—
0.0%
—
gliner-urchade+cpu-int8Not all datasets
0.0%
—
02

Use one detector or combine several?

See what combining detectors adds and how much extra text it masks.

One detector vs several combined

See whether combining detectors hides more sensitive data and how much extra text it masks.

See combinations
Detector setupCompletely hidden, % ↑
0%50%100%
Extra text masked, % ↓Not fully hidden, items ↓
Four detectorsFastino + PPLX + BardsAI EU + mmBERT
94.39%
7.93%
12,533
CPU + GPUFastino + PPLX + BardsAI EU
94.06%
6.63%
13,268
Three detectorsFastino + PPLX + mmBERT
92.94%
7.18%
15,777
Two detectorsFastino + PPLX
91.90%
5.72%
18,094
Single detectorGLiNER2 Fastino
80.11%
3.03%
44,412
Single detectorPPLX
74.62%
3.56%
56,689
Single detectorRuns on CUDACPU + GPU
03

Find the best detector for each data type

Focus on the sensitive information your application needs to protect.

Hardest datasets

Higher scores mean the dataset was harder for the tested detectors.

Best detector by data type

Pooled annotations by annotation type · choose what sensitive data you need to hide.

Passwords, keys & tokens96.8%PPLX2,742 labeled items
Logins & usernames98.9%PPLX11,382 labeled items
Bank accounts & cards76.2%PPLX5,253 labeled items
Documents & identifiers90.7%PPLX15,034 labeled items
People's names91.2%davlan-xlmr65,736 labeled items
Phone numbers & email94.9%PPLX21,981 labeled items
Addresses & locations78.2%Fastino39,602 labeled items
Dates & times96.3%PPLX5,502 labeled items
Organizations78.6%Fastino19,274 labeled items
Network identifiers96.2%NuNER Zero25,631 labeled items
Customer & employee IDs86.9%PPLX7,994 labeled items
Other sensitive attributes53.3%PPLX3,207 labeled items

Detector leaderboard

31 detector setups · 31 datasets · sorted by fully hidden descending

CompareRankFamily
01gliner2-fastinoGLINER280.11%87.02%3.03%
0.797
14.930.27
02pplxPPLX74.62%78.72%3.56%
0.771
9.942.20
03nuner-zeroGLINER71.88%78.97%2.89%
0.788
20.120.38
04bardsai-euONNX66.54%81.26%2.51%
0.740
——
05gliner2-largeGLINER266.40%72.77%3.56%
0.723
24.690.61
06gliner-urchadeGLINER65.91%72.94%3.17%
0.717
9.680.20
07gliner25-fastinoGLINER262.74%69.12%2.72%
0.747
12.470.15
08aparartiOPF62.00%69.73%4.13%
0.696
4.091.69
09openai-baseOPF59.22%64.88%2.84%
0.687
4.211.80
10gliner-pii-edgeGLINER56.77%67.94%4.01%
0.660
6.885.80
11opf-kz-ruOPF55.88%64.56%3.64%
0.670
3.391.59
12pii-shield-onnxONNX55.74%69.11%21.26%
0.466
——
13ru-pii-nerRUPII53.74%57.94%2.84%
0.631
1.42—
14gliner-multi-v21GLINER51.87%60.74%2.82%
0.570
9.890.19
15gliner-stream-piiGLINER51.58%63.76%2.48%
0.650
8.200.21
16mmbert32kHF50.32%78.44%3.39%
0.654
2.320.18
17tracioraOPF48.00%58.87%3.12%
0.658
3.291.36
18opf-ru-v2OPF46.86%56.44%1.97%
0.648
3.47—
19gliner2-vladlinvGLINER246.27%49.81%0.57%
0.596
14.490.17
20gliner-pii-baseGLINER45.01%50.96%1.89%
0.576
5.240.16
21davlan-xlmrHF44.82%52.27%0.99%
0.533
2.260.14
22ru-legal-nerHF44.03%65.04%9.58%
0.462
0.200.13
23stanza-ruSTANZA43.87%51.43%10.72%
0.346
8.35—
24gravitee-smallHF43.05%50.39%4.36%
0.518
0.66—
25davlan-mbertHF42.76%49.78%1.14%
0.513
2.510.15
26ner-ru-yqelzHF40.16%50.20%7.89%
0.485
7.080.18
27fef2-secret-ruHF35.31%42.97%1.11%
0.532
3.050.15
28ner-ru-ghermanHF28.13%49.68%0.44%
0.483
2.480.15
29spacy-ru-lgSPACY27.17%31.85%3.88%
0.334
0.19—
30natashaNATASHA24.59%28.54%1.59%
0.336
0.08—
31rules-ruRULES23.79%24.63%0.69%
0.521
——

How to read these numbers. Completely hidden means the whole sensitive value was masked. Found at least partly can still leave text visible. Extra text masked is measured on unlabeled rows and is not a verified false-positive rate.

Benchmark size

What was tested

These counts describe the test data; they do not show which detector is best.

Detector setups tested10362 catalog records · variants included
Language groups3Russian · English · Multilingual
Text rows tested35,3982,591 saved prediction runs overall
Labeled sensitive items223,338Values expanded to word boundaries
PII Arena · Frozen 09 Sep 2026Publication v1.0.3 · MIT licensed