Contract renewal tracker spreadsheet
A free template for tracking contracts, subscriptions, domains and insurance in Excel or Google Sheets, with copy-ready formulas that work out the cancel-by date (renewal date minus notice period), roll auto-renewing dates forward, and say which rows need action. Download the starter file: the four formulas are already in columns H to K, and the page explains each one.
The columns
| Column | What goes in it |
|---|---|
| A Name | Zoom, business insurance, example.com domain, studio lease |
| B Type | SaaS, domain, insurance, licence, lease, contract |
| C Renewal date | Any renewal date you know. Old dates are fine: the formula rolls them forward |
| D Term (months) | 1, 3, 12, 24 and so on: the length of one term |
| E Notice (days) | How many days before renewal you must cancel. 0 if you can cancel any time |
| F Cost per term | What you pay each time it renews |
| G Auto renews | yes or no (no means it simply ends on that date) |
| H Next renewal | Formula 1 below |
| I Cancel by | Formula 2 |
| J Days left | Formula 3 |
| K Status | Formula 4 |
The formulas (row 2; fill them down)
The starter file already has these in H2:K5. For your own rows, click into H2, I2, J2 and K2, paste one formula each, then fill them down. They use EDATE, DATEDIF and TODAY, which Excel, Google Sheets and LibreOffice all have. Separate arguments with semicolons instead of commas if your spreadsheet is set to a European locale.
1. Next renewal (H2)
=IF(G2="no",C2,IF(C2>=TODAY(),C2,IF(EDATE(C2,D2*INT(DATEDIF(C2,TODAY(),"m")/D2))>=TODAY(),EDATE(C2,D2*INT(DATEDIF(C2,TODAY(),"m")/D2)),EDATE(C2,D2*(INT(DATEDIF(C2,TODAY(),"m")/D2)+1)))))
For an item that renews by itself, this steps the date forward one term at a time until it is today or later. Each step is counted from the original date, so a 31 January anchor gives 28 February and then 31 March, not a date that slowly drifts.
2. Cancel by (I2)
=H2-E2
3. Days left (J2)
=I2-TODAY()
4. Status (K2)
=IF(J2<0,"Window closed",IF(J2<=14,"Cancel soon","OK"))
Format H and I as dates and J as a number. Then sort by column J, smallest first: the top of the sheet is what you need to act on. Add a conditional-formatting rule on K, but keep the words as well as any colour, so the sheet still reads in a black-and-white printout.
How the formulas were checked
We ran formula 1 in LibreOffice on 400 random rows (renewal dates from 2020 to 2030, including 29, 30 and 31 of the month, terms of 1 to 60 months) with today set to 12 October 2026, and compared every result with the date routine the Renewal Radar app uses. All 400 matched. Formulas 2 to 4 are plain subtraction and comparison. A "window closed" row means the notice date has already passed for the coming renewal. It does not mean you cannot ask the vendor to cancel anyway, and your contract always wins over this sheet.
Where a spreadsheet stops being enough
- Nothing nudges you. The status column only changes when you open the file. A sheet cannot put a "last day to cancel" alarm in your phone calendar.
- It is one person's file. Shared sheets work until someone sorts a single column and breaks the rows.
- The dates are only as good as the notice periods you typed. Read the clause in the contract once, then record it.
If you want the calendar alarms without building anything, make a calendar file from your list (free, in your browser), or paste this same sheet into the Renewal Radar app: it has an Import from a spreadsheet button that reads these columns (select the rows, copy, paste; day/month order is detected, or asked, when you paste dates such as 14/03/2027) and then keeps a private calendar feed up to date. Free for 5 items.
Single date to check? Use the cancel-by date calculator. This is a reminder aid, not legal advice.