Structure your qualitative data into meaningful themes so you can spot patterns faster and turn raw feedback into decisions your team can actually act on.
Template components
Data Source & Context
Describe where the qualitative data came from and what question or goal prompted the research.
Example: 24 user interviews conducted in March 2024 with churned SaaS customers; goal was to understand why they cancelled within 90 days of signup.
Raw Codes & Tags
List the initial labels or codes you assigned to recurring words, phrases, or ideas across responses.
For each theme, write one specific action the team should take based on the evidence in the data.
Example: Theme 1 action — Redesign the first-run checklist and add a guided product tour triggered on day 1; Theme 2 action — Prioritize native Slack and HubSpot integrations in Q3 roadmap; Theme 3 action — Introduce live chat during business hours for trial users.
Full Copyable Template
<div class="tmpl-full-doc">
<div class="tmpl-full-header">
<div class="tmpl-full-title">Thematic Analysis Template</div>
<div class="tmpl-full-meta">[Analyst] · [Date] · [Data source]</div>
</div>
<div class="tmpl-full-section">
<div class="tmpl-full-section-title">1. Analysis Setup</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Data source</div>
<div class="tmpl-full-field-value">[e.g. 18 customer interviews, support tickets, churn calls, in-app feedback]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Date range</div>
<div class="tmpl-full-field-value">[e.g. Jan 1, 2026 – Mar 31, 2026]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Analyst name</div>
<div class="tmpl-full-field-value">[Your name]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Research question this analysis answers</div>
<div class="tmpl-full-field-value">[e.g. What is making trial users stall before activation, and what product issues are driving frustration after onboarding?]</div>
</div>
<div class="tmpl-full-tip">💡 Tip: Keep the research question narrow enough that your themes answer one decision clearly, not everything you learned.</div>
</div>
<hr class="tmpl-full-divider">
<div class="tmpl-full-section">
<div class="tmpl-full-section-title">2. Step 1 — Code Your Excerpts</div>
<div class="tmpl-full-tip">💡 Tip: A good code is short, specific, and close to what the user actually said (for example, "navigation confusion" or "missing feature: export"). A bad code is vague, broad, or interpretive too early (for example, "bad UX" or "users are unhappy").</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 1</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"Honestly, I got invited into the workspace and then just kind of sat there because I wasn't sure what I was supposed to do first. The checklist looked helpful, but half the items linked to docs instead of taking me into the product."</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">onboarding friction</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">unclear first step</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">docs dependency</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 2</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"We need to send the weekly report to clients as a CSV, and right now my ops manager is literally copying rows into Sheets. That's not sustainable if we roll this out to the rest of the team."</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">missing feature: export</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">manual workaround</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 3</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"The pricing jump between Pro and Business is pretty steep. We only need SSO and audit logs, but to get those we have to buy a bunch of stuff we won't use."</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">pricing concern</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">plan mismatch</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 4</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"I eventually found the usage dashboard, but I looked under Billing first, then Settings, then Analytics. The labels don't really match how our team thinks about this stuff."</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">navigation confusion</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">label mismatch</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 5</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"Support did answer, but it took almost two days and by then we'd already disabled the integration. If this happens during month-end close, that's a real problem for us."</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">support delay</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">integration risk</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 6</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"The Salesforce sync technically works, but the field mapping is super brittle. Any time we add a custom field, someone from RevOps has to go back in and babysit it."</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">integration maintenance burden</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">field mapping pain</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 7</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"What I wanted was just a quick way to see which accounts dropped off this week. Instead I had to build a custom view, save it, then re-open it. It feels like too many clicks for something we do every Monday."</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">workflow inefficiency</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">too many clicks</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 8</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"I like the product, but I still can't get procurement comfortable with the annual contract because we haven't proven adoption outside the pilot group. If there were a lighter plan for rollout, that would make the conversation easier."</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">pricing concern</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">adoption uncertainty</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">rollout risk</span>
</div>
</div>
</div>
<hr class="tmpl-full-divider">
<div class="tmpl-full-section">
<div class="tmpl-full-section-title">3. Step 2 — Group Codes into Themes</div>
<div class="tmpl-full-tip">💡 Tip: This step is a grouping operation. You are not re-reading raw data from scratch; you are clustering repeated codes from Step 1 into a smaller set of meaningful patterns.</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label" style="font-size:16px">Activation and Onboarding Gaps</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#555;margin-bottom:10px">Users struggle to get momentum early because first actions are unclear and setup guidance does not move them smoothly into the product.</div>
<div style="display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">onboarding friction · 1 excerpt</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">unclear first step · 1 excerpt</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">docs dependency · 1 excerpt</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label" style="font-size:16px">Workflow and Usability Friction</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#555;margin-bottom:10px">Core tasks take longer than expected because navigation, labels, and repeated actions do not match users' mental models.</div>
<div style="display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">navigation confusion · 1 excerpt</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">label mismatch · 1 excerpt</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">workflow inefficiency · 1 excerpt</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">too many clicks · 1 excerpt</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label" style="font-size:16px">Reporting and Operational Gaps</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#555;margin-bottom:10px">Teams are blocked from scaling usage when reporting outputs and routine operational needs require manual workarounds.</div>
<div style="display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">missing feature: export · 1 excerpt</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">manual workaround · 1 excerpt</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label" style="font-size:16px">Integration Reliability and Support Risk</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#555;margin-bottom:10px">Customers see integrations as business-critical, so brittle configuration and slow support responses amplify trust and operational risk.</div>
<div style="display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">support delay · 1 excerpt</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">integration risk · 1 excerpt</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">integration maintenance burden · 1 excerpt</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">field mapping pain · 1 excerpt</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label" style="font-size:16px">Pricing and Rollout Constraints</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#555;margin-bottom:10px">Willingness to expand is limited by plan structure, procurement concerns, and uncertainty about broader team adoption.</div>
<div style="display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">pricing concern · 2 excerpts</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">plan mismatch · 1 excerpt</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">adoption uncertainty · 1 excerpt</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">rollout risk · 1 excerpt</span>
</div>
</div>
</div>
<hr class="tmpl-full-divider">
<div class="tmpl-full-section">
<div class="tmpl-full-section-title">4. Theme Summary</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Activation and Onboarding Gaps</div>
<div class="tmpl-full-field-value">Total excerpt count: 1</div>
<div class="tmpl-full-field-value">Key insight: Early product value is hard to reach when users are not guided to a clear first success inside the interface.</div>
<div class="tmpl-full-field-value">Representative quote: "I got invited into the workspace and then just kind of sat there because I wasn't sure what I was supposed to do first."</div>
<div class="tmpl-full-field-value">Recommended action: Redesign first-run onboarding around one primary activation path with in-product actions instead of doc links.</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Workflow and Usability Friction</div>
<div class="tmpl-full-field-value">Total excerpt count: 2</div>
<div class="tmpl-full-field-value">Key insight: Users can complete important tasks, but the path is inefficient and mentally taxing because the UI structure does not reflect their expectations.</div>
<div class="tmpl-full-field-value">Representative quote: "The labels don't really match how our team thinks about this stuff."</div>
<div class="tmpl-full-field-value">Recommended action: Audit high-frequency workflows, rename ambiguous navigation items, and reduce click paths for recurring jobs.</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Reporting and Operational Gaps</div>
<div class="tmpl-full-field-value">Total excerpt count: 1</div>
<div class="tmpl-full-field-value">Key insight: Missing operational outputs like export force manual processes that make the product harder to scale across teams.</div>
<div class="tmpl-full-field-value">Representative quote: "My ops manager is literally copying rows into Sheets."</div>
<div class="tmpl-full-field-value">Recommended action: Prioritize CSV/export capabilities for core reports and validate the highest-value reporting formats with admins and operations users.</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Integration Reliability and Support Risk</div>
<div class="tmpl-full-field-value">Total excerpt count: 2</div>
<div class="tmpl-full-field-value">Key insight: When integrations are fragile and support is slow, customers perceive the platform as risky for critical workflows.</div>
<div class="tmpl-full-field-value">Representative quote: "If this happens during month-end close, that's a real problem for us."</div>
<div class="tmpl-full-field-value">Recommended action: Improve self-serve diagnostic tooling, harden field mapping flows, and define faster response paths for integration-related issues.</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Pricing and Rollout Constraints</div>
<div class="tmpl-full-field-value">Total excerpt count: 2</div>
<div class="tmpl-full-field-value">Key insight: Expansion interest exists, but packaging and contract structure make it difficult for buyers to justify broader rollout.</div>
<div class="tmpl-full-field-value">Representative quote: "We only need SSO and audit logs, but to get those we have to buy a bunch of stuff we won't use."</div>
<div class="tmpl-full-field-value">Recommended action: Test packaging options for security features, pilot-friendly rollout plans, and pricing narratives tied to phased adoption.</div>
</div>
</div>
<hr class="tmpl-full-divider">
<div class="tmpl-full-section">
<div class="tmpl-full-section-title">5. Analysis Wrap-Up</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Top finding</div>
<div class="tmpl-full-field-value">[e.g. Users see value in the product, but friction in onboarding, workflows, and packaging slows activation and expansion.]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Most urgent theme</div>
<div class="tmpl-full-field-value">[e.g. Integration Reliability and Support Risk]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Recommended next step</div>
<div class="tmpl-full-field-value">[e.g. Review these themes with Product, Support, and Growth; choose one workflow fix and one packaging test to validate this month.]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Share with (stakeholder)</div>
<div class="tmpl-full-field-value">[e.g. Head of Product, PM for Onboarding, Support Lead, Revenue Operations]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Date completed</div>
<div class="tmpl-full-field-value">[Completion date]</div>
</div>
<div class="tmpl-full-tip">💡 Tip: A strong wrap-up turns themes into decisions. End with what should change, who should see it, and what happens next.</div>
</div>
</div>
How to use it
Collect and consolidate your responses Paste all your qualitative data — interview transcripts, open-ended survey answers, or support tickets — into a single document before you begin coding.
Read through once without coding Do a full first pass of all responses to get a feel for the overall sentiment and recurring language before you assign any labels.
Apply codes and populate the Raw Codes section Go response by response and tag each meaningful phrase or idea with a short label, then list every unique code in the Raw Codes section of this template.
Group codes into themes and define actions Cluster related codes into the Emerging Themes section, then write one concrete recommended action per theme so your findings lead directly to next steps.
What it looks like filled in
Onboarding Friction
"I signed up and had no idea where to start — I poked around for 20 minutes and then just gave up."
→ Add an interactive day-1 onboarding checklist that guides users to their first key action within 5 minutes of signup.
Missing Integrations
"We use HubSpot for everything — once I realized there was no native sync I knew we'd have to find something else."
→ Prioritize HubSpot and Slack native integrations in the next sprint and communicate the roadmap publicly to reduce churn risk.
Slow Support Response
"I submitted a ticket when I got stuck and heard nothing back for three days — by then I'd already cancelled."
→ Introduce live chat support for all trial and new-paid users during business hours to resolve blockers before they become churn.
Why teams skip the template
Coding hundreds of responses by hand takes days Manually reading, tagging, and grouping qualitative data across dozens or hundreds of responses is slow, exhausting work that delays decisions by days or weeks.
Human coding is inconsistent and hard to replicate Two people reviewing the same data will assign different codes and weight themes differently, making your findings unreliable and difficult to defend to stakeholders.
The template doesn't scale with your data volume When you go from 30 interview responses to 300 support tickets or survey answers, the manual process breaks down completely — Usercall analyzes any volume of qualitative data in minutes and surfaces themes, quotes, and recommended actions automatically.
Analyze your qualitative data automatically — no template needed