# 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.

Published 2026-10-25 · https://ikiform.com/guides/website-builder-forms/carrd-forms

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:

| Plan | Forms you get | What it means |
| --- | --- | --- |
| Free and Pro Lite | None | No form element and no embeds. Link to a form elsewhere, or upgrade |
| Pro Standard, from $19 a year | **Contact** forms that email up to five recipients, **Signup** forms that add people to an email tool, and **Embed** elements | Contact forms have fixed fields. Embeds take any HTML, including your own form |
| Pro Plus, from $49 a year | Everything above, plus **Custom** forms: send email, or send to Airtable, Make, n8n, Zapier, a URL, or your own code | Any 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.

Diagram: Which Carrd plan you're on decides how the form reaches Ikiform

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`:

```text
https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx
```

| Carrd setting | Use | Avoid |
| --- | --- | --- |
| **Method** | AJAX: visitors stay on the page | POST: the browser leaves for Ikiform's thank-you page, and On Success never runs |
| **Format** | Default, or JSON | XML: Ikiform refuses it with `415 unsupported_media_type` |
| **Collect UTM parameters** | Fine, but add the five `utm_` fields to any field definition | Turning it on after you defined fields: every post from a link with UTM tags fails with an Unknown field |
| **File** field | Not at all | File uploads aren't supported yet. A post with a file gets `422 files_not_supported`. |
| **Spam Protection** | None on this form | A 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`:

```html
<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:

Form: Booking enquiry

- **Name** (`name`, text, required)
- **Email** (`email`, email, required)
- **What do you need?** (`service`, select, required)
- **Preferred date** (`preferred_date`, date)
- **Anything else?** (`details`, textarea)

`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](https://ikiform.com/docs/guides/carrd.md) 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

| Problem | What to do |
| --- | --- |
| Carrd shows On Failure every time | XML 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 labels | **ID** and **Submitted ID** were empty. Set them and publish again. |
| The embed is blank in the editor | Carrd doesn't run embed code in the editor. Publish and check the live site. |
| `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. |
| `403 challenge_required` | The 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

### Which Carrd plan do I need for a form that sends to a URL?

Pro Plus. Custom forms, including Send to URL, are an Advanced Forms feature. On Pro Standard you can paste your own HTML form into an Embed element instead.

### Should I use AJAX or POST for a Carrd Send to URL form?

AJAX. It keeps visitors on your Carrd page and runs your On Success and On Failure settings. POST sends the browser to Ikiform's thank-you page or your redirect instead.

### Can a Carrd Hidden field be a honeypot?

No. A Hidden field always submits its preset value, so it can't tell bots from people. Ikiform's spam scoring, rate limits and allowed domains still check every post, and the embed version can carry a real honeypot.

### Can I keep Carrd's signup form for my newsletter?

Yes, and you probably should. It adds people straight to your email tool. Use Ikiform for the forms where you want a stored record, such as enquiries and bookings.

### Is Ikiform free?

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.

## More guides

- [Outgrow builder forms](https://ikiform.com/guides/website-builder-forms.md): When Webflow, Netlify, Carrd or Framer forms hit a cap or a missing feature, keep the form you designed and point it at a form backend instead.
- [Webflow submission limit](https://ikiform.com/guides/website-builder-forms/webflow-submission-limit.md): Webflow's free Starter plan stops collecting after 50 form submissions per site and exported sites get none, so point the Form Block at Ikiform instead.
- [Framer forms](https://ikiform.com/guides/website-builder-forms/framer-forms.md): Framer forms already send to email, Sheets or a webhook; add Ikiform as the webhook for stored, filtered submissions, team alerts and more destinations.
- [Netlify Forms limit](https://ikiform.com/guides/website-builder-forms/netlify-forms-limit.md): Legacy Netlify plans meter form submissions per site and upgrade you automatically, and credit plans can pause the site, so move the form to a backend.
