Export and archive your Apple Messages chats on Mac

Including attachments and searchable PDFs.

Screenshot of a mobile, messaging application.
Photo by kuu akura


Your Messages history is a shoebox under the bed. Receipts. Confessions. A photo you forgot you sent. A voice note that still has teeth.

If you’re trying to export iMessage chats on a Mac, you’re usually after one of two things. A clean PDF you can hand to someone (or keep for yourself). Or a deep archive that survives upgrades, breakups, and bad timing.

You can do both. You just have to decide whether you want a snapshot or the whole crime scene.

The simple path

Export a single Messages conversation to PDF and make it searchable

Apple documents the basics here: print or create a PDF in Messages on Mac.

Step-by-step: save one chat as a PDF from Messages

  1. Open Messages on your Mac.
  2. Click the conversation you want to export.
  3. In the menu bar, choose File > Print.
  4. In the print dialog, click the PDF button (bottom-left).
  5. Choose Save as PDF.
  6. Name it like you mean it, pick a folder, and click Save.

That PDF is usually searchable immediately because it’s real text, not an image of text. Test it: open the PDF in Preview and press Command-F, then search for a word you know is in there.

What about attachments?

This is where things get moody. Messages can include photos and other items in print view, but this isn’t consistent, and long threads can end up missing context or containing awkward placeholders. If the attachment matters, save it separately.

💡
A practical habit: scroll to the attachment in the chat, then right-click it and choose Save (wording varies by item). Store it beside the PDF in the same folder so the story stays together.

If your PDF isn’t searchable: a macOS Preview OCR workaround

Sometimes you end up with an image-based “PDF” (maybe you used screenshots, or printed from another source). In that case, Command-F won’t find anything. The text is trapped behind glass.

You can still claw it back with macOS Live Text in Preview:

  • Open the PDF in Preview.
  • Try selecting text directly with your cursor. If you can highlight words, you’re fine.
  • If you can’t, zoom in and try again. Live Text is picky.
  • Once you can select words, copy the text into TextEdit (or Pages).
  • Then print that document to PDF:File > Print > PDF > Save as PDF.

It’s not elegant. It’s a confession typed up after the fact. But it gives you a searchable file when you need one fast.

The deep archive

Copy the Messages database and Attachments folder.

If the PDF is a postcard, the archive is the warehouse. This is the route you take when you want everything, including the stuff you didn’t remember existed.

On your Mac, Messages lives in two main places:

  • Database: ~/Library/Messages/chat.db
  • Attachments: ~/Library/Messages/Attachments

There are also sidecar files that matter if the database is active: chat.db-wal and chat.db-shm. Copy them too when they exist.

Safety rules before you touch anything

  • Back up first. Time Machine is fine. A full disk backup is better.
  • Quit Messages before copying. Don’t let it write while you grab files.
  • Don’t edit the database in place. Work on a copy, always.
  • If you use FileVault, treat your archive like a live wire. Encrypt the destination drive or archive file.
  • Consent and law still apply. Exporting chats can expose other people’s private words. Keep it legitimate.

These stories don’t write themselves.

They’re dug up from the bone yard, pieced together in the dark when the rest of the world is asleep. They cost something to tell.

If you want to keep the lights on in this place, if these words are worth more to you than a cheap cup of coffee, then step up. Don’t just be a ghost passing through. Become a member. Keep the ink flowing.

Membership

Step-by-step: locate and copy the archive in Finder

  1. Quit Messages.
  2. In Finder, click Go in the menu bar, then go to /Users/[YOUR_USERNAME]/Library
  3. Open Library, then open Messages.
  4. Copy these to an external drive or a dedicated archive folder:
    • chat.db for sure, chat.db-wal, chat.db-shm if present
    • The folder Attachments

Keep the structure intact. Don’t rename things inside the Attachments folder. The database points to those files like a map to buried money.

Step-by-step: do the same thing with Terminal

If you want fewer surprises, copy with tools that respect metadata.

  • Copy the whole Messages folder to an external drive (example volume name “ArchiveDrive”)
    • rsync -a --protect-args "$HOME/Library/Messages/" "/Volumes/ArchiveDrive/Messages-Archive/"
  • Or copy just the core pieces
    • rsync -a "$HOME/Library/Messages/chat.db"* "$HOME/Library/Messages/Attachments" "/Volumes/ArchiveDrive/Messages-Archive/"
  • Create a zip that preserves Mac metadata
    • ditto -c -k --sequesterRsrc --keepParent "$HOME/Library/Messages" "/Volumes/ArchiveDrive/Messages-Archive.zip"
  • Generate a checksum so you can prove nothing changed later
    • shasum -a 256 "/Volumes/ArchiveDrive/Messages-Archive.zip" > "/Volumes/ArchiveDrive/Messages-Archive.zip.sha256"

Those last two lines are your paper trail. Boring. Beautiful. The kind of boring you want.

Make the archive usable later

Searchable exports, timelines, and optional tools

An archive you can’t search is just weight. You want retrieval. You want answers fast, without digging through folders like a raccoon in a trash can.

Read-only access: keep a working copy for searching

Create a separate “working” folder on your Mac, then copy your archived chat.db into it. When you experiment, you do it there. Not on your only copy.

If you’re comfortable with SQLite, you can inspect the database directly. The built-in sqlite3 is often available on macOS, but versions vary. You can still keep it simple: your goal is usually to export text to CSV, then print or convert to PDF.

A common pattern looks like this (replace YOUR_CHAT_ID after you identify the right chat):

  • List chats: sqlite3 ~/Library/Messages/chat.db "SELECT ROWID, display_name FROM chat;"
  • Export one chat to CSV: sqlite3 ~/Library/Messages/chat.db ".mode csv" ".headers on" "SELECT datetime(m.date/1000000000 + strftime('%s','2001-01-01'),'unixepoch','localtime') AS date, h.id AS handle, m.text FROM message m JOIN handle h ON m.handle_id = h.ROWID JOIN chat_message_join cmj ON m.ROWID = cmj.message_id WHERE cmj.chat_id = YOUR_CHAT_ID;" > chat.csv

Open chat.csv in Numbers. Sort. Filter. Then print to PDF for a readable, searchable record.

Optional: third-party tools when attachments must be in the export

If you need a polished export that pulls in images and files without manual saving, it can be worth using a reputable tool. Keep it optional. Keep your expectations sober.

Treat any third-party app like you’d treat a stranger with your house keys. Read their privacy posture. Use a copy of your data when possible. Don’t rush.

Conclusion

You’re not doing this because you love file formats. You’re doing it because memory is slippery, and proof is heavy.

Use the built-in PDF export when you need a clean record fast. Build the database-and-attachments archive when you need the whole history, intact, and ready for later. Keep backups. Keep copies read-only. Protect the archive like it’s evidence, because sometimes it is.