Privacy
Privacy Policy
The short version: Carry has no server, no account, and no analytics. Your conversations never leave your machine. This page explains exactly how, and why that is true by construction rather than by promise.
- 0servers
- 0accounts
- 0trackers
- 0conversation bytes uploaded
The one-sentence policy
Carry does not collect, transmit, sell, or share your conversations. There is no Carry server for it to send them to. License activation separately sends limited license metadata to Polar, the payment platform, only when you press activate —see exactly what it sends.
Carry is a Chrome (and Chromium browser) extension that captures your ChatGPT, Claude, and Grok conversations and writes them into a local folder you choose — a plain folder or your Obsidian vault — as Markdown files. It runs entirely on your own device.
Where your data goes
One sync, traced end to end. Every hop happens inside your browser, on your machine — and there is no fourth stop.
Their server
The provider
chatgpt.com · claude.ai · grok.com — read through the session you're already logged into. No password, no API key.
Your browser
Carry
Held in memory for one sync — long enough to write the file, then discarded. Never stored, never logged.
Your disk
Your folder
Plain Markdown files, in a folder you own. The only place your data lands.
postgres-query-plan.md✓
What Carry touches, and where it goes
Five kinds of data, five one-glance answers. Expand each for the full detail.
Your conversationsmemory → your disk
During a manual or scheduled capture, Carry reads conversations from each provider you connected, using the session already open in that browser. Content is held in memory only long enough to write it to your folder, then discarded. It is written to your disk and nowhere else — never uploaded, relayed, cached, or logged off your device.
Written to: your folder onlyUploaded: neverRetained by Carry: no
Your settings & sync statebrowser storage on your device
Carry keeps your theme and capture preferences, a recent-inbox cache
(conversation ids, titles, provider, timestamps and state), the full-history
backfill cursor, a sanitized license record, and a few small internal flags
(a per-install device label and a dismissed-notice flag) in
chrome.storage.local. The chosen folder handle and
per-conversation/project sync records (including ids, titles, timestamps and
local file paths) live in the extension's IndexedDB database. Both stores stay
inside your browser profile on this device. Carry deliberately never uses
chrome.storage.sync, which would replicate data to your browser
vendor's servers.
Lives in: chrome.storage.local + IndexedDBReplicated to any server: never
Your folder handleheld by your browser
The permission to write to the folder you picked is granted by you through the browser's File System Access API and held by the browser. Carry uses it only to write capture files into that folder.
Granted by: you, via the browserUsed for: writing captures only
Your provider sessionin memory, provider-bound
Carry never asks for or stores provider passwords or API keys. It relies on
the login cookies already held by your browser; Carry does not read or copy
those cookies. ChatGPT's session endpoint supplies a short-lived bearer access
token, which Carry holds only in memory for the active provider operation and
sends only back to chatgpt.com. It is never written to extension
storage, your capture files, Polar, or a Carry server.
Provider passwords & API keys asked for: noneSession credential persisted: never
Your license keyyou → Polar, at activation
If you buy a license, pressing activate sends exactly three things to Polar,
the payment platform: the license key you typed, Carry's Polar organization id,
and a random install label (like carry-chrome-x7k2p9) so you can
manage your device activations. It is a label Carry makes up, not a hardware
fingerprint. Re-activating an existing license also sends the activation id
Polar issued. That is the whole list — it happens only when you press activate;
Carry never contacts Polar in the background, and no conversation content,
cookies, or browsing data is ever included. Carry stores only a one-way SHA-256
digest of the key, a masked display value, Polar's activation id, and the
activation timestamp — all on your device, alongside a first-run trial
timestamp and the random install label (kept under its own key). A raw key
stored by versions through 0.2.0 is migrated to that sanitized record on
first read.
Sent: key + organization id + install labelRaw key stored by Carry: no
Every permission, explained
Carry requests the smallest possible permission set, and it requests access to a provider's required sites only when you click Connect for that provider — not at install. Connect only Claude and Carry can access only claude.ai and Claude's file/artifact host.
“Carry” wants additional permissions
- Read data needed for ChatGPT capture on
chatgpt.com - Read data needed for Claude capture on
claude.aiand*.frame.claudeusercontent.com - Read data needed for Grok capture on
grok.com - Nothing — until you connect a provider, Carry cannot read any site.
Each line appears only when you connect that provider, and it is scoped to that provider's required origins and nothing broader.
Per-provider site accessrequested at connect time
Lets Carry read your conversations from a provider you chose to connect (Chrome may word it as “read and change your data”), scoped to that provider's required origins and nothing broader. ChatGPT uses chatgpt.com; Claude uses claude.aiplus *.frame.claudeusercontent.com for files and Artifacts; Grok uses grok.com.
storagelocal-only settings
Holds the local-only settings and sync state described above, in chrome.storage.local and IndexedDB. It never uses chrome.storage.sync.
alarmsscheduled capture & backfill
Schedules automatic capture checks while Chrome is open and resumes an in-progress full-history backfill after the extension's background worker sleeps. It does not create system notifications.
idleskips capture while you're away
Lets Carry skip the scheduled capture check while the browser is idle or locked, and run one catch-up check when you are back. It reads only Chrome's active/idle/locked state and is never used for tracking or notifications.
api.polar.shoptional, at activate only
Requested only if Polar's normal cross-origin response cannot complete after you press activate. It is used solely for the license request described above and is never contacted in the background.
scriptingGrok's tab-bound capture only
Used only for the tab-bound capture path a provider requires when it blocks background requests (Grok). It runs the capture in that provider's own tab; it does not inject anything into unrelated sites.
Carry requests nocookiestabshistoryaccess.<all_urls>
What Carry does not do
- No account, sign-up, or login to Carry itself.
- No Carry server or backend — there is nothing to receive your data. (License activation talks to Polar, the payment platform — see “Your license key” above.)
- No analytics, telemetry, tracking, cookies, or fingerprinting.
- No advertising, and no sale or sharing of data with third parties.
- No use of your data for advertising, creditworthiness, lending, or any purpose unrelated to capture and license operation. Conversation content is never transferred; license metadata goes only to Polar when you press activate.
Don't take our word for it
A policy is a promise; architecture is a fact. Every claim on this page is checkable in a few minutes.
- 1
Inspect its site access
Open
chrome://extensions→ Carry → Details. Under “Site access” you'll see only the providers you connected (plusapi.polar.shif you've activated a license) — nothing else. - 2
Watch the network
Open DevTools on the extension while you sync. Requests go only to the connected providers' listed origins. Pressing activate additionally makes the disclosed request to
api.polar.sh. There is no Carry endpoint to find.
The fine print
This website
This site (carry.md) is a static marketing and documentation site. It sets no tracking cookies and runs no third-party analytics. Standard, non-identifying web server request logs may be kept by whichever static host serves the site, purely to operate and secure it.
Licensing
Carry's paid license is sold through Polar, the merchant of record. Checkout happens on Polar's own pages — Carry never sees your payment details, your name, or your email. When you activate a license, the extension sends Polar the license key you typed, Carry's Polar organization id, and a random install label; re-activating also sends the activation id Polar issued. That request happens only when you press activate — the api.polar.sh permission is itself optional and requested at that click — and it never carries any conversation content. The purchase itself is covered by Polar's privacy policy.
Retention and deletion
Local settings and sync records remain in the extension's browser storage until you clear extension data or uninstall Carry. Uninstalling removes that browser-held state; Markdown and downloaded files already written to your chosen folder remain there until you delete them. Polar retains purchase and activation records under its own policy; device activations can be managed through Carry's linked Polar customer portal.
Chrome Web Store Limited Use
Carry's use and transfer of information received from provider APIs adheres to the Chrome Web Store User Data Policy, including its Limited Use requirements. Provider content is used only to perform the user-facing capture and local file-writing features described on this page.
Children
Carry is not directed to children.
Changes to this policy
If Carry's behavior changes in a way that affects this policy — for example, an optional automatic-capture feature — this page will be updated and the “last updated” date above will change. Any such change will preserve the core promise: your conversations stay on your device.