ChatExport — a project by Ahsan Mahmood
Free ChatGPT App (OpenAI Apps SDK / MCP) that exports ChatGPT conversations to Markdown, JSON, PDF, HTML, or text from inside chat, with zero content…
ChatExport runs inside ChatGPT. There is no site to open first and no extension to install.
Getting a long conversation out of a chat product usually means selecting it by hand and pasting it somewhere that loses the structure on the way. The alternatives are an extension reading the page over your shoulder or a service you upload the whole thing to, which is a stranger holding a copy either way.
None of those is what happens here.
You ask for an export and pick one of five formats, and a download card appears in the conversation you were already having.
Markdown, JSON, PDF, HTML or plain text.
Those five are not five versions of one thing. Markdown goes into a notebook, JSON goes into another program, and PDF goes to a person who is never going to open a text file.
The mechanism is the OpenAI Apps SDK over the Model Context Protocol, which is what lets a third-party tool put its own interface inside the chat instead of beside it.
The whole service is one Cloudflare Worker.
A Hono application handles the protocol traffic, and the interface is a single-file React widget embedded as a string in the worker's response. One worker, one response, one file.
Workers-pure means no Node APIs anywhere in it.
That is a real constraint and not a preference. Anything that would ordinarily reach for a Node module has to be done with web platform APIs instead, which is why the encryption helper is written in-house rather than installed.
The interesting part is what is never stored.
There is no database of conversation content. An export is assembled in memory and returned as a base64 file inside the same round-trip that asked for it, so the content exists in the worker for the length of one request and then stops existing.
Two things do persist.
Opt-in metadata, which is the format, the filename, the size and the timestamp, and never any content. Google Drive OAuth tokens, encrypted at rest with AES-256-GCM through the in-house helper.
Those are the only two, and both are named rather than summarised.
A privacy claim is worth exactly as much as the list of exceptions printed under it.
A separate marketing site handles everything a tool living inside a chat cannot do for itself: discovery, search, a blog, an FAQ and the legal pages. It is React on Firebase hosting, and it is what makes the product findable outside the chat window.
All of it runs on free tiers.
What it cost is the surface.
The interface is a widget the host renders and the interaction model belongs to the host, so a product built this way inherits every decision made about that host by people who have never heard of it. Nothing here can change how the conversation around it behaves.
That is the price of being where the work already happens.
The second cost is narrower and sits in the code. A single-file widget embedded as a string is not a shape that grows comfortably, and a Workers-pure rule closes off a large part of the npm ecosystem before the first line is written.
Both were chosen rather than discovered halfway through.
It is at chatgpteai.aoneahsan.com.
Nothing you export is retained, which is an easy sentence to write and is only true here because the design has nowhere to put it.
What it does, and what that costs to build
- Export to Markdown, JSON, PDF, HTML, plain text
- Runs inside ChatGPT via OpenAI Apps SDK / MCP
- Zero conversation-content retention
- Single-file React widget embedded in the worker
- AES-256-GCM-encrypted Google Drive tokens
- Workers-pure architecture (no Node APIs)
- Firebase-hosted marketing site with AEO
Built with
- TypeScript
- Cloudflare Workers
- Hono
- React 19
- Radix Themes
- Vite 8
- Firebase
Worth knowing
- chatgpt
- mcp
- cloudflare-workers
- privacy
- export
- ai
Who built ChatExport?
Ahsan Mahmood built it alone, and it is described and documented at chatgpteai.aoneahsan.com. The protocol handler, the widget, the encryption helper and the marketing site are one person's work. The service itself is TypeScript on a single Cloudflare Worker with Hono handling the requests, and the site beside it is React with Radix Themes and Tailwind on Firebase hosting. Two very different runtimes, one person deciding what each of them is allowed to hold.
Does ChatExport keep a copy of my conversation?
No. There is no database of conversation content anywhere in the design. An export is assembled in memory and handed back as a base64 file inside the same JSON-RPC round-trip that requested it, so the content is present for the length of one request and then is not. Two things do persist, and both are named: opt-in metadata, which is the format, the filename, the size and the timestamp but never any content, and Google Drive OAuth tokens, encrypted at rest with AES-256-GCM through an in-house WebCrypto helper.
Which export formats does ChatExport produce?
Five: Markdown, JSON, PDF, HTML and plain text. They are not five versions of the same thing. Markdown goes into a notebook, JSON goes into another program, PDF goes to somebody who is never going to open a text file, and HTML and plain text cover the two ends of that range. You pick one when you ask for the export, and the file comes back as a download card in the chat rather than as a link to somewhere else.
Where does ChatExport actually run?
On one Cloudflare Worker, with nothing else behind it. A Hono application handles the Model Context Protocol traffic, and the interface is a single-file React widget embedded as a string in the worker's own response, so a request and its user interface arrive together. The architecture is Workers-pure, meaning no Node APIs are used anywhere in it, which is a genuine constraint rather than a preference: anything that would ordinarily reach for a Node module has to be done with web platform APIs instead. The whole thing sits on free tiers.
Does ChatExport work on iPhone?
There is no iOS application, and there is no installed application on any platform. ChatExport is not something you download: it runs inside ChatGPT through the OpenAI Apps SDK, and the only other surface it has is an ordinary website. No page here claims an App Store release, because there is no Apple Developer account behind this work and nothing built here has ever been submitted to one. Where the host application itself will run is a question for the host rather than something this page can answer.
https://aoneahsan.com/projects/com.aoneahsan.chatexport