Surveys and NPS¶
Structured questions, versioned so that editing one does not corrupt results you already have.
Collection → Surveys → New survey.
Types¶
| Type | Asks |
|---|---|
| NPS | "How likely are you to recommend us?" 0–10 |
| CSAT | Satisfaction |
| CES | Effort — "how easy was it?" |
| PMF | Product/market fit — "how would you feel if you could no longer use this?" |
| Custom | Your own questions |
Each type starts from a preset you can edit. The presets exist so you do not have to invent the wording of a standard instrument, and so the aggregates mean what the name implies.
Question types¶
| Type | Renders as |
|---|---|
score |
A numbered row, 0–10 |
likert |
A 1–5 agreement scale |
select |
Single choice from options |
text |
Free text |
Versioning, and why it matters¶
A survey has versions. Publishing changes creates a new version; answers are recorded against the version the person actually saw.
This is the part that saves you later
Change question 3 halfway through a campaign without versioning, and your average for question 3 becomes a number describing two different questions. Here the old answers stay attached to the old wording, so every aggregate keeps meaning something. Results are reported per version.
The version is pinned in the page and echoed back on submit, so publishing an edit while somebody is mid-answer cannot swap the questions under them.
Draft → live → archived. Only a live survey with a published version is served to visitors; a widget pointing at an archived survey renders nothing rather than something stale.
Where they run¶
- A hosted survey page, at its own URL.
- A
collect_surveywidget — a launcher on your own site. - An
nps_popoverwidget — the one-question version, for a corner of your app. - An email campaign — the score buttons mailed straight to your contacts.
Results¶
The results view reports per version: response counts, the NPS breakdown into promoters, passives and detractors, and free-text answers in full.
A low NPS score can fire the nps.low_score webhook, which
is the useful one to wire up — it is the response you want somebody to see
today, not at the end of the month.
AI follow-up questions¶
When someone gives a low score, a fixed "what went wrong?" cannot react to what they actually wrote. Turn on the AI follow-up and, right after the response, one more question is written by a model from the score and the answers already given — and asked before the thank-you closes the conversation. The respondent answers or skips it.
What triggers it. A score at or below a threshold you set, on a survey whose current version has a score question — NPS, CSAT, or a custom survey with a score. CES and PMF have no score, so the feature cannot be enabled there.
Turning it on. On the survey's page, open AI follow-up question: switch it on, choose the threshold, and write a short context for the AI — for example, "We are a B2B invoicing tool; detractors usually mean the bank sync. Ask what blocked them, not for contact details." The context guides the model and is never shown to respondents.
What the respondent sees. The thank-you message, then — a moment later, once the question is written — one short question, a box to answer it, and Send / Skip. A note tells them the question was generated by AI. Skipping sends nothing.
What is sent to the model. Only the survey type, the score, the question labels, and the other answers — with any emails, phone numbers and URLs redacted first. Never a name, an email, contact details, an IP, or page metadata. The question is asked through OpenRouter with zero-retention providers only. See Privacy.
Where the answer lands. On the same response — in your inbox next to it, in
the API (followup on a submission), in MCP, and in the
survey.followup.answered webhook, whose payload carries
the score, the question and the answer. nps.low_score still fires at response
time; subscribe to the follow-up event when you want the reason.
Plan and budget. AI follow-ups are on the Pro plan and up. There is an internal monthly budget per team; if it is reached, follow-ups pause until the 1st and the survey page says so.