Message Album
← All guides

How to export an entire iMessage conversation on a Mac

Why the Messages app has no export command, the free methods that work anyway, how to get history that never synced to your Mac, and how to end up with an archive you can still open years from now.

· 5 min read

The Messages app on macOS has no Export command. It never has. Search this question and the top results are an Apple Support thread and a Reddit post, which tells you how well the built-in options have solved it.

Here is what actually works.

Where the conversation lives

On a Mac, Messages keeps everything in a SQLite database at ~/Library/Messages/chat.db, with attachments in ~/Library/Messages/Attachments/. Both are protected by macOS: no app can read them without being granted Full Disk Access in System Settings, and the folder is hidden from Finder by default.

Two things follow from this, and they explain most of the confusion around this topic:

  1. Any tool that exports your messages needs Full Disk Access. That is not a red flag on its own, it is the only way macOS allows it. What matters is what the tool does after it has read the file.
  2. The database is Apple’s private implementation detail. Its structure changes between macOS releases without notice. This is why export tools need updating, and why an exported archive should never be in Apple’s format.

Method 1: Print to PDF (free, built in, limited)

  1. Open Messages, select the conversation.
  2. Scroll to the very top of the thread, holding Command + Up arrow, until it stops loading older messages.
  3. File › Print, then PDF › Save as PDF.

This works, and for a short conversation it is the right answer. Two real limits: you have to load the entire thread by scrolling, which is painful over years of history, and PDF cannot hold playable video or audio.

Method 2: Query the database yourself (free, technical)

Since chat.db is a standard SQLite file, you can query it directly. Grant your terminal Full Disk Access first, then:

sqlite3 ~/Library/Messages/chat.db

Be aware of three traps that catch people doing this by hand:

  • Timestamps are not Unix time. Messages stores nanoseconds since 2001-01-01, so you need datetime(message.date/1000000000 + 978307200, 'unixepoch').
  • text is often NULL. Modern messages store their content in attributedBody, a serialised Apple typedstream, not in the plain text column. Decoding it properly is the hard part of this whole problem, and naively treating the binary as UTF-16 produces garbage that looks almost right.
  • Open it read-only. Use file:...?mode=ro so a stray query can never write to your live Messages database.

If you want this route done properly rather than by hand, imessage-exporter is free, open source and handles the typedstream decoding correctly.

Method 3: Export to an archive (what most people actually want)

The outcome most people are after is a folder they can keep: the whole conversation, readable without special software, with the photos and videos intact.

That means an export that produces:

  • Every message from both sides, in order, with timestamps.
  • Every attachment copied out at original quality, not resized into a document.
  • A format that does not depend on the tool that made it. Plain HTML, JSON and Markdown all qualify. A proprietary database does not.

Tools in this category include imessage-exporter, iMazing, Decipher TextMessage, and Message Album, which made this site. Message Album’s particular emphasis is the last point: the export is a self-contained offline website with no framework, CDN, external font or server, plus a manifest of SHA-256 checksums, on the theory that the thing you are saving should not stop working because a dependency went away.

Getting history that never synced to your Mac

This is the step most guides skip, and it is often the reason an export comes out incomplete.

Your Mac only has the messages that synced to it. If the conversation started before you owned that Mac, or “Messages in iCloud” has offloaded older attachments, exporting from the Mac’s own library will silently miss things.

The fix is to export from an iPhone backup instead:

  1. Connect the iPhone or iPad and open Finder.
  2. Select the device in the sidebar.
  3. Choose Back Up Now. Encrypted and unencrypted backups both contain Messages. Tick Encrypt local backup if you also want Health and other protected data.
  4. Point your export tool at that backup rather than at the Mac’s library.

The backup contains what is on the phone, which is usually more than what reached the Mac.

How to tell whether an export is complete

Ask one question of any tool you use: what does it do when something is missing?

Attachments that were never downloaded locally, and Apple-private message payloads that cannot be decoded, are both normal. A tool that reports them as explicit warnings lets you know what you have. A tool that drops them silently leaves you with an archive that looks complete and is not, and you will not find out until the day you go looking for a specific photo.

Check the count too. If a tool tells you how many messages it read from the source and how many it wrote to the output, those two numbers should match or the difference should be explained.

What to do with the archive afterwards

An archive that exists in one place is not saved, it is staged. Copy it somewhere else: an external disk, another machine, or cloud storage of your choice. Because a good export is an ordinary folder of ordinary files, this is just copying a folder.

If your export includes checksums, keep the manifest with it. It is the only thing that lets you confirm, in five years, that the copy you are looking at is intact.