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

Logs 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

Logs how many installable triggers you already have in this project, so you can check 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

Looks in getProjectTriggers() for a trigger with a specific handler function and a spreadsheet source. Run this check 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

Open method details 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