GPO VALUES trade calculator

loading…

Trade Calculator

Math-driven GPO trade values.

Every number derived from real Discord trades — not editor guesses. Build a trade below, check if it's a win, fair, or lose.
You
Total Value 0
𝓑 0
VS
Them
Total Value 0
𝓑 0
verdict
Search or paste a trade to start.
Updated — · Values v2026.04 · Balanced-250 windows · How confidence works · Recent changes →

Recent value changes

Items that moved most between our last two solver runs. Click a row to open details.

What this site does, in one paragraph

We scrape every public trade message from the GPO trading Discord, extract who's trading what for what, throw out scams + spam, and solve for each item's fair value using math — no editor opinions, no paid tier, no "trust me bro". Every number you see is derived from real trade data. If the data changes, the values change. Simple as that.

What you getLive values for 150+ items
Based on~1–2M real Discord trades
UpdatedAfter each solver run (~4 min end-to-end)
CostFree forever · no paywalls

The full pipeline, step by step

Below is everything the system actually does, top to bottom. If you want the version that fits in a text message, see the paragraph above.

1 · Scrape

A Discord scraper pulls messages from seven trading channels (trade-1, trade-2, booster, premium, certified, plus event channels) and writes rows of (timestamp, message_id, author_id, content, reactions, reply_to) to gzipped CSVs. The message_id column lets us dedupe exactly across scrapes so adding new data never double-counts. Author IDs let us throttle bumpers + wash-traders.

2 · Parse (Rust)

A custom Rust parser turns messages into structured trades at ~700K messages/sec (roughly 1.4s per 1M messages). Each message gets tokenized through a 3-tier fallback: Discord custom-emoji ID → emoji name → text-alias lookup. A 1,100+ entry alias table maps community shorthands (pcc, pchakram, chakram, chak, sos, lih, etc.) to canonical item names.

A compound resolver with ~300 rules assembles multi-emoji item names: Exalted + Wings → "Exalted Cupid Queen's Wings"; Legendary + Fish_Bait → "Legendary Fish Bait"; Kraken + Blade + Azure → "Kraken Blade (Azure)"; Max + Legendary → max-stack leg fish bait.

Two dedupe layers kill bump-spam:

  • Exact dedupe by message_id — duplicates across scrapes removed.
  • 60-second bump filter + per-user-per-day cap — a bumper reposting the same trade every 5 minutes contributes at most once per day.

"Offer me / LF X / How many for Y" open-ended posts are dropped (no ratio = no value signal). ":Peli:" (in-game currency) is filtered out as noise.

3 · Scam filter

Pure 1:1 same-quantity trades are dropped from the ratio graph entirely. Cross-tier 1:1s like 1 PCC FOR 1 SGC are almost always scam lowballs; filtering them protects the Dijkstra math below. Cross-item ratio info still comes through multi-quantity trades + bundles.

4 · Solver (Rust)

Anchor: Mythical Fruit Chest = 10,000. Every other value is derived as a multiple of this anchor. The Rust solver runs in ~9 seconds on 1.8M trades. Five phases:

  • Phase 1 — ratio chain: Dijkstra finds the max-bottleneck (highest-evidence) path from the anchor to every item. Each edge is a weighted-median ratio across all trades between those two items. Scam 1:1s dropped, pure-ratio trades kept.
  • Phase 2 — bundle propagation: multi-item trades like PCC for PFL + PWE give "1 PCC = sum of those two." For each item we take the weighted-median of implied values across all bundles where it appears alone on one side.
  • Phase 2b — iterative re-valuation: since item values depend on each other, we iterate with EMA damping (35% new + 65% old) and a 30% per-round step cap. Converges in 10 rounds.
  • Phase 2c — balanced windows (per-item): each item uses up to 500 most-recent trades (250 offer-side + 250 want-side) as its own evidence pool. Prevents high-volume items from drowning out niche items. Uses the 40th percentile for items with ≥40 weight of bundle evidence (guards against a handful of "flex offer" bundles inflating the median). Aggregate clamp: items can't move more than 1.6× from their pre-phase value in one solver run.
  • Phase 2d — soft tier-ordering penalty: if a lower-tier item exceeds any strictly-higher tier's p75 by >20%, pull it down 10% (single pass). NEW and VERY_UNSTABLE tiers exempt.

5 · Community anchors

A small number of items have community-validated values applied as high-weight pins (data/suggested_values.json). These override the chain math when the weight is ≥500 — used for items where public Discord data systematically diverges from known community consensus (fruits, mid-tier items). Low-weight community suggestions blend proportionally.

Anyone can propose one via /suggest in the Discord server (with 2+ proof screenshots). Auto-approves at 3+ ✅ reactions with 1.5× yes/no ratio.

6 · Time-decay + trust weighting

Every trade carries two weights:

  • Long window: 30-day half-life — a trade from 30 days ago is worth half as much as today's.
  • Short window: 12-hour half-life — picks up intraday market shifts.

Per item the solver picks whichever window is more trustworthy right now (window_active on each card). Authors flagged by our wash-detector get their trades downweighted (0.5×).

7 · Post-process refinements

  • 1:1 alignment — items stuck at a bad chain estimate get pulled halfway toward a dominant 1:1 partner (≥50 trades).
  • Demand adjustment — items the community wants more than they offer get a boost of 3–20%; over-offered items get a matching discount.
  • +Adds learning — the value of "+Adds" modifiers is learned per trade-scale tier from mod-bearing trades. Lets us re-include previously-dropped mod trades with a learned correction.
  • Wiki injection — every item is cross-referenced with the GPO Fandom wiki for rarity, drop rate, and item images. Powers the rarity-frame glow + detail panel.

8 · Confidence bands

Every item is count-driven, not human-adjusted:

  • High confidence — 1000+ trades. Range is tight (±10%).
  • Medium confidence — 200–999 trades. Range is wider (±15–20%).
  • Low confidence / ⚠ LOW DATA — <200 trades. Amber badge; range is wide (±30–40%). Treat the number as a ballpark.

We never override the band to make an item look more or less certain — the math decides.

9 · Daily history backfill

Starting from the first trade date, we replay the solver at 23:59 UTC each day using only trades available as of that day. This gives every item a 60-day price time series we can chart — without having needed to run the solver daily ourselves. Used by the Changes tab and detail-panel trend arrows.

10 · Discord bot

GPO VALUES exposes all this in chat — natural-language parsing ("pcc for pfl"), 30+ slash commands, personal inventory tracker, price alerts, trade challenges, interactive help hub. Channel-gated per guild; details at gpovalues.com/bot.

What's intentionally NOT here

  • No editor's opinion — if the data says X, it's X.
  • No paywalls, no premium tier — every value is free forever.
  • No fake confidence — thin-data items are flagged prominently.

Caveats

  • These are trade offerings, not closed deals. The math weights what the community is asking, not what actually clears hands.
  • Exclusives (Marine Cap, Valkyries) trade rarely — holders don't post, so offers under-sample them vs. community consensus. The LOW DATA badge marks this.
  • Brand-new items (first-seen <30 days ago) swing hard for the first two weeks — use the /history chart to see the trajectory.
  • "+Adds" at the prestige tier can mean another full prestige worth of fillers. The learned adds model handles this but individual trades still carry that ambiguity.

Open source + feedback

Report incorrect values with /feedback in the Discord server. Propose corrections with /suggest (community vote approves). API access at api/items.json (free, rate-limited). See the FAQ for common questions, confidence explained for how to read LOW DATA, or bot command reference.

0 0