# StackRates price history

Every price StackRates read for every plan, one file per provider, from 2026-10-05 to 2026-11-05 (UTC read dates).
6716 rows, 371 plans, 60 providers. Licence CC BY 4.0.
Written by `app/frontend/scripts/data/build-history.mjs` from the dated record; method 1 (2026-11-06).

Cite as: StackRates (2026). VPS price history, reads 2026-10-05 to 2026-11-05. https://stackrates.ai/data/history/

## Files

- `/data/history/<provider>.csv`: one row per (read_date, plan_id).
- `/data/index/vps-price-index.csv` and `.json`: the monthly VPS price index (method in the JSON).
- `/data/index/vps-price-index-plans.csv`: the plans, read dates and prices behind each month of the index.

## Columns

| Column | Meaning |
|---|---|
| read_date | Day the price was read, YYYY-MM-DD: the UTC day of the price run for api and page reads, the day the team member stated for manual reads. One row per plan per day; two reads on one day keep the later one. |
| provider | Provider slug, as in /data/prices.csv. |
| plan_id | Plan identifier, stable across days; a plan the provider replaced gets a new id. |
| plan_name | The provider's plan name as the catalogue stated it on the read day. |
| vcpu | Virtual CPUs. Empty when the provider does not state it (managed plans sold on visits). |
| ram_gb | RAM in GB. Empty when not stated. |
| disk_gb | Disk in GB included in the price. |
| term_months | Billing term the price needs: 1 = month to month or hourly, 12 = paid yearly. |
| price_usd_month | The regular monthly list price in US dollars. A price billed in euros or pounds is converted at the European Central Bank reference rate the price run read that day. Introductory and sale prices are not used. |
| price_native | The same price in the currency the provider bills in. |
| currency | USD, EUR or GBP. |
| ipv4_extra_usd | Monthly fee for a public IPv4 address when the provider bills it on top of the price; 0 when the price includes one; empty when the plan has no public IPv4 address or the provider's pages do not say. |
| source_url | The provider page or API the price was read from. |
| read_method | api = the provider's public API; page = the provider's price page, read by our price run; manual = read by a team member from the provider's page and entered with the date. |

Prices are as the providers print them: most EU providers before VAT, US providers before sales tax.

## Provenance by date range

- Before 2026-10-05: no rows. The catalogue imported on 2 Sep 2026 carried prices dated 30 Aug 2026 that the audit of 5 Oct 2026 corrected; they are not reads and are left out.
- 2026-10-05 onward: the daily price run (GitHub Actions, about 04:30 UTC) reads providers' APIs and pages; each run's readings are committed to src/data/live-prices.json, and every committed version is a dated record.
- Contabo, InterServer and netcup turn GitHub's runners away; their pages are read by the same price run on a normal network ("Local price run" commits: the team's laptop from 11 Oct 2026, Node U at about 03:00 UTC from 30 Oct 2026). Until 31 Oct 2026 the run stored those reads under the label "manual" (scripts/pipeline/run.mjs then: `priceSource: source.skipInCi ? 'manual' : reading.source`); they were script reads, and this history labels them with the method the same source has reported since 31 Oct 2026.
- Hand reads: plans priced from the catalogue alone (before a provider's reader existed, or where its site blocks automated readers: Cloudways, AlphaVPS, Time4VPS, some netcup plans) appear on the date the catalogue states for each read.
- Plan facts (name, vCPU, RAM, disk, term, IPv4 fee) are the catalogue's on master at the end of the read day. What a plan is (IPv6 only, IPv4 not stated on the provider's pages) is today's catalogue's word for every day, so a later correction applies to the whole history.

All rows by method: api 1606, manual 187, page 4923.

## Coverage by provider

| Slug | Provider | Plans | Rows | First read | Last read | Days read | Days without a read between first and last | Rows by method |
|---|---|---:|---:|---|---|---:|---:|---|
| advinservers | Advin Servers | 5 | 115 | 2026-10-14 | 2026-11-05 | 23 | 0 | api 115 |
| akamai-linode | Akamai Cloud (Linode) | 6 | 180 | 2026-10-05 | 2026-11-05 | 32 | 0 | api 180 |
| alphavps | AlphaVPS | 21 | 42 | 2026-10-29 | 2026-11-01 | 2 | 2 | manual 42 |
| alwyzon | Alwyzon | 6 | 138 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 138 |
| arubacloud | Aruba Cloud | 5 | 115 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 115 |
| atlanticnet | Atlantic.Net | 5 | 130 | 2026-10-11 | 2026-11-05 | 26 | 0 | page 130 |
| aws-lightsail | AWS Lightsail | 11 | 316 | 2026-10-05 | 2026-11-05 | 32 | 0 | api 316 |
| cherryservers | Cherry Servers | 4 | 104 | 2026-10-11 | 2026-11-05 | 26 | 0 | page 104 |
| civo | Civo | 4 | 92 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 92 |
| cloudcone | CloudCone | 4 | 128 | 2026-10-05 | 2026-11-05 | 32 | 0 | page 128 |
| cloudserver | CloudServer | 4 | 84 | 2026-10-14 | 2026-11-03 | 21 | 0 | page 84 |
| cloudways | Cloudways | 9 | 18 | 2026-10-05 | 2026-11-01 | 3 | 25 | manual 18 |
| contabo | Contabo | 6 | 157 | 2026-10-05 | 2026-11-05 | 27 | 5 | manual 4, page 153 |
| crowncloud | CrownCloud | 6 | 138 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 138 |
| databasemart | Database Mart | 7 | 21 | 2026-11-03 | 2026-11-05 | 3 | 0 | page 21 |
| dedirock | DediRock | 9 | 117 | 2026-10-14 | 2026-11-05 | 23 | 0 | manual 6, page 111 |
| digitalocean | DigitalOcean | 7 | 189 | 2026-10-05 | 2026-11-05 | 27 | 5 | manual 7, page 182 |
| dreamhost | DreamHost | 4 | 108 | 2026-10-10 | 2026-11-05 | 27 | 0 | manual 4, page 104 |
| evoxt | Evoxt | 5 | 115 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 115 |
| exoscale | Exoscale | 5 | 98 | 2026-10-14 | 2026-11-05 | 23 | 0 | api 97, manual 1 |
| greencloudvps | GreenCloudVPS | 5 | 135 | 2026-10-10 | 2026-11-05 | 27 | 0 | manual 5, page 130 |
| hetzner | Hetzner | 10 | 264 | 2026-10-05 | 2026-11-05 | 27 | 5 | api 260, manual 4 |
| hivelocity | Hivelocity | 4 | 104 | 2026-10-11 | 2026-11-05 | 26 | 0 | page 104 |
| hosthatch | HostHatch | 5 | 135 | 2026-10-10 | 2026-11-05 | 27 | 0 | manual 5, page 130 |
| hostingcom | Hosting.com | 4 | 104 | 2026-10-11 | 2026-11-05 | 26 | 0 | api 104 |
| hostinger | Hostinger | 4 | 88 | 2026-10-10 | 2026-11-05 | 22 | 5 | manual 4, page 84 |
| hostodo | Hostodo | 5 | 115 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 115 |
| hostus | HostUS | 3 | 69 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 69 |
| hostwinds | Hostwinds | 5 | 135 | 2026-10-10 | 2026-11-05 | 27 | 0 | manual 5, page 130 |
| interserver | InterServer | 4 | 108 | 2026-10-05 | 2026-11-05 | 27 | 5 | page 108 |
| ionos | IONOS | 5 | 30 | 2026-10-10 | 2026-10-15 | 6 | 0 | manual 5, page 25 |
| kamatera | Kamatera | 3 | 81 | 2026-10-10 | 2026-11-05 | 27 | 0 | manual 3, page 78 |
| khanwebhost | KhanWebHost | 43 | 258 | 2026-10-29 | 2026-11-05 | 6 | 2 | manual 43, page 215 |
| kimsufi | Kimsufi (OVHcloud) | 4 | 92 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 92 |
| kinsta | Kinsta | 5 | 160 | 2026-10-05 | 2026-11-05 | 32 | 0 | page 160 |
| latitudesh | Latitude.sh | 3 | 61 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 61 |
| liquidweb | Liquid Web | 6 | 134 | 2026-10-11 | 2026-11-05 | 26 | 0 | page 134 |
| liteserver | LiteServer | 4 | 92 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 92 |
| lunanode | LunaNode | 6 | 156 | 2026-10-11 | 2026-11-05 | 26 | 0 | page 156 |
| mythicbeasts | Mythic Beasts | 4 | 92 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 92 |
| netart | netart.com | 5 | 10 | 2026-11-04 | 2026-11-05 | 2 | 0 | page 10 |
| netcup | netcup | 11 | 128 | 2026-10-11 | 2026-11-05 | 25 | 1 | manual 6, page 122 |
| ovhcloud | OVHcloud | 4 | 128 | 2026-10-05 | 2026-11-05 | 32 | 0 | api 128 |
| phoenixnap | phoenixNAP | 4 | 88 | 2026-10-14 | 2026-11-04 | 22 | 0 | page 88 |
| racknerd | RackNerd | 4 | 128 | 2026-10-05 | 2026-11-05 | 32 | 0 | page 128 |
| ramnode | RamNode | 6 | 156 | 2026-10-11 | 2026-11-05 | 26 | 0 | page 156 |
| scaleway | Scaleway | 5 | 130 | 2026-10-11 | 2026-11-05 | 26 | 0 | api 130 |
| securedragon | Secure Dragon | 4 | 80 | 2026-10-15 | 2026-11-05 | 20 | 2 | page 80 |
| servarica | ServaRica | 4 | 92 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 92 |
| time4vps | Time4VPS | 9 | 18 | 2026-10-29 | 2026-11-01 | 2 | 2 | manual 18 |
| ukhost4u | UKHost4u | 6 | 18 | 2026-11-03 | 2026-11-05 | 3 | 0 | page 18 |
| ultravps | UltraVPS | 4 | 84 | 2026-10-15 | 2026-11-05 | 21 | 1 | page 84 |
| ultrawebhosting | Ultra Web Hosting | 1 | 3 | 2026-11-03 | 2026-11-05 | 3 | 0 | page 3 |
| upcloud | UpCloud | 5 | 135 | 2026-10-05 | 2026-11-05 | 27 | 5 | manual 5, page 130 |
| virtono | Virtono | 4 | 92 | 2026-10-14 | 2026-11-05 | 23 | 0 | page 92 |
| vpsdime | VPSDime | 4 | 104 | 2026-10-11 | 2026-11-05 | 26 | 0 | page 104 |
| vultr | Vultr | 9 | 276 | 2026-10-05 | 2026-11-05 | 32 | 0 | api 276 |
| webdock | Webdock | 3 | 78 | 2026-10-11 | 2026-11-05 | 26 | 0 | page 78 |
| webhosting24 | Webhosting24 | 8 | 144 | 2026-10-15 | 2026-11-05 | 22 | 0 | manual 2, page 142 |
| webhostinguk | WebHosting UK | 6 | 6 | 2026-11-03 | 2026-11-03 | 1 | 0 | page 6 |

## Known gaps

- Days from 2026-10-05 to 2026-11-05 with no read at all: none.
- Days with no api or page read (only hand reads, or none): none.
- A plan that could not be read on a day has no row that day; its last good price is never copied forward here (the site's own daily snapshot, src/data/price-history.json, does carry it forward, and is not this file).
- A move of more than 30% is held by the price run for review and is not a read until accepted.
- Providers read by hand only have rows on the days they were read: AlphaVPS (2026-10-29, 2026-11-01); Cloudways (2026-10-05, 2026-10-11, 2026-11-01); Time4VPS (2026-10-29, 2026-11-01).
- Days without a read between a provider's first and last read: Contabo: 2026-10-06 to 2026-10-10; DigitalOcean: 2026-10-06 to 2026-10-10; Hetzner: 2026-10-06 to 2026-10-10; Hostinger: 2026-10-27 to 2026-10-31; InterServer: 2026-10-06 to 2026-10-10; KhanWebHost: 2026-10-30 to 2026-10-31; netcup: 2026-10-21; Secure Dragon: 2026-10-28 to 2026-10-29; UltraVPS: 2026-10-22; UpCloud: 2026-10-06 to 2026-10-10.
- Providers with no read on 2026-11-05: CloudServer (last read 2026-11-03); IONOS (last read 2026-10-15); phoenixNAP (last read 2026-11-04); WebHosting UK (last read 2026-11-03).
- Plans with no rows in a provider's file before its first read date were not in the catalogue yet (providers were added from 2026-10-05 on).
- Providers with no rows have a file with the header only.
- Providers taken off the catalogue are not published: BuyVM (48 reads, 2026-10-11 to 2026-10-18); HostSailor (4 reads, 2026-10-14 to 2026-10-14). Mark-restricted providers are never published.
- Year-on-year figures from Wayback Machine captures of October 2025 are not reads by us and are not here; they are in /data/year-on-year.csv.

## Corrected rows

18 rows carry a figure the team corrected after the read, in place in the site's own daily record, with a dated commit that says why. The row shows the corrected figure; /data/history/revisions.csv lists each one with the figure as read and the commit that corrected it.

| Read date | Plan | As read | As corrected | Corrected by |
|---|---|---|---|---|
| 2026-10-05 | cc-4 | USD 7.67 | USD 7.66 | d0f213a4 Merge data-fix-entry-price (c62bee2, with origin/master) into graphics-v2: printed price parts, CloudCone, the price study, email opt-in |
| 2026-10-05 | contabo-vps-12 | USD 35.40 | USD 30.00 | 778f2ac3 Price corrections: Contabo without Indian GST, UpCloud's own USD prices, Hetzner IPv4 $0.60 |
| 2026-10-05 | contabo-vps-4 | USD 7.79 | USD 6.60 | 778f2ac3 Price corrections: Contabo without Indian GST, UpCloud's own USD prices, Hetzner IPv4 $0.60 |
| 2026-10-05 | contabo-vps-6 | USD 10.62 | USD 9.00 | 778f2ac3 Price corrections: Contabo without Indian GST, UpCloud's own USD prices, Hetzner IPv4 $0.60 |
| 2026-10-05 | contabo-vps-8 | USD 19.82 | USD 16.80 | 778f2ac3 Price corrections: Contabo without Indian GST, UpCloud's own USD prices, Hetzner IPv4 $0.60 |
| 2026-10-05 | upcloud-starter-1 | USD 3.24 | USD 3.50 | 778f2ac3 Price corrections: Contabo without Indian GST, UpCloud's own USD prices, Hetzner IPv4 $0.60 |
| 2026-10-05 | upcloud-starter-2 | USD 6.48 | USD 7.00 | 778f2ac3 Price corrections: Contabo without Indian GST, UpCloud's own USD prices, Hetzner IPv4 $0.60 |
| 2026-10-05 | upcloud-starter-4 | USD 12.96 | USD 14.00 | 778f2ac3 Price corrections: Contabo without Indian GST, UpCloud's own USD prices, Hetzner IPv4 $0.60 |
| 2026-10-05 | upcloud-starter-8 | USD 19.44 | USD 20.00 | 778f2ac3 Price corrections: Contabo without Indian GST, UpCloud's own USD prices, Hetzner IPv4 $0.60 |
| 2026-10-05 | upcloud-starter-8-4 | USD 21.60 | USD 24.00 | 778f2ac3 Price corrections: Contabo without Indian GST, UpCloud's own USD prices, Hetzner IPv4 $0.60 |
| 2026-10-06 | cc-4 | USD 7.67 | USD 7.66 | d0f213a4 Merge data-fix-entry-price (c62bee2, with origin/master) into graphics-v2: printed price parts, CloudCone, the price study, email opt-in |
| 2026-10-07 | cc-4 | USD 7.67 | USD 7.66 | d0f213a4 Merge data-fix-entry-price (c62bee2, with origin/master) into graphics-v2: printed price parts, CloudCone, the price study, email opt-in |
| 2026-10-08 | cc-4 | USD 7.67 | USD 7.66 | d0f213a4 Merge data-fix-entry-price (c62bee2, with origin/master) into graphics-v2: printed price parts, CloudCone, the price study, email opt-in |
| 2026-10-09 | cc-4 | USD 7.67 | USD 7.66 | d0f213a4 Merge data-fix-entry-price (c62bee2, with origin/master) into graphics-v2: printed price parts, CloudCone, the price study, email opt-in |
| 2026-10-10 | cc-4 | USD 7.67 | USD 7.66 | d0f213a4 Merge data-fix-entry-price (c62bee2, with origin/master) into graphics-v2: printed price parts, CloudCone, the price study, email opt-in |
| 2026-10-11 | cc-4 | USD 7.67 | USD 7.66 | d0f213a4 Merge data-fix-entry-price (c62bee2, with origin/master) into graphics-v2: printed price parts, CloudCone, the price study, email opt-in |
| 2026-10-12 | cc-4 | USD 7.67 | USD 7.66 | d0f213a4 Merge data-fix-entry-price (c62bee2, with origin/master) into graphics-v2: printed price parts, CloudCone, the price study, email opt-in |
| 2026-10-13 | cc-4 | USD 7.67 | USD 7.66 | d0f213a4 Merge data-fix-entry-price (c62bee2, with origin/master) into graphics-v2: printed price parts, CloudCone, the price study, email opt-in |

Every other row matches the site's daily record (6559 rows checked; 139 rows are on days the daily record does not hold that plan).

## Monthly VPS price index

Medians in USD per month (plan count in brackets); change is the median per-plan change against the previous month, in the billed currency.

| Month | Plans | 1 GB | 4 GB | 8 GB | Change % | Up / down / same | Note |
|---|---:|---:|---:|---:|---:|---|---|
| 2026-10 | 293 | 5.00 (37) | 14.00 (59) | 24.99 (51) |  |  | first read 2026-10-05; first month: no earlier month to compare |
| 2026-11 | 292 | 5.00 (35) | 14.00 (58) | 24.99 (51) | 0.00 | 0 / 0 / 280 | month to date: reads up to 2026-11-05; change: 280 plans read in both 2026-10 and 2026-11 |

## Rebuild

From app/frontend:

- `node scripts/data/build-history.mjs --rebuild`: everything from the git record (full clone; weekly on Node U or the laptop).
- `node scripts/data/build-history.mjs`: the daily step after the price run; adds that day's reads, recomputes the index.
- `node scripts/data/build-history.mjs --rebuild --check`: exits 1 if the files differ from a full rebuild.

## Changes

- 2026-11-06: first release. Method 1.
