What's Inside a WhatsApp Chat Export .txt File?

A WhatsApp chat export is a plain UTF-8 .txt file with one message per line in the format <timestamp> - <sender>: <message>. The timestamp format depends on your phone's regional settings. Media messages are replaced by <Media omitted>. System events (joins, leaves, changes) appear inline without a sender.

What does a single line look like?

The canonical shape, on a UK/EU phone:

14/06/2026, 21:07 - Alex Turner: Are we still doing dinner Friday?

Broken down:

  • 14/06/2026 — date, DD/MM/YYYY.
  • 21:07 — time, 24-hour HH:MM (no seconds).
  • - — literal separator (space, dash, space).
  • Alex Turner — the sender's contact name as stored in your address book.
  • : — sender/message separator.
  • Are we still doing dinner Friday? — message body.

On a US phone the same line becomes 6/14/26, 9:07 PM - Alex Turner: Are we still doing dinner Friday?. Same file, different format, and a parser that assumes one style breaks on the other.

How are multi-line messages represented?

Only the first line carries a timestamp. Any newlines inside the original message produce naked continuation lines:

14/06/2026, 21:08 - Alex Turner: Three things:
1. Pizza or sushi
2. 7pm or 8pm
3. Whose place

A robust parser reads line by line, and when a line doesn't start with a timestamp it appends to the previous message.

What are the special line types?

Four categories beyond ordinary messages:

  • Media placeholders<Media omitted> in English exports (localized in other languages).
  • Voice notes — often <Media omitted> too, but some versions write audio omitted.
  • Deleted messagesThis message was deleted.
  • System events — no sender, no colon. Examples: Alex added Sam, Group name changed to "Trip 2026", Messages and calls are end-to-end encrypted.

The end-to-end encryption notice always appears as the second line of the file. It's not a real message — filter it out.

How does the format differ by language?

The message body is preserved verbatim, but the fixed strings are localized. <Media omitted> becomes <Média absent> in French, <Medien ausgeschlossen> in German, and so on. The - separator between timestamp and sender is universal, but the encryption notice and system event text change.

For a multilingual chat, this matters. A parser using string matches for "Media omitted" misses non-English exports. Match on structural position (line has timestamp but no : ) instead.

What's not in the file?

Things you might expect but won't find:

  • Reactions (emoji taps on other messages) — dropped entirely.
  • Reply context — a reply appears as an ordinary message with no reference to what it replied to.
  • Read receipts and delivery status — not exported.
  • Profile pictures or display name changes — dropped.
  • Poll results — the poll text appears; individual votes don't.
  • Message reactions — as above, no data.

The export is a text transcript, not a full data dump. If your use case depends on any of the above, the export won't cover it.

How do people actually parse it?

The pragmatic approach: regex on the timestamp, split by - , split the remainder on the first : . Pseudocode:

LINE_REGEX = /^(\d{1,2}\/\d{1,2}\/\d{2,4}), (\d{1,2}:\d{2}(?:\s?[AP]M)?) - (.+)$/

If a line doesn't match, treat it as a continuation of the previous message. If a line matches but has no : in the third group, it's a system event.

That's exactly what WhatsQuiz does client-side before sending only the extracted structured content for question generation — the raw file never leaves your browser.

Why care about the format?

Because the shape of the file tells you what's possible:

  • Timestamps mean you can bucket by hour of day (who's the 2am poster?).
  • Sender names mean you can rank by volume (who dominates?).
  • Message text means you can search for running jokes.
  • Absence of reactions means you can't measure "which message got the most laughs" without inferring from replies.

For quiz generation, speech mining, or group-chat retrospectives, the format is more than enough — as long as your parser handles the multi-line case and the regional date variations.

Where the format shows up in your app

If you're building on top of exports yourself, the two gotchas that trip up almost every first-time parser are (1) the regional date format and (2) the multi-line continuation. Solve those and you've solved 95% of real-world parsing bugs.

If you'd rather skip parsing entirely, upload the file to WhatsQuiz and it will hand you back a ready-to-play quiz without you ever touching the text.

Frequently asked questions

Is the export file encrypted?

No. Once exported, the file is plain UTF-8 text. WhatsApp's end-to-end encryption protects messages in transit and at rest inside the app — the export is a deliberate copy you generated, and it leaves the encrypted store.

Can I open it in Excel?

Not cleanly. Excel doesn't know how to split the timestamp/sender/message columns. Import it as tab-delimited after converting the separators, or use a proper parser. Most people just open it in a text editor.

What date format does the export use?

It matches your phone's regional settings. UK/EU phones typically produce DD/MM/YYYY, HH:MM. US phones produce M/D/YY, H:MM AM/PM. This is the single biggest source of parser bugs.

Why do some lines lack a timestamp?

Multi-line messages (a message with a newline in it) appear as multiple lines in the file. Only the first line has the timestamp; continuation lines are naked text. Parsers need to concatenate them back.

Sources