Waitlist for a new SaaS

Waitlist for a new SaaS6 min read

How to add a waitlist to a Carrd site

Collect waitlist signups on a Carrd page: a Send to URL form on Pro Plus with UTM tracking, or an embedded HTML form with a honeypot on Pro Standard.

Preet SutharFounder, Ikiform

On Carrd Pro Plus, add a Custom form that sends to your Ikiform endpoint with the AJAX method, turn on UTM collection and define those fields in Ikiform. On Pro Standard, paste a small HTML form into an Embed element instead; it posts the plain way, keeps a honeypot and sends people back to a thank-you section on the same page.

Carrd is the quickest way to put a one-page pitch online, which makes it a natural home for a waitlist. Which form you can use depends on your Carrd plan more than on anything you build, so start there.

What's different on Carrd

  • The plan decides the form. Pro Plus has Custom forms that send to any URL. Pro Standard has contact and signup forms that go to Carrd's own destinations, plus the Embed element. Pro Lite has no forms or embeds.
  • Send to URL can't hide a honeypot. Carrd's Hidden field always holds the value you preset, so it can't catch bots. Spam scoring still runs on every post.
  • AJAX posts can't run the human check. Carrd reads any 2xx as success and anything else as failure, and it can't show Ikiform's check page. Leave the spam check off for this route.
  • One page means one place to say thanks. There's no second page to redirect to unless you build one. Carrd's On Success message, or a section on the same page, does that job.
Which Carrd waitlist setup your plan allowsPro PlusPro StandardCustom formSend to URL, AJAXIkiformanswers 201On SuccessCarrd's message,same pageEmbed elementyour HTML form,honeypotIkiformanswers 303#joined sectionback on your pageform postform post_redirectWhich Carrd waitlist setup your plan allowsPro PlusPro StandardCustom formSend to URL, AJAXIkiformanswers 201On SuccessCarrd's message, same pageEmbed elementyour HTML form, honeypotIkiformanswers 303#joined sectionback on your pageform postform post_redirect
  1. On Pro Plus, a Custom form sends each signup to Ikiform with Carrd's AJAX method.
  2. Ikiform stores it and answers 201, and Carrd shows your On Success message without leaving the page.
  3. On Pro Standard, an Embed element holds a plain HTML form that posts to Ikiform.
  4. Ikiform stores it and redirects the browser to the _redirect URL, a thank-you section on your Carrd page.
Pro Lite and sites without Pro have no forms or embeds, so neither route is available.
ItemCustom form, Send to URLEmbed elementCarrd's signup form
PlanPro Plus or higherPro Standard or higherPro Standard or higher
Where signups goIkiformIkiformCarrd's supported email services
HoneypotNoYesCarrd's own handling
UTM trackingBuilt inAdd your own hidden inputsDepends on the service
Stays on the pageYesReturns to a sectionYes

If all you want is the address in your email tool, Carrd's built-in signup form may be enough. Ikiform earns its place when you want a stored copy of every signup, spam filtering, an email per signup and signed webhooks you can route anywhere.

Pro Plus: a Custom form

  1. Click Add Element › Form. Set Type to Custom, then Send to URL.
  2. Set the URL to https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx, Method to AJAX and Format to Default. Don't pick XML: Ikiform refuses it with 415.
  3. Add one Email field and set its Submitted ID to email. Carrd generates IDs from labels, so leaving it empty sends email_address or similar.
  4. Tick Collect UTM parameters. Carrd adds utm_source, utm_medium, utm_campaign, utm_term and utm_content when they're in the link.
  5. Set On Success to a message such as You're on the list. We'll email you at launch. and On Failure to a general line. Carrd shows your own text there unless you turn on Export variables and Return endpoint responses.

Then add the field definition on Ikiform's Fields tab, UTM fields included:

Fields
{
  "version": 1,
  "title": "Waitlist",
  "fields": [
    { "id": "email", "type": "email", "label": "Email", "required": true },
    { "id": "utm_source", "type": "text", "label": "UTM source", "validation": { "max_length": 100 } },
    { "id": "utm_medium", "type": "text", "label": "UTM medium", "validation": { "max_length": 100 } },
    { "id": "utm_campaign", "type": "text", "label": "UTM campaign", "validation": { "max_length": 100 } },
    { "id": "utm_term", "type": "text", "label": "UTM term", "validation": { "max_length": 100 } },
    { "id": "utm_content", "type": "text", "label": "UTM content", "validation": { "max_length": 100 } }
  ]
}
  • Without the five UTM fields, any signup that arrives from a tagged link is refused with an Unknown field error, and Carrd shows On Failure. They're only sent when the link has them, so they're optional here.
  • Don't add a File field. Ikiform refuses files with 422 files_not_supported.
  • Carrd's Events settings can run your own script on success, such as an analytics call. They're separate from the message.
Leave the spam check off and keep Standard rate limits. The post comes from the visitor's browser, so allowed domains and per-visitor limits work as usual.

Pro Standard: an embedded form

Click Add Element › Embed, set Type to Code and Style to Inline, and paste the form. Embeds don't render in the builder, so publish to see it.

Embed
<form class="iki-waitlist" action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post" target="_top">
  <input name="email" type="email" placeholder="you@company.com" aria-label="Email" autocomplete="email" required>
  <input type="hidden" name="_redirect" value="https://example.com/#joined">
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>
  <button type="submit">Join the waitlist</button>
</form>

<style>
  .iki-waitlist { display: flex; flex-wrap: wrap; gap: 8px; max-width: 440px; margin: 0 auto; }
  .iki-waitlist input[type="email"] { flex: 1 1 220px; font: inherit; padding: 12px 14px; border: 1px solid #d4d4d4; border-radius: 8px; }
  .iki-waitlist button { font: inherit; padding: 12px 18px; border: 0; border-radius: 8px; background: #111; color: #fff; cursor: pointer; }
</style>
  • Add a Section Break named joined and put a thank-you line after it. Carrd opens a section when its name is in the link after #, so _redirect lands people on it.
  • Replace https://example.com with your Carrd address. _redirect only works for an https: URL on one of the form's Allowed domains, so add the domain there too.
  • target="_top" makes the post leave any frame Carrd wraps the embed in, so the redirect loads in the window.
  • This is a plain post, so the human check works if you turn it on. No change to the HTML.

Allowed domains

Carrd addressAdd
Default URLyour-site.carrd.co
Pro URLyour-site.crd.co
Custom domainexample.com

Never add carrd.co or crd.co alone; every Carrd site would match. The Carrd docs guide has the contact-form version, and the main guide explains repeat signups.

Check it works

  1. Publish the site. Forms and embeds only work on the published page.
  2. Under the form's Allowed domains, add your site's domain, plus localhost while you develop. Leave it empty to accept posts from anywhere.
  3. On Pro Plus, open the page with ?utm_source=test and sign up. Carrd shows On Success, and the submission in Ikiform has utm_source set to test.
  4. On Pro Standard, sign up through the embed. You land on the #joined section of your page.
  5. Check the inbox of each notification recipient. Each gets an email with the fields, and Reply goes to the submitter when the form has an email field.
  6. Nothing arrived? Switch the dashboard's status filter to Spam. Spam gets the same success answer as a real submission.

Gotchas

ProblemWhat to do
Carrd shows On Failure on every signupIkiform refused the post: an Unknown field from a missing UTM definition or an unset Submitted ID, 415 for XML, or 403 challenge_required with the spam check on.
Signups arrive with a field named after the labelSubmitted ID is empty. Set it to email and publish again.
The embed lands on Ikiform's thank-you page, not #joined_redirect was ignored. Use https:, and add the Carrd domain under Allowed domains.
403 origin_not_allowed, or every post lands in spamThe page's domain isn't in the form's Allowed domains. Add it, plus localhost for local tests. Subdomains of a listed domain are allowed.

Questions

Stuck on a step, or want a guide for your situation? Email hello@ikiform.com.