Price intelligence
How Gavel estimates what an item is worth — weighted median of completed sales, decay, trimming, confidence tiers and sell-through.
Gavel v1.0.0Paper · Folia supported1.21 – 1.21.x
The price assistant answers two questions: what is this worth and will it actually sell. Both come from the same sample of completed sales.
Sales, not asking prices
Active listings are excluded from every estimate. They are what sellers hope for, and using them creates a feedback loop where each listing anchors on the last optimist's price and the "market value" climbs forever.
Active listings are used for exactly one thing: showing the cheapest one available right now.
Building the sample
pricing: enabled: true window-days: 30 half-life-days: 5.0 min-samples: 5 confidence: high: 25 medium: 10 max-share-per-seller: 0.30 outlier-iqr-factor: 1.5Four filters, in order:
1. Window. Only sales from the last window-days (30) count.
2. Time decay. A sale half-life-days old counts half as much as one from today. Lower it and
the estimate reacts faster to a shifting market; raise it and the estimate is steadier but slower.
3. Outlier trimming. Samples further than outlier-iqr-factor interquartile ranges from the
median are dropped. This removes the accidental "sold a netherite sword for 1" without needing a
hand-maintained sanity list.
4. Seller cap. No single seller may contribute more than max-share-per-seller (30%) of the
weighted sample. One player with twenty listings does not get to define the market price.
Confidence
| Samples | Tier |
|---|---|
| 25 or more | High |
| 10–24 | Medium |
| 5–9 | Low |
Fewer than min-samples (5) | Not trusted — fallback cascade |
The tier is shown in the GUI next to the estimate. An estimate without its confidence is a guess wearing a suit.
The fallback cascade
Below min-samples, an exact-match estimate is not trustworthy, so Gavel steps down:
pricing: fallback: relaxed-key: true component-estimate: true component-confidence-penalty: 0.75- Exact key — this item with these enchantments and this NBT.
- Relaxed key — the material alone, ignoring enchantments.
- Component estimate — base material value plus the value of each enchantment, derived from enchanted-book sales.
The component estimate is what lets Gavel price a combination nobody has ever sold on your server.
It is inherently rough, so component-confidence-penalty discounts it to read as conservative
rather than authoritative.
Three suggestions, not one
pricing: suggestions: quick-percentile: 25 fair-percentile: 50 patient-percentile: 75| Suggestion | Percentile | Reads as |
|---|---|---|
| Quick | 25th | Sells fast, below market |
| Fair | 50th | The market rate |
| Patient | 75th | Higher yield, may take the full duration |
Why not one number
A single suggested price becomes self-fulfilling: everyone lists at it, every sale happens at it, and the median stops moving. Three percentiles keep the sample spread and the market alive.
Sell-through
pricing: sell-through: enabled: true min-outcomes: 8For each price band, Gavel shows what share of listings in that band actually sold rather than expiring. This is the number that answers "will it sell?" — and it is often more useful than the price itself. A player who sees "at 12,000: 34% sell-through" understands the trade-off immediately.
Bands with fewer than min-outcomes results are hidden rather than shown as noise.
Warnings and deal badges
pricing: warnings: overpriced-factor: 2.5 underpriced-factor: 0.5 deal-badges: enabled: true great-below: 0.75 good-below: 0.90 fair-below: 1.15On the confirmation screen, a price 2.5× above or 0.5× below the median raises an advisory warning. Both are advisory — the player can always continue. The underpriced warning matters more than it looks: it protects newcomers from listing a valuable item for a fraction of its worth and being sniped within seconds.
In the browse menu, listings are badged great / good / fair / overpriced as a multiple of the median, so a player can scan the page without opening the price checker on every item.
History and rollups
pricing: rollups: enabled: true raw-retention-days: 45 run-at-hour: 4 sparkline-days: 14Every night at run-at-hour, raw market-log rows older than raw-retention-days are folded into
daily rollups and deleted. Rollups are tiny and kept forever, so long-term history is not lost — only
the row-level detail behind it.
The 14-day sparkline in the price checker is drawn from those rollups.
Integrity feeds pricing
Trades flagged by market integrity are excluded from the sample by default. This is what makes the price data hard to manipulate: pumping an item's median by trading it back and forth with an alt does not work, because those trades never enter the calculation.