Open data
Every price on Prompt Piggy as a download: 1,706 prices from 43 providers in 38 countries, as of 29 October 2026. Free to use under CC BY 4.0 – commercial use included, with attribution.
Downloads
prices.csvCurrent prices: one row per price (provider, plan, country, billing interval)prices-flat.jsonThe same rows as JSON, with licence, exchange-rate date and column listprice-history.csvPrice history: periods during which a price applied (from the daily archive and the change log)countries.csvCountries: currency, tax, standard rate and purchasing power factordatapackage.jsonDescription of all files and columns (Frictionless Data Package)prices.jsonRaw file in the internal format, including evidence for manually maintained prices
Licence
The data is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You may copy, adapt and use it commercially as long as you credit “promptpiggy.com” as the source and link to the licence. Online, please link to this page. Creative Commons Attribution 4.0 International
How to cite
Prompt Piggy (promptpiggy.com): AI subscription prices by country, as of 29 October 2026. https://promptpiggy.com/en/open-data/ – licensed under CC BY 4.0.
Updates
The files are regenerated every time the site is published, usually daily after the automatic price check. A new state only goes live if it passes the plausibility checks. Euro values use the latest ECB rate; exchange-rate movements are not price changes.
What is included
Only prices that Prompt Piggy collects itself from the providers are included. Usage limits, ratings and third-party data are not part of the dataset. Purchasing power factors come from the World Bank (CC BY 4.0), exchange rates from the ECB.
Columns
Column names are stable: new columns may be appended at the end, existing ones are never renamed or removed. Empty fields mean “unknown”.
prices.csv · prices-flat.json
| Column | Meaning |
|---|---|
providerstring | Provider ID, e.g. chatgpt, claude, gemini |
provider_namestring | Provider display name |
planstring | Plan ID within the provider, e.g. plus, pro |
plan_namestring | Plan display name |
countrystring | Country, ISO 3166-1 alpha-2 (e.g. DE, US) |
currencystring | Currency, ISO 4217 (e.g. EUR, USD) |
billing_intervalstring | Billing: month or year; the price is always converted to one month |
price_monthlynumber | Price per month in local currency, including VAT – except when excludes_tax = true |
price_monthly_netnumber · null | Price per month before tax, if known |
excludes_taxboolean | true: price before tax because the country has no single rate (US, Canada); only comparable within that country |
tax_included_at_sourceboolean | Whether the provider itself shows the price including tax (false: grossed up by us with the tax rate, or net) |
price_monthly_eurnumber | price_monthly converted to euros at the ECB reference rate (approximate) |
fx_ratenumber | ECB rate used: units of the currency per 1 euro |
fx_datedate | Date of the ECB rate |
price_monthly_ppp_intlnumber · null | Price per month adjusted for purchasing power, in international dollars (World Bank PPP, private consumption) |
sourcestring | How the price was collected: api (pricing data loaded by the provider's page), html (displayed text), manual (checked by hand, with evidence) |
source_urlstring | Page the price comes from |
fetched_atdatetime | Time of retrieval (ISO 8601, UTC) |
price-history.csv
| Column | Meaning |
|---|---|
providerstring | Provider ID, e.g. chatgpt, claude, gemini |
planstring | Plan ID within the provider, e.g. plus, pro |
countrystring | Country, ISO 3166-1 alpha-2 (e.g. DE, US) |
billing_intervalstring | Billing: month or year; the price is always converted to one month |
currencystring | Currency, ISO 4217 (e.g. EUR, USD) |
price_monthlynumber | Price per month in local currency, including VAT – except when excludes_tax = true |
price_monthly_netnumber · null | Price per month before tax, if known |
excludes_taxboolean | true: price before tax because the country has no single rate (US, Canada); only comparable within that country |
valid_fromdate | First day on which the price applies in our records |
valid_todate · null | Last day on which the price applied; empty = still current |
originstring | Where the row comes from: archive (daily archive) changelog (change log, before the archive started) or current (published state, newer than the latest archive file) |
countries.csv
| Column | Meaning |
|---|---|
countrystring | Country, ISO 3166-1 alpha-2 (e.g. DE, US) |
iso3string | Country, ISO 3166-1 alpha-3 |
name_enstring | Country name in English |
name_destring | Country name in German |
currencystring | Currency, ISO 4217 (e.g. EUR, USD) |
euboolean | EU member state |
tax_namestring | Local name of the consumption tax (VAT, MwSt., GST …) |
vat_standard_ratenumber · null | Standard rate in percent; empty if there is no nationwide rate |
prices_incl_taxboolean | Whether consumer prices there are usually shown including tax |
tax_source_urlstring | Source for the tax rate and name |
ppp_factornumber | Purchasing power parity: units of ppp_currency per international dollar (World Bank PA.NUS.PRVT.PP) |
ppp_currencystring | Currency in which ppp_factor is expressed |
ppp_yearnumber | Reference year of the PPP factor |
Found an error or have questions about the data? Write to hallo@promptpiggy.com.