Skip to content
100% local

AI chat log parser

Cleans a pasted ChatGPT or Claude transcript into a tidy user/AI dialogue.

Input
Output

AI chat log parser

Copying a conversation out of ChatGPT's or Claude's web interface rarely comes out clean. Along with the actual dialogue you get button labels like "Copy" and "Regenerate", stray timestamps, and model names sitting on their own line — clutter that makes the transcript awkward to read, share in a support ticket, or paste into a document. This tool strips that interface noise and reassembles what's left into a clear, alternating conversation.

It recognizes the speaker labels these tools normally show — "You", "ChatGPT", "Claude", "Assistant" and a few generic equivalents — whether they sit alone on a line or lead straight into the first sentence ("You: how do I…"). If a paste has lost its labels entirely, the parser falls back to treating each blank-line-separated block as one turn and alternates user and AI starting with the user, which is how most transcripts read once the chrome is gone. Short UI-only lines — "Copy", "Copy code", "Regenerate", "Retry", bare clock times — are dropped before either pass runs, so they never end up misread as part of the dialogue.

By default the output is Markdown — **User:** and **AI:** turns separated by blank lines — ready to paste into a doc, a blog post, or a bug report. Switching on the JSON output option instead produces an array of `{ role, content }` objects in the same order, useful for feeding a transcript into a script, an eval dataset, or another tool in a pipeline.

Everything runs in your browser: pasting, parsing and formatting happen locally in JavaScript, and the transcript is never uploaded or sent anywhere.

FAQ

How does the tool know which lines are the user and which are the AI?
It looks for common speaker labels — "You", "ChatGPT", "Claude", "Assistant" — on their own line or followed by a colon, and starts a new message each time one appears. If the pasted text has lost its labels, it falls back to alternating turns at each blank line, starting with the user.
What counts as "noise" that gets removed?
Short interface lines that aren't part of the conversation — "Copy", "Copy code", "Regenerate", "Retry", "Share", "Like" — and bare timestamps such as "10:32 AM" sitting alone on a line.
What does the JSON output look like?
An array of objects, `{"role": "user" | "ai", "content": "…"}`, one per turn in the order they appeared — ready to feed into a script, a JSONL eval file, or another tool.
Is my pasted conversation uploaded anywhere?
No. Parsing runs entirely in your browser; the transcript never leaves your device or touches a server.
Does it work with exports from AI chat tools other than ChatGPT or Claude?
Yes — the label list also covers generic terms like "User", "AI", "Assistant" and "Bot", and the blank-line fallback still works when a tool uses labels the parser doesn't recognize, though an unusual export format may need a little manual cleanup afterward.