Topic: how to export chatgpt history

How to Export Your ChatGPT History (2026 Guide)

OpenAI hides the export behind two menus and a 30-minute email delay. Here's the exact path, what you get back, and the one gotcha that catches people the first time.

TL;DR

Go to chatgpt.com → click your profile (bottom-left) → SettingsData ControlsExport dataRequest. You'll get an email with a download link in 10–30 minutes. The link expires in 24 hours. The ZIP contains conversations.json (all chats), chat.html (pretty viewer), user.json (account metadata), message_feedback.json, and model_comparisons.json.

Why this matters

Exporting your ChatGPT history is the first step for three different use cases: (1) migrating your data out because you're leaving OpenAI, (2) feeding it into a local tool for search, summarization, or decision extraction (see: extracting decisions), or (3) a GDPR-style "give me everything you have on me" audit. The export is complete and machine-readable, which is rare for chat platforms — Anthropic, Perplexity, and Gemini all ship worse archives. Do the export once a quarter and you have a real audit trail, regardless of what OpenAI does to the UI or API next.

How to approach it

  1. Open ChatGPT in a browser (not the mobile app — the export flow is web-only as of April 2026). Sign in as the user whose history you want.
  2. Click your profile in the bottom-left corner → pick Settings.
  3. Navigate to Data Controls. On Plus and Team plans, this is a top-level tab. On Enterprise and Edu plans, the admin may have disabled self-service export — ask your workspace admin.
  4. Click "Export data" → "Request". You'll see a "This may take up to 30 minutes" notice. In practice it's usually 5–15 minutes for a year of heavy use.
  5. Watch your inbox. OpenAI emails a link from noreply@tm.openai.com. Click it, download the ZIP, unzip.

What's inside the ZIP

Six files. The one that matters is conversations.json:

conversations.json       ← all chats, array of objects
chat.html                ← browsable HTML view (opens in browser)
user.json                ← your profile metadata
message_feedback.json    ← thumbs-up/down you gave
model_comparisons.json   ← any A/B comparison votes
shared_conversations.json ← share-links you created

Each object in conversations.json looks like this:

{
  "title": "Postgres vs MongoDB for metrics",
  "create_time": 1736209400,
  "update_time": 1736209800,
  "mapping": {
    "<msg-id>": { "message": { "author": { "role": "user|assistant" },
                                 "content": { "parts": ["..."] } },
                    "parent": "<prev-id>", "children": [...] }
  },
  "conversation_id": "abc-123"
}

The mapping field is a tree, not a list — edited messages create branches. When processing, walk from the root down each branch and keep only the leaf path (the one you actually ended up reading). Most hand-rolled exporters get this wrong and emit duplicates.

How WhyChose helps

If you're exporting because you want the decisions inside your chats, WhyChose does that parsing for you. Drag conversations.json into the browser, extraction runs client-side, and you get back a structured log of stack picks, pricing calls, and architecture choices. The open-source CLI handles the DAG-flattening and branch-deduping so you don't reimplement it. If you want to roll your own, the regex patterns and JSON Schema are published in patterns.md.

Get early access

Related questions

How big is the export for a year of ChatGPT Plus usage?

Typically 40–200 MB of JSON for a heavy user (15–30 chats/week), after de-dup. The HTML viewer and image attachments inflate it further. A full-year archive with DALL-E images has run 1.2 GB in our testing.

Does the export include custom GPTs and their memories?

Yes — custom GPT conversations appear in the same conversations.json. Memory (the cross-conversation recall feature) ships separately in user.json → memories[]. Custom GPT definitions (the system prompt you wrote) are not included — only your chats with them.

What happens to the download link after 24 hours?

It expires. You have to re-request, which triggers another 10–30-minute wait. Save the ZIP locally the moment you download; re-requesting doesn't preserve a prior checkpoint.

Can I export for a team member?

Only if you're the workspace admin on Team/Enterprise, and only via the Compliance API — the UI path is per-user. Admins should use the v1/organization/exports endpoint; OpenAI's docs cover the auth + rate-limit details.

Further reading