We earn commissions when you shop through the links below. How we make money

Prices checked 2026-10-06

TrackVPS › API

VPS price data for agents and developers

The same numbers as the comparison table, as JSON. No key, no rate limit beyond fair use, CORS open. Free to use with a link to trackvps.com.

Endpoints

Every response carries schemaVersion, checkedAt, currency and vatNote. Prices are EUR excluding VAT. The site's filtered views use the same parameters, so /?ram=8&region=eu and /api/plans?ram=8&region=eu describe the same list.

Parameters for /api/plans

ParameterValuesMeaning
ram1, 2, 4, 8, 16, 32RAM bucket (same as the table tabs). ram=8 returns plans with 8 to 15 GB.
ram_minnumberMinimum RAM in GB. ram_min=8 returns every plan with 8 GB or more.
max_pricenumberMaximum priceMonthly in EUR.
regioneu, us, asiaPlans with a data center in that region.
contractnone, term, promonone = cancel anytime at the shown price. term = promo or long-term (everything that is not none). promo = intro price that rises later.
disknvmeNVMe disks only.
providerstringExact provider name, case-insensitive.
qstringText search in provider and plan name.
sortprice, per_gb, 2y, ratingCheapest monthly (default), cheapest per GB RAM, cheapest over 2 years, highest weighted rating. Plans without a value for the chosen metric sort last.
limitnumberReturn at most this many plans.
include_unavailable1Also return plans that were not orderable when checked.

Examples

curl -s "https://trackvps.com/api/plans?ram=8&max_price=10&region=eu&sort=price" | jq '.plans[] | {provider, plan, priceMonthly, contract, catch}'

Plan record (v1)

One record per plan. Field names are stable within a major version: we add fields, we do not rename or remove them. A breaking change would ship as v2 at a new path with this version kept alive.

FieldTypeMeaning
idstringStable plan id, also the plan page slug (/plans/<id>) and the API path (/api/plans/<id>).
providerstringProvider name as we write it: Netcup, Contabo, Hetzner, Hostinger, DigitalOcean, …
planstringPlan name as the provider writes it.
vcpunumberNumber of vCPUs.
cpuType"shared" | "dedicated"Normalised CPU type. cpuNote keeps the provider's own wording.
ramGbnumberRAM in GB.
ramSize1 | 2 | 4 | 8 | 16 | 32RAM bucket used by the table tabs and the ram filter: 8 covers 8 to 15 GB, 32 covers 32 GB and up.
diskGbnumberIncluded disk in GB. 0 means storage is billed separately.
diskType"NVMe" | "SSD" | "HDD" | nullDisk type when the provider states it.
currency"EUR"All prices are in euro. USD list prices are converted at the ECB rate in usdRate (prices.json).
priceMonthlynumber | nullWhat you pay per month at the shown rate, excluding VAT. null when the provider shows no price.
priceRegularnumber | nullPrice per month after the promo or intro period. null when not shown or when there is no promo.
pricePerGbRamnumber | nullpriceMonthly divided by ramGb.
costFirstYearnumber | nullReal total paid in the first 12 months: intro price, then the regular price, plus any upfront payment. null when the data cannot support an honest number (for example a 12-month term with no renewal price recorded).
costTwoYearsnumber | nullSame for 24 months.
termstringBilling term as the provider states it, e.g. "Hourly, cancel anytime" or "24 months paid upfront".
billing"hourly" | "monthly" | "contract"How you are billed: by the hour, month to month, or with a 12–24 month commitment.
contract"none" | "promo" | "term"none = cancel anytime at the shown price. promo = cancel anytime, but the shown price is an intro that rises later. term = 12–24 month commitment or upfront payment.
regions("eu" | "us" | "asia")[]Regions with at least one data center, derived from locations.
locationsstringData center list as the provider states it.
availablebooleanWhether the plan was orderable when checked. /api/plans leaves unavailable plans out unless include_unavailable=1.
catchstringThe one thing to know before buying: contract length, setup fee, renewal price, missing IPv4, and so on.
ratingobject | nullProvider-level Trustpilot data: trustpilot (score), reviews (count), weighted (score weighted by review count: Bayesian average with a prior of 1,000 reviews at the site-wide mean), paidPlan (provider pays Trustpilot and can invite reviews), url.
urlstringThe provider's own pricing page. No affiliate tracking.
pageUrlstringThe plan's page on TrackVPS.
checkedAtstring (YYYY-MM-DD)Date the price was last copied from the provider page.

Example record

{
  "id": "contabo-cloud-vps-4",
  "provider": "Contabo",
  "hq": {
    "country": "DE",
    "name": "Germany",
    "verified": true
  },
  "plan": "Cloud VPS 4",
  "vcpu": 4,
  "cpuType": "shared",
  "cpuNote": "Shared vCPU",
  "ramGb": 8,
  "ramSize": 8,
  "diskGb": 100,
  "diskType": "SSD",
  "currency": "EUR",
  "priceMonthly": 4.4,
  "priceRegular": null,
  "pricePerGbRam": 0.55,
  "costFirstYear": 52.8,
  "costTwoYears": 105.6,
  "term": "Promo for first 24 months",
  "billing": "contract",
  "contract": "term",
  "regions": [
    "eu",
    "us",
    "asia"
  ],
  "locations": "EU, US, Asia",
  "available": true,
  "catch": "Promo price for the first 24 months; the page doesn't show the price after that, so check before buying. CPU is often reported as oversold.",
  "rating": {
    "trustpilot": 4.6,
    "reviews": 11293,
    "weighted": 4.5,
    "paidPlan": true,
    "url": "https://www.trustpilot.com/review/contabo.com"
  },
  "url": "https://contabo.com/en/vps/",
  "pageUrl": "https://trackvps.com/plans/contabo-cloud-vps-4",
  "checkedAt": "2026-10-06"
}

How the numbers are made

How can we make TrackVPS better?

A missing provider, a wrong price, a filter you want. We read every message.