Leaderboard
Find which detector best hides the sensitive data you care about.
Start with what you need to protect
Compare personal data, secrets, and the datasets where detectors struggle.
Performance from easy to extreme
See how much sensitive data each detector hides completely at every difficulty level. Higher is better.
| Detector | Easy | Medium | Hard | Extreme |
|---|---|---|---|---|
| 85.3 | 76.9 | 60.7 | 36.3 | |
| 94.2 | 83.2 | 64.4 | 26.0 | |
| 75.4 | 69.8 | 53.8 | 26.4 | |
| 80.1 | 63.0 | 62.7 | 22.2 | |
| 61.3 | 60.6 | 39.6 | 27.7 | |
| 67.9 | 61.9 | 46.0 | 33.8 | |
| 75.9 | 61.6 | 46.5 | 31.9 | |
| 85.4 | 67.7 | 59.0 | 10.9 | |
| 84.4 | 64.6 | 51.6 | 17.1 | |
| 69.7 | 61.5 | 64.3 | 23.9 | |
| 80.9 | 62.7 | 56.5 | 9.4 | |
| 68.3 | 61.5 | 65.4 | 13.0 | |
| 62.7 | 52.1 | 23.9 | 19.9 | |
| 66.7 | 52.6 | 43.9 | 19.6 | |
| 52.9 | 45.7 | 35.4 | 27.3 | |
| 65.6 | 50.8 | 33.6 | 18.7 | |
| 77.9 | 55.1 | 52.9 | 15.6 | |
| 76.7 | 53.7 | 50.9 | 10.6 | |
| 63.5 | 48.1 | 20.6 | 21.7 | |
| 46.4 | 43.4 | 29.0 | 18.9 | |
| 59.5 | 43.3 | 38.3 | 19.3 | |
| 33.0 | 35.2 | 26.1 | 18.7 | |
| 39.8 | 36.9 | 41.0 | 11.3 | |
| 63.0 | 49.8 | 27.0 | 18.2 | |
| 31.3 | 32.5 | 25.9 | 16.4 | |
| 37.7 | 34.0 | 31.3 | 41.4 | |
| 41.4 | 32.5 | 45.3 | 17.5 | |
| 22.8 | 20.5 | 16.1 | 5.6 | |
| 20.8 | 17.7 | 21.9 | 25.6 | |
| 22.0 | 30.4 | 36.7 | 1.7 | |
| 16.5 | 15.8 | 18.9 | 8.8 | |
pplx+cpu-int8Not all datasets | 98.8 | 94.3 | 64.6 | — |
pplx+homoglyphNot all datasets | — | 93.8 | 77.2 | — |
gliner2-fastino-ruNot all datasets | 78.6 | 77.0 | 78.6 | 35.8 |
gliner-nvidia+sent300Not all datasets | 72.3 | 72.7 | 61.3 | — |
HiveTrace OmniNot all datasets | 74.8 | 71.3 | 46.9 | 36.3 |
gliner25-fastino+sent300Not all datasets | 74.6 | 72.5 | 56.5 | — |
gliner2-hivetrace-omni-ruNot all datasets | 79.0 | 70.5 | 62.8 | 35.9 |
nym-base+homoglyphNot all datasets | — | 71.3 | 67.6 | — |
openai-base-onnxNot all datasets | 76.7 | 71.7 | 46.6 | — |
gliner25-fastino+ov100Not all datasets | 75.6 | 71.9 | 58.4 | — |
nym-base+sent300Not all datasets | 74.3 | 66.3 | 57.9 | — |
pplx+sent300Not all datasets | 85.1 | 70.3 | 52.9 | — |
gliner25-fastino-ruNot all datasets | 75.4 | 64.2 | 62.5 | 31.4 |
nym-baseNot all datasets | 79.7 | 63.0 | 60.8 | 16.5 |
gliner-nvidiaNot all datasets | 82.1 | 67.3 | 51.7 | 25.9 |
nym-base+ov100Not all datasets | 74.1 | 63.6 | 59.8 | — |
ru-legal-ner+cpuNot all datasets | — | 62.9 | — | — |
nym-smallNot all datasets | 78.9 | 60.7 | 57.8 | 11.8 |
pplx+ov100Not all datasets | 86.9 | 68.2 | 52.1 | — |
gliner-nvidia+homoglyphNot all datasets | — | 68.7 | 45.0 | — |
nym-base+cpu-int8Not all datasets | 94.4 | 63.4 | 55.5 | — |
ru-legal-ner+homoglyphNot all datasets | — | 68.6 | 49.3 | — |
gliner-nvidia+ov100Not all datasets | 71.0 | 60.0 | 58.0 | — |
openmed-multilingualNot all datasets | 72.9 | 56.4 | 47.4 | 6.1 |
opf-ru-v2+homoglyphNot all datasets | — | 68.7 | 57.4 | — |
gliner-nvidia-ruNot all datasets | 67.5 | 59.2 | 58.9 | 21.4 |
gliner2-hivetrace-uniNot all datasets | 49.2 | 46.2 | 16.7 | 23.2 |
opf-ruNot all datasets | 75.0 | 58.2 | 55.2 | 11.7 |
openmed-nemotronNot all datasets | 65.2 | 49.1 | 43.3 | 8.3 |
presidio-ruNot all datasets | — | 54.5 | — | — |
gliner25-fastino+nochunkNot all datasets | 73.4 | 58.1 | 42.6 | — |
gliner25-fastino-ru+nochunkNot all datasets | 59.3 | 53.8 | 50.7 | — |
gliner-urchade-ruNot all datasets | 50.7 | 48.3 | 45.7 | 20.3 |
gliner2-vladlinv+homoglyphNot all datasets | — | 60.8 | 23.3 | — |
ru-legal-ner+sent300Not all datasets | 64.5 | 40.6 | 36.0 | — |
gravitee-small+cpu-int8Not all datasets | 71.1 | 51.9 | 25.8 | — |
kalyan-ettinNot all datasets | 65.0 | 45.3 | 40.4 | 8.8 |
gliner-multi-v21-ruNot all datasets | 51.8 | 40.2 | 50.3 | 25.0 |
gliner2-vladlinv-ruNot all datasets | 72.6 | 51.5 | 39.7 | 21.7 |
opf-ru-v2+sent300Not all datasets | 77.5 | 41.8 | 45.2 | — |
ru-legal-ner+ov100Not all datasets | 63.8 | 34.4 | 35.4 | — |
opf-ru-v2+ov100Not all datasets | 77.5 | 39.4 | 44.4 | — |
ru-legal-ner+cpu-int8Not all datasets | 43.4 | 44.4 | 29.8 | — |
credsweeper-nomlNot all datasets | 82.2 | 27.7 | 60.1 | — |
credsweeperNot all datasets | 76.4 | 0.5 | 55.9 | — |
fef2-secret-ru+cpu-int8Not all datasets | 3.6 | 31.9 | 16.5 | — |
davlan-mbert+cpu-int8Not all datasets | 55.3 | 25.0 | 27.2 | — |
ner-ru-gherman+homoglyphNot all datasets | — | 1.4 | 15.6 | — |
mmbert32k+cpu-int8Not all datasets | 50.9 | 29.1 | 30.9 | — |
gliner2-hivetrace-uni-ruNot all datasets | 26.3 | 21.5 | 31.3 | 16.1 |
mmbert32k+nochunkNot all datasets | 42.7 | 31.4 | 25.4 | — |
kalyan-ettin+cpu-int8Not all datasets | 41.6 | 21.0 | 30.5 | — |
ner-ru-gherman-onnxNot all datasets | 55.0 | 18.0 | 7.2 | — |
davlan-xlmr+cpu-int8Not all datasets | 51.4 | 18.7 | 18.1 | — |
ner-ru-gherman+cpu-int8Not all datasets | 52.1 | 16.9 | 6.9 | — |
detect-secretsNot all datasets | 45.7 | 17.1 | 24.3 | — |
deepsecretsNot all datasets | 40.9 | 14.2 | 34.7 | — |
spacy-alrosaitNot all datasets | 9.8 | 10.1 | 8.7 | 7.0 |
gliner-pii-edge+cpu-int8Not all datasets | 17.5 | 15.8 | 7.2 | — |
trufflehogNot all datasets | 23.6 | 0.1 | 12.5 | — |
noseyparkerNot all datasets | 16.2 | 1.0 | 23.3 | — |
titusNot all datasets | — | 1.0 | 24.3 | — |
kingfisherNot all datasets | — | 1.0 | 13.9 | — |
gliner-pii-base+cpu-int8Not all datasets | 0.0 | 1.2 | 1.2 | — |
gitleaksNot all datasets | 0.0 | 4.0 | 45.5 | — |
betterleaksNot all datasets | 0.0 | 0.2 | 44.8 | — |
gliner-multi-v21-ru+cpu-int8Not all datasets | — | 0.0 | — | — |
gliner-multi-v21+cpu-int8Not all datasets | 0.0 | 0.0 | 0.0 | — |
gliner-nvidia-ru+cpu-int8Not all datasets | — | 0.0 | — | — |
gliner-nvidia+cpu-int8Not all datasets | 0.0 | 0.0 | 0.0 | — |
gliner-urchade-ru+cpu-int8Not all datasets | — | 0.0 | — | — |
gliner-urchade+cpu-int8Not all datasets | 0.0 | 0.0 | 0.0 | — |
Personal data vs secrets
Compare how well each detector hides personal data, credentials, and other secrets.
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.
| Detector setup | Completely hidden ↑ 0%50%100% | Extra text masked ↓ | Not fully hidden ↓ |
|---|---|---|---|
| Single detectorPPLX | 57,052 | ||
| Single detectorGLiNER2 Fastino | 45,819 | ||
| Two detectorsFastino + PPLX | 18,344 | ||
| Three detectorsFastino + PPLX + mmBERT | 16,011 | ||
| CPU + GPUFastino + PPLX + BardsAI EU | 13,471 | ||
| Four detectorsFastino + PPLX + BardsAI EU + mmBERT | 12,728 |
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
Choose a type of sensitive data to see which detectors hide it best.
Detector leaderboard
31 detector setups · sorted by completely hidden
| Compare | # | Family | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 01 | gliner2-fastino | GLINER2 | 79.86% | 86.81% | 5.88% | 0.763 | 14.93 | 0.27 | |
| 02 | pplx | PPLX | 74.92% | 79.05% | 11.42% | 0.716 | 9.94 | 2.20 | |
| 03 | nuner-zero | GLINER | 71.63% | 78.78% | 3.94% | 0.760 | 20.12 | 0.38 | |
| 04 | bardsai-eu | ONNX | 66.62% | 81.37% | 7.72% | 0.703 | — | — | |
| 05 | gliner2-large | GLINER2 | 65.65% | 71.98% | 3.51% | 0.685 | 24.69 | 0.61 | |
| 06 | gliner-urchade | GLINER | 65.51% | 72.52% | 3.79% | 0.687 | 9.68 | 0.20 | |
| 07 | gliner25-fastino | GLINER2 | 62.77% | 69.13% | 7.33% | 0.696 | 12.47 | 0.15 | |
| 08 | apararti | OPF | 62.49% | 70.23% | 11.16% | 0.658 | 4.09 | 1.69 | |
| 09 | openai-base | OPF | 59.69% | 65.39% | 8.83% | 0.657 | 4.21 | 1.80 | |
| 10 | gliner-pii-edge | GLINER | 57.10% | 68.30% | 9.54% | 0.629 | 6.88 | 5.80 | |
| 11 | opf-kz-ru | OPF | 56.51% | 65.16% | 10.90% | 0.634 | 3.39 | 1.59 | |
| 12 | pii-shield-onnx | ONNX | 56.43% | 69.64% | 38.92% | 0.416 | — | — | |
| 13 | ru-pii-ner | RUPII | 53.11% | 57.30% | 2.73% | 0.599 | 1.42 | — | |
| 14 | gliner-stream-pii | GLINER | 51.67% | 63.82% | 3.55% | 0.636 | 8.20 | 0.21 | |
| 15 | gliner-multi-v21 | GLINER | 51.28% | 60.10% | 2.71% | 0.537 | 9.89 | 0.19 | |
| 16 | mmbert32k | HF | 50.17% | 78.53% | 10.33% | 0.613 | 2.32 | 0.18 | |
| 17 | traciora | OPF | 48.60% | 59.54% | 7.51% | 0.638 | 3.29 | 1.36 | |
| 18 | opf-ru-v2 | OPF | 47.51% | 57.15% | 6.70% | 0.629 | 3.47 | — | |
| 19 | gliner2-vladlinv | GLINER2 | 46.09% | 49.61% | 0.91% | 0.572 | 14.49 | 0.17 | |
| 20 | gliner-pii-base | GLINER | 44.64% | 50.53% | 1.86% | 0.550 | 5.24 | 0.16 | |
| 21 | ru-legal-ner | HF | 44.15% | 65.45% | 12.56% | 0.449 | 0.20 | 0.13 | |
| 22 | davlan-xlmr | HF | 44.00% | 51.33% | 0.71% | 0.501 | 2.26 | 0.14 | |
| 23 | stanza-ru | STANZA | 43.41% | 51.15% | 16.11% | 0.326 | 8.35 | — | |
| 24 | gravitee-small | HF | 42.98% | 50.49% | 5.36% | 0.496 | 0.66 | — | |
| 25 | davlan-mbert | HF | 41.98% | 48.88% | 0.94% | 0.481 | 2.51 | 0.15 | |
| 26 | ner-ru-yqelz | HF | 39.74% | 49.75% | 9.17% | 0.445 | 7.08 | 0.18 | |
| 27 | fef2-secret-ru | HF | 35.60% | 43.35% | 2.17% | 0.530 | 3.05 | 0.15 | |
| 28 | ner-ru-gherman | HF | 27.63% | 48.78% | 0.28% | 0.453 | 2.48 | 0.15 | |
| 29 | spacy-ru-lg | SPACY | 26.75% | 31.36% | 3.25% | 0.326 | 0.19 | — | |
| 30 | rules-ru | RULES | 24.48% | 25.37% | 6.96% | 0.506 | — | — | |
| 31 | natasha | NATASHA | 24.15% | 28.03% | 1.07% | 0.316 | 0.08 | — |
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.
What was tested
These counts describe the test data; they do not show which detector is best.