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.
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
2xxas 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.
- On Pro Plus, a Custom form sends each signup to Ikiform with Carrd's AJAX method.
- Ikiform stores it and answers 201, and Carrd shows your On Success message without leaving the page.
- On Pro Standard, an Embed element holds a plain HTML form that posts to Ikiform.
- Ikiform stores it and redirects the browser to the _redirect URL, a thank-you section on your Carrd page.
| Item | Custom form, Send to URL | Embed element | Carrd's signup form |
|---|---|---|---|
| Plan | Pro Plus or higher | Pro Standard or higher | Pro Standard or higher |
| Where signups go | Ikiform | Ikiform | Carrd's supported email services |
| Honeypot | No | Yes | Carrd's own handling |
| UTM tracking | Built in | Add your own hidden inputs | Depends on the service |
| Stays on the page | Yes | Returns to a section | Yes |
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
- Click Add Element › Form. Set Type to Custom, then Send to URL.
- Set the URL to
https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx, Method to AJAX and Format to Default. Don't pick XML: Ikiform refuses it with415. - Add one Email field and set its Submitted ID to
email. Carrd generates IDs from labels, so leaving it empty sendsemail_addressor similar. - Tick Collect UTM parameters. Carrd adds
utm_source,utm_medium,utm_campaign,utm_termandutm_contentwhen they're in the link. - 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:
{
"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.
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.
<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
joinedand put a thank-you line after it. Carrd opens a section when its name is in the link after#, so_redirectlands people on it. - Replace
https://example.comwith your Carrd address._redirectonly works for anhttps: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 address | Add |
|---|---|
| Default URL | your-site.carrd.co |
| Pro URL | your-site.crd.co |
| Custom domain | example.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
- Publish the site. Forms and embeds only work on the published page.
- Under the form's Allowed domains, add your site's domain, plus
localhostwhile you develop. Leave it empty to accept posts from anywhere. - On Pro Plus, open the page with
?utm_source=testand sign up. Carrd shows On Success, and the submission in Ikiform hasutm_sourceset totest. - On Pro Standard, sign up through the embed. You land on the
#joinedsection of your page. - 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
emailfield. - Nothing arrived? Switch the dashboard's status filter to Spam. Spam gets the same success answer as a real submission.
Gotchas
| Problem | What to do |
|---|---|
| Carrd shows On Failure on every signup | Ikiform 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 label | Submitted 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 spam | The 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
Pro Plus to send a Custom form to any URL, such as Ikiform. Pro Standard can embed your own HTML form. Pro Lite and sites without Pro have no forms or embeds.
Not to a Send to URL form, because Carrd's Hidden field always has its preset value. Use the Embed route if you want a honeypot; Ikiform's spam scoring runs on both.
Carrd reads anything but a 2xx answer as failure. The usual cause is a field Ikiform doesn't know, such as utm_source from Collect UTM parameters. Add those fields to the definition.
No, there is no free plan. Testing is free: you can send 50 test submissions a month from localhost before you pay. To go live, Pro starts at $6/mo for 500 submissions, or you can pay once for 10,000 submissions for $49 or 50,000 submissions for $149, with credits that never expire.
Stuck on a step, or want a guide for your situation? Email hello@ikiform.com.