Surveys
A survey is a Message with the kind set to survey. The targeting, trigger, and audience rules are identical to a tooltip or modal — what’s different is the content (questions instead of a single call-to-action) and the results page, which aggregates responses.
Question types
| Type | Output |
|---|---|
| NPS (0–10) | A net-promoter score: % promoters (9–10) − % detractors (0–6) |
| Rating / scale (1–5 or 1–10) | Mean + distribution histogram |
| Single-choice | Distribution bar chart |
| Multi-choice | Per-option count (responses can exceed total response count) |
| Text | Raw freeform responses, shown in a feed |
A survey can mix question types — for example NPS + a follow-up text question.
Creating a survey
Open Messages in the sidebar, click New message, and pick Survey as the kind. The editor offers a step-per-question layout — add questions in the order respondents will see them.
The audience, trigger, A/B variants, and frequency controls are the same as any Message.
Question editing is locked once the survey launches. Editing questions after launch would invalidate response aggregation, so the editor disables the step list and shows a “Survey is live — clone to revise” banner. Pause or clone the survey to change questions.
Viewing results
Open Messages → your survey → Results (/surveys/{id}/results). The page shows:
- Headline metric — NPS score (if any NPS question is present) with promoter / passive / detractor split.
- NPS trend — weekly score over the last 12 weeks.
- Per-question distribution — bar chart for each non-text question.
- Recent text responses — feed of the most recent freeform answers.
A Download CSV button exports the full response set (one row per respondent, one column per question).
Limits & gotchas
- Anonymous responses — surveys served to unidentified users are stored against the anonymous
distinct_id. Identifying that user later stitches the response to the user profile. - One submission per user per survey by default — repeat impressions don’t double-count.
- Skipped questions are recorded as
null, not omitted, so the distribution always sums correctly.
Related
- Messages — the rest of the message engine (tooltips, banners, modals)
- Experiments — for randomised content (vs. asking the same question of everyone)