Outgrow builder forms

Outgrow builder forms7 min read

Carrd forms: send submissions to a form backend

Carrd's contact form only emails you and custom forms need Pro Plus, so use Send to URL on Plus or an HTML embed on Standard to store every submission.

Preet SutharFounder, Ikiform

Carrd's forms need a Pro plan: Pro Standard gets contact and signup forms, and Pro Plus adds custom forms that can send to any URL. On Pro Plus, set a custom form to Send to URL with your Ikiform endpoint and Carrd keeps its own success message. On Pro Standard, paste an HTML form into an Embed element, which gets you custom fields without upgrading.

What's different on Carrd

Carrd doesn't cap submissions. It gates form features by plan, and each plan is a yearly price for a set number of sites. As of October 2026, Carrd's pricing and docs put the lines here:

PlanForms you getWhat it means
Free and Pro LiteNoneNo form element and no embeds. Link to a form elsewhere, or upgrade
Pro Standard, from $19 a yearContact forms that email up to five recipients, Signup forms that add people to an email tool, and Embed elementsContact forms have fixed fields. Embeds take any HTML, including your own form
Pro Plus, from $49 a yearEverything above, plus Custom forms: send email, or send to Airtable, Make, n8n, Zapier, a URL, or your own codeAny fields, and Send to URL posts them wherever you like

A Carrd contact form delivers each message by email from @mail.carrd.site, so your inbox is the record and a message filed as junk is easy to miss. That is the usual reason to move: you want a stored, searchable list, an export, and alerts for the whole team, not one mailbox.

If all you need is new subscribers in Mailchimp, Kit or another email tool, Carrd's Signup form already does that on Pro Standard and is the better choice. Ikiform has no one-click email tool integrations.

Which Carrd plan you're on decides how the form reaches IkiformPro Lite or freeno forms, no embedsupgrade, or link outPro StandardEmbed elementyour own HTML formIkiformbrowser postsPro PlusCustom formSend to URL, AJAXIkiformCarrd's form postsWhich Carrd plan you're on decides how the form reaches IkiformPro Lite or freeno forms, no embedsupgrade, or link outPro StandardEmbed elementyour own HTML formIkiformbrowser postsPro PlusCustom formSend to URL, AJAXIkiformCarrd's form posts
  1. On the free plan or Pro Lite there's no form element and no embed, so there's nothing to connect. Upgrade, or link to a form hosted elsewhere.
  2. On Pro Standard, paste an HTML form into an Embed element. The visitor's browser posts it to Ikiform.
  3. On Pro Plus, build a Custom form in Carrd's editor and set it to Send to URL with the AJAX method. Carrd's form posts to Ikiform and shows its own success message.
Both paths send the post from the visitor's browser, so allowed domains, rate limits and spam scoring work as they would on any site.

Pro Plus: Send to URL

This keeps Carrd's form editor and styling, with no code. The fields below are for a photographer's booking enquiry; use your own.

  1. Click Add Element > Form, set Type to Custom, then Send to URL.
  2. Paste your endpoint as the URL.
  3. Set Method to AJAX and Format to Default. Carrd reads any 2xx answer as success, and Ikiform answers 201 when it stores the post.
  4. Add the fields: Text name, Email email, Select service, Date preferred_date, Text Area details. Set each field's ID; Carrd generates one from the label otherwise.
  5. Under On Success, pick a message or a section to show. Under On Failure, keep the text general. Carrd doesn't show Ikiform's error message.
  6. Publish. Forms only post from the published site.
URL
https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx
Carrd settingUseAvoid
MethodAJAX: visitors stay on the pagePOST: the browser leaves for Ikiform's thank-you page, and On Success never runs
FormatDefault, or JSONXML: Ikiform refuses it with 415 unsupported_media_type
Collect UTM parametersFine, but add the five utm_ fields to any field definitionTurning it on after you defined fields: every post from a link with UTM tags fails with an Unknown field
File fieldNot at allFile uploads aren't supported yet. A post with a file gets 422 files_not_supported.
Spam ProtectionNone on this formA captcha provider: Carrd's docs don't say it verifies the token for a Send to URL form, and Ikiform checks a Turnstile token only with your own keys saved in Ikiform

A Hidden field always sends its preset value, so it can't work as a honeypot here. Ikiform's spam scoring, rate limits and allowed domains still run on every post. Leave Ikiform's Spam check off for this form: an AJAX post can't show the check, and would fail with 403 challenge_required.

Pro Standard: an Embed element

On Pro Standard you can't build a custom form in Carrd, but you can paste one. Click Add Element > Embed, set Type to Code and Style to Inline, and paste this. It carries its own styles because Carrd's form styles don't reach embedded code.

Embed
<form id="booking" action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post" target="_top">
  <input name="name" placeholder="Name" autocomplete="name" required>
  <input name="email" type="email" placeholder="Email" autocomplete="email" required>
  <select name="service" required>
    <option value="" disabled selected>What do you need?</option>
    <option value="portrait">Portrait session</option>
    <option value="event">Event coverage</option>
    <option value="product">Product photos</option>
  </select>
  <input name="preferred_date" type="date" aria-label="Preferred date">
  <textarea name="details" rows="4" placeholder="Anything else?" maxlength="2000"></textarea>
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>
  <button type="submit">Request a booking</button>
  <p id="booking-note" role="status"></p>
</form>
<style>
  #booking { display: grid; gap: 0.75rem; font: inherit; }
  #booking input, #booking select, #booking textarea { font: inherit; padding: 0.75rem; border: 1px solid #ccc; border-radius: 0.5rem; }
  #booking button { font: inherit; padding: 0.75rem; border: 0; border-radius: 0.5rem; background: #111; color: #fff; }
</style>
<script>
  const booking = document.getElementById("booking");
  booking.addEventListener("submit", async (event) => {
    event.preventDefault();
    const note = document.getElementById("booking-note");
    note.textContent = "Sending";
    try {
      const response = await fetch(booking.action, {
        method: "POST",
        headers: { Accept: "application/json" },
        body: new FormData(booking),
      });
      const result = await response.json();
      if (result.ok) {
        booking.replaceChildren("Thanks. I'll reply with availability.");
        return;
      }
      const fields = result.error.fields ?? {};
      note.textContent = fields.preferred_date?.[0] ?? fields.email?.[0] ?? result.error.message;
    } catch {
      note.textContent = "Couldn't send. Try again, or email me directly.";
    }
  });
</script>
  • The script posts with fetch and replaces the form with the thank-you line, so the page doesn't change.
  • The hidden _gotcha input is a real honeypot here, unlike a Carrd Hidden field.
  • If the script fails to load, the form still posts normally. target="_top" stops the result opening inside a frame.
  • Embeds don't run in Carrd's editor. Publish to see the form.

Both versions send the same fields. Define them in Ikiform once a test has arrived:

Preview

Runs Ikiform's validator in your browser. Nothing is sent.

Leave empty if you're flexible.

preferred_date is a date field, so Ikiform accepts YYYY-MM-DD, which is what Carrd's Date field and a browser date input both send.

Allowed domains on Carrd

Add your-site.carrd.co, or your-site.crd.co on Pro, and your custom domain. Don't add carrd.co on its own; every Carrd site would be allowed to post. The Carrd docs guide lists every setting with its reason.

Moving one form doesn't move the others. A Signup form feeding your email tool can stay as it is next to a Custom form or embed that posts to Ikiform.

Check it works on Carrd

  1. Under the form's Allowed domains, add your site's domain, plus localhost while you develop. Leave it empty to accept posts from anywhere.
  2. Publish, then submit the form on the published site.
  3. Confirm Carrd shows On Success, or the embed shows its thank-you line.
  4. Open Submissions in the dashboard. The new submission is there with every field you sent.
  5. Check the names are your IDs, preferred_date reads like 2026-11-14, and no utm_ fields arrived unless you expected them.
  6. 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.

Gotchas

ProblemWhat to do
Carrd shows On Failure every timeXML format (415), a File field (422), an Unknown field from UTM collection, or Ikiform's Spam check turned on (403). Fix whichever applies.
Field names look like labelsID and Submitted ID were empty. Set them and publish again.
The embed is blank in the editorCarrd doesn't run embed code in the editor. Publish and check the live site.
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.
403 challenge_requiredThe form's spam check is set to Ikiform and a fetch post had no token. Get one with challenge(formId) from @ikiform/sdk before each submit, or turn the check off.

Questions

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