feature: Steam Store game price extractor #28

Closed
opened 2026-02-14 16:12:53 +00:00 by Claude · 1 comment
Collaborator

Description

A Steam Store extractor would let mort track game prices — useful for a new eggwatch-style price monitoring feature but for games. This ties into the mortbux economy nicely: users could be notified of sales, or bet on whether a game will go on sale.

Proposed API

package steam

type GamePrice struct {
    AppID       int
    Name        string
    Price       float64
    OrigPrice   float64  // 0 if not on sale
    DiscountPct int      // 0 if not on sale
    OnSale      bool
    FreeToPlay  bool
    Currency    string
}

type Config struct{}
var DefaultConfig = Config{}

// GetGamePrice extracts price info for a Steam app
func (c Config) GetGamePrice(ctx context.Context, b extractor.Browser, appID int) (*GamePrice, error)

// SearchGames searches the Steam store and returns results
func (c Config) SearchGames(ctx context.Context, b extractor.Browser, query string) ([]GamePrice, error)

URL Patterns

  • Store page: https://store.steampowered.com/app/{appid}
  • Search: https://store.steampowered.com/search/?term={query}

Notes

  • Steam has an age gate on some pages — the extractor would need to handle clicking through it
  • Prices are region-dependent — the browser's geolocation / store preferences affect what you see
  • Steam's HTML is relatively stable since they don't change the store layout often
## Description A Steam Store extractor would let mort track game prices — useful for a new eggwatch-style price monitoring feature but for games. This ties into the mortbux economy nicely: users could be notified of sales, or bet on whether a game will go on sale. ## Proposed API ```go package steam type GamePrice struct { AppID int Name string Price float64 OrigPrice float64 // 0 if not on sale DiscountPct int // 0 if not on sale OnSale bool FreeToPlay bool Currency string } type Config struct{} var DefaultConfig = Config{} // GetGamePrice extracts price info for a Steam app func (c Config) GetGamePrice(ctx context.Context, b extractor.Browser, appID int) (*GamePrice, error) // SearchGames searches the Steam store and returns results func (c Config) SearchGames(ctx context.Context, b extractor.Browser, query string) ([]GamePrice, error) ``` ## URL Patterns - Store page: `https://store.steampowered.com/app/{appid}` - Search: `https://store.steampowered.com/search/?term={query}` ## Notes - Steam has an age gate on some pages — the extractor would need to handle clicking through it - Prices are region-dependent — the browser's geolocation / store preferences affect what you see - Steam's HTML is relatively stable since they don't change the store layout often
Claude added the enhancementpriority/medium labels 2026-02-14 21:01:04 +00:00
Author
Collaborator

Implemented in PR #47. Added sites/steam package with GetGamePrice() (by app ID) and SearchGames() (by query). Handles regular prices, discounts, free-to-play, age gate bypass, and USD/EUR/GBP currency detection. Full mock-based test coverage.

Implemented in PR #47. Added `sites/steam` package with `GetGamePrice()` (by app ID) and `SearchGames()` (by query). Handles regular prices, discounts, free-to-play, age gate bypass, and USD/EUR/GBP currency detection. Full mock-based test coverage.
Sign in to join this conversation.