Step 1 of 5 · Import
Export your data from a provider and import it
Request an official export, choose the source and privacy mode, read the local preview, and create your first import.
By Novus Stream Solutions Editorial Team. 12 min read. Last reviewed Fri Jul 31 2026 00:00:00 GMT+0000 (Coordinated Universal Time).
This tutorial takes you from an empty account to a first set of statistics. It assumes nothing except that you use at least one AI product that can export its history.
Two things are true before you begin, and it is better to know them now than halfway through.
- Public registration opens only when verified email delivery is configured. If the sign-up page tells you registration is paused, that is the live state of this instance, not an error.
- Importing sits behind a server release flag and is switched on source by source. If the import workbench says Imports are disabled by the server release flag, everything below still describes what will happen, but the final step will not run yet.
Every supported chat product has an official export path in its own account settings, usually under a data or privacy section. Request it there rather than copying conversations by hand — an official archive carries the timestamps and identifiers that make statistics possible.
Exports are not instant. Most providers email a download link, and the link expires. Download the archive, keep it as a .zip, and do not unpack and re-zip it.
Coding agents are different: they already write their history to your own disk. Claude Code and Codex keep local session files so you can resume work, and Gemini CLI can be configured to write OpenTelemetry output to a local file. For those, you select the files directly. See the provider import reference for the exact shapes each adapter accepts.
Open Imports, then New import, and pick the provider yourself.
This is deliberate. The parser can guess a format from a file's shape, but the guess is only there to help you — the source you choose is the one that is used, and a file that does not match it is rejected rather than reinterpreted. Filenames are ignored entirely; a Cursor database is recognised by its file header, not its extension.
Stats-only is the default, and it is the right default.
In stats-only mode the server receives counts, timestamps, durations, token categories, model names, quality labels, and anonymous identity — and no session titles at all. The alternative mode adds titles, nothing else. Prompts, responses, code, attachments, and local file paths are not part of either mode; they are never uploaded, in any mode.
You can change the mode before the preview runs. Changing it re-parses the files.
Use Choose files for an export archive, or Choose folder when a coding agent has written many session files into a directory.
Only .json, .jsonl, .md, .markdown, .sqlite, .db, and .vscdb are considered; anything else in the folder is skipped before it is read. A ZIP is expanded in your browser, and a ZIP inside a ZIP is rejected rather than unpacked.
There are hard ceilings — 1,000 selected files, 512 MB selected, 256 MB for any single file. If you exceed one of them the import stops immediately instead of failing later.
Nothing has been sent yet. The preview is generated entirely in your browser, and it is the most important screen in the product.
Check four things:
- Detected schema. It should name the format you expected, such as a ChatGPT conversations export or a Cursor SQLite snapshot.
- Accepted and rejected files. A handful of rejects in a large export is normal; a total reject count equal to your file count means you picked the wrong source.
- New, updated, and duplicate estimates. Re-importing an overlapping export is safe, and this is where you see how much overlap there is.
- The cloud-fields list. It states exactly which categories of data will be sent.
Confirm, and the normalized sessions are sent in batches of one hundred, each with its own idempotency key. Retrying a batch that already arrived is safe by design and does not duplicate anything.
The server re-derives the identity and content hashes for every session before storing it. If a record does not match its own hashes, the batch is refused. The import completes only after every expected batch has arrived.
Rejections are specific on purpose, and none of them create partial or invented statistics.
- An unknown schema means the export version is not one this adapter recognises. Nothing is imported.
- Missing timestamps in a session cause that session to be rejected rather than given a made-up start time.
- An unrecognised Cursor database signature is refused, because guessing at an unknown Cursor version is how wrong numbers get created.
- If no supported session is found in the whole selection, the import fails with the first rejection reason and nothing is created.
Troubleshoot imports and duplicates covers each case in more detail.
Once the import completes, go to the dashboard and read the metric coverage panel before you read anything else — it tells you which of your numbers are complete. Read your dashboard without fooling yourself is the next tutorial in this path.
Related tutorials
Analyse
Read your dashboard without fooling yourself
Set the range, check coverage before totals, tell unavailable apart from zero, and use provenance to check any number you doubt.
Share
Share a snapshot without leaking anything
Pick a range, choose the exact fields, decide visibility and indexing, set an expiry, and revoke a link you regret.
Analyse
Group sessions into projects you actually recognise
Turn anonymous repository hashes into confirmed projects, merge duplicates, and read project analytics you can trust.
Was this page helpful?
Your answer stays in this browser. It is not sent anywhere, and no account or cookie is involved.