Surveys · Last updated May 16, 2026
Surveys
Surveys are SaveForm's hosted, multi-page questionnaires — a welcome screen, paged sections of questions, and a results dashboard, all without a backend. Build one in the dashboard, then either share the link or drop a single <script> tag on your site. Responses land in the same place your form submissions do.
How surveys work
A survey is built on the same plumbing as a regular form: each response is stored as a submission, so everything you already know about retention, exports, and spam filtering carries over. The difference is the front end — instead of you writing the HTML, SaveForm renders a hosted, themeable survey for you.
- Build. Add a welcome screen, one or more pages, and questions in the visual builder.
- Share. Send the hosted link, or embed the survey inline on any page with one script tag.
- Collect. Respondents answer page by page; required questions gate the Next button.
- Read. Live charts aggregate every choice/rating question; individual responses are listed and exportable as CSV.
Create a survey
Surveys live under their own Surveys tab in the dashboard, separate from Forms. Hit Create survey (also on the main dashboard, next to Create form) and you land straight in the builder with a starter page. Everything after that — name, pages, questions, theme — saves from the builder's sticky top bar.
Structure & questions
A survey has an optional welcome screen followed by one or more pages (“sections”), each holding any number of questions. Give a page a title and description to frame its questions; the renderer shows a Back/Next pager and only lets respondents advance once every required question on the page is answered. The final page's button submits the response.
Question types
| Type | What it collects |
|---|---|
| Single choice | Pick exactly one option. Aggregated as a bar chart. |
| Multiple choice | Pick any number of options. Each option is counted independently. |
| Rating | A 1–N scale (default 1–5). Optionally label the anchors, e.g. 1 = “Not at all”, 5 = “Loved it”. Charted as a distribution with an average. |
| A validated email field. Also used as the identity field for one-response-per-email surveys. | |
| Short text | Free-text answer. Counted in results (never charted); read verbatim in the Responses tab. |
Every question can carry a description and one or more images — a single image renders full-width; multiples lay out in a responsive grid. Mark a question required to make it block the page's Next button.
One response per…
Each survey enforces one of two de-duplication rules, set in the builder:
| Mode | Behaviour |
|---|---|
| Per browser | Anonymous. A cookie (sf_resp_<id>) marks the browser as having responded. Good for quick pulse checks where you don't need to know who answered. |
| Per email | The welcome screen collects a required email and each address may answer once. The check runs up front — a repeat address sees the “already responded” screen before filling anything out, and a database-level unique index is the final backstop. |
Share: link or embed
Open Share on any survey for the two distribution options. Both point at the same hosted survey and funnel responses to the same dashboard.
Hosted link
A standalone page you can send anywhere — email, Slack, a QR code:
https://saveform.io/survey/YOUR_SURVEY_ID
Embed
One script tag injects the survey inline on your page as an iframe and auto-resizes it to its content — no fixed height, no scrollbars. The script derives everything else (origin, the host page's domain for attribution) on its own:
<script src="https://saveform.io/embed.js" data-survey="YOUR_SURVEY_ID" async ></script>
Two optional attributes tune where and how it mounts:
| Attribute | Effect |
|---|---|
data-target | A CSS selector (e.g. "#survey") to mount the iframe inside. Defaults to right after the script tag. |
data-min-height | Initial height in pixels before the first auto-resize (default 320). Reduces layout shift on load. |
Embed in a framework
React, Angular, and Vue strip raw <script> tags out of their templates, so create the element in code instead. Render a mount point and append the script to it once:
import { useEffect, useRef } from 'react';
export function SurveyEmbed() {
const ref = useRef<HTMLDivElement>(null);
useEffect(() => {
const el = ref.current;
if (!el) return;
const s = document.createElement('script');
s.src = 'https://saveform.io/embed.js';
s.async = true;
s.dataset.survey = 'YOUR_SURVEY_ID';
s.dataset.target = '#saveform-survey';
el.appendChild(s);
return () => { el.innerHTML = ''; }; // clean up on unmount
}, []);
return <div id="saveform-survey" ref={ref} />;
}The same pattern works in Angular's ngAfterViewInit or Vue's onMounted. If your framework lets you edit the served index.html, the plain one-line snippet from above dropped into the body works too. See the framework guides for the broader integration patterns.
Results & responses
Open a survey from the Surveys list to land on its overview: KPIs up top, then two tabs.
- Results. Aggregated charts, two per row — bar charts for choice questions, a distribution column chart (with the average) for ratings, and a count for text/email. Each chart exports to PNG or SVG from its menu; the export is rendered in your browser, so response data never leaves it.
- Responses. Every individual response, newest first, with a CSV download (one row per response, a column per question, plus a UTF-8 BOM so Excel reads it cleanly). Delete a single response here — it is removed for good.
Results visibility
Choose who can see the aggregated results of a survey (your owner dashboard is always private to you regardless of this setting):
| Setting | Who sees aggregated results |
|---|---|
| Private | Only you. Respondents see a thank-you screen and nothing more. The default. |
| After vote | A respondent sees the live results immediately after they submit — the classic poll reveal. |
| Public | Anyone with the results link can view the charts, whether or not they responded. |
Themes & branding
A theme is a colour palette plus an optional decorative header shape, applied across the whole survey card. Two are free on every plan; the rest are a paid perk.
- Free themes. Classic (light, brand fuchsia) and Plain Dark ship on every plan, header shapes included.
- Premium themes. Curated palettes (Eixample, Montjuïc, Sunset, Lavender, Midnight) move the survey off fuchsia onto their own colour and shapes — available on any paid plan.
- Your logo. Add a brand logo to the top of the survey on every plan, free included.
- Remove the badge. Free surveys show a small “Powered by SaveForm” badge; any paid plan can switch it off.
Surveys on your plan
Surveys reuse the form and submission meters rather than adding new ones, so there is nothing extra to track:
| What | How it's metered |
|---|---|
| A survey | Counts as one of your forms (Free 1 · Personal 2 · Lite 10 · Pro unlimited). Forms and surveys draw from the same pool. |
| A response | Counts as one submission against your monthly cap (Free 25 · Personal 100 · Lite 1,000 · Pro 5,000). See rate limits. |
| Premium themes + remove badge | Any paid plan (Personal and up). Custom logo is free on every plan. |