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:

  1. The ZIP archive is opened locally with JSZip (or the .txt is read as-is).
  2. The SHA-256 fingerprint of the exact file is computed with the browser’s built-in Web Crypto API.
  3. Messages are parsed and the consistency checks are run in JavaScript.
  4. The report PDF is rendered locally with pdfmake, and the evidence package ZIP is assembled locally.
  5. 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 that reaches a server, who receives it, why, and how long it is kept
DataRecipientWhyRetention
Name, email, billing address, card detailsPolar (polar.sh), merchant of recordTo 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 fileOur licence API, which checks the key with PolarAuthorises 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 4To understand which steps work and where people get stuck.Per our Google Analytics retention setting.
IP address, user agent, requested URLVercel (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-upSupabase (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.

  1. 1Open the workspace at scanmychat.com/workspace in a desktop browser.
  2. 2Open Developer Tools (F12, or Cmd+Option+I on a Mac) and select the Network tab. Tick “Preserve log”.
  3. 3Clear the list, then drop your WhatsApp export into the workspace and wait for the analysis to finish.
  4. 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.
  5. 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