jq 1.6+, Python 3.8+, a text editor, and login credentials for every ChatGPT / Claude / Gemini account you own (personal, work, and API console).
python3 --version.jq — a command-line JSON reader, used to inspect your saved settings state. Install with brew install jq (macOS) or sudo apt-get install -y jq (Debian/Ubuntu) or winget install jqlang.jq (Windows).Create the working folder and the state file you will fill in during Step 2:
mkdir -p ~/privacy-audit && cd ~/privacy-audit
cat > privacy-state.json <<'JSON'
{
"chatgpt_consumer": "unset",
"claude_consumer": "unset",
"gemini_activity": "unset",
"checked_at": "unset"
}
JSON
How to check: run jq -r 'keys[]' privacy-state.json. Expected output — four lines, alphabetically sorted:
chatgpt_consumer
checked_at
claude_consumer
gemini_activity
Why this works: the JSON file is your single source of truth. Toggles live inside vendor UIs that you cannot query from a terminal, so you record what you saw and the timestamp you saw it. Later steps validate that file instead of trusting memory.
The switches you are going to look for, in one place:
| Product | Where the toggle lives | Setting to switch off | Expected state after this guide |
|---|---|---|---|
| ChatGPT (consumer) | Settings → Data controls | Improve the model for everyone | Off |
| ChatGPT (business workspace / API) | Admin console / platform dashboard | No consumer toggle; confirm retention policy | Documented in `privacy-state.json` |
| Claude (consumer) | Settings → Privacy | Help improve Claude | Off |
| Claude (Work / Enterprise / API) | Admin console / platform console | No consumer toggle; confirm retention policy | Documented in `privacy-state.json` |
| Gemini (consumer Google Account) | Google My Activity → Gemini Apps Activity | Gemini Apps Activity | Off |
| Gemini API / Vertex AI | Cloud console | No consumer toggle; confirm data-use terms | Documented in `privacy-state.json` |
Menu labels are rewritten between releases. If a label differs from the table, the setting still lives in the same section — search the vendor's own help centre and treat the exact wording as "verify in the documentation".
What to do: open each product in its own browser profile and write down the account email and the plan name shown in the profile/account menu.
cd ~/privacy-audit
cat > accounts.txt <<'TXT'
chatgpt personal <you@example.com> Plus
chatgpt work <you@company.com> Business workspace
claude personal <you@example.com> Free/Pro
gemini personal <you@gmail.com> Google Account
TXT
Example: replacing the placeholders gives lines such as chatgpt personal anna@example.com Plus.
Why: the same email can hold a consumer plan and a workspace seat. Consumer plans expose a training toggle; workspace seats usually hide it and defer to the administrator. You must know which one you are looking at before you conclude "it is already off".
How to check: every line has four fields and no placeholder brackets left.
awk 'NF!=4 {print "BAD LINE: " NR}' accounts.txt
No output means all lines are well-formed. Output like BAD LINE: 3 means line 3 is missing a field — fix it before continuing. For accounts that are part of a Microsoft 365 or ChatGPT Office-style workspace, the training decision is made at the admin level, so compare plan behaviour first: ChatGPT Office vs Microsoft 365 with Copilot: which to choose.

What to do: work through the three consumers toggles, one product at a time, in the browser profile that matches the account.
ChatGPT — open Settings → Data controls, find Improve the model for everyone, switch it off. Keep Temporary Chat for one-off sensitive questions; those conversations are not stored in your history.
Claude — open Settings → Privacy, find Help improve Claude, switch it off.
Gemini — open Google My Activity (myactivity.google.com), select Gemini Apps Activity, and turn it off. On Workspace accounts this control may be disabled by the administrator — treat that as a finding, not a failure.
Record each result:
jq --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
'.chatgpt_consumer="off" | .claude_consumer="off" | .gemini_activity="off" | .checked_at=$ts' \
privacy-state.json > tmp.json && mv tmp.json privacy-state.json
Example: on a Plus account you should see the ChatGPT toggle rendered in the grey/off position and the page keep that position after a reload; on the Anthropic side the Help improve Claude switch sits off with no "on" highlight.
Why: these switches are the only consumer-facing controls that stop your conversations from being retained for model improvement. Turning them off does not change answer quality for you — it changes what the vendor may do with the text afterwards.
How to check: read the file back.
jq -r 'to_entries[] | "\(.key)=\(.value)"' privacy-state.json
Expected output:
chatgpt_consumer=off
checked_at=2025-06-01T09:00:00Z
claude_consumer=off
gemini_activity=off
If jq prints jq: command not found, install it from the Requirements section and re-run — the file is untouched, so nothing is lost.

What to do: reload every settings page, confirm each switch is still off, then run the validation script below and archive the output.
#!/usr/bin/env python3
import json, sys
from pathlib import Path
REQUIRED = {"chatgpt_consumer": "off", "claude_consumer": "off", "gemini_activity": "off"}
data = json.loads(Path("privacy-state.json").read_text())
missing = [k for k, want in REQUIRED.items() if str(data.get(k, "")).lower() != want]
if missing:
sys.exit(f"FAIL: training not disabled for: {', '.join(missing)}")
print(f"OK: all training toggles off, verified at {data['checked_at']}")
Run it:
cd ~/privacy-audit && python3 check_privacy.py | tee -a privacy-audit.log
Expected output on screen:
OK: all training toggles off, verified at 2025-06-01T09:00:00Z
Why: a toggle that silently re-enables is the most common failure mode. The reload test catches a session that never saved, and the script catches a hand-edited file where one key still says unset. The log line is your audit trail.
How to check: the log holds one line per run, with no FAIL: prefix.
grep -c '^OK:' privacy-audit.log && tail -n 1 privacy-audit.log
1 followed by the OK: line means success. 0 means the script never passed — go back to Step 2 for the product named in the FAIL: message.
Finish with this checklist before you close the browser:
Improve the model for everyone is off and stays off after reloadHelp improve Claude is off and stays off after reloadaccounts.txt, not guessedcheck_privacy.py printed OK: and the line is in privacy-audit.logProblem. The toggle is greyed out and cannot be changed.
Managed by your organization (the label text differs between plans — verify in the documentation for your plan)accounts.txt:printf 'chatgpt work <you@company.com> workspace: training opt-out requested\n' >> accounts.txt
Problem. The validation script reports a product that you already switched off.
FAIL: training not disabled for: gemini_activityjq write in Step 2 was run in a different directory, or Gemini Apps Activity was re-enabled by a Google account-level setting.jq '.gemini_activity="off"' privacy-state.json > tmp.json && mv tmp.json privacy-state.json
python3 check_privacy.py
Problem. The script will not start.
bash: ./check_privacy.py: /usr/bin/env: bad interpreter: No such file or directory\r.sed -i 's/\r$//' check_privacy.py && python3 check_privacy.py
You mapped every account, switched off the training control in ChatGPT, Claude and Gemini, and proved the state with a timestamped log. Re-run python3 check_privacy.py once a quarter, because a plan change or a workspace migration can quietly reset these switches.
Does turning off the training toggle reduce answer quality?
No. The switch controls what the vendor may do with your conversations afterwards; it does not remove features from your account.
Is API usage trained on by default?
Developer platforms are governed by separate data-use terms, not by the consumer toggle. Read the terms for your plan and record the conclusion in accounts.txt — check the documentation for the current wording.
Do Temporary Chat and incognito modes replace the toggle?
No. Temporary Chat keeps a single conversation out of your history; the account-level toggle covers everything else. Use both.
Will a workspace admin see that I changed my personal settings?
Personal consumer settings are yours. Workspace settings are managed by the administrator, which is why the toggle shows as managed by your organization instead of a switch you can move.