10.7k stars · MIT · 2.2.364 on PyPI (2026-07-22); GitHub release 2.2.362 (2026-03-18) · Track this in Scout
Detects and masks names, emails, phone and card numbers in text before anything is sent to a model.
▶Repo detailsthe review · specs · pros & cons
What it is
Microsoft's open framework for finding and removing personal data in text: names, emails, phone numbers, card numbers, national identifiers and more, through a mix of pattern matching, checksums, context words and NLP models. It can redact, mask, hash or replace what it finds, and you can add your own recognisers.
What it is good for. Think about who actually has a four-hundred-message thread worth mapping. It is somebody working: a consultant with a client discussion, a manager with a project channel, a researcher with interview notes. Every one of them hesitates at the same moment, and the hesitation is not about features — it is "what happens to this text?" A pipeline that runs Docling and BERTopic locally on its own box already has a strong answer. Presidio lets you go one step further and say something specific: names, emails and numbers are detected and masked before any text is sent to a model for labelling. That is a sentence on a landing page, a paragraph in the docs, and a genuine feature — and it separates a product from every competitor whose pipeline is a thin wrapper around somebody else's API. It is also the honest engineering position: if you are going to send chunks to an LLM to name topics, you should know what is in them. Do not oversell it in the copy — call it a reduction of risk, not a guarantee, because that is what it is.
- MIT, from Microsoft, actively released, and squarely aimed at the exact step an ingest pipeline performs
- Turns a vague trust claim into a demonstrable behaviour — the best kind of marketing, because it is true and checkable
- Extensible with your own recognisers, so a client code or an internal project name can be masked as easily as an email address
- Detection is statistical, never complete. It will miss things and it will flag things that are not personal data — promising more than "significantly reduced" would be dishonest and eventually costly
- The good detection needs an NLP model (spaCy or a transformer) loaded in memory, which is a real cost on a small VPS. Start with the light spaCy model and measure it with beszel
- Russian coverage is much thinner than English. Test on real Russian text before you make any claim that covers both languages

