Back to BlogAutomation

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.

December 26, 2025
3 min read

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

  1. Extensions > Apps Script.
  2. Triggers (Clock) > Add Trigger.
  3. 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.

Newsletter

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 us

hello@mereth.dev

nonprofit automationGoogle Forms event registrationautomated email confirmationsevent managementprocess automationno-code event tools