Free SaaS Renewal Tracker Template (Sheets and Excel)
A complete SaaS renewal tracker template: nine columns, the exact notice deadline formula, conditional formatting, and a monthly review, in 10 minutes.

Easy Entropy Team
Editorial Team
Practitioner notes from the Easy Entropy team. We write about renewal management, SaaS spend control, and the workflows that keep contract owners ahead of notice deadlines.
The Template, Column by Column
A working SaaS renewal tracker needs nine columns. Set them up in this exact order, columns A through I, in Google Sheets or Excel. The formulas later in this guide reference these positions, so if you keep the order, everything pastes in without edits. Total build time is about 10 minutes.
| Col | Header | What to enter | Example |
|---|---|---|---|
| A | Vendor | The tool or provider name | Figma |
| B | Owner | One named person who decides at renewal | nadia@company.com |
| C | Annual Value | Total cost per year (monthly price times 12 if billed monthly) | $8,400 |
| D | Contract Start | First day of the current term | 2026-02-01 |
| E | Renewal Date | The day the term renews or expires | 2027-02-01 |
| F | Notice Period (Days) | Days of written notice required to cancel | 60 |
| G | Notice Deadline | Formula: =E2-F2 | 2026-12-03 |
| H | Auto-Renews? | Yes or No | Yes |
| I | Status | Active, Under Review, Cancelling, Renewed | Active |
Four of these columns cause most of the mistakes, so get them right on day one:
- Renewal Date comes from the signed order form. Not from the billing portal, not from memory. Portals show the next invoice date, which is often not the same as the contractual term end.
- Notice Period comes from the termination clause. Search the contract for the words notice, terminate, or non-renewal. If you cannot find the contract, enter 30 days for small tools and 60 days for anything over $5,000 per year, then email the vendor for the actual terms and correct the cell.
- Owner is a person, never a team. A row owned by Engineering is a row owned by nobody. Put an email address in the cell.
- Status should be a dropdown, not free text. In Google Sheets: Data, then Data validation, then Dropdown. In Excel: Data, then Data Validation, then List. Four values are enough: Active, Under Review, Cancelling, Renewed.
The Notice Deadline Formula
The single most important cell in the sheet is G2, and it must be a formula, never a typed date:
=E2-F2
Renewal date minus notice days equals the last day you can act. If a contract renews on December 1 with 60 days of required notice, the deadline is October 2. After that date you are committed to another full year, and the renewal date itself becomes irrelevant. Both Google Sheets and Excel subtract days from dates natively, so the same formula works in both. Fill it down the whole column.
Why a formula and not a typed date? Because contracts change. When you renegotiate notice terms from 60 days to 30, you update one cell and the deadline recalculates. A hand typed deadline goes quietly stale and fails exactly when you need it.
Two refinements worth the extra minute:
- Contracts that state notice in months. Three months is not 90 days. Use
=EDATE(E2,-3)instead: for a renewal on 2027-02-01 it returns 2026-11-01, while=E2-90returns 2026-11-03. Two days of slack sounds trivial until a vendor holds you to the letter of the clause. - Add a Days Left helper in column J. Enter
=G2-TODAY(), fill down, and sort the sheet by column J ascending. The next deadline is always row 2. If the formula returns a strange number, your date columns are formatted as text: select them and set the format to Date.
Conditional Formatting for Deadlines Within 60 Days
The sheet should shout at you when a deadline gets close. Set up two rules, red first, then amber, because the first matching rule wins.
Google Sheets: select A2:I200, then Format, then Conditional formatting, then choose Custom formula is. Rule one, red fill:
=AND($G2<>"",$G2-TODAY()<=30,$G2-TODAY()>=0)
Rule two, amber fill, added below it:
=AND($G2<>"",$G2-TODAY()<=60,$G2-TODAY()>=0)
Excel: select the same range, then Home, then Conditional Formatting, then New Rule, then Use a formula to determine which cells to format. Paste the same two formulas as separate rules and set the fill colors. Check the rule order in Manage Rules: the 30 day rule must sit above the 60 day rule.
The dollar sign before G locks the formula to the deadline column while letting the row move, which is what highlights the entire row rather than one cell. The>=0 condition stops the sheet from flagging deadlines that have already passed, which belong in a status change, not a highlight.
Turn Deadlines Into Calendar Alerts at 90, 60, and 30 Days
A spreadsheet is passive. It holds the deadline perfectly and does nothing when the date arrives. To make the tracker into a renewal calendar, push each notice deadline into the calendar you actually watch, as three staged alerts: 90 days out to start the review, 60 days out to make the decision, and 30 days out as the last call before the window closes.
Add three helper columns that compute the alert dates from the notice deadline in column G:
- Column K, first alert:
=G2-90. The renewal goes on the radar and the owner starts gathering usage and seat data. - Column L, second alert:
=G2-60. Decision due: renew as is, renegotiate, or cancel. - Column M, third alert:
=G2-30. Final reminder. If nobody has acted by now, act today.
To get these into Google Calendar or Outlook without retyping anything, export the sheet as a CSV with a Subject column (for example, Renewal alert: Figma, 60 days) and a Start Date column pointing at the alert date, then use the calendar import. Google Calendar accepts a CSV directly, and Outlook imports the same file or an ICS export. Set each event to repeat never, because every renewal has its own dates.
One honest limit. A calendar import is a snapshot. When a contract renews, or you renegotiate the notice period, the old alerts are wrong and you export and import again. That re-import tax is exactly the point where dedicated renewal tracking software earns its price: it recalculates the alerts from the live contract and sends them, so nobody has to rebuild the calendar by hand.
The Monthly Review Ritual
A tracker that nobody opens is decoration. The fix is a 30 minute recurring calendar event on the first business day of each month, owned by whoever owns the sheet. The agenda does not change:
- Sort by Notice Deadline and scan the next 90 days. Every contract with a deadline inside 90 days gets a decision path: renew as is, renegotiate, or cancel. The owner in column B is asked for a recommendation, with usage or seat data to back it.
- Reconcile against the card statement. Export last month of charges and match recurring vendors against the sheet. Anything paying that is not in the tracker is shadow spend: add the row, find the contract, fill in the notice period.
- Update statuses and log decisions. Move anything decided to Cancelling or Renewed, and note what was agreed. Keep cancelled rows in the sheet; knowing what you dropped and why is worth more at the next negotiation than a tidy file.
This ritual is the real product. The columns and formulas above only exist to make these 30 minutes fast.
Where the Spreadsheet Breaks
For a small stack this template is genuinely enough, and you should not pay for software to manage six rows. No tool worship. But the spreadsheet has three structural failures, and every team that runs one long enough meets all three.
- It has no alerts. Conditional formatting only fires if someone opens the file. Miss one monthly review because of a holiday or a busy close, and a 30 day notice window can open and shut in silence. The sheet cannot email you, and a separate calendar reminder is one more hand maintained thing that drifts.
- It goes stale. New tools get signed and never added. A renegotiated contract changes its notice terms and nobody edits column F. Within a couple of quarters the sheet describes the stack you had, not the stack you have, and stale data is worse than no data because it looks authoritative.
- Ownership is just text in a cell. Column B names a person, but the sheet never tells that person anything. When the owner leaves the company, the row keeps their name and no one notices until the renewal has already happened. Accountability needs a nudge, and a cell cannot nudge.
When a Tracker Pays for Itself
The honest math is about row count and owner count. Under roughly 15 subscriptions with one or two owners, the spreadsheet plus a disciplined monthly review works, and the failure modes above stay manageable. Between 15 and 30 rows you are in the gray zone: the review takes longer, more owners means more chasing, and the odds of a stale row climb.
Past 30 rows the math flips. At that size a typical mid market stack carries several contracts in the $5,000 to $25,000 range, and a single missed notice window on one of them locks in more cost than years of dedicated tooling. One auto-renewed $8,400 contract that nobody wanted costs seven times what a $99 per month tracker does in a year, and that is before counting the hours spent keeping the sheet honest.
Build the template above today. It is the right place to start, and for many teams it is the right place to stay. When the sheet starts to hurt, when a renewal slips past the formatting or the reconciliation stops happening, Resubly does the same job with the failure modes removed: upload contracts, and renewal dates, notice windows, and owners are extracted for you, with alerts before each auto-renewal deadline. It is free for up to 5 subscriptions with no credit card, so you can test it against the sheet before deciding anything.
Sources: Google Docs Editors Help: Use conditional formatting rules in Google Sheets, Microsoft Support: TODAY function, Microsoft Support: EDATE function