Skip to main content
Sort open-ended responses into themes, then break those themes down by segment. This example has been tested and validated with Claude.

When to use this

  • Your question has no pre-built answer to compare- open text like “what’s stopping you from doing X” or “what do you wish we’d build next” has to be read and sorted into categories before it can be cross-tabbed.
  • If you already have a rating, tier, or other existing attribute, use the attribute-based cross-tab prompt instead,  it’s faster and involves fewer judgment calls.
For the full walkthrough,  including a worked example on a 300-response synthetic dataset and a side-by-side comparison with the attribute-based version, see the full themed cross-tab guide.

Prompt

Replace [OPEN-ENDED QUESTION COLUMN], [LIST YOUR SEGMENT VARIABLES], and [N] with your own column names and threshold.

Setup

Code execution must be enabled for step 4’s verification to run. It’s on by default for Team and Enterprise accounts. Free, Pro, and Max users: enable it under Settings > Capabilities.
If your survey data lives in Sprig, skip the export, the Sprig MCP connects live surveys and responses directly into Claude so the analysis runs on current data.

How it works

1

Theme identification

Reads all non-blank responses and identifies 5–8 recurring themes. Responses that don’t clearly fit go into an “Other/unclear” bucket rather than being forced into a theme.
2

Theme preview with quotes

Returns 2–3 example quotes per theme so you can verify the coding before trusting the counts. If a theme groups things you’d keep separate, check the quotes, tell Claude the split you want, and ask it to recode.
3

Theme assignment

Assigns each response to exactly one best-fitting theme as a new column. Uses code to count, not estimation.
4

Cross-tabulate

Cross-tabs the theme variable against your segment variables. Returns counts and row percentages for each cell.
5

Flag thin cells

Any cell below your threshold (e.g., 10 respondents) is flagged, including cells with zero respondents. The total flagged is computed from the full table at once,  not assembled from separate counts. More themes × more segments = more flagged cells. That’s your sample size talking, not a failure of the method.
6

Independent verification

Every number is recomputed using a genuinely different method before it’s reported. This step caught a specific error in testing: cells with exactly zero respondents were counted separately and then dropped from the flagged total. The prompt now requires a single count computed directly from the full table, and an independent recompute to catch this before it reaches you.
7

Plain-language summary

2–3 patterns, with explicit notes on which differences are meaningful versus likely noise given the sample size.
8

Exportable table

The final table is saved as a downloadable image, formatted for quick reading.

Customize for your dataset

Verify your own results

  • Do theme counts sum correctly? Total coded responses should equal your non-blank count.
  • Spot-check at least one cell. Manually filter one segment and compare its theme breakdown to what was reported.
  • Treat flagged cells as unreliable. Even if a number looks clean, don’t act on it if the cell was flagged.
The verification steps in the prompt (steps 5–6) catch a lot, but they’re a safety net, not a guarantee. Spot-check before you publish or present.