The dataset behind this site
Every figure on this site is in one file you can download: 36 hosts, 178 plans, and the source URL and read date for each one.
29 of the 36 hosts publish a renewal price at all. That is the field most price comparisons leave out, and it is the reason this dataset exists.
Published under CC BY 4.0. Last refreshed 2026-09-06.
Download
| File | Format | Shape |
|---|---|---|
| renewal-costs.csv | CSV, UTF-8 | 150 rows, one per plan and market. Flat, for a spreadsheet. |
| data.json | JSON | 36 host objects with nested plans, every renewal option, every source URL and every read date. This is the complete record. |
The CSV is a flattened view and drops what does not fit a single row: the second figure where a host's own pages disagree, the full list of renewal options, and the per-field note on what could not be confirmed. If you are checking a specific host, use the JSON.
What is in it
| Hosts | 36 |
| Plans | 178 |
| Hosts publishing a renewal price | 29 of 36 |
| Plans with at least one published renewal option | 150 of 178 |
| Hosts priced in the US market | 22 |
| Hosts priced in the UK market | 11 |
| Currencies | USD and GBP, never converted |
| Schema | v2 |
What it does not hold
No computed values. Effective monthly rates, service cost over a period, cash paid through a period and renewal multiples are all worked out when the pages are built, never stored, so a stored figure can never drift away from the formula that produced it. The formulas are on the method page, and the calculator applies them to any period you choose.
No estimates and no vendor submissions. Nothing here was supplied by a host, filled in from a press release, or inferred from a similar plan. Where a host does not publish something, the field is null and its name is listed in unconfirmed. Where two of a host's own pages disagree, both figures are kept.
No test results or scores. We have not hosted a site on any of these products. There is no rating field because there is no rating — see about this site.
Data dictionary
One row is one host. Plans sit inside the row, because a single host sells shared hosting, managed WordPress and VPS plans that renew on different terms.
| Field | Type | What it holds |
|---|---|---|
| key | string | The host's identifier. Lower-case letters and hyphens only, and it is what the brand page URL is built from. |
| brand | string | The host's own spelling of its name. |
| vendor_url | string | The host's home page. |
| pricing_url | string | The host's own pricing page. This is the default source for every figure in the row. |
| markets | array | ["US"], ["UK"] or both. A market is present only where the host publishes a price in that market's currency. |
| plans | array | One entry per plan. See the next table. |
| _checked | date | YYYY-MM-DD. The day the row was last read. |
| unconfirmed | array | Names of fields we could not confirm on the host's own pages. Anything listed here is shown as not stated on the page, never filled in with an estimate. |
| affiliate_brand | string or null | The program name where we have an affiliate relationship. Null where we have none. It changes nothing about the ordering. |
| renewal_public | boolean | Whether the host publishes any renewal price at all. This one field is what separates the hosts you can budget for from the ones you cannot. |
| Field | Type | What it holds |
|---|---|---|
| name | string | The host's own plan name. |
| category | string | shared, managed-wp or cloud-vps. Categories belong to plans, not to hosts, because one host sells several. |
| currency | string | USD or GBP, as published. Nothing is converted. |
| price_published | boolean | False where the host asks you to contact sales. Every price field is then null. |
| intro_monthly | number or null | The advertised monthly price, exactly as shown. |
| intro_term_months | number or null | The prepaid term that price requires. Null where the host imposes no term. |
| intro_cash_due | number or null | The upfront invoice for the introductory term, recorded only where the host states the total itself. Where it is null, the pages show a figure computed from the monthly price and the term, and label it as computed. |
| renewal_monthly | number or null | The renewal monthly rate. Null where the host publishes none. Where a host's renewal rate equals its advertised rate, the same figure is stored rather than nulled: no introductory discount is a fact, not a gap. |
| renewal_options | array | Every published renewal condition. See the third table. This is the authoritative record; renewal_monthly is derived from it. |
| renewal_src | string or null | Where the renewal figure was read, when that is not the pricing page. |
| renewal_monthly_alt | number or null | A second renewal figure, recorded where the host's own pages disagree with each other. Both are kept and both are shown. |
| renewal_src_alt | string or null | Where that second figure was read. |
| monthly_billing_price | number or null | The monthly rate with no term commitment, where the host offers one. |
| setup_fee | number or null | A one-off charge at signup. |
| price_ex_vat | boolean | True where the published figure excludes VAT, which is usual in the UK. |
| free_domain_year1 | boolean | Whether a domain is included for the first year. |
| sites_included | number or null | How many sites the plan allows. -1 means the host states no limit. |
| storage_gb | number or null | Included storage. -1 means the host states no limit. |
| visits_included | number or null | The monthly visit allowance on managed WordPress plans. |
| overage | object or null | What the host charges above the allowance, per 1,000 visits, per GB of storage, per GB of bandwidth and per extra site. Each part may be null. |
| verification | object | {checked, status}. See the fourth table. |
| notes | string | The host's own conditions, in its own words: other billing terms, duplicate SKUs, regional differences. |
| Field | Type | What it holds |
|---|---|---|
| term_months | number or null | The billing term this renewal price applies to. Null where the host publishes a renewal rate without saying which billing period it belongs to. We do not guess it, and plans whose renewal term is unknown are left out of every cash figure while staying in the service-cost figures. |
| monthly_equiv | number or null | The monthly equivalent. Where the host publishes only an invoice and a term, this is divided out at build time. |
| cash_due | number or null | One renewal invoice. Where the host publishes only a monthly rate and a term, this is multiplied out at build time. |
| src | string or null | Where this option was read, when that is not the pricing page. |
| Value | What it means |
|---|---|
| confirmed | Every field was re-read on the host's own pages that day. |
| partial | Some fields could not be read that day. Only the ones that could be read were updated. |
| last_confirmed | Nothing could be read. The figures are carried from the previous check and are never presented as current. |
| unpublished | The host does not publish a price for this plan. |
Fields are not added to this schema without re-reading every row, which is why the version has a date against it below.
Update history
Figure by figure: what changed and when — every published price that moved between two refreshes, with the old number, the new number and the date it was read, as CSV and JSON. The table below is the version history of the dataset itself.
| Date | Schema | What changed |
|---|---|---|
| 2026-09-07 | v2 | Plans added, no change to the schema. Bluehost's cloud line (Cloud 10, 25 and 50, plus a quote-only Custom Cloud), DreamPress 2 to 20, DreamHost's current Stack VPS tiers, six more Kinsta tiers and Pressable Signature 3 to 8. Kinsta sells each price point under two names, one capping visits and one capping bandwidth; both names are now written into the plan's notes. Nothing already in the dataset changed price on this read. Rows carry the date each plan was last read, so a plan read today sits beside one read at the last full refresh. |
| 2026-09-06 | v2 | Every plan re-read from the hosts' own pages. Schema v2 added renewal_options[] (one entry per published renewal billing term), intro_cash_due (the upfront invoice where the host states it) and verification (the date and the status of the last read). Between the v1 read and this one, ChemiCloud's advertised Starter rate moved from $1.49 to $1.95, Namecheap re-priced its Stellar range, and InMotion changed three renewal rates. |
| 2026-08-20 | v1 | First publication. One row per host, one entry per plan, with the advertised monthly price, the prepaid term it requires, a single renewal monthly rate, the source URL and the date each figure was read. |
Plans on the most-read pages are re-read every 24 to 72 hours and every other plan within seven days; anything not re-checked for more than 7 days is labeled on the page where it appears. The refresh schedule and what happens when a page cannot be read are on the method page.
License and attribution
Both files are published under Creative Commons Attribution 4.0. You may copy, redistribute, adapt and build on this data, including commercially, provided you credit the source. No permission needs to be asked for.
How to cite it
Year Two, “Advertised and renewal prices for US and UK web hosting plans”, https://q2im.com/web-hosting-renewal-cost/data/ (data as of 2026-09-06). CC BY 4.0.
If you publish something built on this, a link back to the source page is the whole of the requirement.
Corrections
If a figure disagrees with what a host publishes today, the host is right and we want to know. Send the plan and the URL through the contact form and the row is re-read. Corrections are made in the data, never in a single page, so every page that uses the figure changes at the same time.
To see the data in use rather than in the raw: the host list shows all 36 hosts with the renewal price in the first column, and how much web hosting costs after the first year works through the arithmetic on real plans.
Written by Kaz, independent publisher. No commercial relationship with the companies named unless it is listed on the disclosure page.
Sources: hosts' own pricing and renewal pages only. Figures last verified 2026-09-06. I have not used these products. Nothing here is a personal test result.
Ranking method and formulas: Method. Listing position on this site is not for sale.
Corrections: contact form.