Chat export viewer
Read a conversation export from ChatGPT, Claude or a list of messages: turns, roles, sizes and a plain transcript.
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
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
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
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
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.