On 1 November every .com renewal gets more expensive. Verisign, which runs the .com registry, announced it with its quarterly results on 23 April:

Verisign announces that it will increase the annual registry-level wholesale fee for each new and renewal .com domain name registration from $10.26 to $10.97 effective Nov. 1, 2026.

That is 71 cents per domain per year, and it is the first of up to four such steps. The same registry contract that allows the steps also gives every domain owner a way around them. Section 7.3(f) of the .com Registry Agreement:

Registry Operator shall provide no less than six months prior notice in advance of any increase for new and renewal domain name registrations and for transferring a domain name registration from one ICANN-accredited registrar to another and shall continue to offer for periods of up to ten years new and renewal domain name registrations fixed at the price in effect at the time such offer is accepted.

Until 1 November, a renewal of up to ten years is charged at today’s wholesale price, at any registrar. The rest of this article is about which of your domains to do that for, how many years each one can take, and what it costs.

What the contract allows from here

The price can move once per Pricing Year, which the agreement defines as 26 October to 25 October, and only in the last four Pricing Years of each six year period. The first period started on 26 October 2018, so the current one runs to October 2030 and its four increase years start in October 2026, 2027, 2028 and 2029. Each step is capped at 7 percent. In the previous period Verisign took all four, the last one bringing the price to $10.26 in September 2024.

From Wholesale At Cloudflare Registrar
today $10.26 $10.46
1 November 2026 $10.97 $11.17
26 October 2027 up to about $11.7 about $11.9
26 October 2028 up to about $12.6 about $12.8
26 October 2029 up to about $13.4 about $13.6

The rows after November are ceilings, not announcements; each one needs its own six months’ notice. The Cloudflare column is the wholesale price plus ICANN’s fee of $0.20 per domain year, which has applied since 1 July 2025. Cloudflare adds nothing on top, and its public domain search showed .com at $10.46 on 19 September 2026. If you see $10.44 quoted somewhere, it was computed with the old fee.

The date that sets your price is the renewal date

A domain does not renew on its expiry date. Cloudflare’s documentation, updated 24 April 2026:

The first auto-renew attempt will occur approximately 30 days prior to expiration.

So a .com expiring on 15 November renews in mid October, at $10.46. One expiring on 15 December renews in mid November, at $11.17. Auto-renew keeps a domain registered; it does not lock a price for the years ahead. A manual renewal for several years does. Auto-renew has failure modes of its own too.

How many years each domain can take

The registry caps a registration at ten years from today:

Renewal registrations of Registered Names (where available according to functional specifications and other requirements) may be made in the registry for terms not to exceed a total of ten years.

A domain that expires next summer can take nine more years. One already paid up to 2033 can take three. Verisign publishes the expiry date of every .com over RDAP, so the headroom for a whole list is one loop. The script needs curl, jq and GNU date; on macOS use date -j -f '%Y-%m-%dT%H:%M:%SZ'.

#!/usr/bin/env bash
set -uo pipefail

printf '%-26s %-30s %-11s %s\n' DOMAIN REGISTRAR EXPIRES CAN_ADD

now=$(date +%s)
while read -r domain; do
  [ -z "$domain" ] && continue

  json=$(curl -s "https://rdap.verisign.com/com/v1/domain/$domain")
  expires=$(jq -r '.events[]? | select(.eventAction=="expiration") | .eventDate' <<<"$json" 2>/dev/null)
  if [ -z "$expires" ]; then
    printf '%-26s %s\n' "$domain" "not registered"
    continue
  fi
  registrar=$(jq -r '.entities[]? | select(.roles | index("registrar"))
                     | .vcardArray[1][] | select(.[0]=="fn") | .[3]' <<<"$json")

  # The registry caps a registration at ten years from today.
  left=$(( ($(date -d "$expires" +%s) - now) / 86400 ))
  if [ "$left" -lt 0 ]; then
    can_add="expired"
  else
    can_add=$(( (3652 - left) / 365 ))
  fi

  printf '%-26s %-30.30s %-11s %s\n' "$domain" "$registrar" "${expires%%T*}" "$can_add"
  sleep 0.5
done < domains.txt

A run on 19 September 2026 against some well known names:

DOMAIN                     REGISTRAR                      EXPIRES     CAN_ADD
example.com                RESERVED-Internet Assigned Num 2027-08-13  9
cloudflare.com             Cloudflare, Inc.               2033-02-17  3
google.com                 MarkMonitor Inc.               2028-09-14  8
verisign.com               CSC Corporate Domains, Inc.    2034-06-01  2
namecheap.com              NameCheap, Inc.                2027-08-11  9
godaddy.com                GoDaddy.com, LLC               2032-11-01  3
stripe.com                 SafeNames Ltd.                 2027-09-11  9
github.com                 MarkMonitor Inc.               2028-10-09  7
this-domain-does-not-exist-9f3.com not registered

The endpoint serves .com only. The REGISTRAR column matters as much as the count: it tells you where each renewal has to be clicked.

The arithmetic for one domain

Take a .com that expires in August 2027, so it can take nine years.

  • Renewed now at Cloudflare, nine years cost 9 × $10.46 = $94.14, paid today.
  • Renewed year by year, if Verisign stops after November: 9 × $11.17 = $100.53.
  • Renewed year by year, if Verisign takes every step at the ceilings above and none after 2030: about $118.

The saving is roughly $6 to $23 per domain over nine years, and more if the pattern repeats after 2030, which the contract allows. Against that, the $94.14 leaves your account today, and it does not come back:

All renewals are final and Cloudflare will not issue refunds.

Which domains to lock

A domain you will keep no matter what, the name of a business or a site with traffic, should take every year it can. The saving is certain and the money would have been spent anyway.

A domain that only redirects is a judgement you can make with numbers. The portfolio audit sorts domains by whether they still answer and how much authority they carry. The ones it marks as worth fixing are worth locking. The ones it marks to let lapse are the trap here: nine prepaid years on a domain you drop after two leave seven of them, $73.22, paid for nothing.

A domain with two or three years of headroom left gains little either way, because most of its term is already paid at an older price.

Doing it at Cloudflare

In the dashboard: Manage domains, the domain’s Manage, then Renew/Extend Domain under Registration. The Renew for menu goes up to 10 years. The added years land after the current expiry, not after today:

When renewing a domain, additional years are always added to the current expiration date regardless of when the renewal takes place.

There is no bulk path through the API. The Registrar API searches, checks, registers and lists domains, and its one call that changes an existing registration says so plainly:

This endpoint currently supports updating auto_renew only.

For a portfolio that means the dashboard, and the documented path renews one domain at a time. Start well before 31 October. The contract fixes the price in effect when the registry accepts the order, and a renewal sits in Renewal Pending until it completes.

At other registrars the same contract applies, but the price you pay is theirs, including their markup, and what they charge after 1 November is their decision.

When 301.st helps, and where it stops

For a handful of .com names in one Cloudflare account you do not need anything else: run the script, open the dashboard, and it is ten minutes of work.

A portfolio spread across several registrars starts with a different question: which domains expire when, and where each one is registered. 301.st fills in the expiry date of every domain it manages from RDAP, and from whois for .ru, whatever the registrar, and sorts the list by it. That list is the order to work through before 31 October. It does not renew anything, and through Cloudflare’s API nothing can. The clicks at each registrar are still yours.