Results updated 19 Sep 2026

Open source secret detection benchmark

Compare secret scanners and detection models on retained secrets datasets using the same masking and scoring protocol.

ScopeAll languagesSecrets datasets10 datasets4,128 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
96.2%90.7%87.7%—
93.3%93.4%82.8%—
97.1%87.1%75.8%—
97.2%83.4%75.0%—
93.1%78.7%68.2%—
96.7%79.0%72.1%—
94.1%72.1%67.3%—
94.1%69.6%67.9%—
89.4%64.1%60.0%—
89.5%64.6%55.9%—
83.3%71.2%59.9%—
80.6%65.8%56.8%—
87.4%59.4%53.3%—
82.6%60.2%49.9%—
90.3%54.8%37.4%—
80.6%57.7%42.8%—
72.8%55.1%53.8%—
40.5%66.0%61.7%—
74.5%47.2%49.8%—
76.0%52.0%48.0%—
75.6%41.3%41.4%—
55.5%48.0%43.8%—
71.1%33.9%37.6%—
55.4%52.9%33.7%—
65.0%34.0%37.9%—
66.4%25.9%31.9%—
55.2%31.7%22.9%—
64.5%23.7%12.5%—
44.8%24.7%18.2%—
46.1%21.4%13.0%—
38.8%18.3%15.9%—
33.7%9.6%12.2%—
17.8%21.3%18.5%—
21.9%8.2%13.2%—
17.2%6.2%8.1%—
6.0%1.6%3.1%—
0.0%0.1%1.2%—
0.4%0.0%0.1%—
0.3%0.0%0.2%—
0.0%0.0%0.0%—
0.0%0.0%0.0%—
pplx+ov100Not all datasets
86.6%—80.9%—
opf-ru-v2+ov100Not all datasets
91.0%—66.8%—
opf-ru-v2+sent300Not all datasets
90.6%—67.6%—
pplx+sent300Not all datasets
85.8%—77.9%—
pplx+cpu-int8Not all datasets
——81.3%—
nym-base+sent300Not all datasets
87.2%—53.6%—
nym-base+ov100Not all datasets
87.4%—52.6%—
pplx+homoglyphNot all datasets
——75.7%—
credsweeper-nomlNot all datasets
82.2%54.7%60.1%—
openai-base-onnxNot all datasets
——70.8%—
credsweeperNot all datasets
76.4%—55.9%—
opf-ru-v2+homoglyphNot all datasets
——70.1%—
nym-base+cpu-int8Not all datasets
——69.4%—
gliner-nvidia+ov100Not all datasets
78.6%—50.6%—
gliner25-fastino+ov100Not all datasets
82.1%—45.0%—
gliner-nvidia+sent300Not all datasets
78.6%—49.4%—
gliner25-fastino+sent300Not all datasets
82.3%—40.9%—
gliner25-fastino+nochunkNot all datasets
82.1%—35.3%—
nym-base+homoglyphNot all datasets
——63.2%—
ru-legal-ner+ov100Not all datasets
68.2%—41.2%—
ru-legal-ner+sent300Not all datasets
67.7%—39.5%—
mmbert32k+cpu-int8Not all datasets
——55.9%—
mmbert32k+nochunkNot all datasets
60.4%—34.2%—
ru-legal-ner+cpu-int8Not all datasets
——53.5%—
kalyan-ettin+cpu-int8Not all datasets
——53.1%—
gliner25-fastino-ruNot all datasets
—52.0%——
gliner2-fastino-ruNot all datasets
—46.5%——
betterleaksNot all datasets
——44.8%—
gliner-nvidia-ruNot all datasets
—42.3%——
—41.7%——
ru-legal-ner+homoglyphNot all datasets
——41.3%—
gitleaksNot all datasets
—23.2%45.5%—
detect-secretsNot all datasets
45.7%32.6%24.3%—
deepsecretsNot all datasets
40.9%28.4%34.7%—
gliner2-vladlinv-ruNot all datasets
—33.2%——
fef2-secret-ru+cpu-int8Not all datasets
——30.9%—
gliner-nvidia+homoglyphNot all datasets
——29.9%—
titusNot all datasets
——24.3%—
trufflehogNot all datasets
23.6%—12.5%—
gliner-urchade-ruNot all datasets
—20.5%——
noseyparkerNot all datasets
16.2%—23.3%—
gliner-multi-v21-ruNot all datasets
—16.2%——
kingfisherNot all datasets
——13.9%—
gliner2-hivetrace-uni-ruNot all datasets
—11.7%——
gravitee-small+cpu-int8Not all datasets
——11.5%—
gliner-pii-edge+cpu-int8Not all datasets
——11.1%—
——4.2%—
davlan-mbert+cpu-int8Not all datasets
——0.0%—
davlan-xlmr+cpu-int8Not all datasets
——0.0%—
——0.0%—
gliner-nvidia+cpu-int8Not all datasets
——0.0%—
gliner-pii-base+cpu-int8Not all datasets
——0.0%—
gliner-urchade+cpu-int8Not all datasets
——0.0%—
ner-ru-gherman-onnxNot all datasets
——0.0%—
ner-ru-gherman+cpu-int8Not all datasets
——0.0%—
ner-ru-gherman+homoglyphNot all datasets
——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
—
91.2%
—
90.2%
—
88.7%
—
85.2%
—
84.2%
—
82.5%
—
81.1%
—
73.4%
—
71.0%
—
69.2%
—
65.9%
—
61.8%
—
58.5%
—
58.1%
—
50.5%
—
42.5%
—
18.7%
—
18.4%
—
17.0%
—
0.2%
pplx+ov100Not all datasets
—
83.9%
opf-ru-v2+ov100Not all datasets
—
83.6%
opf-ru-v2+sent300Not all datasets
—
83.6%
pplx+sent300Not all datasets
—
82.5%
pplx+cpu-int8Not all datasets
—
81.3%
nym-base+sent300Not all datasets
—
78.9%
nym-base+ov100Not all datasets
—
78.6%
pplx+homoglyphNot all datasets
—
75.7%
credsweeper-nomlNot all datasets
—
74.2%
openai-base-onnxNot all datasets
—
70.8%
credsweeperNot all datasets
—
70.7%
opf-ru-v2+homoglyphNot all datasets
—
70.1%
nym-base+cpu-int8Not all datasets
—
69.4%
gliner-nvidia+ov100Not all datasets
—
68.5%
gliner25-fastino+ov100Not all datasets
—
68.3%
gliner-nvidia+sent300Not all datasets
—
67.7%
gliner25-fastino+sent300Not all datasets
—
66.4%
gliner25-fastino+nochunkNot all datasets
—
63.9%
nym-base+homoglyphNot all datasets
—
63.2%
ru-legal-ner+ov100Not all datasets
—
61.6%
ru-legal-ner+sent300Not all datasets
—
60.6%
mmbert32k+cpu-int8Not all datasets
—
55.9%
mmbert32k+nochunkNot all datasets
—
53.6%
ru-legal-ner+cpu-int8Not all datasets
—
53.5%
kalyan-ettin+cpu-int8Not all datasets
—
53.1%
gliner25-fastino-ruNot all datasets
—
52.0%
gliner2-fastino-ruNot all datasets
—
46.5%
betterleaksNot all datasets
—
44.8%
gliner-nvidia-ruNot all datasets
—
42.3%
—
41.7%
ru-legal-ner+homoglyphNot all datasets
—
41.3%
gitleaksNot all datasets
—
39.9%
detect-secretsNot all datasets
—
39.1%
deepsecretsNot all datasets
—
38.3%
gliner2-vladlinv-ruNot all datasets
—
33.2%
fef2-secret-ru+cpu-int8Not all datasets
—
30.9%
gliner-nvidia+homoglyphNot all datasets
—
29.9%
titusNot all datasets
—
24.3%
trufflehogNot all datasets
—
20.5%
gliner-urchade-ruNot all datasets
—
20.5%
noseyparkerNot all datasets
—
18.2%
gliner-multi-v21-ruNot all datasets
—
16.2%
kingfisherNot all datasets
—
13.9%
gliner2-hivetrace-uni-ruNot all datasets
—
11.7%
gravitee-small+cpu-int8Not all datasets
—
11.5%
gliner-pii-edge+cpu-int8Not all datasets
—
11.1%
—
4.2%
davlan-mbert+cpu-int8Not all datasets
—
0.0%
davlan-xlmr+cpu-int8Not all datasets
—
0.0%
—
0.0%
gliner-nvidia+cpu-int8Not all datasets
—
0.0%
gliner-pii-base+cpu-int8Not all datasets
—
0.0%
gliner-urchade+cpu-int8Not all datasets
—
0.0%
ner-ru-gherman-onnxNot all datasets
—
0.0%
ner-ru-gherman+cpu-int8Not all datasets
—
0.0%
ner-ru-gherman+homoglyphNot 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
95.28%
26.87%
195
CPU + GPUFastino + PPLX + BardsAI EU
95.08%
23.31%
203
Three detectorsFastino + PPLX + mmBERT
94.33%
25.75%
234
Two detectorsFastino + PPLX
93.94%
20.93%
250
Single detectorPPLX
91.21%
16.09%
363
Single detectorGLiNER2 Fastino
65.92%
7.56%
1,407
Single detectorRuns on CUDACPU + GPU
03

Find the best detector for each data type

Focus on the sensitive information your application needs to protect.

Best detector by data type

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

Passwords, keys & tokens94.2%pii-shield-onnx4,128 labeled items

Detector leaderboard

41 detector setups · 10 datasets · sorted by fully hidden descending

CompareRankFamily
01pii-shield-onnxONNX94.21%98.35%49.39%
0.222
——
02pplxPPLX91.21%97.02%16.09%
0.419
9.942.20
03opf-kz-ruOPF90.24%97.41%15.20%
0.447
3.391.59
04aparartiOPF88.71%97.48%15.32%
0.450
4.091.69
05openai-baseOPF85.25%93.12%12.38%
0.484
4.211.80
06opf-ruOPF84.18%98.13%12.23%
0.495
3.521.12
07opf-ru-v2OPF82.49%95.40%9.51%
0.528
3.47—
08tracioraOPF81.13%96.10%10.12%
0.528
3.291.36
09gliner-pii-edgeGLINER74.59%87.86%12.82%
0.436
6.885.80
10nym-baseHF73.40%95.71%12.57%
0.456
3.210.14
11openmed-multilingualHF73.35%93.12%16.11%
0.408
3.250.84
12bardsai-euONNX70.95%87.35%10.80%
0.486
——
13nym-smallONNX69.21%95.16%13.62%
0.443
——
14gliner2-fastinoGLINER265.92%75.19%7.56%
0.456
14.930.27
15gliner25-fastinoGLINER264.53%69.82%10.06%
0.309
12.470.15
16gliner-nvidiaGLINER62.23%66.57%5.71%
0.493
22.620.37
17openmed-nemotronHF62.09%86.07%16.55%
0.399
3.040.87
18rules-ruRULES61.85%65.24%10.67%
0.433
——
19kalyan-ettinHF58.45%86.63%10.63%
0.457
1.14—
20nuner-zeroGLINER58.09%68.85%4.57%
0.437
20.120.38
21gliner-stream-piiGLINER56.23%66.93%4.17%
0.505
8.200.21
22fef2-secret-ruHF51.28%64.17%2.80%
0.513
3.050.15
23ru-legal-nerHF50.48%87.52%14.32%
0.351
0.200.13
24gliner2-hivetrace-omniGLINER244.33%47.04%3.05%
0.337
14.790.29
25gliner-urchadeGLINER44.06%49.42%4.16%
0.317
9.680.20
26mmbert32kHF42.51%83.48%14.45%
0.363
2.320.18
27gravitee-smallHF39.03%55.94%5.95%
0.282
0.66—
28gliner2-vladlinvGLINER236.26%38.91%1.11%
0.260
14.490.17
29gliner2-largeGLINER224.93%29.36%3.48%
0.139
24.690.61
30gliner-pii-baseGLINER24.81%27.18%1.85%
0.192
5.240.16
31gliner-multi-v21GLINER19.55%25.46%2.65%
0.102
9.890.19
32ru-pii-nerRUPII18.70%22.87%2.66%
0.208
1.42—
33stanza-ruSTANZA18.44%36.05%19.31%
0.202
8.35—
34ner-ru-yqelzHF17.03%25.39%9.92%
0.146
7.080.18
35gliner2-hivetrace-uniGLINER29.88%11.41%0.67%
0.088
2.92—
36spacy-ru-lgSPACY4.09%4.58%2.87%
0.230
0.19—
37natashaNATASHA0.17%0.51%0.76%
0.065
0.08—
38ner-ru-ghermanHF0.12%0.12%0.18%
0.001
2.480.15
39davlan-mbertHF0.10%0.27%0.82%
0.001
2.510.15
40davlan-xlmrHF0.00%0.02%0.55%
0.000
2.260.14
41spacy-alrosaitSPACY0.00%0.00%0.01%
0.000
0.19—

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 groups2English · Russian
Text rows tested6,2452,591 saved prediction runs overall
Labeled sensitive items4,128Values expanded to word boundaries
PII Arena · Frozen 09 Sep 2026Publication v1.0.3 · MIT licensed