Most free rent ledger templates have a column for “Late Fee.” You just don’t fill it in with a formula — you work out the number yourself and type it in. The ledger below does the math instead: it reads the due date, the grace period, and the date the tenant actually paid, and calculates the fee from your lease’s own rule. It also carries an unpaid or partial balance into the next month automatically, without quietly charging a late fee on top of that old balance — a mistake (“fee stacking”) that’s restricted or banned outright in several states.
It’s a plain .xlsx file. Google Sheets can open it too (File > Import > Upload, or just drag it into Drive).
Download: Rent Ledger Template (.xlsx)
3 sheets — How to Use, Lease Setup (your inputs), Payment Ledger (the formulas). 12 months pre-filled with sample data covering 9 different payment scenarios, plus blank rows ready for your own lease.
What free templates leave out
Checked against two of the templates landlords land on most often when they search for this — TurboTenant’s printable rent ledger and spreadsheetdaddy’s rental ledger — the gap is consistent: both have a “Late Fees” field, but it’s a plain input you fill in by hand, not something the sheet works out for you. Neither one’s balance column is documented as carrying a partial payment’s remainder forward with a formula; TurboTenant’s version is explicitly a fillable-and-print form, not a calculator.
| What you need | Typical free template | This template |
|---|---|---|
| Late fee amount | You calculate it and type it in | Calculated from due date, grace period, and payment date |
| Partial payment this month | Usually just a note; balance math is manual | Remainder carries into next month’s “Prior Balance” automatically |
| Late fee on an old carried balance | Not addressed either way | Deliberately excluded — the fee applies only to that period’s rent |
| Fee cap | Not built in | One input cell; applies regardless of fee type |
| $0 / vacant month | Not addressed | Fee formula explicitly skips rows with no rent due |
How the late fee is actually calculated
On the Lease Setup tab you pick one of three fee types, matching how most leases phrase it:
- Flat — one fixed dollar amount, no matter how late the payment is.
- Percent — a percentage of that period’s rent (enter 5% as
0.05). - Daily — a per-day amount that accrues for every day past the grace period, usually paired with a cap.
Days late is payment date − (due date + grace period), floored at zero — paying inside the grace period always shows a $10/day or flat fee hasn’t yet started. If the rent hasn’t been paid at all, the ledger uses a “Report As-Of Date” you set on Lease Setup instead of the payment date, so an unpaid row still shows how late it currently is.
The Late Fee Cap, when set above zero, applies no matter which fee type you picked — a daily fee that would otherwise run to $140 after two weeks gets held at your cap instead.
Why a carried balance doesn’t get its own late fee
There’s no federal cap on rent late fees — the government leaves it to the states, and they don’t agree. Some set a percentage ceiling (Delaware caps at 5% of rent, Maine at 4%), some use a flat or per-day amount (Connecticut allows $5/day up to $50; Colorado allows the greater of $50 or 5%), and a few cities go further still (West Hollywood caps at 1%). Grace periods range from 2 days (Texas) to 30 (Massachusetts), and some states set none at all.1
One rule shows up often enough to design around directly: charging a late fee on top of a previous unpaid balance, or on a previous late fee, is restricted or banned outright in a number of states. Connecticut’s statute, for instance, allows only one late charge per delinquent payment no matter how long it stays unpaid, and Nevada’s cap can’t be increased by a fee that was already imposed.1,2 That’s why, on the Payment Ledger, a late fee is computed from that period’s own rent and due date only — never from the balance carried in from a prior month. You can see this in the sample data: a tenant who falls behind in April and doesn’t fully catch up until June is charged a June late fee based only on June’s rent, not on the much larger balance they’re carrying.
This isn’t legal advice, and the amount/cap fields are left as plain inputs on purpose rather than hard-coded to one state, because the number that applies to your lease depends on your state, sometimes your city, and your lease itself. Check your current local rule before using this for a real tenant.
What was tested, and how
The workbook was built with real formulas in openpyxl, recalculated with LibreOffice running headless, and the resulting cell values were checked against an independent calculation written separately in Python — not just for the one fee type shown pre-filled in the download, but for all three (Flat, Percent, and Daily), each run through the same 12 sample rows:
| Scenario | What it checks |
|---|---|
| Paid on time | No fee when days late is zero |
| Paid inside the grace period | Grace period correctly delays when a fee starts |
| Paid exactly 1 day past grace | Boundary doesn’t round the wrong way; an unpaid fee itself carries forward |
| Partial payment | Remainder carries into the next period’s “Prior Balance” |
| Unpaid, no payment recorded | Falls back to the Report As-Of Date to compute current lateness |
| Catching up a large old balance | New fee is based only on that period’s rent, not the old balance (no stacking) |
| Overpayment | Balance goes negative and is treated as a credit, not an error |
| $0 rent (vacant unit) | No fee is charged on a period where nothing was due |
| Daily fee past its cap | A $140 uncapped fee is correctly held at the $50 cap |
A “Reconciliation Check” cell cross-checks the running balance a second, independent way — total rent due, plus total fees, minus total paid, should equal the final balance exactly — and it read $0.00 in every one of the three fee-type test runs. No #DIV/0!, #REF!, #VALUE!, or similar error cells turned up in any of them either.
What wasn’t checked: this file was not opened in Microsoft Excel itself — verification was LibreOffice headless recalculation plus the independent Python check described above. If you hit a formula quirk specific to desktop Excel, that’s the edge this didn’t cover.
Setting it up for your own lease
- On Lease Setup, replace the sample monthly rent, grace period, and late-fee rule with your lease’s actual terms. If your lease has no cap, leave the Late Fee Cap at 0.
- On Payment Ledger, clear the sample rows (keep row 1’s “Prior Balance” as your real opening balance if you’re starting mid-lease) and start filling in your own due dates and rent amounts.
- Leave “Date Paid” and “Amount Paid” blank until the tenant actually pays — the sheet will show you how late an unpaid row currently is based on the Report As-Of Date, which you should update each time you check the ledger.
What if my lease charges a different kind of fee entirely?
If your lease’s late-fee clause doesn’t fit Flat, Percent, or Daily — say, a fee that doubles after a second missed payment — this sheet’s single fee-type setting won’t model it correctly, and forcing it in would risk a wrong number rather than a useful one. That’s a case for a custom formula rather than stretching this template past what it’s actually built to calculate.
For the partial-payment and balance-carrying side of this same problem on the commercial side — invoices instead of rent — see the free invoice tracker and AR aging template, which carries an unpaid balance forward and reconciles it the same way. And if rounding cents correctly across many small amounts is the part you actually care about, the tip pool calculator walks through the same kind of reconciliation check, applied to splitting tips instead of rent.
Sources: ipropertymanagement.com, “Typical Late Fee for Rent” (accessed 2026-10-12); utilityprofit.com, “Rent Late Fee Calculator: Formulas + State-by-State Rules” (accessed 2026-10-12). This is general information, not legal advice — confirm your own state and local rules before charging a real tenant a late fee.