How to redact emails, phones & card data from support / helpdesk logs locally
- Step 1Export the tickets you need — Pull the ticket set from your helpdesk — a view, a tag, a date range, or a full backup. CSV, JSON, or the native
.xlsx/.xls/.odsexport all work. The scrubber inspects cell and value *content*, so it doesn't matter whether the conversation lives in abody,description, orcommentfield. - Step 2Drop the export onto the scrubber — Drag the file into the drop area above (it accepts
.csv,.json,.txt,.mdplus.xlsx/.xls/.ods). There's no paste box — the tool works on an uploaded file. Processing is fully in-browser, so the ticket text never leaves your machine even when the export is large. - Step 3Run the scrubber — Press Run Email/Phone Scrubber. No settings to choose — the six detectors run in a fixed order (email, IBAN, card, SSN, NI, then phone last). The card and IBAN passes apply their checksums, so a reference number that isn't a valid card or IBAN is left in place.
- Step 4Review the redacted tickets — The cleaned export appears in a scrollable panel with a metrics line: items redacted, bytes in/out, run time. Skim a few ticket bodies and confirm pasted emails, phones, and card numbers are now
[REDACTED_*], while the actual problem description and your reply text are still readable. - Step 5Download the clean export — Use Download to save it with a
-scrubbedsuffix (tickets.csv→tickets-scrubbed.csv). Hand off *that* file. For a spreadsheet input the download keeps the.xlsxname but the content is the scrubbed JSON array of the first sheet — convert to CSV if the recipient's tool expects an Excel workbook. - Step 6Flag what regex can't reach — Customers also write their full names, home addresses, and account references in prose — none of which this tool detects. For an export going to an external analyst, scramble name/address columns with the CSV/JSON Data Scrambler or strip them, and spot-read a sample of bodies for any identifier the regex shapes don't cover.
Where PII hides in a ticket export — and what's caught
PII lives in both structured fields and free-text bodies. The scrubber catches shaped identifiers anywhere in the text; it does not catch prose names, addresses, or account references.
| Where it appears | Example | Caught? | Tag / note |
|---|---|---|---|
| requester_email field | sue@example.com | Yes | [REDACTED_EMAIL] |
| Phone pasted in ticket body | call me on 0207 946 0958 | Yes | [REDACTED_PHONE] |
| Card pasted in a dispute | 4242 4242 4242 4242 | Yes (Luhn-valid) | [REDACTED_CARD] |
| Order / RMA number | 1234567890123456 | No | Fails Luhn — kept as reference |
| Customer name in body | Hi, this is Sue Adler | No | No name detector |
| Home address in body | ship to 12 King St, Leeds | No | Free-text address not matched |
Inputs, output, and tier limits
A free-tier tool; only the file-size ceiling changes by plan. Big ticket dumps may exceed the free limit and need splitting by date range.
| Aspect | Behaviour |
|---|---|
| Accepted input | .csv, .json, .md, .txt as text; .xlsx/.xls/.ods (first sheet flattened to a JSON array first) |
| Options | None — no toggles, no custom mask. All six detectors run every time |
| Output | Scrubbed export in the original format with [REDACTED_*] tags; downloaded as <name>-scrubbed.<ext> |
| Multiple files | Drop area accepts several, but only the first is scrubbed per run |
| Where it runs | 100% in your browser tab; a server-safe API path returns { output, redactedCount, counts } |
| File-size limit | Free 10 MB · Pro 100 MB · Pro + Media 500 MB · Developer 2 GB (oversize text throws an exceeds the … limit error) |
Cookbook
Ticket-export fragments showing PII in both fields and free-text bodies. All customer details below are fabricated examples.
Ticket CSV with PII in the body column
The realistic case: structured email/phone fields plus a chatty body that also leaks contact info. Every shaped identifier is masked wherever it sits.
Input (tickets.csv): id,requester_email,body 4821,sue@example.com,"Please call me back on +44 20 7946 0958 today" 4822,jon@acme.io,"My card 4242 4242 4242 4242 was charged twice" Output (tickets-scrubbed.csv): id,requester_email,body 4821,[REDACTED_EMAIL],"Please call me back on [REDACTED_PHONE] today" 4822,[REDACTED_EMAIL],"My card [REDACTED_CARD] was charged twice" Reported: 4 items redacted
Nested conversation JSON stays valid
Helpdesk JSON exports nest comments inside a ticket object. Emails and phones buried in comment text are masked in place and the document stays parseable.
Input (ticket.json):
{
"id": 4823,
"comments": [
{ "author": "mia@acme.io", "text": "reach me on 07700 900123" }
]
}
Output (ticket-scrubbed.json):
{
"id": 4823,
"comments": [
{ "author": "[REDACTED_EMAIL]", "text": "reach me on [REDACTED_PHONE]" }
]
}Order numbers survive, real cards don't
Tickets are full of 16-digit references. The Luhn gate keeps the order/RMA numbers as useful context and removes only the genuine card.
Input (dispute.csv): ticket,order_no,card_pasted 9001,1234567890123456,4111 1111 1111 1111 Output (dispute-scrubbed.csv): ticket,order_no,card_pasted 9001,1234567890123456,[REDACTED_CARD] # order_no fails Luhn → kept # card passes Luhn → [REDACTED_CARD]
Names and addresses in a body are NOT removed
Customers self-identify in prose. The scrubber masks the email but leaves the name and shipping address — the support team's biggest blind spot.
Input (ticket.txt): Hi, this is Sue Adler, email sue@example.com, please ship the replacement to 12 King St, Leeds. Output (ticket-scrubbed.txt): Hi, this is Sue Adler, email [REDACTED_EMAIL], please ship the replacement to 12 King St, Leeds. # name + address pass through — scramble or strip separately
Native helpdesk .xlsx export returns JSON
A spreadsheet export from the helpdesk is flattened (first sheet only) to a JSON array, scrubbed, and returned as JSON — the download keeps the .xlsx name but holds JSON text.
Input: tickets-export.xlsx (first sheet)
| Requester | Phone |
| kit@demo.org | 07700 900123 |
Download: tickets-export-scrubbed.xlsx (CONTENT is JSON):
[
{
"Requester": "[REDACTED_EMAIL]",
"Phone": "[REDACTED_PHONE]"
}
]Edge cases and what actually happens
Customer names written in ticket text remain
By designCustomers routinely self-identify in prose ("Hi, this is Sue Adler…"), and the scrubber has no name detector. Those names pass through to your analyst or knowledge base. For an export leaving the team, scramble or strip the name fields with the CSV/JSON Data Scrambler and spot-read a body sample.
Shipping / home addresses in bodies survive
By designFree-text addresses have no fixed shape the regex matches, so a "ship to 12 King St, Leeds" in a ticket body is left intact. This is the most common residual PII in support exports — handle addresses with a separate pass before sharing externally.
An order or RMA number isn't masked
PreservedCard matching needs a Luhn-valid 13–19 digit run, so order numbers, RMAs, and ticket IDs that fail Luhn are deliberately kept — they're useful context for analysis, not PII. A real card with a checksum-breaking typo would also be missed, so don't rely on the scrub to fix malformed input.
Only the first file is scrubbed from a multi-select
First file onlyThe drop area accepts several files, but a run scrubs only files[0]. If you exported tickets in batches, run each file separately or call the server-safe API. Always check the -scrubbed filename so an unprocessed batch isn't shared by mistake.
The Excel download contains JSON, not a workbook
ExpectedFor .xlsx/.xls/.ods inputs the first sheet is converted to a JSON array of row objects, scrubbed, and returned as that JSON — the filename keeps .xlsx but the content is JSON text. If the BI tool expects real Excel, save the JSON and re-import, or export the sheet to CSV before scrubbing.
The ticket dump exceeds your plan's limit
Rejected — over limitText exports go through the tier size gate (Free 10 MB, Pro 100 MB, Pro + Media 500 MB, Developer 2 GB). An oversize file throws File "…" is N MB — exceeds the … limit for your plan. and nothing is scrubbed. Split the export by date range or tag, or upgrade. Spreadsheets are read directly into the tab and bounded by memory.
PII lives on a second sheet of the workbook
First sheet onlyOnly the first sheet of a spreadsheet is flattened and scrubbed; other tabs (separate ticket categories, lookups) are ignored. Move all the data to the first sheet, or export each tab to its own CSV before scrubbing, and verify the redaction count matches your expectation.
A non-standard phone format slips through a body
May be missedThe phone detector targets common international and grouped formats with +, parentheses, and space/dot/dash separators. Internal extensions, run-together digits, or heavily localised formats may not match. Skim ticket bodies for any phone style your customers use that isn't a standard grouped number.
A long phone string passes Luhn and is tagged as a card
Card winsDetectors run in a fixed order and the Luhn-gated card pass runs before phone. A long unseparated number that happens to satisfy Luhn becomes [REDACTED_CARD] rather than [REDACTED_PHONE]. The data is still redacted — but if you're counting tag categories for a report, know the financial pass claims qualifying digit runs first.
You need to redact an attached screenshot or PDF
Wrong toolThis tool only redacts text in text/CSV/JSON exports — it can't touch ticket attachments. For text redaction inside a PDF use the PDF PII Redactor; to blur a face in an attached screenshot or video use Face Pixelate; to burn out a signature use Signature Burner.
Frequently asked questions
Does it scrub PII inside free-text ticket bodies, not just fields?
Yes. The scrubber reads raw text, so an email or phone pasted into a body, description, or comment is matched the same as one in a structured requester_email field. Shaped identifiers are caught wherever they appear in the export.
Will it remove customer names from ticket text?
No. There's no name detector — only email, phone, IBAN, card, US SSN, and UK NI. Customers who self-identify in prose ("this is Sue Adler") keep their names in the output. For an export leaving the team, scramble or strip name fields with the CSV/JSON Data Scrambler.
Is the ticket text uploaded to do the scrub?
No. The on-page tool runs every regex pass locally in your browser tab — the conversations and identifiers never reach a server. That's what makes it safe to clean a GDPR/CCPA-governed export before sharing it with an external analyst or BI vendor. A separate opt-in API path exists for automation.
How does it keep order and RMA numbers while removing cards?
The card detector applies the Luhn checksum first, so a 13–19 digit run is only masked as [REDACTED_CARD] if it passes Luhn. Order numbers, RMAs, and ticket IDs typically fail Luhn and are kept as useful context. Real cards pass Luhn and are removed.
Can I choose which PII categories to mask?
No. There's no options panel — all six detectors always run and the tags are fixed. To keep only certain tags in the export, find-and-replace the unwanted ones back in a text editor afterwards. There is no per-category toggle.
Does it keep my JSON ticket export parseable?
Yes. Replacements drop inside the existing quoted string values, so a nested-conversation JSON export stays valid JSON and a CSV keeps its columns. The scrubber only substitutes the matched substring; it never reorders or removes fields.
My helpdesk exports Excel — do I get Excel back?
It accepts .xlsx/.xls/.ods but converts the first sheet to a JSON array of row objects, scrubs that, and returns the JSON. The download keeps the .xlsx name yet holds JSON text, not a rebuilt workbook. Export your sheet to CSV first if the recipient's tool needs binary Excel.
What if my tickets span multiple sheets?
Only the first sheet of a workbook is scrubbed; other tabs are ignored. Move the data to the first sheet, or export each tab to its own CSV and scrub them one at a time. Check the per-run count to confirm the rows you expected were processed.
Can I scrub several ticket exports at once?
Not in one click. The drop area accepts a multi-file selection but a single run scrubs only the first file. Run each export separately, or call the server-safe API in a loop. Each run yields one -scrubbed file.
How big a ticket dump can I scrub?
Text exports are gated by tier: Free 10 MB, Pro 100 MB, Pro + Media 500 MB, Developer 2 GB. An oversize text file throws an exceeds the … limit for your plan error and isn't processed. Split the dump by date range or tag, or upgrade. Spreadsheets are read directly into the tab and bounded by memory.
Which phone formats does it catch in ticket bodies?
Common international and grouped formats — an optional +, a 1–3 digit prefix, then digit blocks split by spaces, dots, dashes, or parentheses (e.g. +44 20 7946 0958, (212) 555-0143). Separator-less or heavily localised formats may slip; skim bodies for any phone style your customers use.
Can it redact PII in ticket attachments?
No — it only processes text/CSV/JSON, not attached files. For text redaction inside a PDF attachment use the PDF PII Redactor; to blur a face in an attached screenshot or clip use Face Pixelate; to remove a signature use Signature Burner.
Privacy first
Every JAD Security operation runs entirely in your browser. Files, passwords, and PGP private keys never leave your device — verified by zero outbound network requests during processing.