Reserver.Reserve your spot →

Free tool · no signup

What are you not reserving?

Paste what's running and what's already reserved, and get back your real coverage percentage, the uncovered capacity, the idle reservations already costing you money, and what closing the gap is worth per year. It's priced from real AWS data, not a blended guess. Nothing leaves your browser.

Output of describe-instances, describe-db-instances,describe-cache-clusters, and each service's describe-reserved-*, in any order, as many documents as you like.

3 entries looked like a resource but couldn't be read (or isn't reservable — spot, stopped, serverless) and were skipped.

Nothing you paste leaves this browser. No localStorage, no analytics. Analyze fetches one small, public price list from this site. That request carries no trace of your paste. It runs once, and every later analysis reuses the cached copy. Open DevTools' Network tab and check. More onwhat we collect.

Showing the sample fleet above. Paste your own and hit Analyze to replace it.

36%fleet coverage3 covered · 1 partial · 6 uncovered
28uncovered normalized units1 instance (e.g. a *.metal size) have no published AWS normalization factor — counted for coverage status, excluded from every unit total and never priced.
recoverable, if you buy the gap$2,603/yr · 1yr$3,821/yr · 3yrat least $2,603/yr, from 20 of 28 uncovered units this library can price
$763/yrpaid for and idle2 reservations idle

1 EC2 regional reservation didn't carry a region in the API response — matched fleet-wide, which can overstate coverage if you run the same family in more than one region. Add a "# region: <name>" line above that command's output to pin it.

Coverage map

reservedon-demand

By service, region & family

Running vs reserved normalized units by service, region and family
ServiceRegionFamilyRunningReservedCoverage
RDSus-east-1r6g12867%
EC2us-east-1m58450%
EC2us-west-2r6g800%
ElastiCacheus-west-2r6g8450%
EC2us-east-1m6i400%
RDSus-east-1m5400%
EC2region unknownt4g040%
ElastiCacheus-east-1m6g040%

What Reserver would tell you to buy

Recommended reservation purchases to close the coverage gap
ClassBuyTerm · payment$/yr savedUpfrontBreak-even
r6g.xlargeEC2 · us-west-21 reservation1yr · All Upfront$728/yr$1,0387 mo
r6g.xlargeEC2 · us-west-21 reservation3yr · All Upfront$1,102/yr$1,99214 mo
m5.largeEC2 · us-east-11 reservation1yr · All Upfront$347/yr$4947 mo
m5.largeEC2 · us-east-11 reservation3yr · All Upfront$525/yr$94914 mo
cache.r6g.largeElastiCache · us-west-21 reservation1yr · All Upfront$659/yr$1,1468 mo
cache.r6g.largeElastiCache · us-west-21 reservation3yr · All Upfront$993/yr$2,43416 mo
db.r6g.largeRDS · us-east-1 · Multi-AZ4 units1yr · All Upfront$869/yr$1,0146 mo
db.r6g.largeRDS · us-east-1 · Multi-AZ4 units3yr · All Upfront$1,201/yr$2,04713 mo

8 uncovered units are outside the RI Price Library's priceable surface (non-Linux EC2, dedicated tenancy, SQL Server/Oracle, memcached, an untracked type or region) — counted above, never priced. 1 row covers less than one whole reservation — an instance your existing reservations already partly cover. Those are quoted per normalized unit, so the saving, upfront and break-even all describe the same fraction of a reservation.

Idle reservations

Reservations with capacity nothing is using, priced at your own committed rate
ReservationRegionIdle unitsWasted $/yr
t4g.largeregion unknown4$263
cache.m6g.largeus-east-14$500

What this can't see

  • Utilization. A covered instance can still be badly oversized for its actual load.
  • AWS Savings Plans, which aren't Reserved Instances and aren't covered by this tool or Reserver's coverage math.
  • RDS storage and IO cost. Only the compute instance-hour is reserved.
  • A one-time snapshot. Reserver connects once and scans continuously instead.
  • Anything outside the RI Price Library's 92 tracked types × 16 regions. Those gaps are counted, never priced.
  • 1 EC2 regional reservation didn't carry a region in the API response — matched fleet-wide, which can overstate coverage if you run the same family in more than one region. Add a "# region: <name>" line above that command's output to pin it.
Your numbers, carried through

That's our sample fleet

Paste your own running instances and reservations above — this card becomes your real numbers, sized to your own fleet.

That fits Watch on Reserver.

Join the waitlist

Carries only the totals shown above — never reservation IDs, ARNs, or account details. Nothing leaves your browser until you submit.

Need to justify this internally? Build a business case →

How to get the numbers

Six commands. Any account, any region.

Each command needs only read access to describe resources and reservations, the same Describe/List scope Reserver's own read-only role uses.

What's running

EC2 running instances
aws ec2 describe-instances --region us-east-1
RDS running instances
aws rds describe-db-instances --region us-east-1
ElastiCache running clusters
aws elasticache describe-cache-clusters --region us-east-1

What's already reserved

EC2 Reserved Instances
aws ec2 describe-reserved-instances --region us-east-1
RDS reserved DB instances
aws rds describe-reserved-db-instances --region us-east-1
ElastiCache reserved cache nodes
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.

Many accounts at once

This is the enterprise path. Loop all six commands over every profile and region, then paste the whole run. The echo lines pin each block's region and profile, and the tool honours them. That matters most for EC2 regional Reserved Instances (see the FAQ below).

for profile in prod-us prod-eu staging; do
  for region in us-east-1 us-west-2 eu-west-1; do
    echo "# profile: $profile"
    echo "# region: $region"
    aws ec2 describe-instances --profile "$profile" --region "$region"
    aws rds describe-db-instances --profile "$profile" --region "$region"
    aws elasticache describe-cache-clusters --profile "$profile" --region "$region"
    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
done

The other half of the story

Two tools, one fleet.

The Expiry Check answers "don't lose the discount you already bought." It reads what you've reserved and tells you exactly when it lapses. This tool answers the other half: "reserve the capacity you never reserved." Run both against the same paste; together they're the two numbers Reserver's own coverage scan produces continuously.

Coverage check, answered

Questions about the tool.

Does anything get uploaded when I paste my fleet and reservations?

No. Parsing, matching, and pricing all run entirely in your browser, and nothing is written to localStorage or the URL. Clicking Analyze pulls down a small, public price list from this site. That happens once: the browser caches it, and the request carries nothing from your paste. Open DevTools' Network tab and watch for yourself.

How is this different from the Expiry Check?

The Expiry Check reads only what you've already reserved and tells you when it lapses. This tool reads what's actually RUNNING too, and matches it against what you own, so it can show you the capacity you never reserved in the first place, something the Expiry Check can't see at all.

Why doesn't every uncovered instance get a dollar figure?

This tool prices gaps against the same AWS Price List data behind the RI Price Library: 92 instance types across 16 regions, RDS PostgreSQL/MySQL, ElastiCache Redis/Valkey, and EC2 Linux. A gap outside that surface (Windows, SQL Server, Oracle, an untracked type or region) is still counted in coverage, with exact math, but never assigned an estimated price. The unpriced count is always shown so it reconciles against your paste.

My EC2 Reserved Instances are regional. Why does a region matter?

AWS's own describe-reserved-instances response carries no region field for regional-scope RIs, only zonal ones. Add a # region: <name> comment line above that command's output in your paste (the documented loop below does this automatically) and this tool will pin it to that region. Without one, it's matched fleet-wide as a last resort, which can overstate coverage if you run the same instance family in more than one region. It tells you exactly how many reservations that applied to.

I ran the loop across dozens of accounts and regions. Did it work?

Yes. Paste as many aws ... describe-... outputs one after another as you like, mixing running and reserved documents, services, and regions, in any order. The tool scans for each top-level JSON document (and any # region: / # profile: marker lines) and aggregates everything it recognizes into one coverage picture.

What can't this tool see that Reserver's real scan can?

Utilization (a covered instance can still be oversized), Savings Plans overlap, RDS storage and IO cost, and anything outside the priceable surface above. It's also a one-shot manual snapshot. Reserver connects once and scans continuously, matching reservations to what's running as your fleet changes.

Reserved

Stop overpaying for a steady fleet.

Reserver is in early access. Join the list and we'll onboard you as capacity opens up. Your first recommendation lands within minutes of connecting.

Reserve your spot →