Articles

Search Your ChatGPT History: 82 Percent of It Is Not What You Wrote

Our own proposal: tag every chunk of your history with who wrote it, because without a role filter a search mostly returns the assistant's text. In a real ChatGPT export of 1,462 conversations split into 152,760 chunks, 125,485 (82.1%) were written by the assistant and 25,813 (16.9%) by the person.

A tall stack of dark index cards with one card pulled forward in amber light

What we counted

On October 27, 2026 we indexed three real exports with ModelBrain 0.6.6 on a Mac and counted the chunks by who wrote them. Chunks carry a role tag, user or assistant, and none carries both.

ExportConversationsChunksYou wroteThe assistant wrote
ChatGPT1,462152,76025,813 (16.9%)125,485 (82.1%)
Claude22383,62117,509 (20.9%)65,889 (78.8%)
Grok3099,5251,347 (14.1%)7,869 (82.6%)

The remainder carry neither tag, one per conversation (1,462 of the 152,760 ChatGPT chunks). Indexing took 118 seconds for ChatGPT, 23 for Claude and 6 for Grok.

What the ratio means for search

In the ChatGPT export there are 4.9 assistant chunks for every chunk you wrote. A search of your own history that ignores who spoke will mostly return the model's side of the conversation, including answers you never agreed with. The question you asked, which is usually the better clue to what you were working on, is the minority.

Our own proposal: tag the speaker on every chunk

Store the role with each chunk when you import, so a search can be narrowed to your own words or widened to the whole exchange. Doing it at import time is cheap. Doing it afterward means re-reading the export and guessing from formatting. The three exports make guessing harder than it looks: ChatGPT uses user and assistant, Claude uses sender with human and assistant values, and Grok writes the assistant three ways (details here).

How to reproduce the count

Walk each conversation from current_node to the root so abandoned branches are not counted (how that works), split the text into chunks, and tally by author.role. Skip conversations with is_do_not_remember set. The Claude equivalent is described in our Claude export guide.