{
  "name": "StackRates monthly VPS price index",
  "description": "Median monthly list price, in US dollars, of unmanaged VPS plans with 1, 4 and 8 GB of RAM, from the prices StackRates reads from the providers' own pages and APIs, and the median month-on-month change of the plans read in both months.",
  "url": "https://stackrates.ai/data/index/vps-price-index.json",
  "csv": "https://stackrates.ai/data/index/vps-price-index.csv",
  "basket_csv": "https://stackrates.ai/data/index/vps-price-index-plans.csv",
  "history": "https://stackrates.ai/data/history/",
  "license": "CC BY 4.0",
  "license_url": "https://creativecommons.org/licenses/by/4.0/",
  "creator": {
    "name": "StackRates",
    "url": "https://stackrates.ai"
  },
  "citation": "StackRates (2026). Monthly VPS price index, method 1, reads 2026-10-05 to 2026-11-05. https://stackrates.ai/data/index/vps-price-index.csv",
  "temporal_coverage": "2026-10-05/2026-11-05",
  "as_of": "2026-11-05",
  "method_version": "1",
  "method": {
    "version": "1",
    "adopted": "2026-11-06",
    "plans_counted": "Unmanaged virtual servers only: plans of providers we list as infrastructure (not managed hosting such as Cloudways or Kinsta), not dedicated or bare-metal servers, with vCPU and RAM stated, a term of 12 months or less, a public IPv4 address on the provider's word, orderable when read, and not a promotion-only plan. Mark-restricted providers are never included.",
    "price_counted": "The provider's regular monthly list price as read (an introductory or sale price is not used), plus the IPv4 address fee when the provider bills it on top. Prices billed in euros or pounds are converted to US dollars at the European Central Bank reference rate of the read date (the rate the price run read that day). Prices are as printed: most EU providers print them before VAT, US providers before sales tax.",
    "plan_month_price": "Each plan counts once per month, at its latest read in that month, and only if that read meets the rules above: a plan the provider showed as sold out at its last read of the month is not counted that month. Plan facts (vCPU, RAM, disk, term, IPv4 fee) are the catalogue's on the read day; what the product is (managed hosting, a dedicated or bare-metal server, an IPv6-only or promotion-only plan, a plan whose pages do not state IPv4) is today's catalogue's word, since it does not change from day to day and later corrections apply to every day.",
    "composition": "The medians are levels over the plans counted that month, so they also move when plans enter or leave (a provider added, a plan sold out, a hand-read plan not re-read) and, for plans billed in euros or pounds, with the exchange rate. The change column compares like with like and is the figure to read for price moves; plans_entered and plans_left in the JSON give the composition change.",
    "medians": "median_usd_month_1gb, _4gb and _8gb are the medians of those prices over the plans with exactly 1, 4 or 8 GB of RAM; plans_1gb, _4gb and _8gb give how many plans each median is taken from. An even count takes the mean of the two middle prices.",
    "change": "change_pct_vs_prev_month is the median of the per-plan percentage changes between the plan's price in the previous month and in this month, over the plans counted in both months with the same vCPU, RAM, disk, term and billing currency. The change is computed in the currency the provider bills in, so a move in the exchange rate is never counted as a price change. plans_up, plans_down and plans_same count those plans.",
    "no_reads": "A month without reads has a row that says so and no figures; nothing is interpolated, and the next month has no change figure.",
    "partial_month": "The latest month is month to date and says so in note.",
    "source": "Every figure is computed from the rows in /data/history/ and the basket file lists the plan, read date and price behind each month."
  },
  "columns": {
    "month": "Calendar month (UTC) of the reads, YYYY-MM.",
    "plans_compared": "Plans counted this month (the basket).",
    "median_usd_month_1gb": "Median all-in monthly price in USD of the counted plans with exactly 1 GB of RAM.",
    "median_usd_month_4gb": "The same for 4 GB of RAM.",
    "median_usd_month_8gb": "The same for 8 GB of RAM.",
    "change_pct_vs_prev_month": "Median of per-plan percentage changes against the previous month, plans counted in both; empty for the first month or after a month without reads.",
    "plans_up": "Plans counted in both months whose price went up.",
    "plans_down": "Plans whose price went down.",
    "plans_same": "Plans whose price did not change.",
    "method_version": "The method these figures were computed with.",
    "plans_1gb": "How many plans median_usd_month_1gb is taken from.",
    "plans_4gb": "How many plans median_usd_month_4gb is taken from.",
    "plans_8gb": "How many plans median_usd_month_8gb is taken from.",
    "read_days": "Days in the month with at least one read.",
    "last_read": "The last read date in the month.",
    "note": "Plain-words caveat for the row (partial month, no reads, first month)."
  },
  "months": [
    {
      "month": "2026-10",
      "plans_compared": 293,
      "median_usd_month_1gb": 5,
      "median_usd_month_4gb": 14,
      "median_usd_month_8gb": 24.99,
      "change_pct_vs_prev_month": "",
      "plans_up": "",
      "plans_down": "",
      "plans_same": "",
      "method_version": "1",
      "plans_1gb": 37,
      "plans_4gb": 59,
      "plans_8gb": 51,
      "read_days": 27,
      "last_read": "2026-10-31",
      "note": "first read 2026-10-05; first month: no earlier month to compare"
    },
    {
      "month": "2026-11",
      "plans_compared": 292,
      "median_usd_month_1gb": 5,
      "median_usd_month_4gb": 14,
      "median_usd_month_8gb": 24.99,
      "change_pct_vs_prev_month": 0,
      "plans_up": 0,
      "plans_down": 0,
      "plans_same": 280,
      "method_version": "1",
      "plans_1gb": 35,
      "plans_4gb": 58,
      "plans_8gb": 51,
      "read_days": 5,
      "last_read": "2026-11-05",
      "note": "month to date: reads up to 2026-11-05; change: 280 plans read in both 2026-10 and 2026-11",
      "plans_paired": 280,
      "plans_left_out_spec_changed": 0,
      "movers": [],
      "plans_entered": [
        "dbm-advanced",
        "dbm-advanced-plus",
        "dbm-basic",
        "dbm-basic-plus",
        "dbm-express-plus",
        "dbm-pro",
        "dbm-pro-plus",
        "netart-business",
        "netart-elite",
        "netart-max",
        "netart-pro",
        "netart-start"
      ],
      "plans_left": [
        "advin-premium-3",
        "ionos-lplus",
        "ionos-mplus",
        "ionos-splus",
        "ionos-xlplus",
        "ionos-xxlplus",
        "liquidweb-1",
        "netcup-vps-lite-1",
        "netcup-vps-lite-2",
        "netcup-vps-lite-3",
        "netcup-vps-lite-4",
        "netcup-vps-nano",
        "netcup-vps-pico"
      ]
    }
  ],
  "basket_size_by_month": {
    "2026-10": 293,
    "2026-11": 292
  }
}
