Send due-date reminders from your spreadsheet automatically

A contract renews on 3 November. Duly emails the person in charge 30 and 7 days before, from your own Google account, stops as soon as the row says “Renewed”, and writes every message it sent into a log in your spreadsheet.

Get notified when Duly is live

A Google Sheets™ add-on. Free for one active reminder covering up to 100 rows, with no account and no card. Pro is $39 a year, billed yearly, cancel anytime.

A reminder email sent by Duly: the
    item, organisation, due date and contact, with a link back to the spreadsheet.


Not published yet

Duly is built, tested and in review for the Google Workspace Marketplace. When the listing is live, the install button will be here. To hear the day it is, email hello@kehrandco.com.


It proves it ran

Sending an email is the easy part. Duly is built so you know it happened, know when it did not, and can switch it off.

A run log you can read

A plain sheet called Duly log in your own spreadsheet: one row per hourly check, with what was scanned, sent, skipped and failed, and the reason for each. Per-row detail is kept for 90 days. It is on the free tier too.

A watchdog that tells you when it stopped

Google can stop a scheduled trigger without warning. When more than 26 hours pass without a check, the next run that happens emails the spreadsheet’s owner how long the gap was and the likely cause. It is not a paid feature.

Nothing sends until you have seen it

Preview shows the real email for the next row, every date and recipient for the next seven days, and everything that will not send, with the reason. Turning a rule on never back-fills.

An off switch that reports back

Pause is one click, takes effect on the next check, and is written into the log. “Pause everything” is in the Extensions menu.


How it works

  1. Pick the dates. The tab and the column that holds them.
  2. Pick who to tell. Addresses you type, an address column in the sheet, or both.
  3. Pick when. Up to four of 30, 7 and 1 days before, and on the day, at one send hour in your time zone. Optionally stop when a status column says “Renewed” or “Paid”.
  4. Look at the preview. Then turn it on.

Two starter templates, Renewals and expiry dates and Invoices due, guess the columns and the wording from the sheet you already have, so the first rule takes about a minute.


Templates


The details, said plainly

The limits

These come from Google Apps Script, which is what a Sheets add-on runs on. Duly does not pretend otherwise.

  • Dates are checked hourly. A reminder goes out in the hour you chose. Nothing here is real time.
  • Your Google account caps the sending, not Duly. About 100 email recipients a day on a consumer Gmail account and about 1,500 on a Google Workspace account. Duly reads the remaining quota before a run, sends the most urgent rows first, and logs the rest as deferred with the reason.
  • Mail comes from your own address. No domain to set up, and replies land with you. Delivery is between your Google account and the recipient’s mail provider.
  • The watchdog reports gaps after they end. It needs a run to happen to notice. Duly is a reminder, not the only control on a deadline that would be seriously costly to miss.
What it does not do

Deliberately: no workflow builder, no CRM, no project tracker, no document storage, no AI anything. No attachments, no SMS, no Slack, no conditional logic beyond the single stop condition. Rules are not shared between people, on any plan.


What Duly does with your Google data, and why it asks

When you install Duly, Google asks you to allow five permissions. Each one is there for one job, and Duly uses your Google data only to do that job, in your own spreadsheet, when you have asked it to:

  • See and edit this spreadsheet only (spreadsheets.currentonly) — to read the date, address and status columns your reminder names, and to write the Duly log sheets. It gives no access to any other file, and none to Drive.
  • Send email as you (script.send_mail) — to send the reminders you previewed and turned on, and the watchdog notice, from your own address. It can only send; it cannot read, search or delete your mail.
  • Run when you are not present (script.scriptapp) — to create the one hourly check, and remove it when your last reminder is deleted.
  • Show a sidebar and a menu (script.container.ui) — the whole interface lives inside Google Sheets.
  • Connect to an external service (script.external_request) — to check a purchase or a seat in a 10-account pack with Duly’s licence server, which receives only one-way hashes of the addresses involved, and to deliver a support message you choose to send.

The contents of your spreadsheet never reach any Duly server. Nothing is sold, shared, used for advertising or read by a person. The privacy policy says exactly what is stored, for how long, and how to have it deleted.


Price

Free forever for one active reminder covering up to 100 rows, with the run log and the watchdog included — the free tier is not a trial and does not expire. Pro is $39 a year. The 10-account pack is $119 a year for up to 10 Google accounts. Both are billed yearly and cancel anytime. See what is in each plan.

Support is answered within two business days, at hello@kehrandco.com. That is a promise on the listing, so if it ever becomes impossible the listing changes before the promise breaks.