Skip to main content

5 Steps Before You Put Company Data into AI: From Turning Off Training to Masking and Restoring Values

· 11 min read
Datapopcorn CEO / AI automation educator

Whether you can put company data into AI comes down to one rule: if information can't leave the company, it doesn't go into AI either. But if you mask the names, amounts and contact details and put in only the structure, most work still gets done just fine. This post walks through that process in 5 steps, from checking your training settings to restoring the original values.

The question I get most in corporate training isn't about features. It's "Am I allowed to put this in?" People practice with made-up data, then hands go up at "So can I do this with our real company files?", followed by "What if I put it in and it causes a problem?" Without a guideline, everyone has to judge for themselves and take the blame alone, so the rational choice becomes not using it at all. The 5 steps below are a way to make that guideline concrete.

Who this is for​

  • You want to handle work emails and reports with AI but have stalled because you don't know how much you can put in
  • You're a team lead or leader who needs to set a "never put this into AI" rule for your team
  • You're in charge of training and need to give employees input guidelines

Here's what you need.

  1. A ChatGPT or Claude account
  2. To follow Steps 3 and 5, a computer with Python 3 installed. On a Mac, check with python3 --version in the terminal. No extra packages are needed.
  3. Your company's AI usage policy, if it already has one. Your company's policy takes priority over this post.

Step 1. Check whether your account uses your chats for training​

The first thing to do is check your settings. Personal plans and company plans have different defaults. I confirmed the details below in each company's official help docs on October 7, 2026.

ServicePersonal plansCompany (team) plans
ChatGPTIf Improve the model for everyone is on, your chats may be used for training. If you turn it off, new chats aren't used for trainingContent in Business, Enterprise and Edu workspaces isn't used for training by default
ClaudeOn Free, Pro and Max, chats are used for training if you turned on allow model improvementClaude for Work (Team, Enterprise) and the API aren't used for training by default

If you're on a personal account, check the setting yourself.

  • ChatGPT: Profile menu → Settings → Data controls → turn off Improve the model for everyone. The mobile app has the same menu.
  • Claude: In Settings, turn off the toggle for model improvement (labeled Help improve our AI models in the official help docs). The direct link to the privacy settings is claude.ai/settings/data-privacy-controls.

Two things to know before moving on.

  • Even with training turned off, your chats are still stored on the company's servers. The training setting only decides "is it used for training." That's why the masking in Steps 2-3 is still needed.
  • Clicking 👍 or 👎 feedback sends the entire chat. OpenAI says it may use chats you gave feedback on for training, and Anthropic says it keeps feedback chats for up to 5 years. Don't click the feedback buttons in chats that contain company data.

Step 2. Share a 4-line "what we don't put in" list with your team​

Long lists don't get followed. The items change with every situation, and when something comes up that isn't on the list, people stall again. Give one rule, and attach an alternative only to the 4 items people run into most. You can paste the block below into your team channel as is.

[AI input guideline]
Rule: If you couldn't send it to someone outside the company by email, don't put it into AI.

1. Real names and contact details of customers and partners → replace with aliases like [ClientA], [ContactA]
2. Contract amounts, unit prices, quotes → mask as [Amount1] or swap in example numbers
3. Unreleased technical info, drawings, yields → don't put in (not even a summary)
4. National ID numbers, accounts, passwords → never put in, under any circumstances
* A person clicks the send button. AI only does translation and drafts.

The key is that items 1 and 2 come with alternatives. When I gave only the forbidden items in a lecture, students nodded along and then finished the exercise without using any real material at all. Only after I gave them the alternatives too did I hear "Oh, so I can just do it this way."

When an item comes up that people disagree on (a person's job title in meeting notes, someone's schedule, and so on), don't add more items; go back to the one-line rule: Could I put this sentence in an email to someone outside the company as is?

Step 3. Create a file with the values masked​

What AI needs to write a draft reply is the structure, not the values. What matters is what the other party asked for and by when; their company's real name doesn't make the draft any better.

You can delete things by hand, but if you do it often, a script is easier. The mask.py below automatically finds and masks email addresses, mobile numbers and amounts, and replaces only the company and person names you list at the top.

mask.py
import re, sys, json

# Names to mask: regex can't find company, person or product names, so list them yourself.
NAMES = {
"Hanbit Trading": "[ClientA]",
"Kevin Park": "[ContactA]",
"한빛무역": "[ClientA]", # the same company written in Korean
}

PATTERNS = [
("Email", r"[\w.+-]+@[\w-]+\.[\w.-]+"),
("Phone", r"(?:\+82[- ]?|0)1[016789][- ]?\d{3,4}[- ]?\d{4}"),
("Amount", r"(?:USD|\$|₩)\s?\d[\d,]*(?:\.\d+)?|\d[\d,]*(?:\.\d+)?\s?(?:원|만원|억원|달러)"),
]

def mask(text):
found = []
for real, alias in NAMES.items():
if real in text:
found.append((alias, real))
text = text.replace(real, alias)
for label, pat in PATTERNS:
n = 0
def repl(m):
nonlocal n
n += 1
tag = f"[{label}{n}]"
found.append((tag, m.group(0)))
return tag
text = re.sub(pat, repl, text)
return text, found

if __name__ == "__main__":
src = sys.argv[1]
text = open(src, encoding="utf-8").read()
masked, found = mask(text)
out = src.rsplit(".", 1)[0] + "_masked.txt"
open(out, "w", encoding="utf-8").write(masked)
# The table of original values stays only on your computer. Never put it into AI.
keyfile = src.rsplit(".", 1)[0] + "_key.json"
json.dump(dict(found), open(keyfile, "w", encoding="utf-8"), ensure_ascii=False, indent=2)
print(f"Masked {len(found)} items → {out}")
print(f"Key table → {keyfile} (do not put this into AI)")

Save the email body as sample_email.txt and run the script in the same folder.

python3 mask.py sample_email.txt

Here's the actual output from running it on a made-up English email.

Masked 6 items → sample_email_masked.txt
Key table → sample_email_key.json (do not put this into AI)

Top: the original email with the client name, contact person, email, unit price, total and phone number all visible. Bottom: the same email after running mask.py, with each replaced by tags such as [ClientA], [ContactA], [Email1], [Amount1], [Amount2] and [Phone1] (the screenshot shows the Korean-labeled version of these tags)

Notice in the result that the quantity 2,000 units and the delivery date November 20 were left as is. The script only finds the patterns you've defined. Values whose sensitivity varies by company, like quantities, dates and project code names, should be added to the NAMES list or deleted by hand. Step 3 isn't done until you've read the _masked.txt file once with your own eyes after running the script.

Step 4. Get both a draft and a review list from AI using the masked file​

Now put only sample_email_masked.txt into AI. Never put in _key.json. The trick is not to ask only for the output, but to also get a list of things a person needs to check.

The attached file is an English email from an overseas partner.
Parts in square brackets like [ClientA] and [Amount1] are values I masked on purpose, so leave them as they are.
1) A summary in my language
2) A list of what the other party is asking for
3) Blanks and facts I need to check myself
4) A polite draft reply in English (use the masked values in brackets as they are)
5) A pre-send review checklist (including whether every masked value has been filled in and no sensitive information remains)

Items 3 and 5 are the key. Because you masked the input, the draft will have blanks, and the AI gives you a list of where they are. No more "I need to fill that in later, but where was it?"

If you use a tool that reads files in a folder, like Claude Code, keep the original and the masked version in separate folders and work only in the masked folder. What you let the AI read then stays visible in the state of the folders, so you can check it later.

Step 5. Restore the blanks in the draft to the original values, and have a person send it​

Save the AI's draft reply as reply_draft.txt, then use the script below to replace the brackets with the original values. This happens only on your own computer.

unmask.py
import json, sys
draft, keyfile = sys.argv[1], sys.argv[2]
text = open(draft, encoding="utf-8").read()
table = json.load(open(keyfile, encoding="utf-8"))
for tag, real in table.items():
text = text.replace(tag, real)
out = draft.rsplit(".", 1)[0] + "_restored.txt"
open(out, "w", encoding="utf-8").write(text)
print(f"Restored → {out}")
python3 unmask.py reply_draft.txt sample_email_key.json

Here's the result from running it on two draft sentences containing brackets.

Restored → reply_draft_restored.txt

Dear Kevin Park,

Thank you for your order from Hanbit Trading. We confirm the unit price of USD 14.50 (total $29,000).

Finally, go through the review checklist from Step 4 to check the numbers, dates and names, and a person clicks the send button. AI handles only translation and drafts.

If you hit an error, check here first​

SymptomCause and fix
python3: command not foundPython isn't installed. On a Mac, run xcode-select --install in the terminal or install it from python.org
No such file or directoryMake sure the email file and the script are in the same folder and the file name is exactly right
The company name isn't maskedNames can't be found automatically. Add them to the NAMES list in the form "Real Name": "[ClientB]"
Landline numbers like 02-123-4567 remainThis script only finds Korean mobile numbers (010 and so on). Delete them by hand or add them to NAMES
Brackets remain after restoringThe AI may have changed the bracket format (for example, [Amount 1]). Fix the format in the draft back to the original and run it again
Your company policy differs from this postFollow your company policy. This post is a starting point for when there's no policy

Wrap-up​

  • The rule is one line: if you couldn't send it to someone outside the company by email, don't put it into AI.
  • Even with training turned off, your chats are stored, so keep masking values before you put them in.
  • Mask → get a draft and a review list from AI → restore on your own computer → a person sends it.
  • A leader's job is less about adopting tools and more about announcing these 4 lines to the team. People can use AI without fear of getting in trouble only when the guideline exists in writing.

References​

Official documentation checked on October 7, 2026.