AI Chat Clipper Help

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 metadataschema (a versioned identifier, currently ai-chat-extractor/conversation@2, so a consumer can recognize the format and its version), site, title, url, exported_at (an ISO timestamp), content_format (always markdown), and message_count.
  • messages — an ordered array, one entry per message, each carrying its index, its role (who spoke — user or assistant), and two views of the text: content, the full message as Markdown, and contents, 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]" }
      ] }
  ]
}