Trust
Privacy & Security Architecture
ScanMyChat is built so that your conversation does not need to reach us. This page describes exactly how that works, the complete list of what does reach a server, and how you can check it yourself.
How your file is processed
When you open the workspace, your browser downloads ordinary JavaScript from our site. When you choose a WhatsApp export, that code reads the file directly from your device into the memory of the browser tab. Everything after that happens in the tab:
- The ZIP archive is opened locally with JSZip (or the .txt is read as-is).
- The SHA-256 fingerprint of the exact file is computed with the browser’s built-in Web Crypto API.
- Messages are parsed and the consistency checks are run in JavaScript.
- The report PDF is rendered locally with pdfmake, and the evidence package ZIP is assembled locally.
- The finished package is handed to your browser as a download.
There is no upload step, and our servers have no endpoint that accepts chat files. Processing is plain JavaScript; it does not depend on any server-side component or on WebAssembly.
What reaches a server — the complete list
These are all the data flows that leave your device when you use ScanMyChat.
| Data | Recipient | Why | Retention |
|---|---|---|---|
| Name, email, billing address, card details | Polar (polar.sh), merchant of record | To take payment, calculate tax, issue refunds and email your licence key. We never see card numbers. | Per Polar’s policies and tax record-keeping obligations. |
| Licence key + SHA-256 fingerprint of the source file | Our licence API, which checks the key with Polar | Authorises each package export. The fingerprint is stored with Polar as the licence “activation” so each per-case licence stays tied to one file. | Kept with the licence activation for the life of the licence. |
| Page views and anonymous product events (e.g. “analysis started”), with message counts in broad ranges such as “1k–5k” | Google Analytics 4 | To understand which steps work and where people get stuck. | Per our Google Analytics retention setting. |
| IP address, user agent, requested URL | Vercel (hosting) | Standard web-server logs needed to serve the site and diagnose errors. | Per Vercel’s log retention. |
| Whatever you type into the contact form or newsletter sign-up | Supabase (our database) | To reply to you, or to send the newsletter you asked for. | Until the conversation is resolved or you unsubscribe / ask us to delete it. |
Never sent, at any step
- Message text
- Participant or contact names
- Photos, voice notes, videos and other attachments
- The name of your export file or any attachment file
- The generated PDF, CSV or manifest
- Anything you type into case-detail fields (case reference, preparer, notes)
What stays in your browser, and for how long
- Your chat and attachments are held only in the memory of the open tab. They are not written to cookies, localStorage, IndexedDB or any other browser storage. Closing or reloading the tab discards them.
- Your licence key is saved in localStorage so you don’t have to paste it each time. Clearing this site’s data in your browser settings removes it; Polar also emails you the key.
- The packages you download are ordinary files in your downloads folder. Protecting them from then on — device encryption, who you share them with, how you send them — is in your hands.
A browser extension with access to the page, or malware on your device, could in principle read what the page reads. That risk applies to any web page; use a trusted device and browser for sensitive material.
Telemetry policy
We measure the product with Google Analytics 4: page views, plus a small set of named events such as “analysis started”, “file parsed”, “preview seen” and “package generated”. Where an event carries a number, it is bucketed — for example a message count is reported as a range like “1k–5k”, never an exact figure.
Events never include message text, participant names, file names or fingerprints. The event list is defined in one place in our code, and you can watch each call in the Network tab as described below.
How licence binding works
When you export a paid package, the workspace sends your licence key and the SHA-256 fingerprint of the source file to our licence API. The API asks Polar whether the key is valid.
- The first time the key is used, the fingerprint is recorded with Polar as the licence’s activation. Later exports are authorised only if they come from the same source file, so you can re-export that file as often as you like.
A SHA-256 fingerprint is a one-way value: it cannot be turned back into the file or its contents. It only lets someone who already has a file confirm whether it is the same one.
If this ever changes
Some features we may build later — for example syncing a case between devices — would require storing data on a server. We would not add that silently. Before any change that sends chat content or attachments off your device, we would:
- make it opt-in, with local processing remaining available;
- update this page and the privacy policy before release, stating what is stored, where, and for how long;
- announce it on the site and to customers by email.
Verify it yourself
You don’t have to take our word for any of this. Any modern desktop browser lets you see every request a page makes.
- 1Open the workspace at scanmychat.com/workspace in a desktop browser.
- 2Open Developer Tools (F12, or Cmd+Option+I on a Mac) and select the Network tab. Tick “Preserve log”.
- 3Clear the list, then drop your WhatsApp export into the workspace and wait for the analysis to finish.
- 4Look at the requests made while the file was read. You will see no request carrying your file — only static assets and, if analytics is enabled, small analytics calls with no chat content.
- 5When you export a paid package, you will see one request to /api/license/authorize. Click it and read the request body: it contains the licence key and a 64-character SHA-256 fingerprint, nothing else.
You can also disconnect from the internet after the workspace has loaded: importing and analyzing a file still works, because the analysis does not need a server.
Responsible disclosure
If you believe you have found a security or privacy issue, please email security@scanmychat.com with a description and steps to reproduce. Please give us reasonable time to investigate and fix it before disclosing publicly, and don’t access other people’s data while testing. We will acknowledge your report and keep you informed.
Want to know what the fingerprints do and don’t show?
Methodology & verification