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

TypeOutput
NPS (0–10)A net-promoter score: % promoters (9–10) − % detractors (0–6)
Rating / scale (1–5 or 1–10)Mean + distribution histogram
Single-choiceDistribution bar chart
Multi-choicePer-option count (responses can exceed total response count)
TextRaw 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.
  • Messages — the rest of the message engine (tooltips, banners, modals)
  • Experiments — for randomised content (vs. asking the same question of everyone)