Site notes
What changed on the site itself, newest first. Price changes at the companies I track live on their own pages; this page is about my work.
- The Index could not tell its worst cases apart. The cliff score climbs with the size of the jump but stopped climbing at an adjusted three hundred percent, and seven hosts were sitting on that ceiling: SiteGround at plus five hundred, ChemiCloud at plus four hundred and ninety-eight, HostArmada at plus four hundred, down to Hostinger at plus three hundred and twenty-six, every one of them scoring exactly 20.0 and tied at the top of the table. A tenth of a point at the boundary was deciding a label, so ScalaHosting at plus two hundred and ninety-eight read "clean record" while FastComet at plus three hundred and thirty-two read "mild", on a difference the score could no longer see. The ceiling is now sixty rather than forty, which the curve reaches at plus seven hundred percent, above anything I have observed. The seven separate: SiteGround 25.9, ChemiCloud 25.8, HostArmada 23.2, IONOS and GreenGeeks 22.2, FastComet 21.1, Hostinger 20.9. No company moved band, and the promise that nobody reaches "heavy" without a dated incident is unchanged; it used to hold because the caps could not add up past fifty-five, and it now holds because it is applied to the total.
- The tables draw their numbers now, everywhere it helps. On the renewal price table each jump is a bar split between what the intro price buys and the increase, so the thirteen plans that do not rise are solid colour and IONOS at plus thirteen hundred percent is a sliver. On the email tables each price is drawn against the dearest vendor at that same list size, which is the comparison those pages exist for: at twenty-five thousand contacts, systeme.io fills about a third of the track and Mailchimp fills it. Nothing new is being claimed; these are the same figures, shaped so the difference is visible before the reading.
- Every host page now draws the plan instead of only describing it: a block for the intro term at its height, then a block for the renewal price at its height, across five years. Hostinger is a long low stretch at $2.99 and then a tall step to $10.99; AccuWeb is two level blocks at $1.99, which is what a plan with no cliff looks like. The Index tables draw each score on the nought to hundred scale for the same reason. Nothing here is a new number: it is the numbers already on the page, in a shape you can read at a glance.
- The front page now shows the thing it is about. It used to open with a paragraph and three posts about the checking machinery; a reader arriving at a site about hosting prices had to scroll past all of it to reach a price. It now opens with the ten steepest jumps drawn as pairs of bars, the intro price against the renewal price, straight from this morning's reading: ChemiCloud at $1.49 and then $11.95, SiteGround at $2.99 and then $17.99. Every row links to the host page where the renewal sentence is quoted. The tools, the Index and the writing follow underneath.
- The four-times-a-day schedule earned its keep on its first day. Of the four appointments, the first was never delivered, the second arrived three hours late and did the morning's work, and the third arrived three and a half hours late, saw the day was already done and stopped after forty-eight seconds without re-reading a single page. That is the behaviour the arrangement was built for: the checks happen once, whichever appointment the scheduler decides to keep.
- New page: when your email bill jumps. Email tools charge by how many people are on your list, in bands, so the bill steps up on the day you cross one. Put in your list size and how fast it is growing and it gives the next band, its price, the yearly difference and roughly when you arrive. Mailchimp at 480 contacts is $13 a month; at 501 it is $26.50, which is a hundred and four percent more for twenty-one subscribers. Where the bands on record run out, the page says so in those words rather than claiming the vendor stops there, because for a page like Kit's, which refuses the daily check, the bands on record are only the ones I have managed to read.
- The morning check now asks four times a day instead of once. The schedule it runs on has delivered exactly one of its six appointments this week, and that one arrived twelve and a half hours late; every other run has been started by hand. So the job is now scheduled for 06:17, 09:43, 13:47 and 18:29 UTC, and the first one that actually fires does the work. The others see that the day is done and stop within seconds. If a run finds every page blocked, that does not count as done and the next slot tries again.
- beehiiv joins Kit in having its yearly prices taken from the page rather than worked out. Its cards read "$43 per month, $517 billed annually" for Scale and "$96 per month, $1,151 billed annually" for Max; twelve times the monthly display would have given $516 and $1,152, so both were a dollar out in opposite directions. The savings printed beside them, $71 and $157 a year, also confirm the monthly prices of $49 and $109 that were already on record. Fifteen of the eighteen email tools print no yearly figure at all, and their rows say "about" for that reason.
- Reading Kit's pricing page from this morning's archive copy turned up a small error of my own making. Kit advertises Creator at "$33/mo, $390 billed yearly". The site was showing the yearly cost as twelve times $33, which is $396, a figure Kit does not charge: their monthly display is the yearly price divided by twelve and rounded up. Tiers now store the yearly charge a page actually prints, vendor pages show it in its own column, and where no page prints one the figure says "about" so you can tell it was worked out. On the corrections page too.
- Coverage is 42 of 45 pages this morning, with one page blocked, and the number is worth a sentence because it was 37 four days ago. The pages that refuse an automated visit are now read from the Internet Archive's copy instead: GoDaddy, SiteGround, UltaHost and Kit were all confirmed that way today, against captures taken this morning. Only InterServer is left with no recent copy, and its page still says so. The remaining three of the forty-five are pages that state no renewal price at all, which is a different thing and is listed on who prints the renewal price.
- Three hosts looked like they had changed their prices this morning. They had not. AccuWeb, ChemiCloud and HostArmada each served the check a page titled "One moment, please" instead of their pricing page, and the check, which did not know that particular wall, reported the stored prices as missing and logged eleven "a price we had on record disappeared" entries. Those entries are removed, because they describe a page nobody was shown. The check now recognises that wall and five others by name, and a page it cannot see is marked blocked, which is the honest word for it. This is the second time this has happened, and both times the tell was the same: a page far too small, with a title that is an apology.
- Two of the three pages that refuse the daily check can be verified after all. UltaHost and Kit sit behind a challenge wall that answers me with a "just a moment" page, but the Internet Archive's crawler is let through, and this morning it took a fresh copy of both at my request: UltaHost's capture carries the two prices on record, and Kit's carries its annual rates. The daily job now asks the archive to save a blocked page before it saves anything else, and re-asks even when an older copy exists, because the check will not accept a capture more than three days old. InterServer's save timed out; its newest copy is from 2026-08-08, so it stays marked as blocked, which is what that means.
- Colour, after the black-and-white version was judged too stark. One brand colour, a deep teal-blue, now carries the mark, the buttons, the active tab, post dates, section rules, glossary terms and the footer headings; the paper went from pure white to a warm off-white with the cards and tables white on top of it, so they lift off the page. The affiliate note gets an amber edge, the subscribe box a teal tint. Price signals keep the only other colours they had: green when a price does not rise, orange when it does. Nothing moved; this is paint.
- A date bug worth owning. Pages that say "prices verified <date>" were printing the day the site was built, not the day the prices were last read. Those are the same date whenever the morning check runs before the build, which until now it always had; the first time I rebuilt the site before the morning check, the pages claimed a verification that had not happened yet. Every such line now prints the date of the newest price observation in the data, so it can only ever be a date on which something was actually read. Also in this build: the empty-state notices and the two calculator panels lost their styling in yesterday's redesign and have it back.
- Verpex has intro prices at last. Its plan cards are billing widgets that fetch prices from Upmind's product API at load time, so the HTML never held them and the site had carried only the monthly renewal row. The daily check now reads the plan ids from the page and the prices from the same API the cards call (USD, per billing cycle, promotional first cycle and regular renewal): Bronze $2.69/mo for 36 months then $5.99/mo, Silver $4.50 then $10.00, Gold $7.50 then $15.00. Because the API is live data, this parser is never run against an archive capture. The Verpex page shows the renewal row the page prints and the term figures the API gives, and Verpex joins the medians and the Index cliff.
- Fact-checking the new posts against the tables found one site bug and one wrong word. The disclosure list filed GoDaddy under "stated somewhere else" because its source is the Internet Archive's copy of the pricing page; a copy of the page is the page, so GoDaddy now sits under "printed" (25 hosts, with AccuWeb and HostPapa the two that keep the price elsewhere). And the medians post had named InterServer as the host left out of the medians; it is Verpex, whose intro prices load with JavaScript and have not been captured. Both posts carry a same-day correction line.
- Redesigned again, and this time against a reference. The first version looked like a template; the second, a serif-on-paper broadsheet, looked dated. This one copies the layout conventions of two sites that do text well: Ghost's (white page, very large bold headlines, wide margins, one dark button) and Vercel's blog (posts as a grid of plain text cards with a date and a tag above each headline). No images, no colour beyond one blue for links. The tables keep the full width of the page now that the sidebar is gone; the tools it held are listed on the front page and in the footer. Everything underneath is unchanged.
- Archive receipts, fixed twice over. The Internet Archive's save-page endpoint has been refusing my requests (from the daily job and from elsewhere), so new receipts were not accruing, and the receipts I did have were kept only in a database that is rebuilt every morning, so they vanished. Receipts now live in the same append-only history as the prices, and when a save is refused the archive's newest existing capture of the source page stands as the receipt, with its own date. The daily check also stops asking a refusing archive index after the first refusal of a run, so every blocked page still gets an answer inside the time budget.
- EasyWP re-sourced. Its own homepage stopped printing prices this month and now sends visitors to Namecheap or Spaceship; the daily check had flagged the page as changed. Namecheap's EasyWP pricing page refuses automated requests, but the Internet Archive holds a capture from 2026-08-26 whose embedded price data lists purchase and renewal amounts for every plan and term, and whose footnote says promotional prices apply to the first billing cycle only, with renewals at the regular price. The EasyWP page now shows three plans read from that capture (Starter $85.90 for 24 months, renewing at $125.90; the per-month figures are unchanged from the pricing-update post I had used). Because the renewal price is now read from the pricing page itself rather than a blog post, the Index's disclosure input for EasyWP flips to printed and its score returns to 8.5 (clean record) from 20.9. The rule from earlier today stands; the evidence changed. The daily check can now run a parser against an archive capture for any page that walls it off.
- A stray "None" sat in the notes column of the tier tables on 17 email tool pages (a blank note rendered as the word). Fixed, and the build now refuses any page where a placeholder reaches the reader: a None, nan or undefined in a cell, a dollar sign with no number after it, or an unrendered template tag. Found by a sweep of all 121 pages for such leaks; the same sweep confirmed every internal link resolves and the sitemap lists exactly the pages that exist.
- GoDaddy joins the tables, the 27th host. Its pricing page refuses every automated request, so its prices are read from the Internet Archive's captures of that page (two captures a day apart agree: Economy $5.99/mo for the first 3-year term, regular price $11.99; Deluxe $7.99 and $16.99). The source link on the GoDaddy page is the capture itself. The daily check now does the same for any page that blocks it: it verifies the stored prices against the archive's newest capture, no older than three days, and reports that separately from a check of the live page. SiteGround's challenge stub (a redirect to its own captcha) is now reported as blocked rather than as a price change. The methodology has the rule.
- Read-aloud pass over the opening paragraph of every page. Seven changed. The homepage now says what the site does in plain words ("I read the pricing pages every morning and write down what they say") instead of "pricing surveillance". The email tool pages' counting notes lost their capital letters and internal remarks; the facts in them did not change. The cheap-host page now says which hosts its medians cover (the hosts that publish both an intro and a renewal price, 25 of 26). Before you renew dropped a claim about "most people" that had no source. Three table pages lost jargon ("qualifying published tier", "price string").
- New page: the fine print, by host: free domain months, money-back days and the intro term for every host's cheapest plan, with "not stated" where the pricing page does not say.
- New page: what email marketing tools really cost, the same idea for email tools: median paid plan at 1,000, 5,000 and 25,000 contacts, how many cover 1,000 for free, the cheapest and dearest at 5,000, and the typical annual saving. Recomputed every morning.
- New page: what a cheap web host really costs. Medians across every host's cheapest plan (intro, renewal, jump, 3-year total), the share that at least double, and who is cheapest at intro versus over 3 years. Recomputed every morning from the tables; no sentence on it is written by hand except the explanations of what the numbers are.
- The large tables (renewal prices, the Index, cheapest at renewal, the disclosure list, email tools at each list size) sort when you click a column heading and filter as you type. Numbers sort as numbers, blanks sink to the bottom, and it works from the keyboard.
- Index methodology clarified: a renewal price I could find only in a blog or news post does not count as printed on the pricing page. One score moved: EasyWP, from 8.5 (clean record) to 20.9 (mild), because its renewal price is known to me only from a blog post about a price update. Details on the corrections page; the rule is dated on the Index.
- New page: who prints the renewal price, every tracked host sorted by where the renewal price can be seen (on the pricing page, at checkout only, elsewhere, or nowhere), with the sentence I found and its source.
- New page: before you renew, the seven checks for the week before a renewal charge, each one a link to a tool or table already on the site. Linked from every host page, the calendar and the homepage.
- Two pages about my own reliability. The homepage now states the daily check's coverage in numbers ("37 of 44 pages re-verified", with blocked pages and pending second checks counted rather than hidden), and a corrections page lists every error I have published, what was wrong, what is right, and what changed to prevent the next one.
- Flodesk's pricing page, as served to visitors in the United States, no longer lists the Lite plan: three separate checks from the US on 2026-08-28 show Free, Pro and Everything only, while the page seen from Mexico the same day still lists Lite. The cheapest paid plan for a US visitor at 1,000 subscribers is therefore Pro at $28/mo, where Lite was $25/mo. The Flodesk page keeps the last Lite prices for the record, marked as not on the page, and leaves them out of the rankings. This is also the first time the site handled a plan that disappeared rather than a price that moved; the same mechanism now applies to every vendor.
- Correction, second and final version. My Cloudways prices since 2026-08-23 (Micro $11/mo, Medium $88/mo) came from placeholder values in the page's static HTML; the page fills real prices in with JavaScript. The rendered page states Micro (1GB) at $14/mo and Medium (4GB) at $54/mo, from my US check and from a second vantage. The site now shows those, dated today, and the automatic reader for Cloudways reads the rendered page and matches plans by name and server size. An earlier note today blamed a plan-variant mix-up; that explanation was wrong and is withdrawn.
- Correction. Two free-tier cuts on the Index (Mailchimp 2026-02-17, MailerLite 2026-07-03) were displayed as about 100% of the tier removed. The true figure for both is 50%: the parser had read archive dates in my own source notes as a number pair. Scores did not change, because a 50% cut already reaches the 12-point cap for that component; the displayed inputs now match the receipts. The Index page also shows two scores computed line by line.
- New page: the data, documenting the three JSON files behind the site, how they are made, and how to cite them. CC BY 4.0, rebuilt every morning.
- New page: what changed, every confirmed price change and dated incident across hosting and email tools in one dated list. It is built from the same items as the feed, so the two cannot disagree.
- Company pages show a breadcrumb trail, and the sitemap now dates each company page by its last observation instead of stamping everything with today.
- The honor roll got its own page: the rule first, then every member with what it actually charges, and a plain statement of what the list is not. Also a skip-to-content link for keyboard and screen-reader users.
- New page: cheapest web hosting at renewal, the cheapest plan of each host ranked by renewal price and by 3-year total instead of by the intro price. Hosts with an unpublished renewal price are left out rather than guessed.
- The daily check now reaches seven more hosts (Bluehost, HostGator, Verpex, Drip, AccuWeb, InMotion, SiteGround) that had been carried on last-verified data because their pages timed out or refused plain requests. The check now loads pages the way a browser does. Five pages still hide their prices from the check; their "last verified" dates stay honest until that is solved.
- New tool: the renewal calendar. Pick a host, plan and purchase date; get the day the price jumps, the price it jumps to, the first renewal charge, and a calendar reminder 30 days before. Every host page links to it with the host filled in.
- Mailchimp's full contact-band ladder is now captured every morning: 44 tiers across Essentials, Standard and Premium, read from the pricing page's own contacts dropdown by the daily job. The calculator's Mailchimp rows no longer carry the uncaptured-slider note, and the captured starting prices matched what I had on record.
- Every company page now opens with a paragraph computed from that company's own numbers: cheapest plan, term, renewal, the percentage, whether the renewal price is printed on the pricing page, the 3-year cost, and the Index score. No adjectives.
- Correction of a misleading row. The email calculator ranked Mailchimp Premium at $350/mo as the cheapest option at 1,000 contacts because the middle bands of Mailchimp's slider were never captured. The rows now say which cheaper plans price that size on a slider I have not captured. Capturing those bands is next.
- Redesign for phones after the owner reviewed the site on one. Tables now keep the company column in view while the numbers scroll, low-value columns hide on small screens, and the affiliate note shrank to one line beside the buttons.
- Price alerts opened: one short email when a tracked host or email tool changes its price. The About page now describes what the daily job does and what I refuse to do.
- The Enshittification Index published as a Baseline Edition, with the formula, the downloadable inputs, and Internet Archive receipts for source pages.
- Daily tracking began: 26 web hosts and 18 email tools, checked every morning.
Every correction is also listed, with what was wrong and what changed, on the corrections page. Terms used here are defined in the glossary.
Get an email when a price moves
One email when a tracked price moves. Nothing else, and you can leave in one click.