Export as structured JSON
Alongside the seven document formats, the file grid — and each message's inline Export file menu — offers a JSON export. Unlike the others, JSON isn't a finished document to read: it's the conversation as machine-readable data, meant for developers who want to feed a chat into a script, a database, or another tool without scraping the page themselves.
The file is a single pretty-printed JSON object — a block of metadata about the conversation, followed by a flat list of its messages.
- Conversation metadata —
schema(a versioned identifier, currentlyai-chat-extractor/conversation@2, so a consumer can recognize the format and its version),site,title,url,exported_at(an ISO timestamp),content_format(alwaysmarkdown), andmessage_count. messages— an ordered array, one entry per message, each carrying itsindex, itsrole(who spoke —userorassistant), and two views of the text:content, the full message as Markdown, andcontents, that same message split into typed parts.
The two views serve two kinds of consumer. content is the whole message as one Markdown string — everything a simple script needs. contents breaks it into an ordered list of typed segments, so a pipeline can pick out or drop parts by kind without re-parsing the Markdown: text for prose, thinking for a model's reasoning block, code for a fenced code block (with an optional language), image for a picture (with its url and alt text — whether it was written as Markdown or as an HTML tag), and table for a Markdown table, split into its headers and rows so a consumer gets real columns instead of a block of pipe characters. AI Chat Clipper only emits a segment type it can identify honestly from the conversation — it will not invent structure that isn't there. Citations, for instance, arrive as ordinary inline links with no block of their own, so there is deliberately no separate sources type.
A short assistant reply that contains a code block exports like this:
{
"schema": "ai-chat-extractor/conversation@2",
"site": "claude",
"title": "Reversing a string",
"url": "https://claude.ai/chat/…",
"exported_at": "2026-07-18T10:32:00.000Z",
"content_format": "markdown",
"message_count": 2,
"messages": [
{ "index": 0, "role": "user", "content": "How do I reverse a string in Python?",
"contents": [ { "type": "text", "text": "How do I reverse a string in Python?" } ] },
{ "index": 1, "role": "assistant", "content": "Use a slice:\n\n```python\ns[::-1]\n```",
"contents": [
{ "type": "text", "text": "Use a slice:" },
{ "type": "code", "language": "python", "text": "s[::-1]" }
] }
]
}