Migration guide

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.

Updated July 2026

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 memory object 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:

  • sourceLabel is chatgpt, so you can filter or audit migrated memories later.
  • sourceId is the stable source-side id, which makes re-imports idempotent.
  • sourceTimestamp is the export’s original timestamp in ISO 8601.
  • importedFromPath is the file path the record came from.
  • importedAt is when the import ran.
  • metadata.kind marks the record type, such as saved_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.