Research

Benchmarks, data and notes.

Every number we publish comes with the method, the data and the code to reproduce it, including the results where we lose.

BenchmarkOct 2026 · Self-published: Safearly builds one of the tools it measures

IndicPII-Bench v1

An open benchmark for Indian personal data: 2,500 documents across structured IDs, Hinglish, Hindi, Marathi, Tamil and Telugu, real bank codes, obfuscation, and look-alike numbers (order IDs, AWB, UTR) that should be left alone.

SystemStrict F1False alarms / 1k tokensms per KBCold startInstalled
Saaf0.7110.350.9412 ms0.1 MB
Presidio + Saaf pack0.6202.0841.61.3 s691 MB
Presidio, India recognizers on, tuned0.437131.3441.41.2 s691 MB
Bare regex0.466245.660.15<1 msn/a
Presidio, default0.1451.7440.92.9 s691 MB
Where every tool loses, including ours

Indian names in Hindi, Marathi, Tamil and Telugu text (slices drawn from the public Naamapadam and HiNER datasets): Saaf 0.00, Presidio 0.02 to 0.05. This is the next problem we are working on.

Read these numbers carefully. Most of the corpus is synthetic and generated by our own templates, and Saaf's rules were tuned on the same families, so Saaf's identifier scores are optimistic. Presidio was run as fairly as we could: version 2.2.364 with spaCy en_core_web_lg, all six India recognizers enabled and its threshold tuned on a separate dev set. A human-labelled, held-out set is in progress; until then, treat this as a reproducible smoke test, not a leaderboard.
26 Oct 2026
Note

About 1 in 10 random 12-digit numbers passes the Aadhaar checksum

One million seeded random strings: 10.03% pass Verhoeff and 8.04% also pass the other rules a checksum detector applies. So do 9.99% of mobile numbers written with a 91 prefix.

26 Oct 2026
Note

Presidio's India recognizers are off by default

All six are disabled and English-only in Presidio's default configuration, and the GSTIN recognizer never computes the check character. What that means if you rely on Presidio for Indian data.

12 Oct 2026
Dataset

Indian name, place and bank lexicons

Name and place token pools for Hindi, Marathi, Tamil and Telugu from Naamapadam (CC0), with the most frequent public figures removed so synthetic people are never real ones, plus 242 banks with real IFSC codes (MIT).

Reproduce it

From the bench/ folder of the repository, these commands fetch the licence-checked data and rebuild every table on this page. The Presidio rows need Presidio and spaCy's en_core_web_lg installed.

python -m indicpii_bench fetch
python -m indicpii_bench run   --corpus corpus/v1/docs.jsonl   --corpus corpus/external/naamapadam_person.jsonl   --corpus corpus/external/hiner_person.jsonl   --systems saaf,regex-baseline,presidio,presidio-tuned,presidio+saaf