Free tool
RSVP form generator
Collect event RSVPs without a backend. Build a form for attendance, guest counts and notes, style it, and paste the code into your event page.
Fields
Submission
Where submissions go. Paste your form ID to make the code real — or keep the placeholder while you experiment.
Spam & privacy
Design
Adds Tailwind utility classes. Your project needs Tailwind installed.
Live preview
<form class="flex w-full max-w-md flex-col gap-4" action="https://shipmyform.com/f/YOUR_FORM_ID" method="POST">
<label class="flex flex-col gap-1.5">
<span class="text-sm font-medium text-neutral-200">Name <span class="text-red-500">*</span></span>
<input class="w-full rounded-lg border px-3 py-2 text-sm outline-none border-neutral-700 bg-neutral-900 text-neutral-100 placeholder-neutral-500 focus:border-[#ffffff] focus:ring-2 focus:ring-[#ffffff]/30" type="text" name="name" autocomplete="name" required />
</label>
<label class="flex flex-col gap-1.5">
<span class="text-sm font-medium text-neutral-200">Email <span class="text-red-500">*</span></span>
<input class="w-full rounded-lg border px-3 py-2 text-sm outline-none border-neutral-700 bg-neutral-900 text-neutral-100 placeholder-neutral-500 focus:border-[#ffffff] focus:ring-2 focus:ring-[#ffffff]/30" type="email" name="email" placeholder="[email protected]" autocomplete="email" required />
</label>
<label class="flex flex-col gap-1.5">
<span class="text-sm font-medium text-neutral-200">Attending? <span class="text-red-500">*</span></span>
<select class="w-full rounded-lg border px-3 py-2 text-sm outline-none border-neutral-700 bg-neutral-900 text-neutral-100 placeholder-neutral-500 focus:border-[#ffffff] focus:ring-2 focus:ring-[#ffffff]/30" name="attending" required>
<option value="" disabled selected>Choose…</option>
<option value="Yes, I'll be there">Yes, I'll be there</option>
<option value="No, can't make it">No, can't make it</option>
</select>
</label>
<label class="flex flex-col gap-1.5">
<span class="text-sm font-medium text-neutral-200">Number of guests</span>
<input class="w-full rounded-lg border px-3 py-2 text-sm outline-none border-neutral-700 bg-neutral-900 text-neutral-100 placeholder-neutral-500 focus:border-[#ffffff] focus:ring-2 focus:ring-[#ffffff]/30" type="number" name="guests" placeholder="0" />
</label>
<label class="flex flex-col gap-1.5">
<span class="text-sm font-medium text-neutral-200">Note</span>
<textarea class="w-full rounded-lg border px-3 py-2 text-sm outline-none border-neutral-700 bg-neutral-900 text-neutral-100 placeholder-neutral-500 focus:border-[#ffffff] focus:ring-2 focus:ring-[#ffffff]/30 min-h-[120px]" name="message" placeholder="Dietary needs, questions…"></textarea>
</label>
<input type="hidden" name="_subject" value="New RSVP" />
<!-- Anti-spam honeypot, leave this empty -->
<input type="text" name="_gotcha" tabindex="-1" autocomplete="off" aria-hidden="true" style="position:absolute;left:-9999px" />
<button class="rounded-lg cursor-pointer bg-[#ffffff] px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90" type="submit">Send RSVP</button>
</form>An RSVP is a headcount, not a mailing list
Everything about an RSVP is attached to money and a deadline: catering, seats, badges, a venue minimum. Precision matters more than volume, and a wrong number costs more than a missing one.
- Attending — yes or no
- An explicit no is as valuable as a yes, because it is the only thing that stops you chasing someone who has already decided.
- Number of guests
- Ask for a number, not “are you bringing anyone”. You cannot cater from a yes.
- Dietary requirements
- Free text, not a checklist. Allergy lists are never complete, and the one you leave off is the one that matters.
- Name
- For the door list. Match it to how the invitation was addressed or you will not find them.
The mistake to avoid: No deadline on the form itself
If the cut-off only appears in the invitation, replies arrive the week of the event and the headcount you needed a fortnight earlier never materialises. Put the date on the form, and consider closing it when the deadline passes rather than collecting replies you cannot act on.
Export to a spreadsheet and sort by attending. The useful list is the one you would not have without asking for an explicit no: everyone who has not answered at all, which is who to chase.
How it works
- Choose a template and fields. Pick a template, then add, remove, or reorder fields and mark the required ones. Add step breaks to turn a long form into a multi-step form.
- Style it. Pick CSS, Tailwind, or unstyled output and tune the theme: accent color, light or dark, rounded corners.
- Copy your framework's code. Switch to HTML, React, Vue, Svelte, Astro, or a fetch() version and copy, download, or open it in CodePen.
- Connect an endpoint. Create a free ShipMyForm form to get a real endpoint, then drop your form ID in so submissions actually arrive.
Want the background? Read what a form backend is and how to stop form spam without reCAPTCHA. Want the submissions in your inbox? See how to send an HTML form to email. Already have a Google Form? Convert it to HTML. Got a form that submits but delivers nothing? Check its HTML.
Frequently asked questions
- Should an RSVP form ask people to decline as well as accept?
- Yes, and it is the field people leave out. A silent non-reply is ambiguous: you cannot tell a no from someone who has not looked yet. An explicit decline is what lets you stop chasing, and it costs the guest one click.
- How do I collect plus-ones and dietary requirements?
- Ask for a number of guests rather than a yes-or-no on bringing someone, because you cannot cater from a yes. Collect dietary requirements as free text instead of a checklist: allergy lists are never complete, and the omission is the one that matters.
- Can I close an RSVP form after the deadline?
- You can, and for a catered event you usually should. Put the cut-off date on the form itself rather than only in the invitation, so the deadline is visible at the moment someone is deciding whether to answer now or later.
- How do I get the responses into a guest list?
- Export the submissions to CSV, or connect the form to Google Sheets so each RSVP appends a row as it arrives. Sorting by the attending field gives you the door list and, more usefully, the list of people who have not replied at all.