Sheet & Flow
Launch offer: 20% off every product and bundle with code LAUNCH20 until October 14, 2026. Browse the store

Lease Renewal Tracker Spreadsheet: Lease Expiration Alerts, Notice Deadlines and Rent Increases (Excel & Google Sheets)

Short on time? The Lease Renewal Tracker ($12) is the finished, tested version of what this tutorial builds.

A lease that ends without a decision is expensive. Either the tenant rolls onto month-to-month at the old rent, or you find out in the last week that you sent the rent-increase notice too late and have to wait another month or more. The fix is boring: one row per lease and a few date formulas that tell you, every Monday, which leases need a decision and which notices have to go out now.

This tutorial builds that sheet. It works the same in Excel, Google Sheets and LibreOffice. We tested every formula below by building a workbook with these exact formulas, recalculating it in LibreOffice, and comparing every cell to the worked example and to an independent Python calculation.

1. A Setup tab with two inputs

Make a tab called Setup:

A B
1 As-of date 2026-10-07
2 Mailing buffer (days) 5

B1 is the date everything is measured from. Type today's date, or use =TODAY() if you want it to move on its own (a typed date is better for a weekly review, because the numbers don't change while you work). B2 is extra time you give yourself for mailing or delivery, so "deadline" means the day you must send it, not the day it must arrive.

2. The Leases tab

One row per unit, starting in row 2. The first six columns are typed:

A B C D E F
1 Unit Lease end Current rent Proposed rent Status Notice days
2 Oak 1A 2026-10-31 1450 1520 Offer sent 30

Status is one of: Not started, Drafting, Offer sent, Negotiating, Accepted, Declined, Moved out. Use a dropdown (Excel: Data → Data Validation → List; Google Sheets: Insert → Dropdown) so the spelling is always identical, because the formulas below match on it.

Notice days is how many days before the lease end the tenant must receive your renewal or rent-increase notice. It comes from your lease and your state's law, so it can differ per row.

3. The calculated columns

G2:  =IF(B2="","",B2-Setup!$B$1)
H2:  =IF(G2="","",IF(G2<0,"Past due",IF(G2<=30,"0-30 days",IF(G2<=60,"31-60 days",IF(G2<=90,"61-90 days","90+ days")))))
I2:  =IF(OR(B2="",F2=""),"",B2-F2-Setup!$B$2)
J2:  =IF(I2="","",IF(OR(E2="",E2="Not started",E2="Drafting"),IF(I2<Setup!$B$1,"MISSED - check lease",IF(I2-Setup!$B$1<=14,"Send notice now","On track")),"Notice sent"))
K2:  =IF(OR(C2="",D2="",C2=0),"",D2/C2-1)
L2:  =IF(B2="","",EDATE(B2,12))

Fill all six down as far as you have leases (blank rows stay blank). What each one does:

  • G, Days until end: lease end minus the as-of date. Negative means the lease has already ended.
  • H, Window: buckets G into Past due, 0-30 days, 31-60 days, 61-90 days and 90+ days. This is the column you filter on.
  • I, Send-by date: lease end, minus the notice days, minus your mailing buffer. Format column I as a date. If it shows a number like 46321, it's a date that just needs formatting.
  • J, Notice status: only rows that haven't sent anything yet (Not started, Drafting or blank) can be late. If the send-by date has passed, it says MISSED - check lease. If it's within 14 days, Send notice now. Once the status moves to Offer sent or beyond, it says Notice sent.
  • K, Bump %: proposed rent divided by current rent, minus 1. Format as a percentage. It stays blank until you type a proposed rent.
  • L, Next lease end: the end date of a 12-month renewal (the renewal starts the day after the old lease ends, so it ends on the same date next year). EDATE handles month ends correctly, for example February 29, 2028 becomes February 28, 2029.

When a renewal is accepted, type the new lease end from column L into column B, set the status back to Not started, and the row drops out of this year's pipeline on its own.

Optional: notice days that depend on the increase

Some states set the notice period by the size of the increase. For example, for month-to-month residential tenancies, California Civil Code §827(b) requires at least 30 days' written notice for an increase of 10% or less and 90 days for more than 10% (counting other increases in the prior 12 months), and mailed notices get extra time under Code of Civil Procedure §1013. If a rule like that applies to you, calculate column F instead of typing it:

F2 (California month-to-month example):  =IF(K2="",30,IF(K2>0.1,90,30))

This is only an example of the pattern. Other states, cities with rent rules, subsidized housing and your own lease can all set different or longer periods, so check yours and put the right numbers in the formula.

4. A small dashboard

On a Dashboard tab, a few counts tell you how the week looks:

B1:  =COUNTIFS(Leases!$H$2:$H$200,"0-30 days",Leases!$E$2:$E$200,"<>Accepted",Leases!$E$2:$E$200,"<>Declined",Leases!$E$2:$E$200,"<>Moved out")
B2:  =COUNTIFS(Leases!$H$2:$H$200,"Past due",Leases!$E$2:$E$200,"<>Accepted",Leases!$E$2:$E$200,"<>Declined",Leases!$E$2:$E$200,"<>Moved out")
B3:  =COUNTIF(Leases!$J$2:$J$200,"Send notice now")
B4:  =COUNTIF(Leases!$J$2:$J$200,"MISSED*")
B5:  =IFERROR(AVERAGE(Leases!$K$2:$K$200),0)

Label them in column A: Open, ending in 30 days, Open, past due, Notices to send now, Notices missed, Average proposed bump. B5 averages only the rows that have a proposed rent, because AVERAGE skips the blank text that column K returns. Format it as a percentage.

To color the rows, select the Leases data and add a conditional-formatting rule with a custom formula such as =$J2="Send notice now" (amber) and =$J2="MISSED - check lease" (red).

Worked example

As-of date October 7, 2026, mailing buffer 5 days, seven leases:

Unit Lease end Rent Proposed Status Notice days Days Window Send by Notice status Bump % Next end
Oak 1A 2026-10-31 1,450 1,520 Offer sent 30 24 0-30 days 2026-09-26 Notice sent 4.83% 2027-10-31
Oak 1B 2026-11-30 1,400 1,470 Drafting 30 54 31-60 days 2026-10-26 On track 5.00% 2027-11-30
Elm 2A 2026-11-15 1,525 Not started 30 39 31-60 days 2026-10-11 Send notice now 2027-11-15
Elm 2B 2026-12-31 1,475 1,550 Not started 60 85 61-90 days 2026-10-27 On track 5.08% 2027-12-31
Pine 3A 2026-10-20 1,300 1,350 Not started 30 13 0-30 days 2026-09-15 MISSED - check lease 3.85% 2027-10-20
Pine 3B 2027-03-31 1,600 Not started 60 175 90+ days 2027-01-25 On track 2028-03-31
Pine 4A 2026-09-30 1,200 1,250 Accepted 30 −7 Past due 2026-08-26 Notice sent 4.17% 2027-09-30

Dashboard: 2 open leases ending in 30 days (Oak 1A and Pine 3A), 0 open past due (Pine 4A is past its end date but already accepted, so you just need to type its new end date), 1 notice to send now (Elm 2A, by October 11), 1 missed (Pine 3A), and an average proposed bump of 4.59%.

What the example shows:

  1. Elm 2A is the urgent one, not the lease that ends soonest. It ends 39 days out, but with 30 days' notice and a 5-day mailing buffer, the notice has to go out within four days. A plain "days until end" column would have filed it under "next month".
  2. Pine 3A needs a decision today. Its send-by date passed three weeks ago. Depending on your lease and state, that can mean the increase can't take effect at renewal, or the tenancy rolls to month-to-month. Check before you send anything.
  3. Elm 2B ends later than Elm 2A but is on track because it uses a 60-day notice period, which pushes its send-by date to October 27.

Common mistakes

  • Dates typed as text. If column G shows #VALUE!, the lease end was pasted as text. Re-enter it as a real date (in Google Sheets, Format → Number → Date).
  • Counting to the day the notice arrives, not the day you send it. That's what the mailing buffer is for. If you deliver notices in person, set it to 0.
  • Statuses typed by hand. offer sent or Offer Sent with a trailing space won't match, and a row can show as missed when it isn't. Use a dropdown.
  • One notice period for everyone. Fixed-term leases, month-to-month tenants and large increases can each have different rules. Keep notice days per row.

Related tutorials

Want it done for you?

The Lease Renewal Tracker is a finished workbook built on the same windows: days until end, 30/60/90-day buckets, bump $ and %, a suggested next action for every lease, a status dropdown, a dashboard and a Monday pipeline view, plus a sample with eight leases. It works in Excel and Google Sheets with no macros.

Not legal advice. Notice periods and rent-increase rules depend on your state, city and lease. Check them before sending a renewal or rent-increase notice.

Free tool: Free Rental Property Calculator: Cash Flow, Cap Rate, Cash-on-Cash, DSCR

Written with AI assistance. Every formula, command and number on this page was tested before publishing (see each section). Product links go to our store.