Free tool · no signup
Your real renewal calendar. Right now.
Paste the output of one AWS CLI command and get back exact expiry dates, what a lapse costs per hour, per day and per year, and a full renewal calendar — priced from your own committed rates. Nothing leaves your browser.
Output of aws ec2 describe-reserved-instances,aws rds describe-reserved-db-instances, oraws elasticache describe-reserved-cache-nodes — a full response, a bare array, or several pasted one after another.
Defaults to Reserver's blended discount model — the same assumption behind thesavings calculator. Drag to match your own rates.
Nothing you paste leaves this browser. No network request, nolocalStorage, no analytics — open DevTools' Network tab and watch it stay empty while you analyze. Disconnect your network; it still works.
Showing the sample fleet above — paste your own and hit Analyze to replace it.
Next 12 months
- Aug 20262$2,543
- Sep 20261$1,086
- Oct 20261$355
- Nov 20261$620
- Dec 20260—
- Jan 20271no price
- Feb 20271$700
- Mar 20270—
- Apr 20271$659
- May 20271$1,489
- Jun 20270—
- Jul 20271$1,600
Soonest expiries
| Reservation | Region | Ends | Days left | Annual cost | Lapse cost / day | Lapse cost / yr |
|---|---|---|---|---|---|---|
| m5.largeEC2 · ri-2f8a1c0e | us-east-1 | Aug 10, 2026 | 9 days left | $543 | $1.22 | $444 |
| cache.r6g.largeElastiCache · ri-ec-2d4b91 ×2 | us-west-2 | Aug 24, 2026 | 23 days left | $2,000 | $4.48 | $1,636 |
| m5.xlargeEC2 · ri-6b3d9a41 | us-east-1 | Sep 15, 2026 | 45 days left | $1,086 | $2.43 | $889 |
| db.t3.mediumRDS · ri-rds-8e21f4 | us-west-2 | Oct 15, 2026 | 75 days left | $355 | $0.80 | $291 |
| c5.largeEC2 · ri-91e7c2ab ×3 | us-east-1 | Nov 29, 2026 | 120 days left | $620 | $1.39 | $507 |
| db.r6g.largeRDS · ri-rds-b70d52 | us-east-1 | Jan 8, 2027 | 160 days left | no price in payload | — | — |
| cache.m6g.largeElastiCache · ri-ec-97a0c3 | us-west-2 | Feb 17, 2027 | 200 days left | $700 | $1.57 | $573 |
| r5.largeEC2 · ri-04a8f7d3 | us-east-1 | Apr 8, 2027 | 250 days left | $659 | $1.48 | $539 |
| db.m6g.largeRDS · ri-rds-1f6a8c | us-east-1 | May 28, 2027 | 300 days left | $1,489 | $3.34 | $1,218 |
| m5.2xlargeEC2 · ri-7c1b5e90 | us-west-2 | Jul 17, 2027 | 350 days left | $1,600 | $3.59 | $1,309 |
| cache.r6g.xlargeElastiCache · ri-ec-5e8f14 | us-east-1 | Sep 5, 2027 | 400 days left | $1,988 | $4.46 | $1,627 |
By service & region
| Service | Region | Reservations | Units | Annual cost |
|---|---|---|---|---|
| EC2 | us-east-1 | 5 | 7 | $3,452 |
| ElastiCache | us-west-2 | 2 | 3 | $2,700 |
| ElastiCache | us-east-1 | 1 | 1 | $1,988 |
| EC2 | us-west-2 | 1 | 1 | $1,600 |
| RDS | us-east-1 | 2 | 2 | $1,489 · 1 unpriced |
| RDS | us-west-2 | 1 | 1 | $355 |
How to get the numbers
Three commands. Any account, any region.
Each command needs only read access to describe reservations — the same Describe/List scope Reserver's own read-only role uses.
aws ec2 describe-reserved-instances --region us-east-1
aws rds describe-reserved-db-instances --region us-east-1
aws elasticache describe-reserved-cache-nodes --region us-east-1
Add --profile your-profile for a named credential profile, and repeat--region for every region you run in — Reserved Instances are always regional or zonal, never global.
Many accounts at once
This is the enterprise path: loop the three commands over every profile and region, and paste the whole run — the tool scans for each JSON document in the paste and aggregates everything it finds into one calendar.
for profile in prod-us prod-eu staging; do
for region in us-east-1 us-west-2 eu-west-1; do
aws ec2 describe-reserved-instances --profile "$profile" --region "$region"
aws rds describe-reserved-db-instances --profile "$profile" --region "$region"
aws elasticache describe-reserved-cache-nodes --profile "$profile" --region "$region"
done
doneWhat the fields mean
A short glossary of what's in the payload.
- FixedPrice
- The upfront amount paid for the term (0 for No Upfront).
- RecurringCharges / UsagePrice
- The hourly rate billed on top of the upfront amount, whether or not the instance runs.
- Duration
- The term length in seconds — 31,536,000 for 1 year, 94,608,000 for 3 years.
- OfferingType
- The payment option: All Upfront, Partial Upfront, or No Upfront.
- State
- Whether the reservation is active, retired (its term ended), payment-pending, or payment-failed.
More definitions in the glossary, and the full story on why renewals slip in the renewal playbook.
What this can't do
An honest limit: this is a snapshot, not a watch.
This tool reads exactly what you paste, once. It's a manual pull, one account and region at a time, of reservations you already own — it can't see running capacity that was never reserved in the first place, and nobody re-runs it for you the day a date arrives. That's the gap between "checking a number" and Reserver: a read-only connection that scans continuously, matches reservations to what's actually running, and tells you — before a renewal is due, not after it's already lapsed.
Expiry check, answered
Questions about the tool.
Does anything get uploaded when I paste my reservations?
No. Parsing and analysis both run entirely in your browser — there's no fetch, no beacon, no analytics call, and nothing is written to localStorage or the URL. Open DevTools' Network tab before you paste: it stays empty through the whole analysis.
Why do RDS and ElastiCache show different end-date math than EC2?
AWS's own describe-reserved-instances response for EC2 includes an explicit End field. The RDS and ElastiCache equivalents don't — their end date is StartTime plus Duration in seconds, which is exactly how this tool derives it. All three are the same underlying commitment; only the field names differ.
I ran the loop across a dozen accounts and pasted it all at once — did it work?
Yes — paste as many aws ... describe-... outputs one after another as you like, in any order, mixing services and regions. The tool scans for each top-level JSON document and aggregates everything it recognizes into one calendar.
This only shows what I already own. What am I missing?
Exactly what it can't do: it's a manual snapshot, one paste at a time, of reservations you already have — it doesn't see the running capacity you never reserved, and nobody re-runs it for you when a date arrives. That's what Reserver does: it connects once, scans continuously, and tells you what to buy next as well as what's expiring.
My paste includes retired reservations. Are they counted?
No. The tool reads each reservation's own State field and excludes anything that isn't active — retired, retired-pending, payment-failed, or payment-pending — from committed annual spend, the exposure figures, the calendar, and the service & region table. It still tells you how many were excluded, so the count always reconciles against what you pasted. The "bleeding $/day" figure is further limited to lapses within the last 90 days, since an older lapse has almost certainly already been resolved. If you'd rather trim the paste yourself first, EC2, RDS, and ElastiCache's describe-reserved-* commands all accept --filters Name=state,Values=active — but it isn't required, since the tool handles unfiltered output correctly on its own.
Stop overpaying for a steady fleet.
Reserver is in early access. Join the list and we'll onboard you as capacity opens up — first recommendation within minutes of connecting.