No API keys. No external servers. No dependencies. Works with Team/Business plans that have no built-in export. Your data stays in your browser.
- π€ Multiple export formats β JSON, Markdown, Plain Text, or styled HTML
- π Auto-authentication β uses your existing session, no API key needed
- π Full pagination β exports all conversations, even thousands
- π Smart retry β exponential backoff with jitter on rate limits
- π Token refresh β handles expired tokens mid-export seamlessly
- β‘ Concurrent downloads β configurable parallel downloads (default 3)
- π Live progress β speed, ETA, count, current conversation in real-time
- π Search & filter β export only conversations matching a keyword
- π Incremental export β export only new conversations since last export
- π― Selective export β choose specific conversations to export
- π Dark & light mode β auto-adapts to your system preference
- π‘οΈ Error resilient β continues on failures, reports errors at the end
- πΎ Auto-download β file saves automatically when done
- π§© 5 install methods β extension, userscript, bookmarklet, console, inject
| Format | Extension | Best For |
|---|---|---|
| JSON | .json |
Data analysis, programmatic processing, full fidelity |
| Markdown | .md |
Reading, documentation, version control |
| Plain Text | .txt |
Simple archival, universal compatibility |
| HTML | .html |
Beautiful viewing in browser, sharing, printing |
The HTML export is self-contained with inline CSS and supports both dark and light mode.
Install from the Chrome Web Store.
Or install manually from source:
- Download the latest release ZIP
- Go to
chrome://extensions/ - Enable Developer mode (top right)
- Click Load unpacked β select the extracted folder
- Navigate to chatgpt.com β click the extension icon
- Install Tampermonkey or Violentmonkey
- Click to install: chatgpt-export.user.js
- Navigate to chatgpt.com β a floating widget appears in the bottom-right
- Select your format and click Export All
- Go to the latest release page
- Download
bookmarklet.txtand copy its contents - Create a new bookmark in your browser, paste the contents as the URL
- Click the bookmark while on chatgpt.com
- Go to chatgpt.com and sign in
- Open DevTools: F12 β Console tab
- Copy the contents of
inject.js - Paste and press Enter
- Choose your export format when prompted
- Wait for the file to auto-download
- Navigate to chatgpt.com and sign in
- Click the extension icon in the toolbar
- Choose your export format (JSON, Markdown, Text, HTML)
- Choose your export scope:
- All conversations β export everything
- New since last export β only conversations updated since your last export
- Search by title β filter by keyword
- Click βΆ Export
- Watch the live progress dashboard
- File downloads automatically when complete
- The floating widget appears on chatgpt.com
- Select your format from the dropdown
- Click βΆ Export All
- Monitor progress in the widget
When using the engine programmatically (console/inject), you can customize:
const engine = new ExportEngine({
format: 'markdown', // 'json' | 'markdown' | 'text' | 'html'
concurrency: 5, // parallel downloads (default: 3)
batchSize: 100, // conversations per page when listing
retryAttempts: 3, // max retries per request
retryDelay: 2000, // base retry delay in ms (exponential)
searchQuery: 'react', // filter by title keyword
afterTimestamp: Date.now() - 7 * 24 * 60 * 60 * 1000, // last 7 days
conversationIds: ['id1', 'id2'], // specific conversations only
})| Plan | Built-in Export? | This Tool |
|---|---|---|
| Free | β | β |
| Plus | β | β |
| Team | β | β |
| Business | β | β |
| Enterprise | β (Compliance API) | β |
Does it work with ChatGPT Teams/Business? Yes! That's the primary use case. Team and Business plans have no built-in export feature.
Does it send my data to any external server? No. Everything runs locally in your browser. No data leaves your machine. See our Privacy Policy.
How long does a large export take? Depends on the number of conversations. With default settings (concurrency: 3), expect ~100 conversations per minute. A 1,000 conversation export takes about 10 minutes.
Can I export specific conversations?
Yes. Use the "Search by title" option in the extension, or pass conversationIds when using the engine directly.
Does it export images and files? The JSON export contains URLs to attached files. These URLs may expire over time. Binary content is not embedded.
Will it work if ChatGPT changes their API? The tool uses ChatGPT's internal API. If they change it, we'll update. Star the repo to stay notified.
# Install dependencies
bun install
# Build all formats (extension + standalone + userscript + bookmarklet)
bun run build
# Type check
bun run typecheck
# Run tests
bun run test
# Lint
bun run lint
# Package extension as ZIP
bun run packagesrc/
βββ core/ # Shared export engine
β βββ config.ts # Configuration types and defaults
β βββ event-emitter.ts # Typed EventEmitter implementation
β βββ export-engine.ts # Core export engine
β βββ utils.ts # Logging and utility functions
β βββ index.ts # Public API exports
β βββ formatters/ # Export format implementations
β βββ index.ts # Formatter registry and types
β βββ conversation-parser.ts # ChatGPT conversation structure parser
β βββ json.ts # JSON formatter
β βββ markdown.ts # Markdown formatter
β βββ text.ts # Plain text formatter
β βββ html.ts # Self-contained HTML formatter
βββ extension/ # Chrome Extension (Manifest V3)
β βββ manifest.json
β βββ background.ts # Service worker + badge updates
β βββ content.ts # Content script (runs on chatgpt.com)
β βββ popup/ # Extension popup UI
β βββ popup.html
β βββ popup.css
β βββ popup.ts
βββ standalone/ # Console injection IIFE
β βββ inject.ts
βββ userscript/ # Tampermonkey/Violentmonkey script
βββ chatgpt-export.user.ts
tests/ # Vitest test suite
- Multi-target build: Single TypeScript source β 5 output targets
- IIFE bundles: Each target is a self-contained IIFE (no code splitting)
- Build tool: Bun + Vite in library mode
- No runtime dependencies: Everything is bundled at build time
# Bump version in package.json, then:
git tag v2.0.0
git push origin main --tagsGitHub Actions will automatically:
- Run tests and type checking
- Build all formats
- Create a GitHub Release with all artifacts
- Upload to Chrome Web Store (if secrets configured)
This tool runs entirely in your browser. No data is sent to any external server. We do not collect, store, or transmit any of your conversation data.
See our full Privacy Policy.
This tool accesses your own data through your own authenticated browser session. Under GDPR and UK GDPR (Article 15), you have the right to obtain a copy of your personal data.
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feat/my-feature) - Make your changes with tests
- Ensure
bun run typecheck && bun run test && bun run buildall pass - Submit a pull request
MIT Β© Kyle Tse