For nonprofit and public sector teamsTemplates

Find themes in comments or interview notes, for nonprofit and public sector teams

Read a set of comments, survey answers or interview notes, label each one, group the labels into themes, then count each theme and back it with two real quotes.

This is the version for nonprofit and public sector teams. The steps and checks are the same as in the general template; each prompt carries one added line about your setting, and the examples are from your kind of work.

Sample results: runs and scores on this page are illustrations while testing is set up. How we test

  • Who it is for: Program officers, communications staff and analysts in nonprofits and public agencies who report what residents, clients, volunteers or staff said in open comments.
  • Time: 15 minutes

Download it, in the format you use

  • Prompt chain

    Copy each step into ChatGPT or Claude, one after another.

  • Checklist

    Follow the steps and check off the checks by hand.

  • Claude skill

    A folder Claude loads, so it follows the steps by itself.

  • n8n file

    Import into n8n and connect your own AI account.

Using a download:How to use this in n8nHow to install a Claude skill

How it runs

Select a part to see its prompt, input, output and check.

  1. Runs on each piece

The same job, with and without the template

Sample

One plain prompt

What are residents saying about the proposed change to the bus route? (The same 20 comments are pasted below.)

Residents have mixed views on the proposed route change. Many are worried about losing stops that matter to them, especially the clinic and the senior center. Several would welcome longer service hours, including evenings and weekends. A few say they only heard about the plan late or could not find information about it, and some praise the drivers.

Overall, residents like the idea of more service but want the stops they depend on kept and clearer communication from the county.

Problem:It gives no counts and no quotes, calls the notice problems 'a few' though 5 of the 20 comments raise them, and merges evening and Saturday service, so two different views on hours blur into one.

With this template

The same input, run through the steps.

Swipe sideways to see all columns

ThemeCountQuote 1Quote 2
Losing the clinic and senior center stops5The new route skips the clinic and that is the stop I use most.The senior center stop is the only one with a bench and a shelter.
Late notice and hard-to-find information5I only found out about this plan from a neighbor, not from the county.The meeting notice came two days before the meeting, too late.
Evening service4I support more evening buses, I work until 8.Evening service would let me take the night class at the community college.
Saturday service3Buses on the Saturday schedule are so rare that I do not bother.Saturday service is the real problem, not the route.
Friendly, on-time drivers2Drivers are friendly and patient with my wheelchair ramp.Drivers are always on time on my route.

One-off comments: Why are you changing a route that works for people like us? Total comments counted: 20

  • Check:Every quote is really in the comments: All 20 quotes are found in the list of comments.
  • Check:Every theme names its comments: Five themes list their comment numbers, and one comment stays a one-off.
  • Check:Every first quote is really in the comments: Five first quotes, each found word for word.
  • Check:Every second quote is really in the comments: Five second quotes, each found word for word.
  • Check:Every theme has a count and two quotes: All five themes have a count and two quotes.
  • Check:The total matches the number of comments: 5 + 5 + 4 + 3 + 2 plus 1 one-off comment makes 20.
  • For your read:The themes fit what people said: Would a resident who wrote one of these comments find it under the right theme?

Runs and scores

Sample

Claude, Sonnet model

October 4, 2026, typical sample

  • Check:Every quote is really in the comments

    All 20 comments are labeled, and every quote is found in the list.

  • Check:Every theme names its comments

    Five themes list their comment numbers, and one comment stays a one-off.

  • Check:Every first quote is really in the comments

    Five first quotes, each found word for word.

  • Check:Every second quote is really in the comments

    Five second quotes, each found word for word.

  • Check:Every theme has a count and two quotes

    All five themes have a count and two quotes.

  • Check:The total matches the number of comments

    5 + 5 + 4 + 3 + 2 plus 1 one-off comment makes 20.

  • For your read:The themes fit what people said

    Would a resident who wrote one of these comments find it under the right theme?

Fixed: Nothing needed fixing: every check passed on the first pass.

Met 7 of 7

1 of these is for your read: the tool hands it to you.

ChatGPT, GPT model

October 5, 2026, easy sample

  • Check:Every quote is really in the comments

    All 10 comments are labeled, and every quote is found in the list.

  • Check:Every theme names its comments

    Two themes list their comment numbers, parking and the helpful session, and one comment stays a one-off.

  • Check:Every first quote is really in the comments

    Two first quotes, each found word for word.

  • First pass failed:Every second quote is really in the comments

    The second quote for the helpful session read "The coordinator made my role clear", which is not in the comments word for word.

  • Check:Every theme has a count and two quotes

    Both themes have a count and two quotes.

  • Check:The total matches the number of comments

    5 + 4 plus 1 one-off comment makes 10.

  • For your read:The themes fit what people said

    Do the two themes say what the quotes say, and is the comment about length worth its own line?

Fixed: The count step ran again with the rule to copy quotes word for word, and the quote now reads "The coordinator explained my role clearly." Nothing else changed.

Met 7 of 7

1 of these is for your read: the tool hands it to you.

n8n, import format 2.20

October 6, 2026, tricky sample

  • Check:Every quote is really in the comments

    All 14 comments are labeled, and every quote is found in the list.

  • Check:Every theme names its comments

    Five themes list their comment numbers, and one comment stays a one-off.

  • Check:Every first quote is really in the comments

    Five first quotes, each found word for word.

  • Check:Every second quote is really in the comments

    Five second quotes, each found word for word.

  • Check:Every theme has a count and two quotes

    All five themes have a count and two quotes.

  • First pass failed:The total matches the number of comments

    The first count put comment 7 in three themes, so the counts and the one-off came to 16, not 14.

  • For your read:The themes fit what people said

    Does the long comment about the history screen, the freezing and the training sit under the theme you would pick?

Fixed: The workflow sent the count step back once with the one-theme rule restated: comment 7 stays in its first theme, so the counts are 3, 3, 3, 2 and 2 plus 1 one-off, a total of 14.

Met 7 of 7

1 of these is for your read: the tool hands it to you.

The steps, and the check on each

  1. Step 1: Label each comment

    Give every comment a short label that says what it is about.

    Hands back: A table with every comment, its number and its label.

    Check:Every quote is really in the comments

    A plain rule. If it fails, run the step again (the n8n file does this for you).

  2. Step 2: Group the labels into themes

    Join labels that mean the same thing into a small number of themes.

    Hands back: A table of themes with the comment numbers in each, and a list of one-off comments.

    Check:Every theme names its comments

    A plain rule. If it fails, run the step again (the n8n file does this for you).

  3. Step 3: Count each theme and pick two quotes

    Count the comments in each theme and back each theme with two real quotes.

    Hands back: A table of themes with a count and two quotes each, and a total.

    Check:Every first quote is really in the comments

    A plain rule. If it fails, run the step again (the n8n file does this for you).

After the last step

  • Check:Every second quote is really in the comments

    A plain rule. If it fails, run the step again (the n8n file does this for you).

  • Check:Every theme has a count and two quotes

    A plain rule. If it fails, run the step again (the n8n file does this for you).

  • Check:The total matches the number of comments

    A second look by the AI. If it fails, run the step again (the n8n file does this for you).

  • Check:The themes fit what people said

    You check this one. If it fails, it is flagged for you.

What you need first

  • The comments(needed)

    Paste the comments with one comment on each line. Remove names and other personal details first.

  • What you want to learn(needed)

    The question the comments were collected to answer, or what you need to decide.

Ways to adapt it

  • To report themes by group (for example by team or by month), add the group to each comment line before you paste and add a Group column to the first table.
  • To change how many themes you get, change the numbers in the Group step's rules.
  • For a large set of comments, run the Label step on batches of 50, then paste all the labels into the Group step.
  • If the quotes are too long for your report, add a word limit to the Count step's rules, but keep the check that quotes are copied exactly.

Change any step or check in the Editor, then download it again.

Words that fit nonprofit and public sector teams

  • Residents, clients, participants and members are the people who commented; use the word the comments themselves use.
  • A comment taken at a public hearing or from a public comment period is on the record, so quote it exactly as written and leave its wording alone.
  • A theme says what people said, not what the agency should do; keep recommendations out of theme names.
Try it with a sampleSample

Twenty short comments, one per line, with about five themes, one comment that touches two themes and one that fits no theme; a mix of support, worry and praise.

The comments
The new route skips the clinic and that is the stop I use most. I support more evening buses, I work until 8. Buses on the Saturday schedule are so rare that I do not bother. Please keep the stop outside the senior center. The clinic stop needs to stay. My mother has dialysis three times a week. Evening service would let me take the night class at the community college. The online route map is confusing and I could not tell whether the clinic stop is closing. Drivers are friendly and patient with my wheelchair ramp. I only found out about this plan from a neighbor, not from the county. A flyer at the stops would have helped, I do not use the website. Saturday buses run once an hour at best. The senior center stop is the only one with a bench and a shelter. Love the idea of a bus that runs after 7 pm. The meeting notice came two days before the meeting, too late. The proposed map shows stops that are a long walk from the senior housing on Elm. Drivers are always on time on my route. The survey link did not work on my phone. I would pay a higher fare for more evening trips. Saturday service is the real problem, not the route. Why are you changing a route that works for people like us?
What you want to learn
What are residents saying about the proposed change to the bus route?

The scoring guide

Sample

One criterion for each check, marked met or not met. (The guides in Quality rate a whole piece of work on three levels.) Under each one is how the three sample runs scored.

Download the scoring guide (Markdown)

  • Every quote is really in the comments

    A plain rule

    Meets:Every quote beside a comment is words that are really in that comment.
    Does not meet:A quote is paraphrased, joined from two comments, or not in the comments.
    Claude:Met
    ChatGPT:Met
    n8n:Met
  • Every theme names its comments

    A plain rule

    Meets:Every theme has a name and the numbers of the comments in it.
    Does not meet:A theme has no name or no comment numbers.
    Claude:Met
    ChatGPT:Met
    n8n:Met
  • Every first quote is really in the comments

    A plain rule

    Meets:The first quote of every theme is really in the comments.
    Does not meet:A first quote is reworded or is not in the comments.
    Claude:Met
    ChatGPT:Met
    n8n:Met
  • Every second quote is really in the comments

    A plain rule

    Meets:The second quote of every theme is really in the comments.
    Does not meet:A second quote is reworded or is not in the comments.
    Claude:Met
    ChatGPT:Met
    n8n:Met
  • Every theme has a count and two quotes

    A plain rule

    Meets:Every theme row has a count and two quotes.
    Does not meet:A theme row is missing its count or one of its quotes.
    Claude:Met
    ChatGPT:Met
    n8n:Met
  • The total matches the number of comments

    A second look by the AI

    Meets:The total equals the number of comments, and the theme counts plus the one-off comments add up to it.
    Does not meet:The total is not the number of comments, or the counts leave comments out or count one twice.
    Claude:Met
    ChatGPT:Met
    n8n:Met
  • The themes fit what people said

    You check this one

    Meets:You read the themes and a few quotes under each, and each theme says what its quotes say.
    Does not meet:A theme says more than its quotes do, or an important point is missing or lost inside a bigger theme.
    Claude:For your read
    ChatGPT:For your read
    n8n:For your read

Claude: met 7 of 7 (including 1 for your read)

ChatGPT: met 7 of 7 (including 1 for your read)

n8n: met 7 of 7 (including 1 for your read)

Which one fits?

Analyze

Analyze

Write

Last run
October 6, 2026: n8n, import format 2.20 (sample run)
Tools and versions
Claude, Sonnet model; ChatGPT, GPT model; n8n, import format 2.20
What was checked
The files, against each tool’s import format, and 3 sample runs, each check’s finding recorded.
Version
1.0
What changed
First release.

Report a problem with this templateHow we test