Formats
Legacy format names are deprecated aliases.
survey means card, and survey_full (and survey_web) mean full. They keep working in every SDK — the native SDKs still take showSurvey(id, format) with SURVEY / SURVEY_FULL — but new code should use card and full.Question types
Each question has a stable answer key (for example
nps_score). Webhooks, exports, the API and filters use these keys, so renaming a question never breaks an integration.
Logic
Every question can jump based on the answer, Typeform/Intercom-style:- Per answer: NPS 0–6 / 7–8 / 9–10, each choice, Yes / No — each goes to a later question or an ending.
- All other cases go to: where everyone else continues (by default the next question).
- Conditions on the person: contact properties (for example plan), hidden fields and the page URL.
Ask Kai to edit
At the bottom of the outline, describe a change in your own words and press Enter (or press I anywhere in the editor to jump there). For example:- “Add a follow-up for detractors asking what to fix”
- “Make it shorter”
- “Translate to German”
- “Turn Q3 into multiple choice with Speed, Price and Support”
- “Jump to the thank-you ending when they say no”
- Existing questions keep their answer keys, and answer options Kai keeps keep their ids, so earlier responses, filters and webhooks are unaffected.
- A translation adds the language to every text; the language shows in the editor once it is one of your project’s languages.
- If the result has logic problems (for example a question nobody reaches), the card says so and publishing stays blocked until they’re fixed.
- Kai only edits the survey’s questions, logic, wording, languages, design and settings. It doesn’t publish, send or target a survey.
402.
Partial responses
Answers are stored per question, not at the end. A response is:
Results show how many people saw, started and completed the survey, and how many reached and answered each question (drop-off).
Versions
Edits are saved as a draft. Publish changes freezes the draft as the next version; respondents always see the published version, and every response remembers the version it answered. AI agents (the MCP server, Kai) only create and edit drafts — publishing needs a teammate.Sharing channels
In the app
Show a survey with triggers (time on page, page visits, events) and audiences, exactly like other outbound messages, or from code withshowSurvey:
showSurvey(id, format).
Survey page
Every survey can have its own page on your help center domain:/s/onboarding?plan=pro&source=newsletter.
Links from before Surveys 2.0
Survey links shared before Surveys 2.0 (https://forms.gleap.io/<id>, in the US region https://forms.us.gleap.ai/<id>) keep working: they redirect to the survey’s page. When an older survey is upgraded to Surveys 2.0 it gets a page open to anyone, at an address like /s/feature-satisfaction-k3x9q2. The page is switched on if the survey is live or has ever been answered; for drafts and surveys nobody answered it starts switched off, and their old links show “This survey is no longer available”. Change the address or switch the page on or off under Share → Survey page; old links follow within an hour. The background of the old share page (image or colour) becomes the survey’s background; its footer links and link colour are not carried over.
What the old link carried comes along: ?lang=de opens the page in German, customData values whose keys match a hidden field are passed on, and links from survey email campaigns (gleap-id / gleap-hash) open as a personal link for that contact.
Personal links
Personal links attach the response to a known contact without them signing in. Create them under Share → Survey page → Personal links (one link per contact, also as a CSV for your email tool). Each link carries a signed token:Email (first question inline)
Send a survey with an email campaign and put the first question inside the email: the reader clicks a score or a choice in their inbox, lands on the survey page with that answer preselected and continues from the second question. Opening the link records nothing until the page has loaded, so mail scanners that follow links don’t create answers. Campaigns support an audience, a send time, a reminder for people who haven’t answered and a quiet period.Embed and more
Embed the survey inline in your site withshowSurvey(id, { format: "page", container }), start it from a conversation, or print the page’s QR code.
Hidden fields
Hidden fields are values you pass in rather than ask: a plan, an order id, a campaign. Declare them in the survey (fields), then pass values with showSurvey(id, { fields }), URL parameters on the survey page, or personal links. They are stored with the response, can drive logic (src: "field") and can be used in question text as {{field.plan}}.
Results and AI insights
- Summary: shown, started, completed and partial counts, NPS with its distribution, drop-off by question and a card per question.
- Analytics: views, starts and submissions against the previous period, drop-off and time per question, devices, channels, sources and the best time to ask. See Survey analytics.
- Insights: Kai tags text answers with themes and sentiment when you open the results after new responses (the page shows “updating…” for a minute or two; without new responses nothing is recomputed), and shows drivers (how a theme moves NPS), segments (for example by plan) and spike alerts. Ask questions in plain language and get answers with cited responses. AI usage is billed as token usage.
- Responses: filter by status, score, theme or text, open a response to see the path someone took, and Reach out — start a conversation with that person, linked to their response.
Plans
On Free, every response is stored. Results, exports, search, the API and the MCP tools show the first 10 responses a survey received (deleting one does not bring another into view). Upgrading shows every response at once. A response beyond the first 10 answers
404 on Free, and list responses carry limited: { limit, visible, total }.
What Free doesn’t include (the share channels and the AI features) answers 402 with details.type: "plan_required" and details.requiredPlan: "team".
A survey from before Surveys 2.0 (a legacy survey that hasn’t been upgraded) can’t be created or set live on Free: the API answers 402 (“Surveys from before Surveys 2.0 are available on the Team plan. Create a new survey, or upgrade this one to Surveys 2.0.”). Its answers would be tickets, outside the first-10 rule. Open it in the dashboard and press Upgrade to turn it into a Surveys 2.0 survey first.