Skip to content

Object reference

Trigger builder

ScriptApp.newTrigger(functionName) returns a TriggerBuilder that configures a timeBased(), forSpreadsheet(), or forForm() trigger before create() saves it.

ScriptApp.TriggerBuilder

Start here

Get this object first

Running this setup function installs a persistent daily schedule. It checks for an existing trigger first. To stop it later, open Triggers in Apps Script and delete the writeDailyLog trigger.

Code.gs
function createDailyLogTrigger() {
  const alreadyInstalled = ScriptApp.getProjectTriggers().some((trigger) => {
    return trigger.getHandlerFunction() === 'writeDailyLog';
  });
  if (alreadyInstalled) return;

  ScriptApp.newTrigger('writeDailyLog')
    .timeBased()
    .everyDays(1)
    .atHour(9)
    .create();
}

function writeDailyLog() {
  Logger.log('The daily trigger ran.');
}

Then use it

Common actions

Choose an action, then open its example only when you need the code.

Check whether the daily trigger is installed

This records only Installed or Not installed. It does not create or delete a trigger.

ScriptApp.TriggerBuilder
Show example code
Code.gs
function logDailyTriggerStatus() {
  const installed = ScriptApp.getProjectTriggers().some((trigger) => {
    return trigger.getHandlerFunction() === 'writeDailyLog';
  });
  Logger.log(installed ? 'Installed' : 'Not installed');
}

Count existing triggers before calling newTrigger

This logs how many installable triggers the current user already owns in this project before creating another one.

ScriptApp.TriggerBuilderScriptApp.Trigger
Show example code
Code.gs
function logCurrentTriggerCount() {
  const triggers = ScriptApp.getProjectTriggers();
  Logger.log('Current-user triggers in project: ' + triggers.length);
}

Check whether a spreadsheet trigger is already installed

This inspects getProjectTriggers() for a specific handler and trigger source before you call ScriptApp.newTrigger().forSpreadsheet().

ScriptApp.TriggerBuilderScriptApp.Trigger
Show example code
Code.gs
function checkSpreadsheetTriggerInstalled() {
  const installed = ScriptApp.getProjectTriggers().some((trigger) => {
    return (
      trigger.getHandlerFunction() === 'sendStatusEmail' &&
      trigger.getTriggerSource() === ScriptApp.TriggerSource.SPREADSHEETS
    );
  });
  Logger.log(installed ? 'Spreadsheet trigger installed' : 'Spreadsheet trigger not installed');
}

Technical reference

Exact names and signatures

Generated runtime and signature facts stay separate from the beginner actions above. Open method details only when you need them.

At a glance

Service
ScriptApp
Reference symbol
ScriptApp.TriggerBuilder
Object
TriggerBuilder
Runtime
From signature data

Methods and signatures

Browse 5 methods

forDocument

From signature data Google source
  • forDocument(document: string): ScriptApp.DocumentTriggerBuilder
  • forDocument(document: DocumentApp.Document): ScriptApp.DocumentTriggerBuilder

forForm

From signature data Google source
  • forForm(form: string): ScriptApp.FormTriggerBuilder
  • forForm(form: FormApp.Form): ScriptApp.FormTriggerBuilder

forSpreadsheet

From signature data Google source
  • forSpreadsheet(spreadsheet: string): ScriptApp.SpreadsheetTriggerBuilder
  • forSpreadsheet(spreadsheet: SpreadsheetApp.Spreadsheet): ScriptApp.SpreadsheetTriggerBuilder

forUserCalendar

From signature data Google source
  • forUserCalendar(emailId: string): ScriptApp.CalendarTriggerBuilder

timeBased

From signature data Google source
  • timeBased(): ScriptApp.ClockTriggerBuilder

Need the whole workflow?

Return to a task guide

Task guides cover setup, permissions, expected results, and troubleshooting as well as object methods.

Browse Triggers tasks