Home › Decoder › HostedZone - Route 53 charges $0.50 a month for each of the first 25 zones

HostedZone - Route 53 charges $0.50 a month for each of the first 25 zones

HostedZone is the Route 53 charge for each hosted zone: $0.50 a month for each of the first 25 zones and $0.10 a month for each zone above 25, whether public or private and whether or not it holds records.

In your bill the usage type reads: HostedZone

What it costs

ChargePriceUnit
Hosted zone, first 25 zones (HostedZone)$0.50per zone-month
Hosted zone, each zone above 25 (HostedZone)$0.10per zone-month

Global price. Checked 2026-11-11. Sources: Amazon Route 53 pricing, AWS price list file, Amazon Route 53 offer.

Example with made-up numbers

2,000 hosted zones, mostly one per customer from an onboarding script

First 25: 25 x $0.50 = $12.50; the other 1,975 x $0.10 = $197.50; total $210.00 on the HostedZone line

Deleting 600 zones left behind by customers who cancelled saves 600 x $0.10 = $60.00 per month

Typical causes

Zones created by automation

A script or controller that creates one zone per customer, per environment or per stack and never deletes it.

Duplicate zones for one domain

Zone created twice, for example by a retried provisioning run. Only one is live; the other still bills.

Abandoned domains

The domain moved away or expired and its zone stayed.

Private zones per VPC

One private zone per VPC or account, many of them empty.

Find it in your bill

Have a CUR file queryable in Athena? Paste this and run it:

SELECT date_trunc('month', line_item_usage_start_date) AS month,
       line_item_product_code,
       line_item_usage_type,
       line_item_resource_id,
       SUM(line_item_usage_amount)  AS usage_amount,
       SUM(line_item_unblended_cost) AS cost
FROM your_cur_table
WHERE line_item_product_code = 'AmazonRoute53'
  AND (line_item_usage_type LIKE '%HostedZone')
GROUP BY 1, 2, 3, 4
ORDER BY month DESC, cost DESC
LIMIT 50;

Columns used: line_item_usage_start_date, line_item_product_code, line_item_usage_type, line_item_resource_id, line_item_usage_amount, line_item_unblended_cost.

No CUR file? Use Cost Explorer

  1. Open Billing and Cost Management, then Cost Explorer, and set the date range to the last 3 months with Monthly granularity.
  2. Set Group by to Usage type.
  3. In the Filters panel choose Usage type and tick the entries ending in HostedZone (the region prefix, such as USE1-, differs by region).
  4. Read the monthly cost per usage type. A line that grows faster than your traffic is the one to chase with the fix below.
  5. To see which resource drives it, query the CUR above; resource IDs appear only if your CUR was set up with resource IDs included, otherwise the resource column is empty.

Column names checked against: docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html, docs.aws.amazon.com/cur/latest/userguide/cur-ate-run.html.

The fix, step by step

Verify first

Check these before you change anything: the steps below are suggestions, and only you can see your own configuration.

  • Deleting a public zone that your registrar still delegates to takes the domain's DNS down; confirm the registrar's name servers first.
  • When two zones exist for one domain, only the one whose name servers the registrar lists is live. Keep that one.
  • Save the records before deleting: list-resource-record-sets gives you a file to rebuild from.
  • A private zone is used by the VPCs it is associated with; deleting it breaks internal names there.
  • Zones created by an infrastructure-as-code stack should be removed by deleting the stack, or the tool will recreate them.

In the console

  1. Route 53 console > Hosted zones; sort by Record count. A zone with 2 records holds only the NS and SOA records every zone has and is empty.
  2. Look for the same domain name listed twice, and for zones with names of customers or environments you no longer run.
  3. For a public zone, check at your domain registrar that its name servers do not point at the zone before deleting it.
  4. For a private zone, open it and read its associated VPCs.
  5. Select the zone > Delete zone, after deleting its records other than NS and SOA.

With the CLI

aws route53 list-hosted-zones --query 'HostedZones[].[Id,Name,Config.PrivateZone,ResourceRecordSetCount]' --output table
aws route53 list-resource-record-sets --hosted-zone-id EXAMPLE > zone-backup.json
aws route53 delete-hosted-zone --id EXAMPLE

Rollback

Create a new hosted zone with the same name and import the saved records. The new zone gets different name servers, so update them at the registrar; DNS stays broken until you do.

Find your Route 53 line in your own bill

Drop in your Cost Explorer or CUR CSV. Billtrim reads it in your browser, finds the HostedZone line and shows what your zones cost per month.

See a sample result

Paste your export: how to export a Cost Explorer CSV or CUR file in two minutes.

Questions people ask

Do empty zones cost the same as full ones?

Yes. A zone with only its NS and SOA records bills like a zone with thousands of records.

Do private hosted zones cost the same?

The price list has one hosted-zone price: $0.50 for the first 25 and $0.10 after that.

Is this price different by Region?

No. Hosted zone pricing is global.

Related

Part of the guide: Reduce your AWS bill as a startup: a checklist for teams with no FinOps person