claude-chat-exporter is a free, open source ai interaction & interfaces project written in JavaScript and released under MIT. It has 690 GitHub stars, 79 forks and 1 open issues, and was last pushed 9 days ago. On this registry it ranks #72 of 76 tracked projects in AI Interaction & Interfaces, with 5 head-to-head comparisons available. It gained 3 stars over the last 3 tracked days.

What is claude-chat-exporter?

claude-chat-exporter is a browser-based, privacy-first exporter that turns Claude.ai conversations into clean Markdown files with their artifacts, attachments and timestamps intact, built for people who archive chats into an Obsidian vault or feed them into a RAG pipeline.

What it is

claude-chat-exporter is a client-side JavaScript tool, MIT-licensed, delivered as a bookmarklet and as a script you can run yourself. It sits in the browser alongside claude.ai instead of behind a server: the only network call it makes for a conversation goes to Claude's own backend, authenticated by the session cookie you already hold, and it stores nothing. It reads Claude's internal conversation API at /api/organizations/{orgId}/chat_conversations/{conversationId}, which returns the conversation title and every message.

The concrete problem is that Claude.ai offers no clean export of its own. Copying a conversation by hand loses tables, math, code, artifacts, charts and uploaded files, and HTML-scraping suffers the same loss because it converts rendered output back into markup. claude-chat-exporter replaces both by reading Claude's own source Markdown straight from the API, and it leans on a stable data contract rather than CSS selectors, which is the advertised reason it survives UI changes.

Key capabilities

  • One-click export through a “📥 Claude Export” bookmarklet dragged from the install page; clicking it on a claude.ai conversation downloads a .md file, with no console and no copy-paste.
  • Reads Claude's source Markdown from the internal API instead of parsing HTML, keeping tables, math, code and lists byte-perfect.
  • Exports artifacts, created files and charts, diagrams and widgets as fenced code blocks, in place and in order, using each artifact's final version.
  • Embeds uploaded images, links documents and inlines text files so exports stay self-contained.
  • Writes YAML frontmatter (title, source, model, export date) plus one # heading per turn — # Human — … and # Claude — … — so Claude's own ## and ### content nests beneath it.
  • Reconstructs the active branch by walking the message tree from the current leaf up its parent chain, so regenerated responses and long, partly rendered conversations export in full and in order.
  • Adds per-message timestamps for both human and Claude turns, and names the file from the conversation title returned by the API.

Who uses it and how

  • Non-developers keep the bookmarklet on the bookmarks bar and export a conversation in one click, explicitly without a console and without copy-paste.
  • Obsidian users drop the files into a vault, where the frontmatter and per-turn headings read as a finished note with no reformatting.
  • RAG and AI pipeline builders ingest the same structure, so conversations chunk cleanly instead of arriving as an unstructured dump.
  • Archivists and backup-minded users depend on full-branch, correctly ordered export, which matters in long conversations that only partly render on screen.
  • Privacy-sensitive users get an export that uploads nothing and stores nothing, with the only conversation request going to Claude's own backend; the bookmarklet shows an update notice when a newer version is published.

Getting started

Open the one-click install page at https://agarwalvishal.github.io/claude-chat-exporter/ and drag the “📥 Claude Export” button onto the bookmarks bar, then open any conversation on claude.ai and click the bookmark to download the .md file. Anyone who prefers to run it directly can use the console usage documented in the README.

How it compares

The facts provided list no paid products that this project replaces and name no comparable export tool, so on the available evidence claude-chat-exporter stands alone in this registry. The contrast it does draw is architectural: the whole export runs in the browser over your existing Claude session rather than through a service of its own.

When to use it — and when not

A self-hoster operates almost nothing here: no database, no object storage and no SMTP, because the tool has no server of its own and calls only Claude's backend. The cost of that design is a hard dependency on Claude's internal API, which the README says changes without notice, so its usefulness rests on continued maintenance funded through sponsorship — anyone who needs a formally supported, versioned export channel should not rely on it. It also fits poorly for people who cannot use a bookmarklet or run a script in the browser console, the only two delivery methods documented.

project readme (upstream, from github) — read inline

Claude Chat Exporter

A privacy-first tool that exports your Claude.ai conversations to clean Markdown. It runs entirely in your browser — no server of its own, nothing uploaded, no tracking.

Everything comes through — tables, math and code at full fidelity, plus artifacts, created files, charts and attachments — all read directly from Claude's own API. Exports carry YAML frontmatter with one heading per turn, so they drop straight into an Obsidian vault or a RAG pipeline.

Install the one-click bookmarklet

Claude's internal API changes without notice, and someone has to keep up.
Sponsoring this project is what keeps it maintained. More →

⚡ One-Click Export (Bookmarklet)

The easiest way — no console, no copy-paste, works for non-developers too:

  1. Open the one-click install page »
  2. Drag the “📥 Claude Export” button onto your browser's bookmarks bar.
  3. Open any conversation on claude.ai and click the bookmark — your .md file downloads automatically.

The bookmarklet is just this repository's open-source script wrapped into a link. It runs entirely in your browser — the tool has no server of its own, the only network call for your conversation is to Claude's own backend, and it stores nothing. The bookmarklet also checks for updates and shows an “update available” notice when a newer version is published, so you can re-drag to grab the latest.

Prefer to run it yourself? See Usage (Console) below.

Features

  • 🎯 Perfect Markdown Fidelity - Reads Claude's own source markdown from its API — no HTML parsing, no conversion. The result is a clean, faithful document that reads beautifully on its own
  • 📈 Complete Element Support - Tables, math, code, lists, complex formatting — everything, byte-perfect
  • 🧩 Artifacts, Files & Widgets - Artifacts (their final version), created files, and charts/diagrams are exported as clean fenced code blocks, in place and in order
  • 📎 Attachments - Uploaded images embedded, documents linked, and text files inlined — exports stay self-contained
  • 🗂️ Obsidian- & RAG-ready - YAML frontmatter + one heading per turn means it drops straight into an Obsidian vault or an AI/RAG pipeline — not just a plain dump (more below)
  • 📊 Complete & In Order - Every message on the current branch, correctly ordered — even in long conversations that only partly render on screen
  • 🕐 Timestamps - Per-message timestamps for both human and Claude turns, from Claude's API
  • 🔒 Private by Design - No servers, no tracking; runs in your browser and only ever calls Claude's own backend, over your existing session
  • 📁 Smart Filename Generation - Uses the actual conversation title from the API
  • 🛡️ Robust to UI Changes - Reads a stable data contract, not fragile CSS selectors

How It Works

It's a single fetch, transformed into markdown:

  1. Fetch - Calls Claude's internal API for the current conversation (/api/organizations/{orgId}/chat_conversations/{conversationId}), authenticated by your existing session cookie. The response contains the title and every message.
  2. Order - Reconstructs the conversation's current branch by walking the message tree from the current leaf up its parent chain (so a regenerated response exports exactly what's on screen).
  3. Extract - Walks each message's content blocks in order: text blocks (Claude's original source markdown) plus special elements — artifacts, created files, and charts/diagrams/widgets — rendered in position; hidden/system messages are skipped.
  4. Output - Writes a single markdown file: YAML frontmatter (title, source, model, export date) followed by one #-level header per turn (# Human — … / # Claude — …) so Claude's own ##/### content nests correctly beneath it. The result is a clean, faithful document that reads perfectly on its own — and the same structure makes it drop-in ready for Obsidian & AI/RAG pipelines.

Branches / regenerated responses: the export follows the branch Claude is currently showing — its active leaf — not necessarily the newest one. If you've regenerated a response and want to export a different branch, switch to that version in Claude first (the ‹ › arrows on a regenerated message), then run the exporter — the switch takes effect immediately, no page reload needed.

Why read the API instead of the page?

Claude generates markdown, and the page only ever holds a small window of a long conversation in the DOM. Copy buttons hand over that markdown faithfully — but the DOM was still needed to find each message, work out who said it, and read the conversation title, and each of those is a CSS selector waiting to break. Reading the API gets every message's source markdown directly, along with the elements no copy button can reach.

❌ Driving the page (DOM + copy buttons):
- Only sees the messages currently rendered → long chats export partially
- Pairs human and Claude turns by index → a regenerated branch can misalign them
- Reaches only what has a copy button → no artifacts, files or attachments
- Couples to CSS selectors that change constantly → a maintenance nightmare

✅ Reading Claude's API:
- Complete conversation, always, in the order it appears on screen
- Claude's original source markdown → perfect fidelity, zero conversion
- Artifacts, created files, widgets and attachments come along too
- A stable data contract instead of brittle selectors

Usage (Console)

Prefer running it yourself, or want to tweak the script? Run it straight from the browser console:

  1. Open your conversation with Claude in your web browser.
  2. Open the browser's developer console:
    • Chrome/Edge: Press F12 or Ctrl+Shift+J (Windows/Linux) or Cmd+Option+J (Mac)
    • Firefox: Press F12 or Ctrl+Shift+K (Windows/Linux) or Cmd+Option+K (Mac)
    • Safari: Enable the Develop menu in preferences, then press Cmd+Option+C
  3. Copy the entire script in the file claude-chat-exporter.js and paste it into the console.
    • First time? Chrome, Edge, and Firefox block pasting into the console as a safety measure. If you see that warning, type allow pasting, press Enter, then paste the script again. (Only needed once per browser profile — the one-click bookmarklet skips this entirely.)
  4. Press Enter to run the script.
  5. The script shows a small status indicator and automatically downloads a file named {conversation-title}.md (conversation-title being the Claude conversation title from the API).

Complete Element Support

Because this reads Claude's source markdown directly, it automatically handles:

  • Tables - Perfect markdown table formatting
  • Math - LaTeX and inline math notation
  • Code blocks - With proper language detection
  • Lists - Nested lists with correct formatting
  • Links - All link types and formats
  • Formatting - Bold, italic, strikethrough, etc.
  • Blockquotes - Proper quote formatting
  • Headers - All heading levels
  • Artifacts - Exported as a labelled fenced code block (final version), in place
  • Created files - create_file outputs, as a fenced code block with the filename
  • Charts / diagrams / widgets - visualize widgets exported as code (mermaid renders natively in Obsidian)
  • Attachments - Images embedded, documents linked, text files inlined
  • Future elements - Automatically supported

File Output

  • Filename: {conversation-title}.md (from the API title, else claude_conversation)
  • Format: YAML frontmatter + #-per-turn headers; bodies are Claude's own source markdown
  • Content: Complete conversation, in order, with per-message timestamps and inlined text-attachment content
  • Encoding: UTF-8 with standard line endings

Example Output

YAML frontmatter carries document metadata; each turn is an # header so Claude's own ##/### headings nest beneath it. Attachments render above the text (text attachments are blockquoted, label and all); artifacts, created files, and widgets render in place as labelled fenced code blocks:

---
title: "Sorting algorithm comparison"
source: "https://claude.ai/chat/…"
model: "claude-opus-4-…"
exported: 2026-02-23
---

## Human — Feb 23, 2026, 10:30 AM

> **Attachment: requirements.md · text/markdown · 1.2 KB**
>
> # Requirements
> Compare the common sorting algorithms in a table.

Can you create a comparison table, and a small React widget to visualise it?

## Claude — Feb

readme truncated — read the full docs on github

Frequently asked questions

Is claude-chat-exporter free to use?

claude-chat-exporter is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does claude-chat-exporter do?

One-click, privacy-first exporter for Claude.ai chats — clean Markdown with artifacts and attachments, ready for Obsidian and RAG.

What is claude-chat-exporter written in?

claude-chat-exporter is primarily written in JavaScript. Its source is publicly available at https://github.com/agarwalvishal/claude-chat-exporter, and it has 690 GitHub stars.