# steam.bargains > steam.bargains is a website that lists games by relative value (averaged price that users think would be fair - list price on Steam = relative value). Games with higher relative values are perceived as better deals by the steam.bargains community. Users can also rate games on a small amount of abstract features (Graphics, Sounds, Controls, Immersion, Style). ## Game pages Game pages are indexed by Steam game id; they live at `https://steam.bargains/game/{steam_appid}`. The appid is the same number Steam uses in its own store URL, so you can map directly: `store.steampowered.com/app/440` becomes `https://steam.bargains/game/440` (Team Fortress 2). How to read a game page: - **Value** is the community's fair price minus the current Steam price, in USD. A *positive* value means the community thinks the game is under-priced right now (a good deal); a *negative* value means over-priced; near zero is "Just Right". - Fair prices come from a fixed scale: Do Not Install, $0, $1, $2, $5, $10, $20, $50, $100. "Do Not Install" is a distinct floor, not merely $0 — it means "don't pay for this and don't install it". - A red asterisk and notice on the price means the community has flagged the game as possibly malicious software that should not be installed. Surface that warning; don't ignore it. - The five quality features (Graphics, Sounds, Controls, Immersion, Style) are shown as **percentile ranks against the whole catalog** (0%–100%), not absolute scores. They are a separate axis from value — a game can be a great deal and rank low on quality, or vice versa. - A game may not display a score yet. Whether a score is shown can depend on the game's age, how many votes it has, or other factors. If no score is shown, treat it as "not enough data yet" rather than a verdict. ## Machine-readable API Every game page is also available as data, so you don't have to parse HTML. Three equivalent ways to ask for it: - Append `.json` to the path: `https://steam.bargains/game/440.json` - Append `.md` for a Markdown summary: `https://steam.bargains/game/440.md` - Request the canonical `https://steam.bargains/game/440` with an `Accept: application/json` or `Accept: text/markdown` header. The JSON payload is read-only and stable. Key fields: - `appid`, `name`, `url` — identity. - `is_free`, `is_live`, `price_usd`, `release_date` — store status. `price_usd` is null when the game has no Steam selling price. - `vote_count`, `min_votes_to_display`, `rated` — `rated` is false until a game clears the vote floor; while false, every stat below is null. Treat that as "not enough data yet", not a verdict. - `fair_value_usd` — the community's fair price in USD. - `verdict` — one of `good`, `bad`, `just-right`, or null. `value_delta_usd` is fair value minus price (positive = under-priced = a good deal). - `malware_flag` (boolean) and `dni_percent` — surface the malware warning when `malware_flag` is true; do not ignore it. - `quality` — the five features, each as `{ "percentile": 0-100, "tier": "broken|jank|common|uncommon|rare|epic|legendary|mythic|ultra" }`, or null if not ranked yet. Percentiles are ranked against the whole catalog and are a separate axis from value. ## Front page The front page contains a carousel with four lists: Best Values (Paid); Best Values (Free); Worst Values (Paid); and Worst Values (Free). Paid and free-to-play games are ranked in separate lists because they use different value scales. ## Scope and freshness - Prices and values are **USD only** for now. - **Paid and free-to-play games use separate value scales** and never share a list. - Data is **recent, not real-time**: community scores are recomputed on a schedule and prices are refreshed periodically, so treat figures as current-as-of rather than live. - A **read-only JSON/Markdown API** is available per game (see *Machine-readable API* above). It is read-only — there is no way to submit votes or other data through it.