Before it reaches the AI provider

What we mask, and what we don't

Survey answers can contain an e-mail, a phone number, an IBAN — sometimes without the respondent thinking about it. On our own server, before an answer reaches our AI provider, the types below are replaced with placeholders. Here is exactly what that covers, what it deliberately leaves alone, and why.

Your survey answer

Please refer to my number kontakt.klient@example.com regarding order order-00048, thanks.

What the AI provider gets

Please refer to my number {%EMAIL_ADDRESS_1%} regarding order order-00048, thanks.

What we mask

Seven categories, matched against the real recognizer names our masking service uses (Microsoft Presidio) — the placeholder tells the AI provider it's looking at "a phone number", never which one.
Email address

kontakt.klient@example.com

{%EMAIL_ADDRESS_1%}

Phone number

+48 600 123 456

{%PHONE_NUMBER_1%}

IBAN

DE89 3704 0044 0532 0130 00

{%IBAN_CODE_1%}

Card number

4111 1111 1111 1111

{%CREDIT_CARD_1%}

National ID & tax/VAT

90022800007

{%PL_PESEL_1%}

Every EU/EEA state plus GB and CH — full list further down.

Postal address

ul. Kwiatowa 12/3, 00-001 Warszawa

{%ADDRESS_1%}

Placeholders are numbered per prompt — the same value gets the same number every time it appears, so an insight can still tell "two different phone numbers" from "the same one twice". A national-id or tax/VAT placeholder names the country it detected (e.g. DE_TAX_ID) — that is a deliberate trade-off, not an oversight.

What we deliberately don't mask

Masking is pseudonymisation, best-effort — not a guarantee, and not everything in a survey answer is treated the same way. These are left exactly as your respondent typed them:
First and last names

"Anna Nowak"

No legal requirement to mask names on their own, and a quote with the name stripped out reads like it was edited — verifiability matters more here than a redaction nobody asked for.

Dates, including birth dates

"2026-03-14"

A date recognizer produced too many false positives against order and delivery dates to run safely — turned off on purpose rather than shipped half-broken.

Document numbers

ID card, passport, driving licence

No reliable cross-country pattern to detect these safely without also flagging order and product codes — see the false-positive note above.

Licence plates

e.g. "WA12345"

Same reason as document numbers — the shapes overlap too much with SKUs and order codes to mask confidently.

Order and shipment numbers

"order-04812", "shipment-DPD-99213877"

Not personal data, and the whole point of an e-commerce survey often depends on them staying readable in the quote.

URLs

e.g. "https://example.com/order/48212"

Usually a link the respondent pasted on purpose to show you something — masking it would remove the point of pasting it.

Special-category data described in words

e.g. "I couldn't try it on because I'm pregnant" / health, religion, etc. mentioned in free text

Detecting sensitive topics from free text reliably is a different, much harder problem than pattern-matching an IBAN — out of scope today. If a respondent writes this kind of detail, it reaches your panel and the AI provider exactly as typed.

Masking is best-effort and doesn't catch everything. It helps you meet GDPR's minimisation principle for what reaches our AI provider — it is not a certification and it is not a substitute for your own judgment about what you ask respondents.

Examples, in the languages our respondents actually use

Every row below is a real case from our masking test corpus — not invented copy. Filter by language; the last five rows are the "we don't mask this" cases, kept in the same list on purpose.
ENEmail

Your answer

Please refer to my number kontakt.klient@example.com regarding order order-00048, thanks.

What the AI provider gets

Please refer to my number {%EMAIL_ADDRESS_1%} regarding order order-00048, thanks.

ENPhone

Your answer

Please refer to my number +48 600 123 456 regarding order order-00046, thanks.

What the AI provider gets

Please refer to my number {%PHONE_NUMBER_1%} regarding order order-00046, thanks.

ENIBAN

Your answer

Please refer to my number DE89370400440532013000 regarding order order-00047, thanks.

What the AI provider gets

Please refer to my number {%IBAN_CODE_1%} regarding order order-00047, thanks.

ENCard

Your answer

Please refer to my number 4111 1111 1111 1111 regarding order order-00009, thanks.

What the AI provider gets

Please refer to my number {%CREDIT_CARD_1%} regarding order order-00009, thanks.

ENAddress

Your answer

Please refer to my number ul. Kwiatowa 12/3, 00-001 Warszawa regarding order order-00000, thanks.

What the AI provider gets

Please refer to my number {%ADDRESS_1%} regarding order order-00000, thanks.

ENUK VAT

Your answer

Please refer to my number GB980780684 regarding order order-00355, thanks.

What the AI provider gets

Please refer to my number {%GB_VAT_1%} regarding order order-00355, thanks.

ENCH social security

Your answer

Please refer to my number 7569217076985 regarding order order-00035, thanks.

What the AI provider gets

Please refer to my number {%CH_SSN_1%} regarding order order-00035, thanks.

PLPESEL

Your answer

Proszę o kontakt w sprawie zamówienia order-00475, mój numer to 90022800007.

What the AI provider gets

Proszę o kontakt w sprawie zamówienia order-00475, mój numer to {%PL_PESEL_1%}.

PLNIP (tax)

Your answer

Proszę o kontakt w sprawie zamówienia order-00470, mój numer to 856 734 6215.

What the AI provider gets

Proszę o kontakt w sprawie zamówienia order-00470, mój numer to {%PL_NIP_1%}.

DETax ID

Your answer

Bitte prüfen Sie meine Nummer 36574261809 für die Bestellung order-00065.

What the AI provider gets

Bitte prüfen Sie meine Nummer {%DE_IDNR_1%} für die Bestellung order-00065.

DEVAT

Your answer

Bitte prüfen Sie meine Nummer DE767644980 für die Bestellung order-00066.

What the AI provider gets

Bitte prüfen Sie meine Nummer {%DE_VAT_1%} für die Bestellung order-00066.

FRNational ID

Your answer

Merci de vérifier mon numéro 2 95 10 99 126 111 93 pour la commande order-00105.

What the AI provider gets

Merci de vérifier mon numéro {%FR_NIR_1%} pour la commande order-00105.

FRVAT

Your answer

Merci de vérifier mon numéro FR88100000009 pour la commande order-00106.

What the AI provider gets

Merci de vérifier mon numéro {%FR_TVA_1%} pour la commande order-00106.

ESNational ID

Your answer

Por favor revisen mi número 12345678Z para el pedido order-00140.

What the AI provider gets

Por favor revisen mi número {%ES_NIF_1%} para el pedido order-00140.

ESVAT

Your answer

Por favor revisen mi número ES32509269B para el pedido order-00141.

What the AI provider gets

Por favor revisen mi número {%ES_VAT_1%} para el pedido order-00141.

ITFiscal code

Your answer

Vi prego di controllare il mio numero RCCMNL83S18D969H per l’ordine order-00170.

What the AI provider gets

Vi prego di controllare il mio numero {%IT_FISCAL_CODE_1%} per l’ordine order-00170.

NLNational ID (BSN)

Your answer

Controleer mijn nummer 401286721 voor bestelling order-00250, alstublieft.

What the AI provider gets

Controleer mijn nummer {%NL_BSN_1%} voor bestelling order-00250, alstublieft.

PTTax ID

Your answer

Por favor verifiquem o meu número PT197947166 para o pedido order-00320.

What the AI provider gets

Por favor verifiquem o meu número {%PT_NIF_1%} para o pedido order-00320.

CZNational ID

Your answer

Prosím zkontrolujte mé číslo 900101100 pro objednávku order-00360.

What the AI provider gets

Prosím zkontrolujte mé číslo {%CZ_RC_1%} pro objednávku order-00360.

SVNational ID

Your answer

Kontrollera mitt nummer 9001010009 för beställning order-00420, tack.

What the AI provider gets

Kontrollera mitt nummer {%SE_PERSONNUMMER_1%} för beställning order-00420, tack.

ENNot masked — name, date, order, SKU

Your answer

Anna Nowak ordered on 2026-03-14, order order-04812, product SKU-88213-BLK.

What the AI provider gets

Anna Nowak ordered on 2026-03-14, order order-04812, product SKU-88213-BLK.

ENNot masked — shipment number, date

Your answer

Tracking is shipment-DPD-99213877, still not moving since 2026-03-14.

What the AI provider gets

Tracking is shipment-DPD-99213877, still not moving since 2026-03-14.

ENNot masked — document mention

Your answer

My driving licence number is on the return slip if you need it.

What the AI provider gets

My driving licence number is on the return slip if you need it.

ENNot masked — URL

Your answer

See the photo I posted at https://example.com/order/48212/photo.

What the AI provider gets

See the photo I posted at https://example.com/order/48212/photo.

ENNot masked — special category, described in words

Your answer

Couldn’t try the jacket on properly, I’m currently pregnant.

What the AI provider gets

Couldn’t try the jacket on properly, I’m currently pregnant.

25 rows shown, 20 masked across 10 languages, 5 deliberately not masked.

The model sees tokens. You see the respondent.

The lookup between a placeholder and the real value exists only for the length of one request to the AI provider, in memory, never written to a log or a database. When a quote comes back for your panel, we unmask it against the original stored in your account — that's the only copy that is ever kept.

Sent to the AI provider

Please refer to my number {%EMAIL_ADDRESS_1%} regarding order order-00048, thanks.

Shown in your panel

Please refer to my number kontakt.klient@example.com regarding order order-00048, thanks.

A quote the model returns with an unknown placeholder is rejected outright, not shown with a guessed value — the same refuse-to-guess rule the rest of the product follows.

How it works

On our own server
Every written answer is scanned on our infrastructure the moment it's about to be summarised — before it ever leaves for an AI provider.
Replaced with placeholders
The seven categories above become tokens like {%PHONE_NUMBER_1%}; everything else is left as written.
The original stays in your account
Quotes shown in your panel always come from the original, unmasked answer — the masked copy only ever exists to build the AI provider's prompt.

How we protect your account

Encrypted in transit
Every connection to the Application is encrypted with TLS.
Passwords never stored in plain text
Passwords are stored only as an Argon2id hash.
Rate-limited by design
Login, registration and password reset attempts are rate-limited.
Account deletion, confirmed
Deleting an account requires confirmation with a code sent by email.

Subprocessors

Third parties that process personal data on our behalf. Source of truth: the Data Processing Agreement, Annex 2 — this table is kept in sync by hand.
SubprocessorPurposeLocation
OVH Sp. z o.o. (Wrocław)Hosting of the application and databaseGermany
Hetzner Online GmbH (Gunzenhausen)Storage of encrypted backupsEU (Germany or Finland)
Anthropic Ireland, Limited (Dublin)Analysis of open-ended answers with an AI model; help with creating surveysUnited States, SCC (Decision 2021/914, Module 3)

A few more questions

Does masking make the survey GDPR compliant?

Masking runs on our own server, before an answer reaches our AI provider. No single feature makes anything "compliant" on its own — masking helps you meet GDPR's data-minimisation principle for what reaches our AI provider, one control among several, not a certificate.

Can I turn masking off?

It's a system-level setting today, always on for every account — not a per-store switch.

What if masking fails?

Fail-closed: if the masking service is unreachable, nothing gets sent to the AI provider for that batch, and the recalculation is reported as failed — the same way any other recalculation failure is shown.

See it on your own answers