Open-source tool for improving ChatGPT data exports: search, true deltas, and per-thread PDF

I recently wanted to preserve some long ChatGPT conversations locally and discovered that the standard account data export is excellent as a raw backup, but becomes cumbersome as the archive grows.

In particular, I wanted three things:

  1. A searchable index of the conversations in chat.html, including dates.
  2. A way to export one conversation cleanly to PDF without printing the entire archive.
  3. Incremental archives, so that after requesting another full OpenAI export I could retain only conversations that were new or had changed since the previous export.

I ended up building a small Python utility to do this and have released it under the MIT license:

ChatGPT Archive Enhancer

It works entirely on the official ChatGPT data-export ZIP after you download it. It does not log into ChatGPT, use an API key, require browser cookies, or transmit the archive anywhere.

It currently:

  • enhances the existing chat.html with a searchable conversation sidebar;
  • sorts conversations newest-first;
  • displays Started and Last updated timestamps;
  • adds an Export this thread to PDF button to each conversation;
  • compares two official export ZIPs and produces a true delta containing both newly created conversations and existing conversations that changed;
  • preserves relevant conversation assets; and
  • integrity-checks the resulting ZIP.

For example, if an older export contains conversations A, B, C and D, and a later export contains A, B, C, D, E and F — but B was continued after the first export — the delta contains B, E and F, using the latest complete version of each.

The project uses only the Python standard library and runs locally.

This isn’t intended to replace some of the excellent existing export tools. Projects such as ChatKeeper take a different and very useful approach by converting exports into a synchronized Markdown archive. My goal here was specifically to preserve and enhance OpenAI’s own export structure while making repeated archival and individual-conversation PDF export easier.

This is the initial v0.1.0 release, tested against ChatGPT exports from August 2026. Since OpenAI’s export format can change, I’d particularly welcome reports from people trying it with other or future exports.

An important privacy note: don’t upload your actual ChatGPT export ZIP to GitHub. It can contain extremely personal information. The program is specifically designed so processing can remain entirely on your own computer.

Suggestions, bug reports, and contributions are welcome.

Very interesting approach.
I went a different way. I took the source files, unzipped them into a source folder and created several scripts. Extract does exactly that. it extracts the data from the JSON files, but it also includes the meta data for further searches.. it creates an index and small html files for each chat… Search does a 2 pass search against the results from the extract, so you can do named searches, with archiving and still preserving the meta data. Now I’m looking at what you did, and I’m thinking that’s the next step in my pipeline.. extracting data and making it available externally from everything… one thing it does very well is the searches are independent from each other… this is because a data dump can have more than one ‘targeted’ conversation or project, so searches are saved based on keywork changes… so each is preserved… any way, I like your approach… good job in coding.
Fred