Google Apps Script now supports data regions. You can finally specify the geographic location for script execution and storage to help with your compliance requirements.

Google Apps Script now supports data regions. You can finally specify the geographic location for script execution and storage to help with your compliance requirements.
Google Apps Script gotcha: .atHour(9) is not 9:00. It fires somewhere in the 9-10 window, and it drifts day to day.
ScriptApp.newTrigger("daily").timeBased().atHour(9).everyDays(1).create();
So never derive "yesterday" from when the trigger ran. Filter on the timestamp in the row.
Ask: next week's meetings in a sheet, every Sunday.
Google Apps Script, weekly trigger:
const ev = CalendarApp.getEvents(mon, sun);
if (!ev.length) return;
sh.getRange(2,1,ev.length,2).setValues(ev.map(e=>[e.getStartTime(),e.getTitle()]));
A quiet week is 0 rows, and setValues throws. #AppsScript
Google Apps Script gotcha: two form submits in the same second both read getLastRow() = 40, both write row 41, one silently overwrites the other.
sheet.appendRow(row) is atomic — the one write that cannot lose that race.
If you must setValues(), take a LockService lock first. #AppsScript