integrations · site builder

A contact form for your Carrd page, with a real inbox behind it.

Carrd doesn't need a form service bolted on with widgets or Zapier: add one Embed element, paste the HTML below, and your landing page has a working contact form. Submissions land in your project's mailcontact inbox, and a notification pings Discord, Slack, email, or a webhook the moment someone writes.

Carrd is where indie landing pages get shipped, and every landing page needs a way for early users to reach you. mailcontact gives each one its own inbox, fed by the form and by a real email address ([email protected]) you can put in the footer. No DNS, no mail server, no glue code.

The only prerequisite is on the Carrd side: Embed elements are part of Carrd's Pro plans (Pro Standard and up, at the time of writing). Everything past that is copy-paste: five minutes from blank element to first test message.

recommended setup

Use the MailContact script with your own design.

Add this HTML to your site, or use the form builder. Replace the form link with yours. The hosted script injects the hidden check, handles sending and automatic verification, and preserves the draft on errors. You control the HTML and CSS. Free forms display a visible “Processed by mailcontact.app” link; Pro and Plus do not. Feedback follows the browser’s language; set data-mailcontact-language="fr" on the form to force French.

contact.html
<form action="https://mailcontact.app/api/forms/your-form-id" method="POST" data-mailcontact-form>
  <fieldset>
    <legend>Contact us</legend>
    <label>
      Name (optional)
      <input name="name" type="text" autocomplete="name" maxlength="200" />
    </label>
    <label>
      Email
      <input name="email" type="email" autocomplete="email" maxlength="320" required />
    </label>
    <label>
      Message
      <textarea name="message" rows="5" maxlength="5000" required></textarea>
    </label>
    <noscript>
    <div aria-hidden="true" style="position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden;">
      <label>Website
        <input name="company_website" type="text" tabindex="-1" autocomplete="off" />
      </label>
    </div>
    </noscript>
    <button type="submit">Send message</button>
  </fieldset>
  <p data-contact-status role="status" aria-live="polite" aria-atomic="true"></p>
</form>
<script defer src="https://mailcontact.app/forms/v1.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

For a component with its own submit handler, load the same script and use MailContact.prepare(form) and MailContact.send() instead of the automatic marker. See the custom interface reference for loading, feedback and Free attribution.

the snippet

Alternative: a direct integration for Carrd.

This example posts directly to the API. Keep the required company_website field present and empty. Native posts open JSON on success or a verification page when needed. Custom scripts without verification support send suspicious messages to Spam for review; strong spam is also held there without notifications or quota usage. A success response confirms reception, including review, or a silent discard of a filled check. See spam protection for the full behavior.

Carrd editor → Embed element → Code
<form id="contact" action="https://mailcontact.app/api/forms/your-form-id" method="POST">
  <input type="text" name="name" placeholder="Your name" />
  <input type="email" name="email" placeholder="[email protected]" required />
  <textarea name="message" placeholder="What's on your mind?" required></textarea>
  <button type="submit">Send</button>
  <input name="company_website" type="text" tabindex="-1" autocomplete="off"
    style="position:absolute;left:-10000px" aria-hidden="true" />
</form>
<p id="contact-thanks" hidden>Thanks, your message is in.</p>
<p id="contact-status" role="status" aria-live="polite"></p>
<script>
  var form = document.getElementById("contact");
  form.addEventListener("submit", async function (e) {
    e.preventDefault();
    try {
      var response = await fetch(form.action, { method: "POST", body: new FormData(form) });
      var data = await response.json();
      if (!response.ok || data.ok !== true) throw new Error(data.error || "Please try again.");
      form.hidden = true;
      document.getElementById("contact-thanks").hidden = false;
    } catch {
      document.getElementById("contact-status").textContent = "We could not confirm reception. Your text is still here.";
    }
  });
</script>

how it works

Three steps, start to finish.

01

Create an inbox

One inbox per landing page. Name it after the project and you get a form endpoint and a project email address immediately.

02

Paste into an Embed element

In the Carrd editor, add an Embed element, set its type to Code, paste the snippet, and replace your-form-id with your endpoint's id. Publish.

03

Get notified

Add a Discord, Slack, email, or webhook channel. Delivered messages ping you where you already are, no dashboard-checking habit required.

why mailcontact

Built to pair well with Carrd.

Everything fits in one Embed element

The markup, the inline thank-you, and the few lines of fetch all live in a single Code embed. Carrd embeds allow script tags, so visitors never leave your page.

One inbox per landing page you ship

Carrd makes it cheap to launch many one-pagers. Give each its own inbox and its own address instead of piling every reply into your personal email. Free covers one form project and 50 submissions per month; Pro covers ten projects and adds receiving email.

A real email address on the same page

Some visitors skip forms and just want an address. Put [email protected] in your Carrd footer. It works immediately, and lands in the same inbox as the form.

faq

Carrd + mailcontact, answered

Do I need Carrd Pro to add a contact form this way?

You need a Carrd plan that includes Embed elements: Pro Standard and up, at the time of writing. On mailcontact, Free includes one project, one form and 50 submissions per month. Pro adds receiving email addresses, ten projects and 1,000 messages per month.

Why the script? Can't the form just post natively?

It can, but a native post currently shows a raw JSON response instead of returning to your page. The hosted script keeps visitors on your Carrd page, handles automatic verification and shows inline feedback. A configurable redirect for native posts is not currently available.

Can I style the form to match my Carrd theme?

Yes, it's your HTML. Add a style tag inside the same Embed element to match your palette and fonts. The direct API does not change your markup. The hosted script keeps your design and adds a visible attribution link on Free; Pro and Plus need no attribution.

Will a Carrd landing page hit any submission limits?

The endpoint accepts up to 20 requests per minute per IP, which is far beyond what a contact form on a landing page sees. Higher overall volume comes with Pro (€9/month) or Plus (€29/month).

related

Also works with

One inbox for every Carrd project you ship.

Forms and a real email address, together, with notifications where you live. Start with a free account.

Create your free form

No credit card needed. Free includes one project and 50 form messages per month.