Skip to main content
Your progress
0 of 6 complete0%
T0 / M0.4 / L1 OF 5 / Operator LEVEL / 9 min

What "rack rate" actually means

Outcome

By the end of this lesson, you will be able to define rack rate, explain how it is calculated, and identify the right contexts to quote it.


PrerequisitesM0.1
Time9 minutes

1. Concept

Rack rate is the price a cloud resource carries on the provider’s public price list, before any discount of any kind.

The term is borrowed from hotels, where the rack rate is the price on the card at the front desk: no loyalty scheme, no corporate rate, no negotiation. Almost nobody pays it there, and almost nobody pays it in cloud either.

It still matters, and this is the part worth holding on to: rack rate is the baseline for many cost calculations you will do. When you turn off something you pay full on-demand price for, the money you stop spending is its rack rate.

How rack rate is calculated

For any cloud resource, rack rate is computed as:

Terminal window
rack_rate = unit_price (from public rate card) × hours_running × applicable_units

For an EC2 instance:

Terminal window
rack_rate_monthly = hourly_rate × 730 hours
(730 = avg hours per month)

For an EBS volume:

Terminal window
rack_rate_monthly = per_GB_rate × volume_size_GB

For an S3 bucket:

Terminal window
rack_rate_monthly = per_GB_storage_rate × GB_stored
+ per_request_rate × request_count
+ egress_per_GB × egress_GB

The pricing data lives in public APIs:

  • AWS Pricing API: https://pricing.us-east-1.amazonaws.com/...
  • Azure Retail Prices: https://prices.azure.com/api/retail/prices
  • GCP Cloud Billing Catalog: https://cloudbilling.googleapis.com/v1/services/...

These APIs refresh when the providers change prices (relatively rare; typical: a couple of times a year for major price changes, more often for new SKUs).

When rack rate is the right number to quote

Estimating savings from scheduling or termination when you pay on-demand. If a resource runs at the on-demand price with no discount, every hour you stop it saves its rack rate. Without billing data, rack rate is also the only rate you can price the saving at.

Commitments change this. A reservation or Savings Plan bills every hour of its term whether or not the covered resource runs. Stop a covered instance and the commitment keeps billing, so you save nothing on it unless the freed coverage moves onto other usage.

Example: a $100/month on-demand EC2 instance (rack rate) stopped overnight (12 hours off, 12 hours on). Half the hours are saved.

Terminal window
On-demand instance: $50/month (rack rate × hours saved)
Same instance covered by an RI: ~$0 (the RI bills every hour of its term)

Where billing data exists, the most accurate saving uses the rate you actually pay per running hour, discounts included.

Comparing across providers. AWS at $0.10/hr looks similar to GCP at $0.095/hr. Both are rack rates. The discounted realities can vary significantly by negotiated discount, but rack rate is the apples-to-apples comparison.

Estimating new workloads. For a workload that does not yet exist, no discount applies. Rack rate is the only available number until usage is observed.

Filling the gap before billing lands. Billing data arrives a day or more after the usage. Until it does, the most recent days can only be shown at rack rate, and billing data replaces them when it lands.

When rack rate is the wrong number to quote

To finance, for budget conversations. Finance budgets against billed amounts (post-discount). Quoting rack rate to a CFO and then showing a lower number on the invoice undermines trust. For budget conversations, billing cost is the right column.

For cost-per-unit-of-business-value metrics. Cost per MAU should use the actual cost the business is paying. Rack rate over-states.

For chargeback to internal teams. Chargeback means each team is billed internally for what it used, so the cloud bill is split and passed on rather than absorbed centrally. Internal chargeback should match what the company actually pays, not the rate-card rate. Otherwise the team gets a bill that does not reconcile against the company’s invoice.

How ZopNight uses it

ZopNight stores rack rate in the cost_usd column of cost_records, written once a day from list prices (the price list itself is refreshed weekly). The actual_cost_usd column is overlaid by the daily billing sync (post-discount). There is no fixed lag: the sync runs daily and re-fetches the last 3 days, so allow a day or more.

Aggregated reports use COALESCE(actual_cost_usd, cost_usd) so the report falls back to rack rate when billing data is not yet available. The Cost Source label on each report tells the reader which they are looking at: “Unblended Cost” (AWS billing), “Amortized Cost” (Azure billing), “Net of Credits” (GCP billing), “Mixed (by provider)” (more than one of these), or “Rack Rate” (calculated).


2. Demo

Pulling rack rate from the AWS Pricing API for one instance type, one region:

Terminal window
# AWS Pricing API: get on-demand rate for m5.large in us-east-1
curl -s 'https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/us-east-1/index.json' \
| jq '.terms.OnDemand
| to_entries[]
| select(.value.priceDimensions
| to_entries[]
|.value.unit == "Hrs")' \
| jq '. | select(.value.attributes.instanceType=="m5.large")'
# Returns: $0.096 per hour
# Monthly rack rate: $0.096 × 730 = $70.08

Then for the same instance, the actual billed cost (post-discount) from Cost Explorer for last month:

Terminal window
aws ce get-cost-and-usage \
--time-period Start=2026-04-01,End=2026-05-01 \
--granularity MONTHLY \
--metrics UnblendedCost \
--filter '{"And":[
{"Dimensions":{"Key":"INSTANCE_TYPE_FAMILY","Values":["m5"]}},
{"Dimensions":{"Key":"RESOURCE_ID","Values":["i-0abc123"]}}
]}'
# Returns: $43.30 (RI coverage applied)

The same instance: rack rate $70.08, actual billed $43.30. The 38% gap is the realized discount. Both numbers are correct. They answer different questions.


3. Hands-on (6 min)

Pick one of your EC2 / GCE / Azure VM instances. Compute both numbers:

Terminal window
INSTANCE: __________________
1. Rack rate (from pricing API or pricing page)
hourly: $______
monthly: hourly × 730 = $______
2. Actual billed cost (last month, from Cost Explorer / Cost Mgmt / BigQuery)
monthly: $______
3. Effective discount = (rack − actual) / rack
= ______ %

The number in step 3 is your realized rate-card discount on this resource. Anything above 25% is significant: usually means commitment coverage is active.


4. Knowledge check

Q1

A team stops a dev EC2 instance overnight. The instance was covered by a 1-yr Savings Plan at 30% effective discount. The savings claim should be quoted at:

A. Discounted rate × hours saved, since that is the rate the instance was billed at
B. Either one, because the two figures always come out the same
C. Close to $0, since the Savings Plan keeps billing every hour of its term
D. Rack rate × hours saved, because the SP discount applied only to running hours

Show answer

Correct: C. A Savings Plan bills every clock-hour of its term whether or not the covered instance runs. Stopping the instance removes no commitment spend unless the freed coverage is absorbed by other usage. A and D both assume the stopped hours stop costing money, which is only true for on-demand capacity.

Q2

For a budget conversation with the CFO, the right column is:

A. Billing cost (post-discount, unblended)
B. Rack rate
C. Either
D. The published list price minus about 10%

Show answer

Correct: A. Budgets are set against what the company actually pays. Rack rate overstates and confuses the conversation.

Q3

A vendor advertises “60% savings.” Investigation reveals the savings number is computed against rack rate, while the customer’s actual bill was already 35% below rack rate via existing RIs. The realized savings on the actual bill is most accurately:

A. 60%
B. 0%, since the vendor is simply lying about the whole figure entirely
C. 95%
D. ~39%: because the rack-rate savings are diluted by the existing discount stack

Show answer

Correct: D. Rack-rate savings × (1 − existing discount) = 60% × (1 − 0.35) = 39%. The vendor’s claim is not lying but is incomplete. Always model realized savings against the actual bill, not the rack rate.


5. Apply

ZopNight surfaces rack rate explicitly on every report. The Cost Source label on the Reports header tells you which column you are looking at:

  • “Rack Rate” label = cost_usd (calculated daily from list prices, no discount)
  • “Unblended Cost”, “Amortized Cost” or “Net of Credits” label = actual_cost_usd (billing data for AWS, Azure or GCP respectively, post-discount)
  • “Mixed (by provider)” label = billing data from more than one of those providers

The recommendation cards in Recommendations price savings at the most defensible rate for the savings type. Schedule savings for an organisation with billing connected use your real effective rate (the last 30 days of billed cost divided by measured running hours, discounts included); without billing they use the rack rate. Commitment recommendations compare real on-demand and committed rates.


Glossary terms touched

Rack rate · Effective discount


Start with the bill.

Foundations takes about five hours. The first lesson is nine minutes.

Free curriculum. No paywall. One free account opens 314 lessons across 8 courses and three publicly verifiable credentials. Read it on the train, take the exam on a Saturday, list the credential on your résumé Monday.

5h median time to finish Foundations
free account, every course, no paywall
3 certifications, each with a public verifier
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·