Text & writing

Chat export viewer

Read a conversation export from ChatGPT, Claude or a list of messages: turns, roles, sizes and a plain transcript.

Chat export viewer
Esc to restore

Your inputs

Conversations can be private. This page reads the file on your device and sends nothing anywhere.

Paste the contents of conversations.json (or one conversation) or choose the file, up to 2 MB.

UTF-8 JSON, NDJSON or GeoJSON up to 2 MB. Files stay on this device.

Results update as you type. Larger files run when you press Update result.

Your result

Your result will appear here.

Sensitive results stay in this page’s memory. Take care when copying or downloading them.

Your inputs stay in this browser. Nothing is uploaded or saved.

A clear answer. Here’s how.

Reads the JSON on this device and recognises three layouts: the ChatGPT data export (a list of conversations, each with a mapping of message nodes that is followed from the current node back to the start), the Claude data export (conversations with chat_messages from “human” and “assistant”), and a plain list or object of messages with role and content, including content given as parts. Hidden and empty messages are left out. The table shows each message with its role, time, length and an estimated token count (see the token estimator for how rough that is), and the transcript can be copied or downloaded. The layouts follow the structure of those exports as understood by the author and have been tested here on built examples, not on every real export, and providers can change them.

How this is checked

4 reference checks passed These 4 cases were run when this page was built, on 20 October 2026, and all reproduce within the stated tolerance. The same cases are part of the automated tests that run on every change to Toolmoz. Engine version 1.

See the checks and where each expected answer comes from
  1. Case 1

    Inputs
    Conversation export (JSON) [{"title":"Garden plan","create_time":1760000000,"current_node":"c","mapping":{"root":{"id":"root","message":null,"parent":null,"children":["a"]},"a":{"id":"a","message":{"author":{"role":"user"},"create_time":1760000001,"content":{"content_type":"text","parts":["How deep should I plant tulip bulbs?"]}},"parent":"root","children":["c"]},"c":{"id":"c","message":{"author":{"role":"assistant"},"create_time":1760000060,"content":{"content_type":"text","parts":["About three times the height of the bulb, so roughly 15 cm for a large one."]}},"parent":"a","children":[]}}}]Show oneConversation number 1
    Expected, and what Toolmoz gave
    Title expected Garden plan, Toolmoz Garden planMessages expected 2, Toolmoz 2Messages from user expected 1, Toolmoz 1Messages from assistant expected 1, Toolmoz 1
    Where the expected answer comes from
    Hand-built export in the ChatGPT layout with a root node, a user message and an assistant message
    Allowed difference
    exact
  2. Case 2

    Inputs
    Conversation export (JSON) [{"uuid":"u1","name":"Trip ideas","created_at":"2026-03-01T09:00:00Z","chat_messages":[{"uuid":"m1","sender":"human","text":"Three places for a weekend in Wales?","created_at":"2026-03-01T09:00:05Z"},{"uuid":"m2","sender":"assistant","text":"Snowdonia, the Gower and Pembrokeshire.","content":[{"type":"text","text":"Snowdonia, the Gower and Pembrokeshire."}],"created_at":"2026-03-01T09:00:20Z"}]},{"uuid":"u2","name":"Recipe","created_at":"2026-03-02T18:00:00Z","chat_messages":[{"uuid":"m3","sender":"human","text":"Quick pancake batter?","created_at":"2026-03-02T18:00:05Z"}]}]Show listConversation number 1
    Expected, and what Toolmoz gave
    Conversations expected 2, Toolmoz 2Messages in all expected 3, Toolmoz 3
    Where the expected answer comes from
    Hand-built export in the Claude layout: two conversations with 2 and 1 messages
    Allowed difference
    exact
  3. Case 3

    Inputs
    Conversation export (JSON) [{"uuid":"u1","name":"Trip ideas","created_at":"2026-03-01T09:00:00Z","chat_messages":[{"uuid":"m1","sender":"human","text":"Three places for a weekend in Wales?","created_at":"2026-03-01T09:00:05Z"},{"uuid":"m2","sender":"assistant","text":"Snowdonia, the Gower and Pembrokeshire.","content":[{"type":"text","text":"Snowdonia, the Gower and Pembrokeshire."}],"created_at":"2026-03-01T09:00:20Z"}]},{"uuid":"u2","name":"Recipe","created_at":"2026-03-02T18:00:00Z","chat_messages":[{"uuid":"m3","sender":"human","text":"Quick pancake batter?","created_at":"2026-03-02T18:00:05Z"}]}]Show oneConversation number 1
    Expected, and what Toolmoz gave
    Title expected Trip ideas, Toolmoz Trip ideasMessages from user expected 1, Toolmoz 1Messages from assistant expected 1, Toolmoz 1Characters expected 75, Toolmoz 75
    Where the expected answer comes from
    Messages from “human” are shown as user; the two messages have 36 and 39 characters
    Allowed difference
    exact
  4. Case 4

    Inputs
    Conversation export (JSON) {"messages":[{"role":"system","content":"Be brief."},{"role":"user","content":[{"type":"text","text":"Hi"}]},{"role":"assistant","content":"Hello!"}]}Show oneConversation number 1
    Expected, and what Toolmoz gave
    Messages expected 3, Toolmoz 3Messages from system expected 1, Toolmoz 1
    Where the expected answer comes from
    A list of role and content messages, with content given as a plain string or a list of text parts
    Allowed difference
    exact

What this shows: the engine reproduces independently worked values for these cases. It does not prove every possible input is right. To test an answer you were given, see how to check a number; to see what is and is not checked across Toolmoz, see the accuracy ledger.