Use Case

Customer Satisfaction (CSAT) Surveys

January 2026 · 11 min read

CSAT measures how happy customers are right now. Unlike NPS (which predicts loyalty), CSAT captures immediate satisfaction after a specific interaction. Simple question, immediate answer, actionable data.

CSAT vs NPS vs CES

Three common satisfaction metrics, each measuring something different:

  • CSAT - "How satisfied are you?" Measures happiness with a specific interaction.
  • NPS - "Would you recommend us?" Predicts long-term loyalty.
  • CES - "How easy was this?" Measures effort required from the customer.

Use CSAT after purchases, support interactions, or feature usage. Use NPS for overall relationship health. Use CES after problem resolution.

The Basic CSAT Question

The standard CSAT uses a 1-5 satisfaction scale:

form.addRow(row => {
    row.addRatingScale('satisfaction', {
        preset: 'satisfaction',
        label: 'How satisfied are you with our service?',
        isRequired: true
    });
});

The satisfaction preset gives you labels from "Very dissatisfied" to "Very satisfied". Clean, familiar, works everywhere.

Star Ratings

Stars are universally understood. Everyone knows what 5 stars means. See the Star Rating tutorial for all configuration options.

form.addRow(row => {
    row.addStarRating('rating', {
        label: 'Rate your experience',
        maxStars: 5,
        size: 'lg',
        showConfettiOnMax: true,
        isRequired: true
    });
});

Options you can configure:

  • maxStars - Usually 5, sometimes 10
  • allowHalf - Enable 4.5-star ratings
  • size - 'sm', 'md', 'lg', or 'xl'
  • showConfettiOnMax - Celebrate perfect scores

Pro tip

Star ratings work best for product reviews and service ratings. For agree/disagree questions, use Likert scales instead.

Emoji Ratings

Emojis add personality and reduce cognitive load. People react to faces. See the Emoji Rating tutorial for all presets.

form.addRow(row => {
    row.addEmojiRating('feeling', {
        preset: 'satisfaction',
        label: 'How do you feel about your purchase?',
        size: 'lg',
        showLabels: true
    });
});

Built-in presets:

  • satisfaction - Angry to delighted faces
  • mood - Sad to excited
  • effort - Struggling to effortless
  • agreement - Thumbs down, shrug, thumbs up

Likert Scales

For agreement-based questions, Likert scales are standard. See the Rating Scale tutorial for all presets including NPS and CES.

form.addRow(row => {
    row.addRatingScale('agreement', {
        preset: 'likert-5',
        label: 'The product met my expectations',
        lowLabel: 'Strongly disagree',
        highLabel: 'Strongly agree'
    });
});

Use 5-point for quick surveys, 7-point when you need more granularity. The likert-5 and likert-7 presets handle the labels.

Thumb Ratings

Sometimes binary is enough. Was this helpful? Yes or no. See the Thumb Rating tutorial for configuration options.

form.addRow(row => {
    row.addThumbRating('helpful', {
        label: 'Was this article helpful?',
        showLabels: true,
        upLabel: 'Yes',
        downLabel: 'No',
        size: 'lg'
    });
});

// Show follow-up only for negative feedback
const feedback = form.addSubform('feedback', {
    isVisible: () => form.thumbRating('helpful')?.value() === 'down'
});

feedback.addRow(row => {
    row.addTextarea('reason', {
        label: 'What was missing or unclear?',
        rows: 2
    });
});

Perfect for knowledge base articles, help docs, and quick feedback. Low friction, high response rate.

Customer Effort Score (CES)

Measure how easy it was to accomplish something:

form.addRow(row => {
    row.addRatingScale('effort', {
        preset: 'ces',
        label: 'How easy was it to resolve your issue?',
        lowLabel: 'Very difficult',
        highLabel: 'Very easy'
    });
});

CES predicts repeat purchases better than satisfaction alone. If something was hard, customers won't do it again even if they're satisfied with the outcome.

Need ready-made survey templates?

Conditional Follow-Up Questions

The rating alone tells you what, not why. Add follow-up questions that adapt based on the score. See the Conditional Visibility tutorial for more patterns.

const followUp = form.addSubform('followUp', {
    isVisible: () => {
        const rating = form.starRating('rating')?.value();
        return rating !== null && rating !== undefined;
    }
});

followUp.addRow(row => {
    row.addTextarea('feedback', {
        label: () => {
            const rating = form.starRating('rating')?.value() ?? 0;
            if (rating >= 4) return 'What did you like most?';
            if (rating >= 3) return 'How can we improve?';
            return 'What went wrong?';
        },
        placeholder: 'Share your thoughts...',
        rows: 3,
        isRequired: () => {
            const rating = form.starRating('rating')?.value() ?? 0;
            return rating <= 2; // Required for low ratings
        }
    });
});

Key patterns:

  • Different questions for high vs low ratings
  • Required feedback for poor experiences
  • Optional comments for satisfied customers

Rating Multiple Aspects

One overall score hides details. Use matrix questions to rate multiple dimensions. See the Matrix Question tutorial for advanced configurations.

const aspects = form.addSubform('aspects', {
    title: 'Rate each aspect of your experience'
});

aspects.addRow(row => {
    row.addMatrixQuestion('ratings', {
        rows: [
            { id: 'quality', label: 'Product Quality' },
            { id: 'value', label: 'Value for Money' },
            { id: 'delivery', label: 'Delivery Speed' },
            { id: 'support', label: 'Customer Support' }
        ],
        columns: [
            { id: '1', label: 'Poor' },
            { id: '2', label: 'Fair' },
            { id: '3', label: 'Good' },
            { id: '4', label: 'Very Good' },
            { id: '5', label: 'Excellent' }
        ],
        selectionMode: 'single'
    });
});

Now you know exactly which aspects need work. Quality might be great while support needs improvement.

Calculating Aggregate Scores

Show respondents their average score in real-time:

// Calculate average satisfaction score
const avgScore = form.computedValue(() => {
    const matrix = form.matrixQuestion('ratings')?.value();
    if (!matrix) return null;

    const values = Object.values(matrix).filter(v => v !== null);
    if (values.length === 0) return null;

    const sum = values.reduce((acc, v) => acc + parseInt(v as string), 0);
    return (sum / values.length).toFixed(1);
});

form.addRow(row => {
    row.addTextPanel('score', {
        computedValue: () => {
            const score = avgScore();
            return score ? `Average Score: ${score}/5` : '';
        },
        isVisible: () => avgScore() !== null,
        customStyles: { fontWeight: 'bold', fontSize: '1.2em' }
    });
});

Computed values update automatically as users fill in the matrix.

When to Send CSAT Surveys

Timing matters. Survey too early and they haven't formed an opinion. Too late and they've forgotten:

  • After purchase - 24-48 hours post-delivery
  • After support - Immediately after ticket closes
  • After onboarding - End of first week
  • After feature use - After completing key action
  • In-app - Triggered by specific events

Pro tip

Don't survey after every interaction. Pick the moments that matter. One great survey beats five ignored ones.

Complete Example

A full CSAT survey with overall rating, aspect breakdown, and conditional follow-up:

export function csatSurvey(form: FormTs) {
    // Main satisfaction question
    form.addRow(row => {
        row.addStarRating('overall', {
            label: 'Overall, how satisfied are you?',
            maxStars: 5,
            size: 'lg',
            isRequired: true
        });
    });

    // Aspect ratings
    form.addRow(row => {
        row.addMatrixQuestion('aspects', {
            rows: [
                { id: 'quality', label: 'Quality' },
                { id: 'speed', label: 'Speed' },
                { id: 'support', label: 'Support' }
            ],
            columns: [
                { id: '1', label: '1' },
                { id: '2', label: '2' },
                { id: '3', label: '3' },
                { id: '4', label: '4' },
                { id: '5', label: '5' }
            ]
        });
    });

    // Conditional follow-up
    const followUp = form.addSubform('followUp', {
        isVisible: () => form.starRating('overall')?.value() !== null
    });

    followUp.addRow(row => {
        row.addTextarea('comments', {
            label: () => {
                const rating = form.starRating('overall')?.value() ?? 0;
                return rating >= 4
                    ? 'What did you enjoy most?'
                    : 'How can we improve?';
            },
            rows: 3
        });
    });

    form.configureSubmitButton({ label: 'Submit Feedback' });
}

Analyzing CSAT Data

Calculate Your CSAT Score

CSAT percentage = (Satisfied responses / Total responses) x 100

"Satisfied" usually means 4-5 on a 5-point scale. Some count only 5s as truly satisfied. Pick a definition and stick with it.

Benchmark by Industry

  • SaaS: 70-80%
  • E-commerce: 75-85%
  • Financial services: 70-75%
  • Telecom: 60-70%

Segment Your Data

Look at CSAT by:

  • Product/service category
  • Customer tenure
  • Support channel (chat vs email vs phone)
  • Support agent
  • Time of day/week

Acting on Feedback

Low Scores (1-2)

These need immediate attention. If they left contact info, reach out within 24 hours. Apologize, understand, fix.

Medium Scores (3)

The "meh" zone. They're not angry but not happy. Find out what would make it a 5. Often it's small things.

High Scores (4-5)

Ask for reviews, referrals, or testimonials. Happy customers are your best marketing.

Common Questions

What's a good CSAT score?

Above 75% is generally good. Above 85% is excellent. But context matters - compare to your industry and track trends over time rather than obsessing over a single number.

Should I use a 5-point or 10-point scale?

5-point is standard for CSAT. It's quick to answer and provides enough granularity. 10-point scales take longer and often collapse to 5 points anyway (people rarely use 2, 3, 4, 6, 7).

How many questions should a CSAT survey have?

1-3 questions for transactional CSAT. One rating plus one optional open-ended question is the sweet spot. More questions = lower response rates. Save detailed surveys for relationship feedback.

Should the follow-up question be required?

Make it required for low scores (1-2) and optional for high scores. Unhappy customers usually have something specific to say. Happy customers often just want to move on.

How often should I survey the same customer?

No more than once per transaction type per quarter. If someone buys weekly, don't survey every purchase. Sample randomly or survey after their first purchase, then periodically.

Ready to Measure Satisfaction?

Build a CSAT survey in minutes. Start collecting feedback today.