Generate Video Transcript Analysis

Run AI Analysis on Transcripts with an LLM

Introduction

This tutorial shows how to use UserTesting session transcripts as input to Large Language Models (LLMs) in order to generate summaries, extract themes, and analyze sentiment at scale.

UserTesting transcripts capture rich, in-the-moment user feedback. When combined with LLMs, they enable fast synthesis of qualitative insights that would otherwise require hours of manual review.

What you’ll build

An AI-ready pipeline that:

  1. Retrieves session transcripts in WebVTT format
  2. Converts transcripts into clean plain text
  3. Chunks long transcripts safely
  4. Sends transcript text to an LLM for:
    • Summarization
    • Theme clustering
    • Sentiment extraction

Target audience

  • ML engineers
  • Data scientists
  • Advanced UX researchers
  • AI platform and notebook users

This tutorial is especially relevant for teams using:

  • Databricks
  • Vertex AI
  • Azure ML
  • Jupyter or notebook-based LLM workflows

Prerequisites

  • A valid access token (ACCESS_TOKEN). Go to Authorization for details.
  • A known session ID, referred to as SESSION_ID or sessionId. Use the GET /api/v2/sessionResults endpoint to find all completed sessions within a test.
  • Access to an LLM (OpenAI, internal LLM, or cloud provider)
  • A notebook or scripting environment (Python recommended)

Steps

Step 1 — Retrieve a session transcript (WebVTT)

Endpoint

GET /api/v2/sessionResults/SESSION_ID/transcript

What this returns

  • WebVTT text
  • Includes timestamps and cue blocks
  • Optimized for video playback, not direct NLP use

Example (curl)

curl --location 'https://api.use2.usertesting.com/api/v2/sessionResults/SESSION_ID/transcript' \
--header 'Authorization: Bearer ACCESS_TOKEN'

Sample response

WEBVTT

00:00:00.000 --> 00:00:02.000
I’m not sure where to click next.

00:00:02.000 --> 00:00:06.000
This feels confusing compared to the old design.

Step 2 — Convert WebVTT to plain text

WebVTT includes metadata that must be removed before sending text to an LLM.

What to remove

  • WEBVTT header
  • Timestamps
  • Blank cue separators
  • Notes or comments

Resulting plain text

I’m not sure where to click next.
This feels confusing compared to the old design.

Simple parsing approach (conceptual)

FOR each line:
  IF line contains "-->" → skip
  IF line starts with "WEBVTT" → skip
  IF line is empty → skip
  ELSE → keep line

Step 3 — Chunk transcripts for LLMs

Transcripts can be long and may exceed model token limits.

Recommended chunking strategies

  • Chunk by time (e.g., every 30–60 seconds)
  • Chunk by sentence count
  • Chunk by character or token length

Best practices

  • Preserve sentence boundaries
  • Maintain chunk order
  • Keep chunk metadata (sessionId, chunk index)

Example chunk structure

{
  "sessionId": "UUID",
  "chunkIndex": 3,
  "text": "This part of the flow feels broken..."
}

Step 4 — Send transcripts to an LLM

Once chunked, transcripts can be sent to an LLM for different tasks.

A. Transcript summarization

Goal Produce a concise summary of user feedback

Prompt example

Summarize the following user testing transcript.
Focus on usability issues and emotional reactions.

B. Theme clustering

Goal Identify recurring patterns across many sessions

Approach

  • Run LLM embeddings on transcript chunks
  • Cluster by semantic similarity
  • Label clusters using LLM-generated titles

Example themes

  • Navigation confusion
  • Trust concerns
  • Feature discoverability
  • Performance complaints

C. Sentiment extraction

Goal Detect emotional signals and severity

Prompt example

Analyze the sentiment of this transcript.
Return:
- Overall sentiment (positive, neutral, negative)
- Key emotional drivers

Common outputs

  • Sentiment score
  • Highlighted negative moments
  • Emotion labels (frustration, delight, confusion)

Step 5 — Store AI outputs for downstream use

Recommended tables or collections:

transcript_chunks
  • session_id
  • chunk_index
  • text
ai_summaries
  • session_id
  • summary_text
  • model_version
  • created_at
ai_themes
  • theme_label
  • session_id
  • confidence_score
ai_sentiment
  • session_id
  • sentiment
  • intensity

Storing outputs enables reuse across dashboards, alerts, and reports.


Step 6 — Scaling considerations

Performance

  • Parallelize transcript processing carefully
  • Respect API rate limits on transcript retrieval

Cost control

  • Summarize per session before cross-session analysis
  • Cache transcript text and LLM outputs

Data governance

  • Treat transcripts as sensitive qualitative data
  • Apply access controls consistently

Common pitfalls

PitfallRecommendation
Sending raw WebVTT to LLMsAlways strip timestamps
Overlong promptsChunk transcripts
Losing contextPreserve ordering metadata
One-off analysisPersist results for reuse

What you can build next

With AI-analyzed transcripts, teams can:

  • Generate executive summaries automatically
  • Detect UX regressions early
  • Power AI research assistants
  • Combine qualitative themes with QXscore dashboards

Summary

You now have an end-to-end pattern to:

  • Retrieve rich qualitative transcripts
  • Convert them into AI-friendly text
  • Analyze them using LLMs at scale

This approach unlocks fast synthesis, deeper insight, and automated storytelling from UserTesting research data—without manual review.