Skip to content

$18.68 and the coupon I didn't want to find

By yilihjyPublished 6 min read

The domain had a week left. I had renewed it at Namecheap for years. When I logged in, the renewal price was $18.68. There was a promo code on the homepage; with it, the price came down to $14-something. I thought about it for a moment and realised what I was actually thinking: I didn’t want to look for another code.

Then I looked at Cloudflare. The transfer was $10.46, including a year — and its DNS and CDN were things I wanted to use anyway.

The saving was $8.22, or under five dollars if the promo code is counted. That is not a number worth writing about. What made me write it down is why I didn’t want to save even those few dollars.

The arithmetic

One year of registration Namecheap Cloudflare
Renewal list price $18.68 —
Homepage promo code $14-something —
Transfer (includes a year) — $10.46

Against the list price, that is 44% cheaper. Against the promo price, more than a quarter. Eight dollars a year, forty over five years. Not a number that convinces anyone, least of all me.

What convinced me was something else: this was the last time.

A coupon is a pricing model

A registrar never has just one price. New registrations and transfers cost one thing, renewals another, and a promo code is a third. The first year acquires the customer; the renewal is where the money is made. This is not a Namecheap-specific trick — most registrars price this way — but it turns something that should happen once a year into a comparison exercise that happens once a year.

The coupon is part of the system: it makes the price feel negotiable, provided the time is worth spending. I have spent that time. The money saved is usually less than the time it took to find.

Cloudflare’s model is different: wholesale price plus the ICANN fee, no markup, no promo codes. The price is the price. It is not necessarily the lowest price available in year one — introductory offers will always beat it — but it will not become a different number at renewal.

And at-cost does not mean frozen. On 1 November 2026, the wholesale price of a .com goes from $10.26 to $10.97 (Domain Name Wire); Cloudflare simply doesn’t add a markup, and cannot stop the registry from raising its price. What I bought was not the lowest price. It was the absence of a promotional cliff: no comparing before renewal, no hunting for a code, no guessing what next year costs.

A week before expiry

I started the transfer with a week left. In hindsight, that is the one decision in this piece I would not repeat.

Cloudflare’s documentation says the whole process can take up to ten days, depending on how quickly the old registrar releases the domain (Cloudflare Registrar docs). Ten days is a ceiling, not a schedule; my old registrar released it quickly, and from unlocking to transfer confirmation took under two hours. But if it had taken seven days, the domain could have expired mid-transfer — and then the problem would not be a coupon, but a redemption fee.

If I did it again, I would start two weeks out, or renew for a year at the old registrar first. I got lucky.

Two 60-day rules have nothing to do with money and everything to do with the calendar: a domain cannot be transferred within 60 days of registration or its last transfer, and a change to the registrant name, organisation or email triggers another 60-day lock. They do not add cost; they invalidate the timeline.

What the two hours were

The transfer was not what took the time. Checking was.

My setup was GitHub Pages with Namecheap DNS. The GitHub Pages domain verification had been done earlier; this time it was only the DNS records: the four apex A records (GitHub Pages’ IPs) and the www CNAME. Cloudflare’s automatic scan imports them, but it does not say which ones are load-bearing; I went through the old zone line by line.

Then I turned the records orange (proxied) and set SSL mode to Full. GitHub Pages manages its own certificate; behind Cloudflare’s proxy, TLS becomes “Cloudflare terminates, then connects to GitHub” — Flexible mode loops. This step is not required for the migration. I added it for the CDN and caching, and it brought an extra certificate layer to maintain.

Only after the DNS had switched and the zone was Active did the registrar transfer start: unlock, get the authorisation code, pay, approve at the old registrar. With DNSSEC enabled, the order is: disable it, wait 24 hours, change the nameservers, and re-enable it after the transfer.

This domain has no email on it, so the MX, SPF, DKIM and DMARC category did not exist. Domains with email have one more category to check before the nameservers move — and when those records break, they break quietly.

The costs

Cloudflare Registrar requires the domain to use Cloudflare’s authoritative DNS. That is not optional. If the DNS is already there, the cost is zero; otherwise the move trades a billing relationship for a DNS dependency. Whether that is a good trade depends on how attached one is to the current DNS.

Second, the registrar, DNS and CDN now share one account. At the time of this migration the site was still on GitHub, so the single point of failure covered the domain and its resolution, not the hosting. If the account is lost, the files are still on GitHub, but the domain and DNS are gone — the site is still there, just impossible to find.

Third, support on the free plan is tickets and community, not a phone line. Fourth, ICANN requires registrant email verification; if verification fails, the domain is suspended and its nameservers are replaced by parking servers. None of these made me reconsider the move, but they are bills that come due afterwards.

The domain became boring

After this move, the domain became boring. It is an annual receipt, not a supplier to renegotiate every year. I saved eight dollars; what I actually bought was a bill that no longer needs negotiating: no promo code, no renewal price, no annual “should I switch this year” project.

Two hours of migration, in exchange for one comparison a year. I think that is a good trade.

When I wrote this, the site was still on GitHub Pages. By publication it should be on Cloudflare Pages. The domain and DNS moved this time; the hosting is next — and if that goes well, it may be worth another note.