How to Read and Search Claude AI Conversation Exports (JSONL Files)
Claude exports your conversation history as a JSONL file that looks like gibberish in a text editor. Here is how to actually read, search, and make sense of those exports across Claude.ai, Claude Code, and API formats.
You exported your Claude conversation history and received a .jsonl file. You opened it in a text editor and got a wall of JSON spanning thousands of lines, each line itself thousands of characters long. Your editor probably froze, or at minimum became unusable. That file contains every conversation you have ever had with Claude, but right now it might as well be encrypted.
This guide covers what those JSONL files actually contain, how to read them without losing your mind, and the differences between the three Claude export formats you might encounter.
Three Formats, Three Different Structures
Not all Claude JSONL files are built the same way. Depending on where the file came from, the internal structure varies significantly. Here is what you are actually dealing with:
| Feature | Claude.ai Export | Claude Code CLI | API Message Logs |
|---|---|---|---|
| Each line represents | One full conversation | One single message | One single message |
| Message location | chat_messages[] array |
message.content nested object |
role + content at top level |
| Typical line length | 50-200 KB per line | 1-50 KB per line | 1-20 KB per line |
| Includes tool calls | No | Yes (Bash, file reads, edits) | Only if logged |
| Thinking blocks | No | Yes | If extended thinking enabled |
| Session grouping | Built-in (one conversation per line) | Via sessionId field |
None (sequential) |
| Typical file size | 5-100 MB (all conversations) | 1-10 MB (per session) | Varies by logging setup |
| How to get it | Settings > Account > Export Data | ~/.claude/projects/ |
Your own logging code |
Knowing which format you have determines how you should approach reading it. A Claude.ai export with 300 conversations means 300 very long lines. A Claude Code session with 200 messages means 200 shorter lines that need to be threaded together by session ID.

Why Bother Reading Old Conversations?
I keep hearing people say they export their Claude data "just in case" and never look at it again. That is a missed opportunity. Here are the situations where digging through old conversations actually pays off:
Recovering lost solutions. Three weeks ago, Claude helped you fix a tricky database connection pooling issue. You remember it worked, but you cannot recall the exact configuration. That conversation is in your export.
Building a personal knowledge base. Heavy Claude users accumulate hundreds of detailed technical explanations tailored to their specific codebase, stack, and skill level. That is personalized documentation you cannot get anywhere else.
Auditing AI-assisted work. Teams increasingly need to track what parts of a codebase were written or reviewed with AI assistance. The export file is that audit trail.
Switching accounts or platforms. Before deleting a Claude account or moving to a different tier, exporting preserves everything. But the export is only useful if you can actually read it.
Step-by-Step: Reading Your Exports
Here is the actual workflow. Total time: about 2 minutes for files under 20 MB, up to 5 minutes for very large exports.
Getting the File
From Claude.ai: Go to Settings, then Account, then Export Data. Anthropic emails you a ZIP file within a few minutes. Extract it. You will find a file called conversations.jsonl. That is the one you need.
From Claude Code: Navigate to ~/.claude/projects/ on your machine. Each project folder contains .jsonl files, one per coding session. Pick the session you want to revisit.
Loading the File
Open the view your Claude conversation exports tool in your browser. Either drag the file onto the upload area or click to select it. The viewer accepts files up to 500 MB. A 30 MB file typically parses in under 3 seconds on modern hardware.
The viewer samples the first few lines and auto-detects the format. No configuration, no dropdowns to select. It figures out whether you have a Claude.ai export, Claude Code session log, or API log and renders accordingly.
Finding What You Need
Once loaded, you get a list of conversations (or sessions, for Claude Code files). Use the search bar to filter by keyword. The search checks both conversation titles and the actual message content, so you can search for error messages, function names, or any phrase you remember from the discussion.
Click any conversation to expand it. Messages display in a clean chat layout with your messages visually separated from Claude's responses. Code blocks get syntax highlighting. Markdown renders properly instead of showing raw asterisks and hash marks.
Handling Large Export Files
If you have been using Claude daily for months, your export can easily exceed 50 MB. Here is what to expect and how to deal with it:
Files under 10 MB load almost instantly. No special handling needed.
Files between 10-50 MB take 3-8 seconds to parse. The viewer paginates conversations (20 per page) so the browser stays responsive. You will see a brief loading indicator while it processes.
Files over 50 MB work but need patience. Parsing can take 10-15 seconds. The key is that the viewer only renders the conversation you are actively looking at. Even with 2,000 conversations loaded into memory, scrolling through the list stays smooth because the message content only renders on demand.
Edge case: extremely long single conversations. If you had a coding session with Claude that ran for 500+ messages, that individual conversation view paginates at 50 messages per page. You can page through without the browser struggling.

Privacy: Why Browser-Based Processing Matters
Stop and think about what is in your Claude conversation history. Proprietary source code. Database schemas. API keys you asked Claude to help configure. Business strategies. Personal questions. Draft emails to your boss. Job interview prep. Medical questions.
If you paste that JSONL file into a random online JSON viewer or formatter, the entire contents get transmitted to a server. You have no idea who stores it, for how long, or who accesses it.
Browser-based processing means the file stays on your disk. JavaScript reads it locally, parses it in your browser's memory, and renders it on screen. Zero network requests. Zero server storage. When you close the tab, the parsed data is gone from memory. This is not a nice-to-have feature. For AI conversation data specifically, it is a hard requirement.
Claude Code Logs: The Extra Complexity
Claude Code session logs deserve special attention because they contain significantly more structure than Claude.ai exports. A typical Claude Code response is not just text. It is an array of content blocks that might include:
- Text blocks with Claude's explanations and responses
- Tool use blocks showing Bash commands, file reads, code edits, and search operations
- Thinking blocks with Claude's internal reasoning process
- Result blocks with output from executed commands
In raw JSON, a single Claude Code response can contain 15-20 nested content blocks. That is completely unreadable in a text editor. A proper viewer collapses tool calls into expandable panels, renders thinking blocks separately, and threads messages together by session ID so you see them as a coherent conversation instead of disconnected JSON objects.
Quick Decision Framework
Not sure which approach to use for your file? Here is a quick guide:
If you just need one specific conversation and remember the topic: Use a viewer with search. Load the file, search the keyword, find the conversation in under 30 seconds.
If you need to browse through many conversations to find something you vaguely remember: Use a viewer with pagination and title scanning. This is like scrolling through your chat list, but for exported data.
If you need to analyze conversation data programmatically (word counts, topic frequencies, usage patterns): Write a Python script. JSONL is line-oriented, so a simple for line in file loop with json.loads() on each line works well.
If you just want to confirm the export worked and see a few conversations: A viewer gives you instant visual confirmation without writing any code.
For most people, the first two scenarios cover 95% of the need. Drop the file into a viewer and start searching.