Run Nonprofit Events on Autopilot (Registration to Thank You)
Manage your entire nonprofit event-from registration to thank-you emails-on autopilot using Google Forms and Sheets. No Eventbrite fees.
Eventbrite charges 3.7% + $1.79 per ticket. For a $50 fundraising dinner with 200 guests, you’re losing $700+ in fees. That’s a scholarship. That’s 50 meals. That’s operational cost you can't afford.
You don't need a ticketing platform. You need a database that talks to email.
Here’s What We’ll Build
A Google Form collects registrations. Apps Script auto-generates ticket IDs, sends confirmation emails with those IDs, and logs dietary restrictions. No manual intervention.
The Code: Registration & Ticketing
1. Setup
- Google Form: Questions: Name, Email, Meal Preference.
- Google Sheet: Destination spreadsheet. Add a header "Ticket ID" to the last column (e.g., Column E).
2. The Script
// CONFIGURATION
const EVENT_NAME = "Annual Gala 2025";
const TICKET_PREFIX = "GALA-";
function onFormSubmit(e) {
const sheet = e.range.getSheet();
const row = e.range.getRow();
// 1. Generate Unique Ticket ID
const uniqueId = TICKET_PREFIX + Math.floor(1000 + Math.random() * 9000); // e.g. GALA-4921
// Write ID to the specific column (Check your sheet for the exact column index!)
// Here we assume it's Column 5 (E)
sheet.getRange(row, 5).setValue(uniqueId);
// 2. Get Guest Details
const responses = e.namedValues;
const name = responses['Name'][0];
const email = responses['Email'][0];
const meal = responses['Meal Preference'][0];
// 3. Send Confirmation Email
sendTicketEmail(name, email, uniqueId, meal);
}
function sendTicketEmail(name, email, ticketId, meal) {
MailApp.sendEmail({
to: email,
subject: `Your Ticket for ${EVENT_NAME}`,
htmlBody: `
<h2>You're confirmed, ${name}!</h2>
<p>We are excited to see you at the ${EVENT_NAME}.</p>
<div style="border: 2px dashed #333; padding: 20px; background: #f9f9f9;">
<h3>TICKET ID: ${ticketId}</h3>
<p><strong>Guest:</strong> ${name}</p>
<p><strong>Meal:</strong> ${meal}</p>
</div>
<p>Please show this email at the door.</p>
`
});
}3. Set the Trigger
- Extensions > Apps Script.
- Triggers (Clock) > Add Trigger.
onFormSubmit>From spreadsheet>On form submit.
Post-Event: The Automatic Thank You
Don't copy-paste 200 emails the day after the event.
Add a second function sendThankYous() that iterates through your "Checked In" column and sends a personalized "Impact Report" PDF or video link.
Code Snippet:
function sendThankYous() {
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();
data.forEach((row) => {
if (row[CheckedInColumn] === true && row[ThankyouSentColumn] === '') {
MailApp.sendEmail(row[EmailCol], "Thank you for coming!", "Here are the photos...");
// Mark sent
}
});
}Save the Fees. Keep the Data.
Stop renting your attendee data from ticketing platforms. Own it in Google Sheets, and put that $700 back into your mission.
Get more tips like this
Subscribe for practical Google Workspace automation tips.
Free updates. No spam. Unsubscribe any time.
Want more help?
We're here to help. Drop us an email and let's explore how we can optimize your workflows.
Email ushello@mereth.dev