ChatArchive is a Chromium extension for exporting conversations from modern AI chat products into clean local files. It is designed around per-platform adapters, layered extraction strategies, and diagnostics that make breakages easier to detect and repair when sites change.
The project currently focuses on reliable export, readable Markdown, and maintainable extraction logic rather than one-off scraping hacks.

Export chats from ChatGPT, Gemini, Claude, Perplexity, Grok, DeepSeek, Mistral, HuggingChat, Meta AI, Poe, Copilot, Phind, and You.com into clean Markdown, Obsidian, PDF, HTML, text, JSON, and CSV files without sending your data to a backend.
Website · Download latest release · Load unpacked in Chromium · See supported platforms
.zip from GitHub Releases.chrome://extensions.Developer mode.Load unpacked and select the extracted folder.
Stop & Save support for long-running DOM exports{platform}, {title}, {date}, {time}, {source}, {strategy}, {count}| Platform | Status | Primary extraction path |
|---|---|---|
| ChatGPT | Supported | state, fallback dom |
| Gemini | Supported | state, fallback dom |
| Claude | Supported | api, fallback dom |
| DeepSeek | Supported | api, fallback dom |
| Perplexity | Supported | page or dom |
| Grok | Supported | dom |
| Mistral | Supported | dom |
| HuggingChat | Supported | dom |
| Meta AI | Supported | dom |
| Poe | Supported | dom |
| Copilot | Supported | page (shadow DOM) |
| Phind | Supported | dom |
| You.com | Supported | dom |
Platforms with API or state-backed extraction are generally more stable than DOM-only platforms.
Most AI chat exporters break for the same reason: they depend on a single fragile set of selectors. This repo takes a more durable approach:
That structure does not prevent website breakage, but it makes breakage faster to diagnose and cheaper to repair.
Ctrl+Shift+S on Windows/Linux, Command+Shift+S on macOSapi or state, switching tabs is usually much safer.dom, Chromium may throttle background tabs.Stop & Save to save the portion captured so far.src/popup/: popup UI and orchestrationsrc/content/: adapter discovery, extraction logic, formatting, and export generationsrc/background/: background command relay for stop-and-savetests/fixtures/: saved DOM snapshots used for regression coveragetests/: Node-based extraction tests using jsdomscripts/: compatibility summaries and live smoke toolingnpm install.npm test.manifest.json, popup.html, or files under src/.npm run package:extension
Creates dist/chatarchive-<version>.zip.v1.13.0 triggers .github/workflows/release.yml, which tests the repo, builds the extension zip, and publishes a GitHub release.npm test
Runs fixture-based extraction tests with jsdom.npm run test:live-smoke
Runs Playwright-based live smoke checks against real logged-in pages when secrets or local environment variables are configured.The scheduled workflow in .github/workflows/daily-compatibility.yml runs in two layers:
To enable live smoke checks, configure these repository secrets:
SMOKE_CHATGPT_URLSMOKE_CHATGPT_COOKIESSMOKE_GEMINI_URLSMOKE_GEMINI_COOKIESSMOKE_PERPLEXITY_URLSMOKE_PERPLEXITY_COOKIESCookie secrets may be either:
name=value; other=valueBefore running the live suite locally, install the browser dependency:
npx playwright install chromium
This matters because a chat exporter should be auditable and easy to inspect.
MIT. See LICENSE.
Contributions are welcome, especially around:
See CONTRIBUTING.md and ROADMAP.md for current expectations and direction.
The project is ready for public iteration, but website extraction is an ongoing maintenance problem by nature. Expect adapter updates over time as platforms change their DOM, APIs, and page-state structures.