What's in a WhatsApp chat export? The .txt format explained

Updated

A WhatsApp chat export is a plain text file, sometimes packed in a zip together with the photos and other media from the chat. It looks simple, but the exact format changes with the phone, the app version and even the language your phone is set to. This page explains what you'll find inside, so you know what you're looking at and why ChatReader occasionally asks you a question about dates. All names and messages below are made up.

The files inside the zip

  • The chat text: _chat.txt on iPhone, WhatsApp Chat with Alice.txt (or the group's name) on Android.
  • Media files, only if you exported with media: photos, videos, voice notes, stickers, documents and contact cards, each as a separate file.

If you exported without media you may get only the .txt file. See how to export a chat for the difference.

One message per line

Each message starts on a new line with a date, a time, the sender and the text. Android exports look like this:

31/12/2023, 21:41 - Alice: Happy new year!
31/12/2023, 21:42 - Bob: You too 🎉

The same chat on an Android phone set to US English:

12/31/23, 9:41 PM - Alice: Happy new year!
12/31/23, 9:42 PM - Bob: You too 🎉

And on an iPhone, which puts the date in square brackets, adds seconds and drops the dash:

[31/12/2023, 21:41:05] Alice: Happy new year!
[31/12/2023, 21:42:10] Bob: You too 🎉

Why dates look different on different phones

WhatsApp writes dates the way your phone's region and language settings display them, not in one fixed format. That's why two exports of the same chat can look quite different:

  • Day/month order: 31/12/2023 in most of the world, 12/31/2023 in the US.
  • Year: four digits (2023) or two (23).
  • Clock: 24-hour (21:41) or 12-hour (9:41 PM).
  • Localised AM/PM: the PM marker can be PM, pm, p. m. (Spanish), nachm. (German) or text in other scripts.
  • Invisible spaces: newer phones put a narrow no-break space between the time and “PM”. It looks like a normal space but isn't one, which trips up simple scripts.
  • Separators: slashes (31/12/2023), dots (31.12.23) or dashes (2023-12-31).

ChatReader looks at the first lines of the file to work out the format. Usually a date such as the 31st settles whether the day or the month comes first. But if every date in the chat could be read both ways, for example a short chat where all days are 12 or lower, there is no way to tell. In that case ChatReader shows you a couple of messages with both readings and asks which one is right.

Note that the times have no time zone. They are the local time on the phone that made the export, so a chat exported by a friend in another country will show their clock, not yours.

Invisible marks on iPhone

iPhone exports often contain invisible left-to-right marks (Unicode U+200E) at the start of lines and before attachments. They help display mixed left-to-right and right-to-left text, but they confuse search and simple text tools. ChatReader removes them when it reads the file; a text editor will show the file as it is.

Messages over several lines

If a message contains line breaks, only its first line starts with a date. The following lines are just text, and belong to the same message until the next dated line:

31/12/2023, 21:45 - Carmen: Shopping list:
- bread
- candles
31/12/2023, 21:46 - Alice: On it

System messages

Some lines have no sender. They describe something that happened in the chat:

31/12/2023, 20:00 - Messages and calls are end-to-end encrypted. No one outside of this chat, not even WhatsApp, can read or listen to them.
31/12/2023, 20:01 - Carmen added Bob
31/12/2023, 20:02 - Alice changed the subject to "New Year's Eve"
31/12/2023, 20:03 - Alice changed this group's icon
31/12/2023, 20:10 - Bob left
31/12/2023, 20:15 - Carmen: This message was deleted

The exact wording follows the language of the phone that made the export. A deleted message keeps its line, but the text is replaced with “This message was deleted” (or “You deleted this message”).

Photos, videos and other media

When media is included, the message line names the file in the zip. On Android:

31/12/2023, 21:50 - Bob: IMG-20231231-WA0001.jpg (file attached)

On iPhone:

[31/12/2023, 21:50:12] Bob: <attached: 00000012-PHOTO-2023-12-31-21-50-12.jpg>

When the chat was exported without media, only a placeholder is left:

31/12/2023, 21:50 - Bob: <Media omitted>
[31/12/2023, 21:50:12] Bob: image omitted

Android names media files by type, date and a running number:

  • IMG-… photos, VID-… videos
  • AUD-… audio files, PTT-… voice notes (“push to talk”)
  • STK-… stickers (usually .webp)
  • DOC-… documents such as PDFs

iPhone uses names like 00000012-PHOTO-…, -VIDEO- or -AUDIO- with the date and time. Voice notes on both phones are .opus files. ChatReader matches each name to the file in the zip and shows it inline; if the file isn't there, you see the name instead.

Polls, locations, contacts and edits

  • Polls appear as a POLL: line followed by the options and their vote counts at the time of export.
  • Locations become a link, for example location: https://maps.google.com/?q=….
  • Contact cards are saved as .vcf files when media is included.
  • Edited messages show the final text followed by <This message was edited>. The earlier versions are not in the export.

When ChatReader doesn't recognise a line, it shows the raw text rather than dropping it, so nothing in your file goes missing.

What's not in the export

  • Reactions are mostly missing.
  • Read receipts (the blue ticks) and delivery times are not included.
  • Time zones: times are plain local clock times.
  • Deleted messages: only the “This message was deleted” line remains, never the original text.
  • Older history: WhatsApp limits how many recent messages one export contains, fewer with media.
  • Calls: a missed call may appear as a line, but there is no call log or recording.

Because the export is plain text, anyone can edit it in a text editor. That's worth keeping in mind if you need it as a record; the FAQ has more on that.

Ready to read yours? Open your chat in ChatReader.