Skip to main content
Menu
On this page

Build a waitlist form

Collect signups and capture where they came from — without implying every signup gets an invitation.

A waitlist form records who wants access and why, without promising an invitation or launch date the team can't guarantee.

Create the form

ts
const waitlist = defineForm({
  id: "analytics-beta-waitlist",
  title: "Join the analytics beta",
  pages: [{
    id: "request",
    blocks: [
      { id: "email", kind: "email", label: "Work email", required: true },
      { id: "company", kind: "short_text", label: "Company" },
      {
        id: "goal",
        kind: "select",
        label: "What do you want to understand?",
        options: [
          { id: "activation", label: "Activation" },
          { id: "retention", label: "Retention" },
          { id: "reliability", label: "Reliability" },
        ],
      },
      { id: "source", kind: "hidden", label: "Source", paramName: "src" },
    ],
  }],
  settings: {
    submitLabel: "Join waitlist",
    successTitle: "You're on the list",
    successMessage: "We'll email you if this beta is a fit.",
    responseLimit: { by: "field", field: "email", onRepeat: "keep" },
  },
});

An email-field response limit cuts down accidental duplicates, but it doesn't verify that the person owns the address. If the waitlist lives inside a signed-in product, use verified respondent identity instead.

Decide how invitations are sent

Send accepted requests to the response grid, Google Sheets, Notion, Zapier, or a webhook. Qualify people outside the form, record invitation state in the system that owns access, and send invitations from an approved messaging tool — a waitlist response signals interest, it doesn't grant access.

Test signups, duplicates, and delivery

Try each campaign parameter, a duplicate email, missing optional fields, and destination retries. Keep the confirmation copy honest: it should read true even if no invitation is ever sent.

Try it

Start with a prompt and your coding agent builds the first form, staged for your review — or open the editor.

Updated

Was this page helpful?