Event registration without the SaaS
Registrations land in a sheet you can count with a formula, cap by pausing the form, and run check-in from on the day. No per-attendee fees.
The workflow
Event platforms charge per ticket for what is, for a free meetup or a workshop, three capabilities: a form, a count, and a list at the door. A spreadsheet does two of those natively.
So: a registration form on your event page posts to a permanent endpoint, rows append to the sheet in arrival order, and a headcount formula in a corner cell tells you where you stand against capacity. After submitting, the visitor gets a 303 redirect to a confirmation page you control - the natural place for the calendar link, the address, and anything else attendees ask twice about. Watch a row land on the live demo first if you like; the pipeline is on how it works.
Suggested columns
Registration sheets have a distinctive shape: some columns are per-person, one is per-party.
- Name, Email - the registrant.
- Ticket Type - a dropdown in the form (General / Speaker / Volunteer), which lands as a clean filterable value.
- Seats - how many people the registration covers. This is the column your headcount formula sums.
- Dietary Notes - free text; the caterer gets a filtered export of just this column.
- Submitted At - arrival order settles waitlist disputes.
- Checked In and Paid - working columns for the day itself.
The form markup
A registration form with a party-size field and the honeypot:
<form action="https://sheetlinkforms.com/f/your_token" method="POST">
<input name="name" placeholder="Name" required>
<input name="email" type="email" placeholder="Email" required>
<select name="ticket_type">
<option>General</option>
<option>Student</option>
</select>
<input name="seats" type="number" value="1" min="1" max="4">
<input name="dietary_notes" placeholder="Dietary notes (optional)">
<input name="_slhp" tabindex="-1" autocomplete="off" style="position:absolute;left:-9999px">
<button type="submit">Register</button>
</form>Set the form's redirect URL to your confirmation page in the dashboard, or add the sl.js embed with data-redirect to control it from the markup. Field names map to headers automatically, so ticket_type finds the "Ticket Type" column on its own.
Working the sheet
The event-specific moves:
- Headcount in a cell.
=SUM(D2:D)over the Seats column is your live count. Put capacity in the next cell and the difference is your remaining room, visible every time you open the sheet. - Cap by pausing. There is no automatic cutoff at a number - when the count reaches capacity, pause the form in the dashboard. A paused endpoint stops accepting submissions, so late visitors are not silently registered past the room limit.
- Check-in from a phone. On the day, open the sheet, sort by Name, and mark the Checked In column at the door. Two volunteers can work the same sheet at once, because it is just a sheet.
- Caterer export. Filter to non-empty Dietary Notes, copy, send. Done.
Delivery retries at 5 minutes, 30 minutes, and 2 hours cover API hiccups, and the delivery log shows every attempt - useful reassurance the week before an event.
Spam considerations
Registration forms sit in the middle of the spam spectrum: more exposed than an application form, less hammered than a contact form. The defaults do well here - honeypot for the crude bots, per-IP rate limits against duplicates and floods, and the empty-payload heuristic for junk posts.
The quarantine matters in one specific way for events: a false positive is a person who believes they registered and will show up. Because suspicious submissions are held for one-click review rather than dropped, a weekly sweep - daily in the final week - keeps the attendee list honest. If your event page gets shared somewhere high-traffic and rowdy, turn on Cloudflare Turnstile for the duration.
FAQ
Can it take payments for paid events?
No - SheetLink Forms records registrations; it does not process money. The working pattern: put your payment link on the confirmation page the form redirects to, and reconcile against the Paid column in the sheet.
Does registration close automatically at capacity?
No. The headcount formula tells you where you stand, and pausing the form in the dashboard closes registration - a paused endpoint stops accepting submissions. It is one manual step, in exchange for never paying per ticket.
Do attendees get a confirmation email?
Not from SheetLink - the redirect to your confirmation page is the built-in confirmation. Put the calendar file and venue details there. If email confirmations matter for your event, send them from the sheet with your usual tools.
What does this cost per registration?
Nothing per registration, ever - that is a standing rule, not a beta perk. The product itself is free during beta with an invite from the waitlist.
Related: A waitlist that runs itself · Job applications into a hiring sheet · Newsletter signups you own