Guides
How to Track Your AI Usage Across ChatGPT, Claude, Gemini, and Coding Agents
A practical guide to combining AI chat exports and coding-agent logs without pretending every provider exposes the same statistics.
Published 2026-07-28. Last reviewed 2026-07-28.
AI work is increasingly spread across several products. A research conversation may begin in ChatGPT, continue in Claude, move into Gemini for a second opinion, and end in Claude Code or Codex when the idea becomes software.
Each product keeps its own history. The result is fragmentation: users know that AI has become a major part of their work, but they cannot easily answer simple questions.
- How many sessions did I run this month?
- Which AI do I use most?
- How much time did my coding agents spend working?
- Which project consumed the most prompts?
- How many agents and tools did I launch?
- How often do I hit usage limits?
A trustworthy tracker must begin by recognizing that these products expose different kinds of data.
Start with official exports and local logs
For ordinary AI chats, the most reliable historical source is usually an official account export.
ChatGPT provides a data-export process through its Data Controls. Claude and Google provide their own export mechanisms. These exports can be imported into a local parser that counts conversations, timestamps, messages, and any model metadata included by the provider.
Coding agents can provide richer information. Claude Code stores local session transcripts for session resumption, while Claude Code and Gemini CLI can emit OpenTelemetry data. Codex also maintains resumable local session history, although its storage format should be treated as versioned input rather than an unchanging public API.
Keep parsing local
AI histories may contain source code, personal information, business plans, credentials, and uploaded document text. Uploading an entire export to a new analytics service creates unnecessary risk.
A privacy-first tracker can perform the heavy parsing in the browser:
1. The user selects an export or a session folder. 2. A Web Worker parses the files locally. 3. The app previews what was detected. 4. The user chooses which fields to synchronize. 5. The server receives normalized statistics rather than raw messages.
For most statistics, the server needs provider names, timestamps, counts, durations, model identifiers, projects, and metric-quality labels. It does not need the text of every prompt.
Separate exact metrics from estimates
Not every provider reports “time worked” the same way.
A coding agent may expose model latency, tool duration, and complete session timestamps. A web-chat export may provide only message timestamps. Those two sources cannot support the same level of precision.
A useful dashboard should label metrics as:
- **Exact:** explicitly defined by the source.
- **Source reported:** supplied by the provider, with the provider’s own definition.
- **Derived:** calculated from source timestamps.
- **Estimated:** based on a documented heuristic.
- **Unavailable:** not present in the source.
This is more honest than filling every missing value with zero.
Prevent duplicate imports
Users will import the same provider repeatedly. A production tracker needs deterministic fingerprints based on source session IDs, timestamps, file checksums, and adapter versions.
Re-importing an identical export should update or skip existing sessions. It should never double the user’s lifetime totals.
Group sessions by project
Provider totals are fun, but project totals are more useful.
A project can combine:
- ChatGPT planning conversations.
- Claude research.
- Claude Code implementation.
- Codex reviews.
- Gemini CLI experiments.
When sources contain a repository or working-directory hint, the tracker can suggest a project. The user should approve the final project name, and local paths should be hashed before cloud synchronization.
Build sharing from snapshots
Shareable recaps are one of the most enjoyable parts of AI statistics, but they should not be live windows into a private account.
A safe sharing flow creates a snapshot containing only selected fields. The user can remove project names, hide exact token counts, set an expiry, and revoke the link later.
Examples include:
- “143 AI sessions this month.”
- “Claude was my most-used provider.”
- “I launched 648 coding agents.”
- “My longest coding session lasted four hours.”
- “I hit my weekly limit seven times.”
The raw conversations remain private.
The practical starting point
A useful first version does not need to watch every provider automatically.
It needs to:
- Import official chat exports.
- Import common coding-agent logs.
- Explain metric accuracy.
- Prevent duplicates.
- show clear dashboards.
- keep raw content local by default.
- create privacy-safe recap cards.
The current product should remain focused on transparent, user-approved imports. That produces a product users can trust and test immediately without expanding into background tracking.