Skip to content

Publishing & Sharing

Once you’ve built your form, it’s time to make it available to respondents. This guide covers everything about publishing, your Formspace subdomain, access controls, and the different ways to share your form.

Formspace uses a draft → publish workflow. When you edit a form in the builder, your changes are saved as a draft. Respondents only ever see the published version of your form.

To publish your form:

  1. Open your form in the builder.
  2. Switch to the Publish tab.
  3. Click Publish to make your form live.

If this is the first time publishing, your form’s status changes from Draft to Live. If you’ve already published and made changes since, you’ll see an Unpublished changes detected banner with a Publish Changes button.

StatusMeaning
DraftThe form has never been published. Only you can see it.
LiveThe form is published and accepting responses.
Live · Draft ChangesThe form is live, but you’ve made edits that haven’t been published yet. Respondents still see the previous published version.
ClosedThe form is no longer accepting responses.

Every Formspace (organization) gets its own dedicated subdomain where published forms are hosted. The URL structure is:

https://{your-slug}.forms.space/{form-path}

For example, if your Formspace slug is acme and you have a form with the path customer-feedback, the form URL would be:

https://acme.forms.space/customer-feedback

On a Premium plan, you can customize your Formspace subdomain:

  1. Go to SettingsDetails tab.
  2. Find the Domain card.
  3. Click Customize and enter your preferred slug.

Subdomain slugs must be at least 4 characters, start and end with a letter or number, and can contain lowercase letters, numbers, and hyphens.

By default, each form is accessible via its unique ID. On a Pro plan, you can set a custom, human-readable path for each form:

  1. Open your form and go to the Publish tab.
  2. In the link bar at the top, hover over the URL and click the edit icon.
  3. Enter a friendly slug like customer-feedback or 2025-survey.

Form paths follow the same rules as subdomains — at least 4 characters, alphanumeric with hyphens.

The Access card on the Publish tab lets you control who can respond to your form. There are four access modes:

The default mode. Respondents can view the form immediately, then must verify their email address before saving progress or submitting. They can sign in with Microsoft, Google, or verify via a one-time email code. This lets you know who submitted each response and enables respondent features like progress saving and My Submissions.

Anyone who has the form URL can submit a response anonymously with no sign-in or verification required. Use this mode only when you specifically do not need to identify respondents. Progress saving, thank-you emails, and respondent submission history are not available for anonymous forms.

Only people who belong to a specific organization can respond. After selecting this mode, click to configure the verification method:

  • Email domain — Allow responses from specific email domains (e.g. @acme.com).
  • Microsoft tenant — Restrict to a specific Microsoft Entra ID (Azure AD) tenant.
  • Google Workspace — Restrict to a specific Google Workspace hosted domain.

Only people you explicitly invite can respond. This is the most restrictive mode — see Invitations below for details.

Once your form is published, you have several ways to share it.

The link bar at the top of the Publish tab shows your form’s full URL. Click Copy URL to copy it to your clipboard, or Open to view it in a new tab.

For advanced use cases, you can append pre-fill query parameters to a published form URL. This lets you open the form with specific answers already filled in, which is useful when the link comes from a CRM, internal tool, or another external system.

There are two supported formats:

  1. For one or a few values, use namespaced query parameters keyed by the form’s question names. Dots create nested objects, and repeating the same key creates an array:
https://acme.forms.space/customer-feedback?prefill.firstName=Ava&prefill.address.city=Perth&prefill.tags=vip&prefill.tags=beta
const url = new URL("https://acme.forms.space/customer-feedback");
url.searchParams.set("prefill.firstName", "Ava");
url.searchParams.set("prefill.address.city", "Perth");
url.searchParams.append("prefill.tags", "vip");
url.searchParams.append("prefill.tags", "beta");

This produces pre-fill data like:

{
"firstName": "Ava",
"address": { "city": "Perth" },
"tags": ["vip", "beta"]
}
  1. For typed or more complex values such as booleans, numbers, or mixed nested structures, use a prefill parameter containing either:
  • a URL-encoded JSON object
  • or a URL-safe base64-encoded JSON object

Both forms are supported. The base64 form is usually better for advanced integrations because it avoids query-string parsing edge cases in some tools.

URL-encoded JSON example:

https://acme.forms.space/customer-feedback?prefill=%7B%22firstName%22%3A%22Ava%22%2C%22optIn%22%3Atrue%2C%22preferences%22%3A%7B%22channels%22%3A%5B%22email%22%2C%22sms%22%5D%7D%7D
const url = new URL("https://acme.forms.space/customer-feedback");
url.searchParams.set(
"prefill",
JSON.stringify({
firstName: "Ava",
optIn: true,
preferences: {
channels: ["email", "sms"],
},
}),
);

URL-safe base64 example:

https://acme.forms.space/customer-feedback?prefill=eyJmaXJzdE5hbWUiOiJBdmEiLCJvcHRJbiI6dHJ1ZSwicHJlZmVyZW5jZXMiOnsiY2hhbm5lbHMiOlsiZW1haWwiLCJzbXMiXX19
const toBase64Url = (value) => {
const bytes = new TextEncoder().encode(JSON.stringify(value));
const binary = Array.from(bytes, (byte) => String.fromCodePoint(byte)).join("");
return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
};
const url = new URL("https://acme.forms.space/customer-feedback");
url.searchParams.set(
"prefill",
toBase64Url({
firstName: "Ava",
optIn: true,
preferences: {
channels: ["email", "sms"],
},
}),
);

Notes:

  • Use question name values, not the visible question titles.
  • Respondents can still change pre-filled answers before submitting.
  • prefill.field=value parameters are merged with the decoded prefill object, and they override overlapping values.
  • Invite links ignore any additional URL pre-fill parameters and use the pre-fill data configured on the invite itself.
  • File upload and signature questions cannot be pre-filled.
  • Do not mix the same path as both a value and an object. For example, prefill.customer=ava cannot be combined with prefill.customer.email=....
  • Keep prefill payloads small so the final URL remains practical to share.

Click the QR Code button to generate a QR code for your form. You can:

  • Preview the QR code in a dialog.
  • Download it as a PNG image for printing or embedding in documents.

Click the Embed button to choose an embed style and get a ready-to-paste code snippet. Formspace provides a lightweight embed script that handles everything — iframe creation, dynamic resizing, loading states, and more.

All embed modes use a single script tag:

<script src="https://getformspace.com/embed.js" defer crossorigin></script>

Renders the form directly in your page. By default, the iframe automatically resizes to fit its content so there are no inner scrollbars.

<div data-formspace="https://acme.forms.space/customer-feedback"></div>
<script src="https://getformspace.com/embed.js" defer crossorigin></script>

If you prefer a fixed-height inline embed, disable dynamic height and provide an explicit height:

<div
data-formspace="https://acme.forms.space/customer-feedback"
data-formspace-dynamic-height="false"
data-formspace-height="600px"
></div>
<script src="https://getformspace.com/embed.js" defer crossorigin></script>

data-formspace-height accepts any valid CSS height value, such as 600px or 100%. Percentage heights require the parent container to have an explicit height.

Opens the form in a centered modal overlay when the user clicks a trigger element.

<button
type="button"
data-formspace-popup="https://acme.forms.space/customer-feedback"
data-formspace-close-on-submit="true"
>
Give Feedback
</button>
<script src="https://getformspace.com/embed.js" defer crossorigin></script>

Slides the form in from the right side of the screen on click — great for feedback or contact forms that shouldn’t take over the whole page.

<button
type="button"
data-formspace-slider="https://acme.forms.space/customer-feedback"
data-formspace-close-on-submit="true"
>
Contact Us
</button>
<script src="https://getformspace.com/embed.js" defer crossorigin></script>

Use data-formspace-close-on-submit="true" on popup, slider, or widget embeds when the overlay should close automatically after a successful submission.

Adds a floating button to the corner of the page (similar to a chat widget) that opens the form in a popup or slider when clicked.

<div
data-formspace-widget="https://acme.forms.space/customer-feedback"
data-formspace-button-text="Feedback"
data-formspace-button-color="#0152cb"
data-formspace-button-icon="chat"
data-formspace-close-on-submit="true"
></div>
<script src="https://getformspace.com/embed.js" defer crossorigin></script>

The widget supports several configuration options:

AttributeDescriptionDefault
data-formspace-button-textButton label textContact us
data-formspace-button-colorButton background color (any CSS color)#0152cb
data-formspace-button-iconIcon preset or custom SVG (see below)chat
data-formspace-widget-modepopup or sliderpopup
data-formspace-widget-positionleft or rightright
data-formspace-close-on-submitClose the overlay after form submissionfalse

Built-in icon presets: chat, mail, help, pencil, plus, none. You can also pass raw SVG markup as the value for a fully custom icon.

The embed script dispatches a formspace:submit event on document whenever a respondent completes a form. You can use this to trigger analytics, close a modal, redirect, or run any custom logic:

<script>
document.addEventListener("formspace:submit", function (e) {
console.log("Form submitted:", e.detail.slug);
// e.g. fire an analytics event, redirect, etc.
});
</script>

If your site renders content after the initial page load, such as a React/Vue app, CMS block, or tabbed section, newly inserted Formspace embed elements are initialized automatically. You can also call window.FormspaceEmbed.init(element) after rendering a specific container.

When your form uses Invite only or any authenticated access mode, you can send invitations directly from Formspace.

  1. On the Publish tab, scroll to the Invites card.
  2. Click Invite in the bottom-right corner.
  3. Enter one or more email addresses.
  4. Optionally configure expiration and whether the invitee can submit multiple responses.
  5. Click Send.

Each invitee receives an email with a unique link to your form. Invite links use the pre-filled data configured on the invite itself and ignore any additional prefill query parameters.

The Invites card shows all invitations with their current status:

StatusMeaning
SentThe invitation email was sent and the link hasn’t been opened yet.
ActiveThe invitee has opened the form link.
RespondedThe invitee has submitted a response.
ExpiredThe invitation link has expired.

You can filter invitations by status and search by email. For each invitation, you can:

  • Re-send the invitation email.
  • Delete the invitation (revokes access).

The Settings card on the Publish tab provides additional controls:

By default, published forms display a small “Made with getformspace.com” badge. On a Pro plan, you can toggle this off for a clean, branded experience.

Toggle Close form to stop accepting responses. You can close immediately or schedule a specific date and time. Optionally provide a custom message that respondents see when they visit a closed form.

Closed forms display a Closed badge in your forms list. You can re-open a form at any time by toggling the setting off.

Toggle Prevent multiple responses to ensure each person can only submit once. You can add a custom message that’s shown if someone tries to submit again.

Toggle Progress saving to let respondents save an in-progress response and continue later. This setting is available for Email verified, Organization, and Invite only forms, and is disabled for anonymous forms because Formspace needs a verified identity to reconnect a respondent with their saved work.

When progress saving is enabled:

  • Respondents see a Save button on the form.
  • Saved progress is marked In progress in the submissions table.
  • In-progress saves do not count toward monthly response limits and do not trigger response notification or thank-you emails.
  • When a respondent saves progress, Formspace sends them an email with a continue link and a link to My Submissions.
  • If a respondent already has saved progress for the form and opens the form without a resume link, they can choose whether to continue an existing save or start a new response.

Respondents can have more than one in-progress save for the same form. A saved response becomes a normal submitted response when the respondent completes it.

The Email Notifications card lets you send automated emails when responses come in.

Enable notifications and select which team members should receive an email each time a response is submitted. Only team members with verified email addresses are available as recipients.

On a Pro or Premium plan, you can also attach a PDF copy of the submitted response to each notification email.

When your form uses an authenticated access mode, you can enable thank-you emails that are automatically sent to respondents after they submit.

On a Pro or Premium plan, you can attach the same PDF copy to the thank-you email as well.

On a Pro plan, you can customize the subject line and body text for both notification and thank-you emails. Use {form} and {number} placeholders to include the form name and submission number.

The PDF Settings card on the Publish tab lets you configure how responses are exported as PDF documents. These settings apply to all PDF exports for this form — including single downloads, bulk exports, and exports triggered from the response detail panel.

Choose which font to use when generating PDFs. The default Standard font (Helvetica) offers the best performance with no extra download, but only supports basic Latin text. If your form collects responses in other scripts, select the appropriate font:

FontSupported scripts
StandardBasic Latin (Helvetica). Best performance, no extra download.
InternationalLatin, Arabic, Hebrew, Thai, Devanagari, Bengali, Tamil, and Telugu.
JapaneseHiragana, katakana, kanji, plus Latin characters.
KoreanHangul, hanja, plus Latin characters.
Chinese (Simplified)Simplified Chinese characters plus Latin characters.
Chinese (Traditional)Traditional Chinese characters plus Latin characters.

Enable the Right-to-left toggle to render the PDF in an RTL layout. Use this for forms that collect responses in Arabic, Hebrew, or other right-to-left languages.

The Page numbers toggle controls whether “Page X of Y” is shown in the footer of each page. This is enabled by default.

Set a custom title that appears in the header of every page. If left blank, the form’s title is used automatically. The header displays the title alongside the submission number, separated by a · dot (e.g., “Customer Feedback · #42”).

Adjust the top, right, bottom, and left margins in millimeters. The defaults are 20 mm top/bottom and 10 mm left/right.