FormLoom

Framer RSVP form

Collect event RSVPs with guest count and dietary needs.

Recommended fields

FieldTypeRequired
nametextYes
emailemailYes
attendingselectYes
guestsnumberNo
dietarytextNo

The code

Add an Embed element to your Framer page, choose HTML, and paste a `<form method="POST">` block pointing at FormLoom. Include a small `<style>` block in the same embed so the form matches your site's design.

Plain HTML (no JavaScript)
contact.html
<form action="https://formloom.vercel.app/api/submit/YOUR_ACCESS_KEY" method="POST">
  <label>
    Name
    <input type="text" name="name" required />
  </label>
  <label>
    Email
    <input type="email" name="email" required />
  </label>
  <label>
    Will you attend?
    <select name="attending" required>
      <option value="Yes">Yes</option>
      <option value="No">No</option>
      <option value="Maybe">Maybe</option>
    </select>
  </label>
  <label>
    Number of guests
    <input type="number" name="guests" />
  </label>
  <label>
    Dietary requirements
    <input type="text" name="dietary" />
  </label>
  <!-- honeypot: bots fill this, humans don't see it -->
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off" />
  <button type="submit">Send</button>
</form>
AJAX fetch (vanilla JS)
contact.html
<form id="contact-form">
  <label>
    Name
    <input type="text" name="name" required />
  </label>
  <label>
    Email
    <input type="email" name="email" required />
  </label>
  <label>
    Will you attend?
    <select name="attending" required>
      <option value="Yes">Yes</option>
      <option value="No">No</option>
      <option value="Maybe">Maybe</option>
    </select>
  </label>
  <label>
    Number of guests
    <input type="number" name="guests" />
  </label>
  <label>
    Dietary requirements
    <input type="text" name="dietary" />
  </label>
  <!-- honeypot: bots fill this, humans don't see it -->
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off" />
  <button type="submit">Send</button>
</form>

<script>
const form = document.getElementById("contact-form");
form.addEventListener("submit", async (e) => {
  e.preventDefault();
  const res = await fetch("https://formloom.vercel.app/api/submit/YOUR_ACCESS_KEY", {
    method: "POST",
    headers: { "Content-Type": "application/json", Accept: "application/json" },
    body: JSON.stringify(Object.fromEntries(new FormData(form))),
  });
  const data = await res.json();
  if (data.success) {
    form.reset();
    alert("Thanks — we got your message.");
  } else {
    alert(data.message || "Something went wrong.");
  }
});
</script>
@formloom/client (typed SDK)
submit.ts
// npm i @formloom/client
import { createForm } from "@formloom/client";

type Contact = {
  name: string;
  email: string;
  attending: string;
  guests?: string;
  dietary?: string;
};

const form = createForm<Contact>("YOUR_ACCESS_KEY");

// End-to-end typed: TS errors if you send the wrong shape.
const { success, message } = await form.submit({
  name: form.name.value,
  email: form.email.value,
  attending: form.attending.value,
  guests: form.guests.value,
  dietary: form.dietary.value,
});

Tips

  • Send a confirmation autoresponder with event details.
  • Export the submissions to CSV for your final headcount.

FAQ

Export submissions to CSV from the dashboard, or sum the `guests` field.
Framer RSVP form — copy-paste code + live demo · FormLoom