Invite Attendees to Events

Apps Script lets you add guests to calendar events, send invites, and check attendee responses — all programmatically. This is useful for automatically scheduling onboarding sessions, team meetings, or client calls from spreadsheet data.

Adding a Guest When Creating an Event

Pass a guests option when creating the event:

function createOnboardingWithInvite() { var calendar = CalendarApp.getDefaultCalendar(); var start = new Date("2024-03-26T14:00:00"); var end = new Date("2024-03-26T15:00:00"); var event = calendar.createEvent( "Pro Plan Onboarding – Sarah Johnson", start, end, { description: "Welcome onboarding session for Sarah Johnson's Pro Plan account.", guests: "[email protected]", sendInvites: true } ); Logger.log("Invite sent to [email protected]"); }

Adding Multiple Guests

Pass a comma-separated string of email addresses:

function createTeamSyncWithAttendees() { var calendar = CalendarApp.getDefaultCalendar(); var start = new Date("2024-03-25T09:00:00"); var end = new Date("2024-03-25T09:30:00"); var event = calendar.createEvent( "Weekly Sales Sync – North & East Regions", start, end, { guests: "[email protected],[email protected]", sendInvites: true } ); Logger.log("Team sync created with " + event.getGuestList().length + " attendees."); }

Inviting Customers from Sheet Data

This example creates an onboarding session for every newly closed deal and invites the customer automatically:

function scheduleOnboardingSessions() { var sheet = SpreadsheetApp .getActiveSpreadsheet() .getSheetByName("Sales Tracker"); var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, 8).getValues(); // Columns: [Customer Name, Email, Product, Amount, Region, Sales Rep, Status, Date] var calendar = CalendarApp.getDefaultCalendar(); var repEmails = { "Alex Martinez": "[email protected]", "Jordan Lee": "[email protected]", "Sam Rivera": "[email protected]" }; data.forEach(function(row) { var customerName = row[0]; var customerEmail = row[1]; var product = row[2]; var salesRep = row[5]; var status = row[6]; if (status !== "Closed") return; // Schedule onboarding 3 days after deal close var start = new Date(); start.setDate(start.getDate() + 3); start.setHours(11, 0, 0, 0); var end = new Date(start.getTime() + 60 * 60 * 1000); // 1 hour var repEmail = repEmails[salesRep] || ""; var allGuests = customerEmail + (repEmail ? "," + repEmail : ""); var event = calendar.createEvent( product + " Onboarding – " + customerName, start, end, { description: "Onboarding session for " + customerName + "'s " + product + " account.\nAccount Manager: " + salesRep, guests: allGuests, sendInvites: true } ); Logger.log("Onboarding scheduled for " + customerName + " | ID: " + event.getId()); }); }

With the sample data, onboarding sessions are created for Sarah Johnson (Pro Plan) and Lisa Park (Starter Plan), with both the customer and their sales rep invited.

Checking Guest Responses

function checkGuestResponses() { var calendar = CalendarApp.getDefaultCalendar(); var now = new Date(); var nextWeek = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000); var events = calendar.getEvents(now, nextWeek, { search: "Onboarding" }); events.forEach(function(event) { Logger.log("Event: " + event.getTitle()); event.getGuestList().forEach(function(guest) { Logger.log(" " + guest.getEmail() + " → " + guest.getGuestStatus()); }); }); }

Adding a Guest to an Existing Event

function addGuestToExistingEvent() { var calendar = CalendarApp.getDefaultCalendar(); var event = calendar.getEventById("YOUR_EVENT_ID"); event.addGuest("[email protected]"); Logger.log("Guest added to: " + event.getTitle()); }

Removing a Guest

function removeGuestFromEvent() { var calendar = CalendarApp.getDefaultCalendar(); var event = calendar.getEventById("YOUR_EVENT_ID"); event.removeGuest("[email protected]"); Logger.log("Guest removed."); }