1. Paste your subscriptions
2. The plan
| # | Vendor | Status | Notice by | Days left | Seats | If renewed as-is | Target | Could save |
|---|
Email draft
Prefer a CLI?
Same logic, zero dependencies, reads a file or stdin:
node cli.mjs plan renewals.csv --as-of 2026-10-02 --ask 10 --json node cli.mjs email renewals.csv --vendor Slack node cli.mjs ics renewals.csv > renewals.ics
Get cli.mjs and engine.mjs — Node 18+, nothing to install, no network call. More: When do I need to cancel a SaaS auto-renewal? Notice windows and seat right-sizing.
What's recognised
| Input | Handling |
|---|
The plan is arithmetic on the numbers you type. It does not read your contracts: termination-for-convenience clauses, price caps, minimum commitments, multi-year terms, true-up rights and early-renewal discounts are not modelled, and your order form controls. Seat counts come from your admin console; the tool does not connect to any vendor.
Common questions
Does it upload my vendor list?
No. The browser page works on the text you paste, in your own browser, and never sends it anywhere. The CLI reads a local file or stdin and makes no network call.
How is the notice deadline calculated?
It is the renewal date minus the notice days in your contract. After that date an auto-renewing contract has, in practice, already renewed, so the plan flags it as locked in and moves it down the list.
How are the savings worked out?
Right-sizing keeps the seats you used plus a buffer you choose, at the price per seat you pay today, with no price uplift. Your ask is a further percentage off that. Both are compared with renewing as-is at the vendor's proposed increase.
Will the vendor agree?
Maybe not. The tool tells you what to ask for and by when; discounts, minimum seat counts and multi-year terms are the vendor's to agree. Read your own order form before you rely on any figure.
Who is it for?
Founders, finance and operations leads, and IT managers who own a list of SaaS renewals and want to know which to renegotiate first and when the window closes.