Export your ChatGPT memory and import it into Remnic
OpenAI lets you export your account data, including saved memories. This guide shows how to request the export, what it contains, and the exact command to import it into a local, inspectable Remnic memory store.
Short answer: request an OpenAI data export, install @remnic/import-chatgpt, then run remnic import --adapter chatgpt --file ~/chatgpt-export/memory.json --dry-run to preview and re-run without --dry-run to commit.
Request your OpenAI data export
ChatGPT saved memories live in your OpenAI account, so you start by asking OpenAI for a copy of your data. Open ChatGPT settings, go to data controls, and request a data export. OpenAI emails you a download link when the archive is ready, which can take a little while. Download the archive and unpack it somewhere you can reach from a terminal, for example ~/chatgpt-export/.
The archive is a set of JSON files. The two that matter for import are the saved-memory data and conversations.json.
What the export contains
The ChatGPT importer accepts OpenAI’s data-export JSON. It reads three shapes:
- The top-level
memoryobject that holds your saved memories. - A bare array of saved memories.
conversations.json, the full chat history.
Saved memories are the short facts ChatGPT keeps about you across chats. Each active entry becomes one memory in Remnic, imported one to one. Soft-deleted records in the export are skipped, so memories you already removed in ChatGPT do not come back.
Conversation summaries are separate and opt-in. When you pass --include-conversations, each conversation is reduced to a single memory that summarizes your own turns along the active branch of the chat. Abandoned branches are excluded, so you get the thread you actually followed rather than every dead end.
Install the importer
The importer is a separate package from the base CLI, so normal Remnic installs stay small. Install it beside the CLI you already use.
npm install -g @remnic/cli
npm install -g @remnic/import-chatgpt
If you run remnic import --adapter chatgpt without the matching package installed, the CLI prints a clean install hint rather than a module-not-found stack.
Dry run first
Run a dry run before you write anything. It parses and transforms the export, then prints how many memories it would import, without touching your memory store.
remnic import --adapter chatgpt --file ~/chatgpt-export/memory.json --dry-run
# Dry-run: would import 147 memories from 'chatgpt'.
# (no memories were written; re-run without --dry-run to commit)
Dry run never instantiates the write target, so it runs instantly even on a machine where the memory directory is not set up yet. Point --file at the JSON file from your export; a leading ~ is expanded for you.
Run the import
When the dry-run count looks right, run the same command without --dry-run.
remnic import --adapter chatgpt --file ~/chatgpt-export/memory.json
To also pull in conversation summaries, add the opt-in flag:
remnic import --adapter chatgpt --file ~/chatgpt-export/conversations.json --include-conversations
You can tune batch size with --batch-size <n> (default 25) if you are importing a large export.
Provenance tagging on imported memories
Every imported memory carries provenance metadata that flows through the orchestrator into recall and attribution:
sourceLabelischatgpt, so you can filter or audit migrated memories later.sourceIdis the stable source-side id, which makes re-imports idempotent.sourceTimestampis the export’s original timestamp in ISO 8601.importedFromPathis the file path the record came from.importedAtis when the import ran.metadata.kindmarks the record type, such assaved_memory.
Because provenance travels with each record, an imported ChatGPT fact stays distinguishable from a memory captured in a live session. Running the importer a second time does not create duplicates; Remnic deduplicates by content hash during ingestion.
Check the result
After importing, query for a known memory from the export and inspect its provenance.
remnic query "your favorite editor"
remnic query "your favorite editor" --explain
Remnic stores memories locally as plain files with structured metadata under the configured memory directory, so you can read what landed and where it came from.
Privacy notes
Parsing, transform, and storage happen locally on your machine. Extraction is different. After the importer writes records, Remnic’s normal extraction pipeline runs on them, and if your orchestrator is configured to use a remote model provider, imported content is transmitted to that provider during extraction, the same way live-session content is. Importing from a local file is therefore not an absolute-local operation when a remote extraction model is configured.
To keep the import fully local, configure a local extraction model or disable extraction on the imported batch. A dry run never writes or extracts, so it is the safest way to preview what the importer would pick up.
Where to go next
- Read the importers overview for the other sources Remnic can pull from, including Claude, Gemini, mem0, and Supermemory.
- See Remnic for ChatGPT users for how a local memory store compares with hosted ChatGPT memory.
- If your export spans several files, import the saved-memory file and the conversations file in separate runs so each keeps its own provenance.