CommunicationOS

Exports·11 August 2026·9 min read·Adam Albastov

How to export your Instagram and Messenger conversations

The Meta Accounts Center download, step by step, plus the parts the interface does not warn you about: no per-thread scope, re-encoded media, mojibake in the JSON, and no export at all from Business Suite.

The short answer

Meta provides a self-service tool for downloading your Instagram direct messages and Facebook Messenger conversations through the Accounts Center. The export delivers JSON or HTML files holding message text, timestamps, and sender names, plus folders of voice notes and images. You cannot pick a single conversation to export. Text encoding often mangles non-ASCII characters. Any message deleted before you request the download is missing from the folder.

How to request the download from Meta

The export tool lives inside the Meta Accounts Center. Open it in a desktop browser at accountscenter.meta.com, or reach it from the settings screen of the Instagram or Facebook mobile app.

From the Accounts Center menu, select "Your information and permissions", then click "Download your information". The interface offers a complete copy of everything Meta stores about your accounts, or a custom export where you choose data types. Select the custom option so that messages come separately from activity logs, ad tracking files, and profile changes.

The configuration screen asks for four things.

  1. Accounts. Tick the Instagram and Facebook profiles to pull data from.
  2. Date range. Choose your complete account history or a custom window such as the previous calendar month.
  3. Format. Select JSON to write code against the files, load them into a database, or import them into another shared inbox. Select HTML only to click through the files in a browser, because the markup is not a stable contract and a parser built against it breaks when Meta changes a class name.
  4. Media quality. Meta offers high, medium, and low. Pick high. The low setting compresses images hard, and the screenshot or receipt that made you want the export is the first thing it ruins.

Meta asks for your account password when you submit the request. Processing runs on Meta's servers in the background and arrives as several numbered zip files. Meta sends a notification when the archives are ready.

You enter your password a second time to download the zip files. The download link does not stay live indefinitely, so unpack the archives when the notification arrives rather than at the end of the week.

What the export contains and what it leaves out

The archive organises communication records into an inbox directory, where each conversation has its own folder named after the participant.

A conversation folder holds one or more files named message_1.json, message_2.json, and upward as the conversation grows. Three subfolders sit alongside the JSON files for binary media: photos, videos, and audio_files. The JSON records point at those media files with relative paths.

inbox/
  mayachen_123456789/
    message_1.json
    message_2.json
    photos/
      photo_001.jpg
    audio_files/
      audio_001.mp4
    videos/

Inside each JSON file, messages appear as objects holding a sender_name, an epoch millisecond integer named timestamp_ms, and a string field called content when the message has plain text. Shared links, image attachments, call entries, and emoji reactions populate separate keys. Voice messages appear as audio files in the audio subfolder with no transcript beside them.

In the Meta export Missing from the Meta export
Message text and timestamps Messages deleted by either party
Voice note audio files Transcripts of voice recordings
Photos and video attachments Messages sent in vanish mode
Reactions and share links Unsent messages
Call entries with duration Audio of the call itself
The whole account message history A single chosen thread

The export leaves out anything removed from the platform before the download ran. When a customer unsends a message or deletes a text from the thread, Meta removes that item from your copy too. Vanish mode messages do not appear at all. Phone and video calls arrive as flat entries carrying a duration and no content.

Media is re-encoded to the quality you picked. High is the best the export offers, which is not the original file that was sent to you.

The scope problem

Meta does not let you pick single conversations. You can filter the export down to messages, and then you receive every thread on that account.

That creates friction during a customer data request. Under data privacy law a customer can ask to see the personal information your business holds about them. The Meta export you download to answer that request bundles that customer's messages with every other conversation on the account. Forwarding the raw export would expose confidential records, so you unpack the archive, find that person's folder, and extract only their data before you send anything.

Instagram direct messages and Facebook Messenger threads sit on separate sides of the platform. Talking to the same client on both means two independent exports through the Accounts Center. The two archives use different directory patterns and different ID formats, so reconciling one customer's timeline is manual work.

Fixing mangled text encoding

Meta exports carry a long-standing encoding bug. The platform stores text as UTF-8, and the export pipeline escapes string bytes as if they were Latin-1.

Accented characters and international alphabets therefore turn into garbled text, a problem known as mojibake. A message containing "café" appears in the JSON file as café. Names with non-Latin characters, currency symbols, and emoji expand into multi-character runs of punctuation. Parsing the raw JSON as-is puts a wrong spelling on every accented name in your customer list.

To restore the original text, encode the string back to raw bytes with Latin-1, then decode those bytes as UTF-8.

The Python script below walks a thread directory, fixes the encoding on sender names and message text, and sorts the messages in time order:

import json
from pathlib import Path

def unmangle(text: str) -> str:
    try:
        return text.encode("latin-1").decode("utf-8")
    except (UnicodeEncodeError, UnicodeDecodeError):
        return text

def read_thread(folder: Path) -> list[dict]:
    messages = []
    for path in sorted(folder.glob("message_*.json")):
        data = json.loads(path.read_text(encoding="utf-8"))
        for message in data.get("messages", []):
            messages.append({
                "at": message["timestamp_ms"],
                "from": unmangle(message.get("sender_name", "")),
                "text": unmangle(message.get("content", "")),
            })
    messages.sort(key=lambda m: m["at"])
    return messages

The try block in unmangle stops the script crashing. Some strings inside the export are already valid UTF-8, and re-encoding those raises an exception, which the handler catches before returning the input unchanged.

The limits of business accounts and APIs

Many businesses handle customer messages through Meta Business Suite rather than the consumer mobile apps. Business Suite brings Instagram Direct and Facebook Page messages into one place, and it has no bulk export button for team conversations. The Page inbox is the same.

Developers building internal tools reach for the official Messenger Platform API, which is not an archive retrieval tool either. Standard API access runs inside a 24-hour service window that follows the customer's latest message. The conversations endpoint returns recent threads rather than a multi-year history, so you cannot rebuild your record through it.

The self-service export stays tied to the personal Meta profile that administers the page. With three staff members answering direct messages for your store, the export reflects only what that one profile could see. There is no team-wide export and no per-agent attribution.

Managing team inboxes and continuous archives

For a business that takes orders and answers customers on Meta channels, run an export through the Accounts Center today. Store the archive somewhere the company controls rather than on the laptop of whoever holds the Instagram login, because the person holding that login can walk out with it. The archive is a point-in-time snapshot of past orders and supplier discussions, and it is the only copy Meta gives you at no cost.

A manual zip download is a snapshot rather than a record-keeping system. It cannot help when a counterparty changes an agreement, because the deleted and edited messages are already gone from the next export you run.

A continuous archive handles history differently. Capture happens at receipt, the original version of each message is kept, and later edits and deletions are recorded as separate events with their own timestamps. CommunicationOS runs that capture across 19 networks, holding Instagram Direct, Facebook Messenger, WhatsApp, and email in one searchable timeline, with voice notes transcribed on the way in. The download you have already requested is not wasted. Upload the Accounts Center archive and its threads join the same index as the messages arriving live, so Instagram Direct and Facebook Messenger read as one timeline per person rather than two archives you match up by hand. The conversation history architecture covers the store, and the data export documentation covers retrieval. Plans start at USD 39 a month, priced per connected account, with teammates included on every tier, on the pricing page.

Bring your message history into one inbox

Connect an account for new messages, then upload an archive or authorise a supported migration for earlier history. Voice notes are transcribed and document text is read on the way in.

No card required. We reply with an onboarding slot and a connection guide.

Talk to us