As of October 7, 2026, Shifter has the largest pool of live US IPs, more than Oxylabs and Bright Data, at a fraction of the cost.Shifter now has the largest pool of live US IPs

See benchmarks

Same Product, Different Price: Geographic Price Discrimination Across 20 Countries

We compared list prices for 10 games across 20 countries on one day. The same game cost up to 4.1 times more in one market. The data, method and traps.

Data Science · Updated November 5, 2026 · 7 min read
US = 1.00INIDTRPHBRZATHMXMYJPKRNZCAUSAUPLDEGBNOCH0.471.32
Same ten games, 20 countries. Amber markets pay more than the US, blue ones less.
Knowledge
On this page
  1. What we measured
  2. The results
  3. Why the gaps exist
  4. Limits of this study
  5. The trap we almost fell into
  6. What this means for price monitoring
  7. Research, not a discount route
  8. The bottom line
  9. Sources and references

Sellers rarely charge one price worldwide. Economists call this price discrimination, and for anyone doing price intelligence across markets, it is the reason one country’s price tells you little about another’s. But how big are the gaps?

To put a number on it, we took a store that publishes clear prices per market and compared 10 games across 20 countries on one day. The same game cost up to 4.1 times more in one country than in another.

What we measured

  • Products: 10 well-known games on Steam, none of them on sale that day.
  • Countries: 20, across six continents.
  • Date: 5 November 2026. Currencies were converted to US dollars with that day’s European Central Bank reference rates.
  • Price: the list price shown for each country.
  • Check: for one game in every country, we also loaded the public store page through a residential proxy exit in that country, confirmed the exit, and compared the price. All 20 matched.

We used public pages only, with no account and no purchases.

The results

The first table shows each country’s median price across the 10 games, as a share of the US price. The second shows the cheapest and most expensive country for each game.

FX: ECB reference rates, 2026-11-05
country currency    vs US
IN      INR          0.47
ID      IDR          0.47
TR      USD          0.48
PH      PHP          0.50
BR      BRL          0.55
ZA      ZAR          0.61
TH      THB          0.61
MX      MXN          0.62
MY      MYR          0.62
JP      JPY          0.72
KR      KRW          0.81
NZ      NZD          0.83
CA      CAD          0.93
US      USD          1.00
AU      AUD          1.02
PL      PLN          1.06
DE      EUR          1.08
GB      GBP          1.12
NO      NOK          1.16
CH      CHF          1.32

game                 US $        lowest       highest   gap
Portal 2             9.99   ID     5.15   CH    12.21  2.4x
Stardew Valley      14.99   BR     4.57   CH    18.34  4.0x
Terraria             9.99   ID     5.04   CH    13.44  2.7x
Hades               24.99   TR     8.25   CH    34.22  4.1x
Celeste             19.99   ID     9.35   CH    22.00  2.4x
Hollow Knight       14.99   TR     5.99   CH    20.53  3.4x
Factorio            35.00   PH    15.87   CH    48.91  3.1x
Slay the Spire      24.99   TR    11.49   CH    27.50  2.4x
Cities: Skylines    29.99   ID    18.76   CH    39.11  2.1x
Civilization VI     59.99   BR    23.60   CH    85.52  3.6x

The median price runs from 47% of the US level in India and Indonesia to 132% in Switzerland. For a single game the gap is wider still: Hades costs about $8.25 in Turkey and $34.22 in Switzerland, 4.1 times as much.

Turkey is the one market in this set priced in US dollars, and at about half the US level, so a shared currency does not mean a shared price. Switzerland was the most expensive market for every one of the 10 games.

Why the gaps exist

On Steam, developers set their own prices, and Valve provides recommended conversions. Its documentation describes three approaches: a simple exchange rate, purchasing power alone, and a multi-variable method that takes into account “local purchasing power, the expected cost of comparable entertainment goods, and exchange rate”. The results fit that description: the cheap markets are mostly ones with lower average incomes, but the pattern is not a neat line, and games in the same market vary a lot.

Tax is part of the picture. Steam’s terms say prices in the EU and UK include VAT, while US sales tax can be added on top, so those rows are not like for like. Take out VAT at the standard rate and Germany moves from 1.08 to about 0.91, and the UK from 1.12 to about 0.93: both below the US rather than above it. We did not adjust other countries, because we could not confirm how each one’s price treats tax.

Limits of this study

This is one store, 10 games and one day. Games are digital products with almost no cost per extra copy, so sellers have unusual freedom to price by market. Physical goods with shipping and import costs will behave differently. Read these numbers as the size a gap can reach, not an average for all of retail.

The trap we almost fell into

Our first attempt produced neat, complete and wrong data. We asked Steam’s price API for prices through an exit in each country, without naming the country, expecting the IP to decide. Every call worked and every exit was correct, but Britain came back in US dollars, Japan in New Zealand dollars and Brazil in euros.

We do not know why. The store pages showed the right currencies, so the problem was in that call and not in the exits. We discarded the run and collected again, naming the country explicitly with the cc parameter:

from __future__ import annotations

import requests

API = "https://store.steampowered.com/api/appdetails"


def list_price(app_id, country):
    """A game's list price for one country, named explicitly with cc=."""
    r = requests.get(API, params={"appids": app_id, "filters": "price_overview", "cc": country},
                     timeout=40)
    r.raise_for_status()
    entry = r.json()[str(app_id)]
    if not entry.get("success") or not entry.get("data"):
        return None
    price = entry["data"]["price_overview"]
    return {"currency": price["currency"], "list": price["initial"] / 100,
            "discount": price["discount_percent"]}


if __name__ == "__main__":
    for country in ("us", "de", "br", "ch"):
        print(country.upper(), list_price(413150, country))
US {'currency': 'USD', 'list': 14.99, 'discount': 0}
DE {'currency': 'EUR', 'list': 13.99, 'discount': 0}
BR {'currency': 'BRL', 'list': 24.99, 'discount': 0}
CH {'currency': 'CHF', 'list': 15.0, 'discount': 0}

These match what the store pages show through a local exit. If we had trusted the first run because nothing errored, every comparison here would have been wrong, and only the odd currencies gave it away.

What this means for price monitoring

  1. Measure each market. Converting one price by exchange rate would miss most of what this table shows. Our guide to detecting geo-personalized and dynamic pricing covers how to design those checks.
  2. Record currency, date and tax basis. A price with no currency or tax basis cannot be compared. Keep the exchange rate and its date with the record.
  3. Sanity-check the currency. A simple rule, such as expected currency per market, would have caught our bad run at once.
  4. Cross-check two routes. An API and a rendered page disagreeing is the most useful alert you can have.
  5. Watch for sales. A discount in one market can pass for a regional price. We checked that no game here was discounted, and you should record the same.

Research, not a discount route

Seeing regional prices is one thing. Using a proxy to pay them is another. Steam’s subscriber agreement says users will not “use IP proxying or other methods to disguise the place of your residence, whether to circumvent geographical restrictions on game content, to order or purchase at pricing not applicable to your geography, or for any other purpose”. Other stores have similar rules. Observing public pages for market research is a different activity from buying, and if you are unsure where your project sits, ask your legal team.

The bottom line

On one store, on one day, the same product varied by up to 4.1 times between countries, and neither exchange rates nor a shared currency explained it. If your pricing decisions depend on what competitors charge abroad, measure each market directly, keep the currency, date and tax basis with every number, and treat data that looks clean as unproven until a second route agrees.

Sources and references

Frequently asked questions

What is geographic price discrimination?

Charging different prices for the same product depending on where the buyer is. It is common and often legal: sellers adjust for local incomes, taxes and competition. The term comes from economics and does not imply wrongdoing.

How much do prices differ between countries?

In this study of 10 games on one store, the median price in the cheapest country was 47% of the US price and in the most expensive it was 132%. The largest gap for a single game was 4.1 times. This is one store on one day, so it shows the size such gaps can reach rather than a market-wide average.

Can I use a proxy to buy at another country's price?

Do not. Steam's subscriber agreement explicitly forbids using IP proxying to purchase at pricing not applicable to your geography, and other stores have similar terms. This kind of data is for research and pricing decisions, not for buying.

Why compare prices from several countries instead of converting one price?

Because sellers rarely price by exchange rate. In this data the difference between countries was far larger than currency conversion would explain, so converting a single price would give you a wrong picture of every other market.

Ready to get started?

Try Shifter's residential proxies, 205M+ IPs, 195+ countries, from $0.10/GB.

Get Started