River
Y CombinatorBacked by Y Combinator
FREE TEMPLATE

Software Renewal Calendar Template

Four documents and four sheets that price every unused seat and put a decision-by date on it, before the notice window closes.

Free download  ·  No account needed

Renewal Calendar

Larkmead, 14 applications, $730,800 a year

Review opened 2 February 2026. Sorted on decision-by, which is renewal minus notice minus 45 days of lead time.

ApplicationRenewsDecision byDays$/yr
Quill Notes18 Apr2 Feb032,640
Torrent Chat Support20 May4 Feb218,900
Aperture Sales Engage30 Apr14 Feb1256,100
Helix CRM1 Jul18 Mar4423,940
Lumen BI12 Jun28 Jan-544,100
Quanta Dashboards10 Apr25 Jan-824,000
Pica Whiteboard28 Mar12 Jan-2136,720

Three windows had already shut on day one

Every renewal above is still months away. Three of the decisions were not. Notice on Pica was due 12 January, so $100,360 of identified saving is held for another twelve months and nothing in the analysis was wrong.

Ranked by dollars per day of window left rather than by dollars, which moves four of the nine live rows.

A renewal calendar sorted by renewal date is already late. Seats come off at renewal and almost never mid-term, so the option to reduce expires when notice is due rather than when the contract ends. Subtract the notice period and the time it takes to decide, get a counter-quote and obtain a signature, and the date that governs the whole thing can sit months before the comfortable one in the spreadsheet.

So every row here carries a decision-by date. On the worked portfolio, 14 applications at $730,800 a year, three of those dates had already passed on the day the review opened, while every renewal was still months away. Notice on one was due three weeks earlier. That deferred $100,360 of identified saving by twelve months, and nothing in the analysis was wrong: the review simply started after the options had shut.

The other half is a definition. A licence count says a seat is assigned, and a last sign-in gets written by failed attempts and background syncs alike, so a used seat has to mean an intentional action per application. That gap is 55 seats and $48,660 a year here. Send River the invoices, the identity export and the contracts, or take the Word documents and CSV sheets blank. Whether the vendor should hold your data is a vendor risk assessment, and the notice clauses themselves sit in a renewal tracker.

Priced against use, netted against uplift, gated on a date

Seat utilisation on a stated definition, the overlap map with both years costed, and the brief that comes out of them.

Seat Utilisation versus Paid

Seven of 14 illustrative rows. Login-active is shown only where it differs materially from task-active.

ApplicationPaidLoginTaskKeepReclaim$/yr
Pica Whiteboard340168464929131,428
Quill Notes340121333630429,184
Lumen BI906138414944,100
Aperture Sales Engage856331345133,660
Cartographer Roadmaps40269122818,480
Helix CRM12010896992123,940
Bastion Endpoint34034034000

Definition per application, recorded in the sheet. Editing a board, editing a note, running a query, sending a sequence. Not opening a tab, and not a sign-in.

Across the seven right-sized applications a last-login cut finds 55 fewer seats, worth $48,660 a year. Two windows are 90 days on purpose: a finance tool used at close and an HRIS are legitimately quiet in an average month.

Functional Overlap Map

Keeper chosen by task-active users, because that application has already paid its migration cost.

KeepDropGrossUpliftSwitchYear 1Steady
Corvid DocsPica, Quill69,36006,50062,86069,360
Helix CRMAperture56,1009,10026,00021,00047,000
Kelvin DeskTorrent Chat18,9004,80011,0003,10014,100
Lumen BIQuanta24,00012,60018,000-6,60011,400

The analytics row is why both years get shown. The uplift is more than half the gross, which is the signal that two applications sharing a category label are doing less of the same job than it looks. Written up as not recommended rather than buried in a total.

The gate is the dropped application's date, not the keeper's, because moving off is what has to be served notice. Collaboration is the best case in the portfolio and it starts next cycle: Pica's date was 12 January.

Every application sits in exactly one of dropped, right-sized or held. A per-seat reclaim on top of a consolidation counts the same dollars twice, which is how these cases become impossible to reconcile against a quote.

Negotiation Brief

Aperture Sales Engage. Call 9 February, decision-by 14 February, 12 days from the review opening.

Paid85 seats at $660, $56,100 a year
Task-active31, meaning sent a sequence or logged a touch
Login-active63, which is the number we are not using
Primary ask34 seats at the current unit price
Fallback45 seats plus a mid-term reduction right
Walk-away$37,000 a year total spend

The alternative, costed. Helix's engagement module covers what those 31 people use it for: net $21,000 in year one after a $26,000 switching cost, $47,000 steady. Credible and costed is different from a threat.

The walk-away is decided before the call and written down, because deciding it during the call means deciding it against a countdown.

The $44,100 Lumen reclaim is deliberately absent. It looks bigger and it is not available this cycle, so quoting it invites a counter that costs the vendor nothing.

What's in the pack

01

Application Register

Built by crossing billing against the identity provider's application list, in both directions, so each mismatch becomes a finding.

02

Seat Utilisation versus Paid

Paid, assigned and task-active seats per application, with the definition of use and the window recorded beside the count.

03

Renewal Calendar

One decision-by date per contract, ranked by value per day of window left, with the missed rows kept visible and totalled.

04

Functional Overlap Map

Every consolidation netted against the keeper's tier uplift and the one-time switching cost, in year one and in steady state.

05

What Counts as a Used Seat

The per-application definition, and why a failed sign-in generates the same timestamp as a successful one.

06

Renewal Playbook

The annual cadence, the four outcomes a renewal resolves to, and what to do once a window has already closed.

07

Consolidation Recommendation

Written for the finance partner, including the cluster that is negative in year one and is recommended against by name.

08

Negotiation Brief

One page for whoever sits in the call: the ask, the dates, the costed alternative, and the walk-away decided in advance.

How to use it

  1. 1

    Open in River, or take it blank

    Open the pack in River and hand it the invoices and exports, or download the Word documents and CSV sheets and work through them yourself.

  2. 2

    Cross billing against identity

    Billed and not federated, or in identity with no invoice. Each mismatch is a finding, and trials converting on a date jump the queue.

  3. 3

    Define use, then count

    One definition per application and a stated window, recorded in the sheet. The count comes after the definition, never before.

  4. 4

    Date every finding, then work the queue

    Renewal minus notice minus lead time. Sort on value per day of window remaining, and total the rows whose windows already closed.

Frequently asked questions

Is this template free?

Yes, and nothing is gated. The zip holds Word documents and CSV sheets, no account and no card. Edit with AI is the optional half: River crosses the invoices against the identity export, dates every contract and prices the idle seats. More packs in the template library.

What format are the downloaded files?

Four Word documents and four CSV sheets, zipped. Excel, Numbers and Google Sheets open the sheets directly, and the playbook, brief and recommendation open in Word or Pages. Nothing needs converting and there is no proprietary format in the download.

Why not just sort by renewal date?

Because the renewal date is not the deadline. Notice is due before it, and deciding takes time before that, so the governing date can be months earlier. On the sample portfolio three windows had closed while every renewal was still months out, which is invisible on a date-sorted list.

Can I use last login instead of a usage export?

You can, and it will understate the reclaim. Microsoft's guidance notes that a sign-in attempt writes the timestamp whether it succeeded or failed, and that background sign-ins made on a user's behalf are a separate property. On the sample that costs 55 seats and $48,660 a year.

The usage export has no usernames in it. Why?

Usage reports commonly hide usernames, display names and groups by default, so the file cannot be joined to your seat list until an administrator changes that setting. Ask before the export rather than after. The data also lags by a couple of days.

What if the contract does not state a notice period?

Do not infer one from the term length. Record it as unknown, set the decision-by date from the most conservative period elsewhere in your portfolio, and flag the row as an assumption. It usually sits in the master agreement the order form incorporates, which is what an obligation register surfaces.

Does this cover the rollout of whatever survives?

No. This ends when the renewal is signed, downgraded or served notice. Getting people onto the tool you kept is a rollout and enablement job, and what the application feeds once it is kept belongs on a stack and integration map instead. If a renewal instead raises the question of building a replacement internally, that comparison runs before this pack's decision, not after it.

Put a decision-by date on every renewal

Take the Word documents and CSV sheets blank, or open this pack in River and let it cross the invoices against the identity export first.

Edit with AI