What You Need Before Setup

A Google account, Gmail or Workspace, is the whole requirement. No credit card, no paid subscription-management app, no coding experience.

Log into Google Drive before copying the tracker template, otherwise the copy fails. Once it lands in your Drive, the sheet runs entirely inside your own account with no ongoing link back to the original owner’s file. Updates to the template will never reach your copy, and nobody else can see what you enter.

Setting Up Your Renewal Tracker Sheet

Copy the template into your Drive and open it. You’ll find columns for subscription name, renewal date, and reminder intervals.

Enter each subscription you want to track. The renewal date is the day the charge actually hits: type 2026-09-15 for a September 15 renewal. In the reminder column, put how many days of warning you want. A week or two gives you room to review the charge or cancel before it lands.

Row 1 is treated as a header and skipped. Your data starts in row 2 and runs to the last subscription you entered, and the script reads only rows that actually contain data, so trailing blank rows are harmless.

The script reads six columns by default. Add your own columns for notes, category, or cost, and you also have to tell the script about them: find the column-count variable and change 6 to 7, 8, or whatever your total is. Skip that edit and everything past the sixth column is invisible to the script.

The tab name at the bottom of the spreadsheet has to match the name written inside the script, character for character. Out of the box the tab is “Subscriptions” and the script looks for “Subscriptions”. Rename it to “Annual Bills” and reminders stop firing with no error and no warning. Open the script editor and update the sheet name variable to match whatever you renamed it to.

Configuring Dual Reminder Emails

Two reminders per subscription, at different notice periods, covers the two things you actually need. An early alert 15 days out gives you time to think about an expensive renewal, and a 7-day nudge forces the decision.

Add two columns for reminder intervals. First column gets the days of notice for the first alert, second column gets the days for the second. Plain numbers only: 15 means fifteen days before renewal, 7 means seven.

Every run, the script subtracts today’s date from the renewal date. When that difference matches one of your configured values, that email fires. A subscription renewing 2026-10-01, checked on 2026-09-16, is 15 days out, so a 15-day reminder sends today and the 7-day one waits until 2026-09-24.

Odd intervals work the same way. Some people run 30, 14, and 1 day; others use 60 and 7 for anything expensive. Nothing caps you at two reminders, since the script just fires whenever remaining days match a configured value. Each extra reminder does need its own column, plus a script update to read it.

Routing Reminders to the Right Inbox

Reminders land in whichever Gmail or Workspace account authorized the Apps Script. Google prompts you for permissions on the first run, and the account you pick there becomes the recipient for everything after.

Tracking subscriptions for someone else, a teammate or a customer, means sending elsewhere. Add a “recipient email” column and enter an address per subscription, and reminders go to that address instead of yours.

That one costs you a script edit: code to read the recipient-email column and pass it into the email function. If editing code isn’t your thing, hand it to someone who knows Apps Script. The alternative is leaving reminders in your own inbox and forwarding them by hand, which works fine for two or three people.

Automating the Check with Apps Script Triggers

The script checks your sheet every 12 hours for reminders that have come due. Set the trigger once and you stop thinking about it.

Open your sheet, click Tools, then Script editor. A new window opens with the Apps Script code, which is where the reminder logic lives.

Google shows a permission dialog on the first run. Review what it asks for (reading the sheet, sending mail), pick your account, and click Allow. You do this once.

Now the trigger. In the Script editor, click the Triggers button with the alarm clock icon, then Create new trigger.

Pick the function to run (usually send-reminders or send_reminders), set deployment to Head, choose Time-driven as the type, then Hour timer with a 12-hour interval. Tick “Notify me of failures” so a silent trigger failure doesn’t cost you a renewal you meant to cancel.

Click Save and the trigger goes live. From then on the script wakes up twice a day, and any subscription whose renewal date matches one of your configured intervals sends its email right then.

Catching Renewals Without Maintaining a Script

The sheet works and costs nothing, but it stays alive only as long as you maintain it. Rename a tab, forget the script edit, and reminders die quietly. Add a column without bumping the count, and that data is never read. The failure mode is silence, which is exactly the failure mode you were trying to escape when you forgot an annual renewal until charged.

Picture the same information without the plumbing: your recurring bills sit next to your salary and your one-off expenses, and the number you can safely spend already has next month’s renewals subtracted from it. No column counts, no tab names, no trigger to babysit.

Dzing works that way. You enter subscriptions and recurring bills as planned operations, and they feed straight into a safe-to-spend number with a full breakdown of how it was calculated. Entry is still manual, so Dzing cannot surface a subscription you’ve forgotten about, and no tool can reverse a charge that already cleared. What it does remove is the script you have to keep in sync with your own spreadsheet.