ChatGPT vs Claude vs Gemini export formats: what’s in each file

Updated · By Chatelope (Hilo Inc)

All three assistants let you download your history, but the files look nothing alike. ChatGPT gives you a tree of messages in JSON, Claude a flat JSON list, and Gemini an HTML activity log with no conversations at all. This reference describes each format as it appeared in real exports in 2026, and how Chatelope turns them into one library. None of the vendors publishes a schema, so treat the details as a snapshot.

At a glance

ChatGPTClaudeGemini
ArchiveZIPZIPZIP or TGZ (Google Takeout)
Chat fileconversations.jsonconversations.jsonMy Activity/Gemini Apps/My Activity.html
FormatJSON arrayJSON arrayHTML activity log
Conversation IDconversation_iduuidNone
Titletitlename (sometimes empty)None
TimestampsUnix seconds (create_time, update_time)ISO 8601 (created_at, updated_at)Text, e.g. “13 Feb 2026, 10:20:42 WET”
Model per messageYes (metadata.model_slug)NoNo
Edits and regenerationsKept as branches in a message treeFlat list of messagesEach prompt is a separate entry
AttachmentsUploaded and generated files in the ZIP, linked by file IDExtracted text of attachments; other files by name onlyUploaded and generated files in the same folder, linked from the HTML
Other fileschat.html, user.json, shared_conversations.json, message_feedback.jsonprojects.json, memories.json, users.jsonNone for chats (Gems are a separate Takeout product)

ChatGPT: conversations.json

Each conversation keeps its messages in a mapping object: a tree of nodes, each with a parent and a list of children. Editing a prompt or regenerating an answer adds a branch rather than replacing the message. current_node points at the last message of the branch you were viewing. Abbreviated, with placeholder values:

[
  {
    "conversation_id": "…",
    "title": "…",
    "create_time": 1767273642.07,      // Unix time, seconds
    "update_time": 1767273700.51,
    "current_node": "<message id>",    // the branch you last saw
    "gizmo_id": "g-p-…",               // set for project or custom GPT chats
    "is_archived": false,
    "mapping": {
      "<message id>": {
        "parent": "<message id>",
        "children": ["<message id>"],
        "message": {
          "author": { "role": "user" },
          "create_time": 1767273642.07,
          "content": { "content_type": "text", "parts": ["…"] },
          "metadata": { "model_slug": "…" }
        }
      }
    }
  }
]
  • Roles are user, assistant, system and tool. Many system messages are hidden in the ChatGPT interface and flagged as such in metadata.
  • content_type is usually text, but also code, multimodal_text (text plus images or audio), execution_output, reasoning and browsing variants.
  • Images and audio appear as asset pointers (file-service:// or sediment://) that refer to files elsewhere in the ZIP.
  • Chats in a project or with a custom GPT have a gizmo_id. Project names are not in the export.
  • Web citations are kept in each message’s metadata.

Claude: conversations.json

Claude’s export is simpler: one object per conversation with a flat chat_messages list in order. Abbreviated, with placeholder values:

[
  {
    "uuid": "…",
    "name": "…",                        // can be empty
    "summary": "…",
    "created_at": "2026-02-13T10:20:42.000000Z",
    "updated_at": "2026-02-13T10:25:03.000000Z",
    "account": { "uuid": "…" },
    "chat_messages": [
      {
        "uuid": "…",
        "sender": "human",               // or "assistant"
        "created_at": "2026-02-13T10:20:42.000000Z",
        "text": "…",
        "content": [ { "type": "text", "text": "…" } ],
        "attachments": [ { "file_name": "…", "extracted_content": "…" } ],
        "files": [ { "file_name": "…" } ]
      }
    ]
  }
]
  • sender is human or assistant.
  • content is a list of blocks. Besides text you’ll see tool_use and tool_result (web search, artifacts and other tools), and thinking blocks for extended thinking.
  • Attachments carry their extracted text (extracted_content). Other files are listed by file name only; the files themselves are not in the ZIP.
  • The model used is not recorded.
  • projects.json holds your projects (name, description, instructions and documents) and memories.json your saved memory.

Gemini: Google Takeout My Activity.html

Gemini chats are exported as part of your Google activity, not as conversations. Every prompt and response is its own entry in a long HTML page.

Takeout/
  My Activity/
    Gemini Apps/
      My Activity.html     <- one entry per prompt and response
      (images and files you uploaded or generated)

Each entry in My Activity.html:
  Prompted <your prompt>
  <date and time, e.g. 13 Feb 2026, 10:20:42 WET>
  <Gemini's response as HTML>
  Products: Gemini Apps
  • There are no conversation IDs or titles, so you can’t tell from the file which prompts belonged to the same chat.
  • Times are written out as text with a time zone abbreviation, not as machine-readable timestamps.
  • Files you uploaded and images Gemini generated sit next to the HTML file and are linked from it.
  • Only activity Google still holds is exported. By default Gemini Apps activity older than 18 months is deleted.
  • The separate “Gemini” product in Takeout exports your Gems, not your chats.

How Chatelope reads each format

Chatelope converts all three into the same structure of conversations and messages, then skips anything already in your library, so importing a newer export only adds new chats.

  • ChatGPT: follows current_node back to the first message, so you get the branch you last viewed; other branches are not imported. Hidden system messages are skipped, and model names, images, audio transcripts and web citations are kept.
  • Claude: keeps text, summarises tool calls and their results, and adds attachment text to the message. Thinking blocks are not imported.
  • Gemini: groups entries less than five minutes apart into one conversation and titles it with the first prompt. Uploaded files and generated images are attached to their messages.

Sources

Search all your AI chats in one place

Import your ChatGPT, Claude and Gemini history into Chatelope. It’s free.

Import your conversations

Frequently asked questions

Is there an official schema for ChatGPT’s conversations.json?

No. OpenAI does not publish one. The structure described here comes from real exports and can change.

Why doesn’t my Gemini export have conversations?

Google exports Gemini chats as activity: one entry per prompt and response, with no conversation IDs or titles. Tools have to group entries back into chats, for example by time.

Which export includes the model that answered?

Only ChatGPT’s, in each message’s metadata.model_slug. Claude and Gemini exports do not record the model.

ChatGPT, Claude and Gemini are trademarks of their respective owners. Chatelope is not affiliated with OpenAI, Anthropic or Google.