Remove names, emails and IDs, then check each comment for details that point to one person, such as a unique role, event or date. Code the cleaned comments into themes with an assistant on a no-training plan, spot-check the codes by hand, and report only groups that meet a minimum size, such as ten for verbatim comments.
Free text loses anonymity faster than tick-box scores, because people describe their own situation. A comment can identify its author even when the group is big enough to hide the scores, and every extra cut (team, site, tenure) shrinks each group. Microsoft's Viva Glint documentation shows the pattern: by default it reports groups of five or more, but write-in comments appear verbatim only when at least ten people answered the question.
Settle the anonymity promise and the escalation rule first
Start with what respondents were told. Find the confidentiality statement shown at the start of the survey and copy it into the project notes, because it is the promise your analysis has to keep. Viva Glint's own wording is a useful model: responses are reported in groups of five or more, comments are shown verbatim only above a stated number, and people are told not to identify themselves in comments. If the client's statement is vaguer than that, agree a tighter one before the data comes to you.
Three terms need pinning down, because clients use them loosely. In an anonymous survey nobody, including the consultant, can link an answer to a person. In a confidential survey the platform or the consultant can see who answered, but reports only show groups. In an identifiable survey individual answers are visible, as in an exit interview. Many employee surveys are confidential rather than anonymous, and the promise is only as good as the thresholds behind it.
The law adds a wrinkle if any respondents are in the EU. Recital 26 of the GDPR says the principles of data protection do not apply to anonymous information, but data that has been pseudonymised, so that it could be attributed to a person with additional information, is still personal data. Identifiability is judged by all the means reasonably likely to be used, including the cost, the time and the available technology. Taking names off a comment is not anonymisation if the comment itself points at one person. Ask a qualified adviser how this applies to your engagement.
Settle the escalation rule before launch as well. Some comments describe serious harm, a safety risk or an allegation. If your promise is absolute, you may have no route to act on them, and if it has exceptions, respondents must be told. Agree with the client who receives such a comment, in what form, and whether the author's identity is protected. Put it in the engagement letter, covered in the tutorial on scope, fees and AI-use wording, and in the survey introduction. Sample wording for an adviser to review: "Your answers are reported in groups of at least five. Please do not include names or details that could identify you or others. If a comment describes serious harm or risk, we may need to pass it to [named role] without identifying who wrote it where possible."

The Complete Excel Course with AI Integration
From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.
By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner
Buy nowStrip identifiers in three passes, then count the cells
The running example is an invented 120-person marketing agency with seven teams. The survey drew 87 responses (72.5%), and 61 of them included a comment. The consultant receives an export and has to prepare it before any assistant sees it.
Pass one: direct identifiers and hidden columns
Delete every column except the question text and the demographic fields you genuinely need. Exports often carry extras, such as timestamps, response or collector IDs and, depending on the platform's settings, IP or email addresses. Replace the platform's response ID with a fresh sequential one, because the original may link back to the platform. Do not keep a lookup table where an AI tool or a shared drive can reach it. Shuffle the rows as well, since row order and submission times can leak identity: the only response at 06:12 is probably the early riser everyone knows.
A common slip, shown here as an invented case: a consultant pastes the comment column and, to be helpful, the Team column beside it so the assistant can "see the context". The coded output comes back with each comment's team attached, and the same file lands in a shared project folder. Nothing has left the paid plan, but the link between team and comment now exists in two more places than intended. The fix is mechanical: paste only the new ID and the comment, and read the first ten rows of whatever you are about to send before you send it.
Pass two: demographic fields and the cell count
Team, grade, tenure band, site and age band are quasi-identifiers: harmless alone, identifying in combination. The cure is to count cells before choosing cuts. Seven teams and four tenure bands make 28 cells, and with 87 responses the average cell holds 3.1 people, so most cells fall below five. A team and tenure report would expose people, so do not offer it. Survey platforms build the same rule in. Culture Amp's support article says results for a demographic group below its Reporting Group Minimum are not shown, and that combinations of demographics cannot be filtered below it either, though the page does not state the number.
Next, merge groups that are too small. This is the table the consultant ends up with, using a minimum of five responses to show a group:
| Reporting group | Headcount | Responses | With a comment | Note |
|---|---|---|---|---|
| Creative | 30 | 25 | 18 | Shown on its own |
| Account management | 24 | 19 | 13 | Shown on its own |
| Strategy | 16 | 13 | 9 | Shown on its own |
| Production | 18 | 13 | 9 | Shown on its own |
| Finance and operations | 14 | 10 | 7 | Shown on its own |
| Central functions | 18 | 7 | 5 | People and admin (4 responses) merged with Leadership (3) |
| Whole agency | 120 | 87 | 61 | Source of every quote |
Why merge instead of hiding Leadership alone? A hidden group can be recovered by subtraction whenever other slides show the whole company and everyone else. Merging two small groups avoids the problem and keeps both visible in aggregate. It is a client decision, so show them the merge before you apply it.
Pass three: scrub the comment text
The comment column is where names live. A first scrub by assistant saves time, but it needs a human read afterwards:
Below are survey comments, one per line, each starting with an ID.
Rewrite each comment with these replacements and change nothing else:
- personal names and nicknames -> [colleague]
- job titles held by one person (for example "the head of X") -> [senior role]
- client names, project names and product names -> [client] / [project]
- specific dates, event names and site names -> [date] / [event] / [site]
Do not correct spelling or tone. Output the same IDs in the same order.
After the list, give the IDs of any comment you were unsure about.
Treat that output as a draft. Assistants miss nicknames, and they sometimes tidy wording you asked them to leave alone, which removes the very fingerprints you are trying to catch. A read of all 61 comments takes about twenty minutes, and it is time worth spending.
Build the theme codebook from a sample, then freeze it
Coding means assigning each comment to one or two themes from a fixed list. Work in two steps. First let the assistant propose a codebook from a random sample, then fix the list and apply it to everything. With 61 comments the sample is all of them; with 900 you would draw a random 100, finalise the codebook on those, and code the rest in batches of about 50.
Below are 61 anonymised employee survey comments from a 120-person
marketing agency. Propose a codebook of 6 to 10 themes.
For each theme give: a short name, a one-sentence definition, what
belongs in it, and what looks similar but does NOT belong.
Use only what the comments say. Do not infer who wrote anything.
An illustrative extract of the result, after a human has merged two near-duplicate themes:
| Theme | Belongs here | Does not belong here |
|---|---|---|
| Workload and deadlines | Volume of work, crunch periods, unrealistic turnaround | Pay for extra hours (that is Pay) |
| Pay and progression | Salary, bonuses, promotion routes, grading | Recognition without money |
| Management and communication | Feedback from line managers, clarity from leaders, change announcements | Tools and process |
| Flexibility and hours | Remote and hybrid arrangements, start and finish times | Workload |
| Tools and process | Software, handovers, approval steps, briefing quality | Management style |
| Recognition and culture | Thanks, belonging, team spirit, inclusion | Pay |
Then freeze it. Editing the list halfway through coding means the first comments were coded against a different yardstick. Apply the frozen list with a prompt that returns structured output a person can sort:
Using ONLY this codebook, code each comment below.
Return one line per comment as: ID | theme 1 | theme 2 (or none) |
sentiment (positive, negative, mixed, neutral) | confidence (high, medium, low) |
sensitive (yes/no: names a person, alleges misconduct, or mentions harm or risk).
If a comment fits no theme, write "other" and do not invent a theme.
CODEBOOK: [paste the frozen codebook]
COMMENTS: [paste IDs and text]
A few lines of sample output, again invented for illustration, show the kind of checking this needs. Comment 14, "Deadlines are brutal in the last week of the month, but nobody else would tolerate the pay cut to leave", came back as Pay and progression with negative sentiment. A reader sees two separate points: Workload and deadlines, which is negative, and Pay and progression, which is positive, since the writer would not take a pay cut to leave. The human fix is two codes, each with its own sentiment. Comment 33, "More clarity on what changed in the client brief would help", came back as Management and communication. The reader reassigns it to Tools and process because it is about briefing quality, which the codebook defines under that theme. The model-reported confidence is only a hint for choosing what to read first, not a probability.
If you code at about two minutes a comment by hand, 600 comments is twenty hours of work. The assistant route turns that into roughly an hour of coding plus the checks in the next sections. At 61 comments the time saved is modest, and the real gain is a consistent, repeatable method.
Where sentiment labels go wrong, and how to spot-check them
Pull a random 10% sample, with a floor of 20 comments, and add every comment marked low confidence or sensitive. Read the comment first and the AI's labels second, so the labels do not anchor you. If 18 of 20 sampled comments match on theme, that is 90% agreement, above my working bar of 85%, which is my own rule of thumb and not a standard. Two misses in 20 are still worth reading closely, because the errors fall in familiar places:
| Illustrative comment | AI label | Human label | Why it slips |
|---|---|---|---|
| "Great, another reorganisation." | Positive | Negative | Sarcasm reads as praise |
| "Not bad, to be fair." | Negative | Mildly positive | Negation and understatement |
| "Love the people, dread the month-end crunch." | Positive | Mixed: culture positive, workload negative | One label forced onto two points |
| "It's fine." | Positive | Neutral | Faint praise |
| "Targets are ambitious." | Positive | Needs context | In some firms this means unrealistic |
The mixed row has a standing fix: code each point separately, one theme with its own sentiment. A single sentiment per comment hides the very trade-offs the client wants to see. Run a stability test too: shuffle the comments, run the same prompt again and count how many change theme. If more than one in five do, the definitions are too loose, so tighten the codebook and rerun everything instead of patching individual rows.
Reading every comment for details that point to one person
This is the anonymity check that no threshold can do for you. A group of 25 hides scores perfectly well and still lets a single comment give its author away. Ask an assistant to flag, then decide yourself:
For each comment, answer yes or no and give the phrase that triggers it:
1. Names or describes a specific person, or a role only one person holds
2. Refers to a specific event, date, project, client or location
3. Describes a personal circumstance (contract type, schedule, tenure,
family, health) that few colleagues share
4. Contains a distinctive phrase or catchphrase
Do not guess who wrote it.
The assistant's flags are a starting list. A comment that flags no risk to a model can still identify its author to a colleague who knows the team, so apply a second rule yourself: if someone would need the org chart to understand the comment, the org chart can also identify the writer. Then pick an action for each flagged comment:
| Illustrative comment | Risk | Action |
|---|---|---|
| "As the only designer working Fridays, I would like the rota to be fairer." | A unique role and schedule | Drop the quote and keep the theme, Flexibility and hours |
| "After the spring offsite, when the projector failed, leadership never explained the budget." | An event and a role | Generalise to "Leadership communication at company events" |
| "[colleague] never gives me feedback." | A named manager | Count it under Management and communication at company level only |
| "Great team, long hours." | None | Keep, and it may be quoted |
Small teams raise the stakes. In a team of six with four responses, a theme count of "3 mention their manager" tells everyone who did not. In a team of four, even the existence of a negative comment is traceable. For each reporting group, ask whether a colleague could name the people behind a count. If yes, merge the group, report it at company level, or paraphrase the theme without a number. This is also why quotes come only from the whole-agency set and never sit beside a team name.
Before any comment goes on a slide, put it through three questions. Does it contain a name, role, date, event, location, project or client? Would a colleague recognise the writer from the situation or the phrasing? Is the group behind it small enough to trace? One yes means paraphrase or drop. The tutorial on running staff surveys and exit interviews with AI analysis covers the survey side, which is worth reading before you design the next one.
Report slides that stay above the threshold
Write the thresholds on the method slide so the client can see them, in plain wording: "Results are shown for groups of at least five respondents. Comment themes are shown only where a group wrote at least five comments. Quotes are shown for the whole agency only, edited to remove identifying detail. Results that would identify fewer than five people are marked <5 or merged into a larger group."
A workable running order for the deck: method and confidentiality statement; response rate by reporting group; the top themes for the whole agency with counts; themes by reporting group, with suppression marked; sentiment by theme; three to five quotes; recommendations; and an appendix with the codebook and the checks run. Use counts rather than percentages for small groups. With 12 responses a single person is 8.3 percentage points, so "42%" gives a false sense of precision, while "5 of 12" is honest.
Clients often ask for every team to be shown, because a director wants to see "my team". Offer alternatives in order. First, merge small teams into a labelled group, as with Central functions above. Second, give each manager a one-page summary only where the team has ten or more responses. Third, offer a themes-only view for teams of five to nine, with no counts and no quotes. A line that helps in the conversation: "We can show what your team is saying once enough colleagues have answered that nobody can be picked out. Below that, we show it inside a larger group, so the promise made to staff holds."
Check overlapping reports before you send anything. If one slide shows the whole agency and another shows everyone except Leadership, the gap reveals Leadership. The same applies when you send different versions to the board and to managers. Put each cut on a list and ask what a reader could work out by combining any two.
A rough clock for this job, with illustrative timings: 40 minutes for the three scrub passes, 20 minutes for the codebook, 60 minutes for coding and the sentiment spot-check, 45 minutes for the identifying-detail review, and 90 minutes for slides. That is about four and a quarter hours. The anonymity steps account for roughly a third of it, which is a fair price for a promise you are about to make to 120 people.
Tool choice, retention and the deletion step
Start with whatever the client already holds a contract for. If the survey platform has its own comment analysis, or the client has an assistant inside its Microsoft 365 or Google Workspace tenancy, using it keeps the data under terms they have already accepted. Ask the client's IT contact what is switched on before you propose a new tool.
If you use your own assistant, pick a business plan. ChatGPT Business is $25 per user per month on monthly billing, or $20 on annual billing, with a two-seat minimum, and Claude Team is $20 on annual billing and $25 monthly. Neither trains on business content by default. On personal plans, turn off the model-training switch in the privacy settings. Either way, paste only the comment text and the new ID. The tutorial on whether free AI plans are safe with staff data goes through that question in more depth.
Plan the ending at the start. At the close of the project, delete the working files and the conversations, note the date in the project log, and send the client a short deletion confirmation. Deleted does not always mean gone at once: ChatGPT's Temporary Chat, for example, is not used for training but may be kept for up to 30 days. If the client has a retention policy for survey data, follow it, and if it has none, the tutorial on how long to keep AI notes is a useful starting point for proposing one.
Employee survey analysis questions
What minimum group size should I use for survey results?
Platforms differ. Microsoft's Viva Glint documentation shows defaults of five responses for aggregate groups and ten before write-in comments appear verbatim, and says the organisation chooses its own thresholds. A sensible working rule is five for scores and themes and ten before any quote, and higher for sensitive topics or very small organisations, merging small groups instead of hiding them one by one.
Is removing names enough to anonymise survey comments?
No. A comment can identify its author through a role, an event, a date or a turn of phrase. Under the GDPR, information counts as anonymous only if people are not identifiable by means reasonably likely to be used, and pseudonymised data is still personal data. Check the content of each comment, not only the name columns.
Can I paste employee comments into ChatGPT or Claude?
Only with the client's permission, on a plan that does not train on your content by default or with the training switch turned off, and after names and identifiers are stripped. Paste the comment text with a new ID, not the raw export. Agree a deletion step and put it in the contract, since chat histories and exports can linger.
How many coded comments should I check by hand?
Check at least 10% at random, with a floor of 20 or 30, plus every comment the model marked low confidence or flagged as sensitive. Sentiment errors cluster in sarcasm, understatement and mixed comments, so read those first. If more than one in five spot-checked codes is wrong, tighten the codebook and rerun instead of patching one comment at a time.
Further reads
- How HR Consultants Use AI for Policies, Letters and Cases — Other HR consulting jobs where AI helps with drafting.
- ChatGPT and Copilot for HR: Which Suits a Small People Team? — ChatGPT and Copilot compared for a small people team.
- How to Analyse Customer Feedback Surveys With AI — The same coding method on customer feedback.
- AI for HR in Small Businesses: 12 Tasks You Can Hand Over Safely — Twelve HR tasks a small business can hand over safely.
- How to Answer Staff HR Questions With an AI Helpdesk — Another HR service built on AI, for staff questions.
- AI Salary Benchmarking for HR Consultants: Sources, Bands and Checks — A repeatable method for turning survey and job-advert data into pay bands with AI, plus the checks that catch invented figures.
- Employee Handbook Template for Clients: Build a Master Copy With AI — How an HR consultant builds one master handbook with UK and US modules, a clause library and client fields, plus a checklist for the employment lawyer.
- HR Analytics and AI: Analyse Staff Turnover From a Spreadsheet Export — A privacy-first spreadsheet method for checking turnover and absence, with a worked rate and practical prompts.
- HR Audit Checklist: Run a Client Audit With AI and Check the Gaps — A consultant's document intake, gap matrix and sampling method for an AI-assisted HR audit.
- HR Consultant Proposal Template: Scope, Fees and Exclusions With AI — Copyable scope and fee clauses, plus a filled proposal for a 25-person client and a scope-change check.
- Can AI Summarise Training Feedback Forms for a Client Report? — Score ratings in a spreadsheet, theme the comments with AI, and produce a one-page client summary that protects delegates' anonymity.
- Friends and Family Test Comments: Summarise Them With AI — A GP practice routine for coding Friends and Family Test free text into themes, a one-page report and a you-said-we-did poster.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: Microsoft Learn Viva Glint survey privacy page, Culture Amp support article on reporting group minimums, GDPR Recital 26, ChatGPT and Claude plan and privacy pages (checked October to November 2026).