appscript.dev
Automation Beginner Forms Gmail

Re-send a recurring weekly check-in form

Push a status form to the Northwind team each week — no Friday reminder needed.

Published Aug 22, 2025

At Northwind, the Friday check-in only works when everyone fills it in. The form itself is two minutes; the friction is remembering to nudge the team before the day evaporates into edits and client calls. Manual reminders slip, get forgotten on bank holidays, and end up being sent at five past five — by which point half the team has logged off.

This script takes the nudge off your plate. A weekly trigger fires once, every Friday at 2pm, and Gmail sends the same short message to the team list with the form link. Cheap, boring, and reliable — exactly what a weekly habit needs.

What you’ll need

  • A published Google Form for the weekly check-in (the URL goes in FORM_URL).
  • A team email address or alias that fans out to the people who should reply. A Google Group works well here.
  • Roughly thirty seconds of attention from each teammate on a Friday afternoon.

The script

// The form everyone fills in. Use the short forms.gle link so the email
// stays compact on mobile clients.
const FORM_URL = 'https://forms.gle/WEEKLY_CHECKIN';

// Who receives the nudge. A group alias is easier to maintain than a
// comma-separated list — add and remove people without touching the script.
const TEAM = '[email protected]';

// Subject and body live as constants so non-developers can tweak the
// wording without poking at the function body.
const SUBJECT = 'Friday check-in';
const BODY =
  'Two minutes, please: ' + FORM_URL + '\n\n' +
  'Three quick questions:\n' +
  '  1. What did you ship this week?\n' +
  '  2. What is blocking you?\n' +
  '  3. One thing on your mind.\n\n' +
  '— Northwind';

/**
 * Sends the weekly check-in email. Wired to a time-driven trigger so it
 * fires every Friday afternoon, no manual nudge required.
 */
function sendWeeklyCheckin() {
  // One call, plain text, no attachments. Plain text avoids the spam
  // filters that sometimes flag HTML "newsletter" patterns from internal
  // domains, and keeps the email readable in any client.
  GmailApp.sendEmail(TEAM, SUBJECT, BODY);
  Logger.log('Sent check-in to ' + TEAM);
}

How it works

  1. sendWeeklyCheckin is a single-purpose function — no branching, no event payload, just a Gmail send call.
  2. Constants at the top hold the form URL, recipient, subject and body, so the message can be edited without touching the function body.
  3. The body is plain text with the form link inline. Most email clients turn the URL into a tappable link automatically, so there is no need for HTML.
  4. The script logs the recipient on success — useful for confirming a trigger actually fired when you check the executions list on Monday morning.

Example run

When the trigger fires on Friday at 14:00, every member of [email protected] receives:

From: Northwind automation Subject: Friday check-in

Two minutes, please: https://forms.gle/WEEKLY_CHECKIN

Three quick questions:

  1. What did you ship this week?
  2. What is blocking you?
  3. One thing on your mind.

— Northwind

The Apps Script executions log records a single successful run with the message Sent check-in to [email protected].

Trigger it

This is a clock-driven job, not an event-driven one:

  1. Open the Apps Script project and pick Triggers in the left rail.
  2. Add a new trigger for sendWeeklyCheckin.
  3. Event source: Time-driven. Type: Week timer. Day: Friday. Time of day: 2pm to 3pm.
  4. Save, approve the Gmail scope on the first run, then submit a test by running sendWeeklyCheckin manually once.

To skip a week — say the team is at an offsite — disable the trigger from the same panel and re-enable it the following Thursday.

Watch out for

  • The time-of-day window is fuzzy. Apps Script fires the trigger somewhere inside the hour you pick, not at the exact minute. Pick the hour that matches your team’s rhythm and accept the ten-minute spread.
  • Bank holidays still get a check-in. If that bothers people, add a guard at the top of the function that returns early when the date matches a hard-coded list, or read the holiday list from a sheet.
  • Gmail’s daily send quota is generous for one weekly email to one group, but if the script ever fans the email out to individual addresses, mind the per-day cap on a consumer account.
  • A check-in is only as good as the follow-up. If the answers go straight into a sheet and nobody reads them, the habit dies. Pair this with a Monday digest that surfaces the blockers — see the forms cluster for the rollup.

Related