Personal data does not only appear in English. Names, addresses, national IDs, and phone numbers look different in every language and country — and regex rules built for US formats miss most of them. The PII Detection API uses a context-aware transformer model trained on multilingual data, so a single POST request finds and classifies sensitive entities in any of the languages below, without you specifying the language up front. Every detection is returned with its type, matched text, character offsets, and confidence score, exactly as in English.
| Language | Countries |
|---|---|
| Albanian | Albania Kosovo North Macedonia |
| Amharic | Ethiopia |
| Arabic | Algeria Bahrain Egypt Iraq Jordan Kuwait Lebanon Libya Morocco Oman Qatar Saudi Arabia UAE Yemen |
| Armenian | Armenia |
| Awadhi | India |
| Azerbaijani | Azerbaijan |
| Bashkir | Russia |
| Basque | Spain |
| Belarusian | Belarus |
| Bengali | Bangladesh India |
| Bhojpuri | India Nepal |
| Bosnian | Bosnia and Herzegovina |
| Brazilian Portuguese | Brazil |
| Bulgarian | Bulgaria |
| Burmese | Myanmar |
| Cantonese (Yue) | China |
| Catalan | Spain Andorra Italy |
| Chhattisgarhi | India |
| Croatian | Croatia Bosnia and Herzegovina |
| Czech | Czech Republic |
| Danish | Denmark Greenland Faroe Islands |
| Dogri | India |
| Dutch | Netherlands Belgium Suriname Aruba CuraƧao |
| English | United States United Kingdom Australia Canada India Ireland New Zealand South Africa Singapore |
| Estonian | Estonia |
| Faroese | Faroe Islands |
| Finnish | Finland |
| French | France Belgium Canada Switzerland Luxembourg Monaco |
| Galician | Spain |
| Georgian | Georgia |
| German | Germany Austria Switzerland Liechtenstein Luxembourg Belgium |
| Greek | Greece Cyprus |
| Gujarati | India |
| Haryanvi | India |
| Hindi | India |
| Hungarian | Hungary |
| Icelandic | Iceland |
| Indonesian | Indonesia |
| Irish | Ireland |
| Italian | Italy San Marino Switzerland Vatican City |
| Japanese | Japan |
| Javanese | Indonesia |
| Kannada | India |
| Kashmiri | India |
| Kazakh | Kazakhstan |
| Konkani | India |
| Korean | South Korea North Korea |
| Kyrgyz | Kyrgyzstan |
| Latvian | Latvia |
| Lithuanian | Lithuania |
| Macedonian | North Macedonia |
| Maithili | India |
| Malay | Malaysia Brunei Singapore |
| Malayalam | India |
| Maltese | Malta |
| Mandarin Chinese | China Taiwan Singapore |
| Marathi | India |
| Marwari | India |
| Min Nan | Taiwan China |
| Moldovan | Moldova |
| Mongolian | Mongolia |
| Montenegrin | Montenegro |
| Nepali | Nepal India |
| Norwegian | Norway |
| Oriya | India |
| Pashto | Afghanistan Pakistan |
| Persian (Farsi) | Iran Afghanistan Tajikistan |
| Polish | Poland |
| Portuguese | Portugal Brazil Mozambique Angola Cape Verde |
| Punjabi | India Pakistan |
| Rajasthani | India |
| Romanian | Romania |
| Russian | Russia Belarus Kazakhstan Kyrgyzstan |
| Sanskrit | India |
| Santali | India |
| Serbian | Serbia Bosnia and Herzegovina Montenegro |
| Sindhi | Pakistan India |
| Sinhala | Sri Lanka |
| Slovak | Slovakia |
| Slovenian | Slovenia |
| Somali | Somalia Djibouti Ethiopia |
| Spanish | Spain Mexico Argentina Colombia Peru Chile |
| Swahili | Tanzania Kenya Uganda |
| Swedish | Sweden Finland |
| Tagalog | Philippines |
| Tajik | Tajikistan |
| Tamil | India Sri Lanka Singapore |
| Tatar | Russia |
| Telugu | India |
| Thai | Thailand |
| Turkish | Turkey Northern Cyprus |
| Turkmen | Turkmenistan |
| Ukrainian | Ukraine |
| Urdu | Pakistan India |
| Uzbek | Uzbekistan |
| Vietnamese | Vietnam |
| Welsh | Wales, United Kingdom |
| Wu | China |
Detecting PII globally is more than translating labels — the identifiers themselves are country-specific. A US Social Security Number (123-45-6789) looks nothing like a UK National Insurance number (QQ 12 34 56 C) or a Spanish DNI (12345678Z). IBANs vary in length from 15 to 34 characters depending on the country, phone numbers switch prefix and grouping conventions at every border, and postal codes range from 4 digits to alphanumeric blocks. The detection model recognizes these national formats together with the surrounding language context, so entity types such as NATIONAL_ID, IBAN_CODE, PHONE_NUMBER, ZIP_CODE, and PASSPORT_NUMBER work across jurisdictions. A sample of the formats covered:
| Country | National ID Format | IBAN Example | Phone Format |
|---|---|---|---|
| United States | SSN: 123-45-6789 | — (uses routing + account, e.g. 021000021) | +1 (415) 555-0182 |
| United Kingdom | NINO: QQ 12 34 56 C | GB29 NWBK 6016 1331 9268 19 | +44 7911 123456 |
| Germany | Steuer-ID: 12 345 678 901 | DE89 3704 0044 0532 0130 00 | +49 30 901820 |
| France | INSEE/NIR: 1 85 03 75 116 001 23 | FR14 2004 1010 0505 0001 3M02 606 | +33 6 12 34 56 78 |
| Spain | DNI: 12345678Z | ES91 2100 0418 4502 0005 1332 | +34 612 345 678 |
| Italy | Codice Fiscale: RSSMRA85M01H501Z | IT60 X054 2811 1010 0000 0123 456 | +39 312 345 6789 |
| Netherlands | BSN: 123456782 | NL91 ABNA 0417 1643 00 | +31 6 12345678 |
| Poland | PESEL: 85031512345 | PL61 1090 1014 0000 0712 1981 2874 | +48 512 345 678 |
| Brazil | CPF: 123.456.789-09 | BR18 0036 0305 0000 1000 9795 493C 1 | +55 11 91234-5678 |
| India | Aadhaar: 1234 5678 9012, PAN: ABCDE1234F | — (uses IFSC + account, e.g. SBIN0005943) | +91 98765 43210 |
| Japan | My Number: 1234 5678 9012 | — (domestic Zengin format) | +81 90-1234-5678 |
| Sweden | Personnummer: 850315-1234 | SE45 5000 0000 0583 9825 7466 | +46 70 123 45 67 |
Names are the hardest multilingual entity: there is no pattern for "Zhang Wei", "Ayşe Yılmaz", or "João Silva" — only context tells a detector that a word is a person. The same applies to addresses, which reverse their order between countries (street-first in the US, city-district-street in Japan), and to dates of birth written as 15.03.1985, 15/03/1985, or 1985年3月15日. Because the API's NER model reads whole sentences rather than matching character patterns, it correctly detects:
This is the practical difference between multilingual PII detection and a library of per-country regexes: one request, any language, the same structured response. For a comparison of approaches, see NER vs regex vs rules.
No language parameter is needed — send the text and the model handles language identification internally. The entity types and response fields are identical in every language:
import requests
resp = requests.post(
"https://piidetectionapi.com/api/moderate.php",
json={
"api_key": "YOUR_API_KEY",
"api_type": "pii_detection",
"text": "Kontaktieren Sie Hans Müller unter [email protected] "
"oder +49 170 1234567. IBAN: DE89 3704 0044 0532 0130 00.",
"mask_mode": "replace",
},
timeout=30,
)
data = resp.json()
for e in data["detected_entities"]:
print(e["type"], e["text"], e["start"], e["end"], e["confidence"])
# PERSON_NAME Hans Müller 17 28 0.97
# EMAIL_ADDRESS [email protected] 35 56 0.99
# PHONE_NUMBER +49 170 1234567 62 77 0.99
# IBAN_CODE DE89 3704 0044 0532 0130 00 85 112 0.99Character offsets (start/end) are counted on the original Unicode text, so they stay valid for highlighting or building your own redaction in any script. Detection quality is strongest in widely spoken languages (English, Spanish, German, French, Portuguese, Chinese, Japanese, Arabic, Hindi) and remains reliable across the full list above; for details on measuring per-language accuracy, see precision, recall & F1 for PII detection.
Multilingual coverage matters because privacy law follows the person, not the language of your codebase. GDPR applies to a French customer's data even when it sits in an English-language CRM; LGPD covers Brazilian CPF numbers in your logs; and HIPAA-regulated providers increasingly serve patients in Spanish, Mandarin, and Vietnamese. Scanning every language your users actually write in is the only way to make GDPR personal-data discovery, DLP, and support-ticket scanning complete.