---
title: "Build a CSAT survey"
description: "Measure satisfaction on a 1 to 5 scale and collect a focused follow-up after a product interaction."
order: 3
type: "guide"
topic: "Use cases"
tags:
  - "CSAT"
  - "survey"
  - "rating"
  - "insights"
updated: "2026-07-15"
---

A CSAT survey asks how satisfied someone was with a specific interaction, on a 1 to 5 scale. Mark the rating as CSAT so Fillo insights interpret it correctly.

## Define the interaction clearly

```ts
const csat = defineForm({
  id: "support-csat",
  title: "Rate your support experience",
  pages: [{
    id: "feedback",
    blocks: [
      {
        id: "satisfaction",
        kind: "rating",
        label: "How satisfied are you with the help you received?",
        max: 5,
        insightsMetric: "csat",
        required: true,
      },
      {
        id: "improve",
        kind: "long_text",
        label: "What could we improve?",
        visibleIf: [{ fieldId: "satisfaction", op: "lt", value: 4 }],
      },
      { id: "ticket_id", kind: "hidden", label: "Ticket", paramName: "ticket" },
    ],
  }],
  settings: { submitLabel: "Send rating", successTitle: "Feedback received" },
});
```

Name the thing being rated in the label — the support case, purchase, onboarding step, or feature. A generic satisfaction question gives you less to act on.

## Scope repeat responses

Prefill the hidden interaction ID and scope a response limit to that field. With verified account identity, one customer can rate several tickets — but only once per ticket. The hidden value is routing context, not proof of authorization.

## Close the loop safely

Read low scores alongside their written context. Slack gets a response link by default; if the support channel needs immediate triage context, explicitly allowlist the score and at most two other fields. Open the linked response for everything else.

## Try it

[Start with a prompt](/start?from=guide-build-a-csat-survey) and your coding agent builds the first form, staged for your review — or [open the editor](/new).

## Related

- [NPS example](/examples#nps): See a live feedback scale before adapting it to CSAT.
- [Rating field](/docs/fields/rating): Configure the valid CSAT field shape.
- [Response limits](/docs/response-limits): Scope one response to each support interaction.
- [Slack](/docs/integrations/slack): Send a response link and optionally a tightly allowlisted field preview.
