WhatsApp Export Unpacker: forensic-grade chat preservation with a web UI
A Python tool with a local web UI for extracting, reconstructing, and preserving WhatsApp chat exports with voice transcription and anonymization.
WhatsApp's built-in chat export feature gives you a ZIP file with a text file and a bunch of media. It's functional, but not exactly useful if you need to actually preserve, analyze, or present that chat data in a meaningful way. I built WhatsApp Export Unpacker to bridge that gap — turning raw exports into structured, searchable, presentation-ready formats.
What it does
The tool provides a local web interface (Flask-based, WhatsApp-themed) where you drag and drop your export ZIP. It parses the chat, identifies participants, counts messages, and gives you a statistics dashboard showing message counts, voice messages, videos, images, and the date range of the conversation.
From there, you can configure processing options: transcribe voice messages and videos using OpenAI's Whisper API, generate a formatted PDF via Typst, and create an interactive HTML viewer that simulates the WhatsApp interface. The transcriptions get inserted inline into the reconstructed chat, so you get a complete text record even of voice-heavy conversations.
Anonymization
One of the more useful features is participant anonymization. For each person in the chat, you can keep their real name, assign a random alias (from human names, generic labels, or NATO codenames), or enter a custom replacement. This is essential for legal documentation, evidence preservation, or any scenario where you need to share chat records without exposing identities.
Use cases
I originally built this with digital forensics and evidence preservation in mind, but it's turned out to be useful for all sorts of things: archiving important conversations, creating searchable records of group chats, or just having a nice PDF version of a chat thread. The HTML viewer is particularly slick — it renders the chat in a format that looks like the actual WhatsApp interface, complete with transcribed voice messages.
Privacy first
Everything runs locally. The Flask server only binds to localhost, and the only external calls are to the Whisper API for transcription (which you can disable entirely). No data leaves your machine otherwise. Given the sensitive nature of chat exports, this was a non-negotiable design decision.
Check it out on GitHub: WhatsApp-Export-Unpacker
Utility for unpacking, organising, and transcribing a WhatsApp chat export