You are on Glance. In-game, reviews, and price. Catalog has estimates, regional prices, and builds.

Public API

This page is Catalog. Glance / Catalog is in Design.

JSON endpoints over HTTPS. No API keys or accounts required. CORS supports GET, HEAD, POST, and OPTIONS. Standard rate limits apply at 120 requests per minute per IP address, no more than 20 of those in any 10 seconds, and 120 distinct titles per hour. Past 20 in 10 seconds, further requests are refused for 10 seconds. JSON responses are cached for 30 seconds; the CSV export is updated as a 5-minute snapshot. Operated by Musical Pig LLC.

Over the rate limit the API returns HTTP 429. Title search q is at most 80 characters. Errors use JSON { "error": "…" } with the matching HTTP status. Use is subject to the Terms of Service. What we count, and what we do not store, is in the Privacy Policy.

Want a chart or a title card on another site? Build an iframe on embed.ludodb.com. That host is for widgets, not JSON.

Host

https://api.ludodb.com

Send JSON here

www.ludodb.com is the catalog site, not the API. A browser can open either. Scripts should call the API host.

curl https://api.ludodb.com/api/v1/health
Open CSV in a new tab
Catalog10Health, lists, search, CSV
  • GET /api/v1/healthService health
    https://api.ludodb.com/api/v1/health
    {
      "ok": true,
      "name": "ludodb",
      "operator": "Musical Pig LLC",
      "operatorUrl": "https://musical-pig.com",
      "steam": {
        "exhausted": false
      },
      "slow": false,
      "catalog": {
        "titles": 2864,
        "limit": 15000,
        "priced": 2654
      },
      "notices": []
    }

    Public health has no volume or CPU numbers. steam.exhausted pauses live Steam polls.

  • GET /api/v1/pulseHomepage rails
    https://api.ludodb.com/api/v1/pulse
    {
      "comingSoon": [
        {
          "appid": 730,
          "name": "Counter-Strike 2",
          "type": "game",
          "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
          "developers": "Valve",
          "publishers": "Valve",
          "free": true,
          "mature": false,
          "requiredAge": 0,
          "tags": [
            "Action",
            "Free to Play",
            "Multiplayer"
          ],
          "currentPlayers": 499779,
          "peakAll": 1337437,
          "peak24h": 1337437,
          "delta24h": -58331,
          "reviewPositive": 8452479,
          "reviewNegative": 1387191,
          "releaseDate": "Aug 21, 2012",
          "comingSoon": false,
          "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
          "usCents": 0,
          "usInitialCents": 0,
          "usLowCents": 0,
          "steamDeck": "playable",
          "steamAi": false
        }
      ],
      "updated": [
        {
          "appid": 730,
          "name": "Counter-Strike 2",
          "type": "game",
          "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
          "developers": "Valve",
          "publishers": "Valve",
          "free": true,
          "mature": false,
          "requiredAge": 0,
          "tags": [
            "Action",
            "Free to Play",
            "Multiplayer"
          ],
          "currentPlayers": 499779,
          "peakAll": 1337437,
          "peak24h": 1337437,
          "delta24h": -58331,
          "reviewPositive": 8452479,
          "reviewNegative": 1387191,
          "releaseDate": "Aug 21, 2012",
          "comingSoon": false,
          "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
          "usCents": 0,
          "usInitialCents": 0,
          "usLowCents": 0,
          "steamDeck": "playable",
          "steamAi": false
        }
      ],
      "mostPlayed": [
        {
          "appid": 730,
          "name": "Counter-Strike 2",
          "type": "game",
          "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
          "developers": "Valve",
          "publishers": "Valve",
          "free": true,
          "mature": false,
          "requiredAge": 0,
          "tags": [
            "Action",
            "Free to Play",
            "Multiplayer"
          ],
          "currentPlayers": 499779,
          "peakAll": 1337437,
          "peak24h": 1337437,
          "delta24h": -58331,
          "reviewPositive": 8452479,
          "reviewNegative": 1387191,
          "releaseDate": "Aug 21, 2012",
          "comingSoon": false,
          "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
          "usCents": 0,
          "usInitialCents": 0,
          "usLowCents": 0,
          "steamDeck": "playable",
          "steamAi": false
        }
      ],
      "topRated": [
        {
          "appid": 730,
          "name": "Counter-Strike 2",
          "type": "game",
          "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
          "developers": "Valve",
          "publishers": "Valve",
          "free": true,
          "mature": false,
          "requiredAge": 0,
          "tags": [
            "Action",
            "Free to Play",
            "Multiplayer"
          ],
          "currentPlayers": 499779,
          "peakAll": 1337437,
          "peak24h": 1337437,
          "delta24h": -58331,
          "reviewPositive": 8452479,
          "reviewNegative": 1387191,
          "releaseDate": "Aug 21, 2012",
          "comingSoon": false,
          "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
          "usCents": 0,
          "usInitialCents": 0,
          "usLowCents": 0,
          "steamDeck": "playable",
          "steamAi": false
        }
      ],
      "deals": [
        {
          "appid": 730,
          "name": "Counter-Strike 2",
          "type": "game",
          "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
          "developers": "Valve",
          "publishers": "Valve",
          "free": true,
          "mature": false,
          "requiredAge": 0,
          "tags": [
            "Action",
            "Free to Play",
            "Multiplayer"
          ],
          "currentPlayers": 499779,
          "peakAll": 1337437,
          "peak24h": 1337437,
          "delta24h": -58331,
          "reviewPositive": 8452479,
          "reviewNegative": 1387191,
          "releaseDate": "Aug 21, 2012",
          "comingSoon": false,
          "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
          "usCents": 0,
          "usInitialCents": 0,
          "usLowCents": 0,
          "steamDeck": "playable",
          "steamAi": false
        }
      ],
      "gems": [
        {
          "appid": 730,
          "name": "Counter-Strike 2",
          "type": "game",
          "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
          "developers": "Valve",
          "publishers": "Valve",
          "free": true,
          "mature": false,
          "requiredAge": 0,
          "tags": [
            "Action",
            "Free to Play",
            "Multiplayer"
          ],
          "currentPlayers": 499779,
          "peakAll": 1337437,
          "peak24h": 1337437,
          "delta24h": -58331,
          "reviewPositive": 8452479,
          "reviewNegative": 1387191,
          "releaseDate": "Aug 21, 2012",
          "comingSoon": false,
          "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
          "usCents": 0,
          "usInitialCents": 0,
          "usLowCents": 0,
          "steamDeck": "playable",
          "steamAi": false
        }
      ],
      "moving": [
        {
          "appid": 730,
          "name": "Counter-Strike 2",
          "type": "game",
          "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
          "developers": "Valve",
          "publishers": "Valve",
          "free": true,
          "mature": false,
          "requiredAge": 0,
          "tags": [
            "Action",
            "Free to Play",
            "Multiplayer"
          ],
          "currentPlayers": 499779,
          "peakAll": 1337437,
          "peak24h": 1337437,
          "delta24h": -58331,
          "reviewPositive": 8452479,
          "reviewNegative": 1387191,
          "releaseDate": "Aug 21, 2012",
          "comingSoon": false,
          "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
          "usCents": 0,
          "usInitialCents": 0,
          "usLowCents": 0,
          "steamDeck": "playable",
          "steamAi": false
        }
      ],
      "week": [
        {
          "appid": 730,
          "name": "Counter-Strike 2",
          "type": "game",
          "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
          "developers": "Valve",
          "publishers": "Valve",
          "free": true,
          "mature": false,
          "requiredAge": 0,
          "tags": [
            "Action",
            "Free to Play",
            "Multiplayer"
          ],
          "currentPlayers": 499779,
          "peakAll": 1337437,
          "peak24h": 1337437,
          "delta24h": -58331,
          "reviewPositive": 8452479,
          "reviewNegative": 1387191,
          "releaseDate": "Aug 21, 2012",
          "comingSoon": false,
          "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
          "usCents": 0,
          "usInitialCents": 0,
          "usLowCents": 0,
          "steamDeck": "playable",
          "steamAi": false
        }
      ]
    }

    Homepage rails as slim AppCard arrays. comingSoon is New on the store. Live lists are longer.

  • GET /api/v1/catalogFull sampled catalog
    https://api.ludodb.com/api/v1/catalog?cc=us
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "type": "game",
        "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
        "developers": "Valve",
        "publishers": "Valve",
        "free": true,
        "mature": false,
        "requiredAge": 0,
        "tags": [
          "Action",
          "Free to Play",
          "Multiplayer"
        ],
        "currentPlayers": 499779,
        "peakAll": 1337437,
        "peak24h": 1337437,
        "delta24h": -58331,
        "reviewPositive": 8452479,
        "reviewNegative": 1387191,
        "releaseDate": "Aug 21, 2012",
        "comingSoon": false,
        "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
        "usCents": 0,
        "usInitialCents": 0,
        "usLowCents": 0,
        "steamDeck": "playable",
        "steamAi": false
      }
    ]

    AppCard[]. Optional cc selects the display price region (us, eu, gb, …).

  • GET /api/v1/catalog/liteSlim catalog cards for list pages
    https://api.ludodb.com/api/v1/catalog/lite?cc=us
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "type": "game",
        "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
        "developers": "Valve",
        "publishers": "Valve",
        "free": true,
        "mature": false,
        "requiredAge": 0,
        "tags": [
          "Action",
          "Free to Play",
          "Multiplayer"
        ],
        "currentPlayers": 499779,
        "peakAll": 1337437,
        "peak24h": 1337437,
        "delta24h": -58331,
        "reviewPositive": 8452479,
        "reviewNegative": 1387191,
        "releaseDate": "Aug 21, 2012",
        "comingSoon": false,
        "shortDescription": "",
        "usCents": 0,
        "usInitialCents": 0,
        "usLowCents": 0,
        "steamDeck": "playable",
        "steamAi": false,
        "dlc": [],
        "editions": []
      }
    ]

    Same titles as /catalog without descriptions, DLC, or editions. spark24 stays so list cards can draw the 24h sparkline.

  • GET /api/v1/catalog/ccuSummed in-game count over time
    https://api.ludodb.com/api/v1/catalog/ccu
    {
      "current": 4147266,
      "sampledAt": "2026-09-08T23:31:38Z",
      "series": [
        {
          "t": 1788660090,
          "v": 547351
        },
        {
          "t": 1788663690,
          "v": 612004
        }
      ]
    }

    Sum of sampled in-game counts. series is { t, v }[] with t in unix seconds. Default is all-time downsampled plus the last 7 days raw.

  • GET /api/v1/studio?name=Titles for one developer or publisher
    https://api.ludodb.com/api/v1/studio?name=Valve&cc=us
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "type": "game",
        "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
        "developers": "Valve",
        "publishers": "Valve",
        "free": true,
        "mature": false,
        "requiredAge": 0,
        "tags": [
          "Action",
          "Free to Play",
          "Multiplayer"
        ],
        "currentPlayers": 499779,
        "peakAll": 1337437,
        "peak24h": 1337437,
        "delta24h": -58331,
        "reviewPositive": 8452479,
        "reviewNegative": 1387191,
        "releaseDate": "Aug 21, 2012",
        "comingSoon": false,
        "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
        "usCents": 0,
        "usInitialCents": 0,
        "usLowCents": 0,
        "steamDeck": "playable",
        "steamAi": false
      }
    ]

    AppCard[] for one developer or publisher name. A name matches a whole studio token, not a substring. Ordered by in-game count, at most 120.

  • GET /api/v1/catalog/ccu?from=&to=Catalog in-game series, raw window (unix seconds, max 7 days)
    https://api.ludodb.com/api/v1/catalog/ccu?from=1788660090&to=1789264890
    {
      "current": 4147266,
      "sampledAt": "2026-09-08T23:31:38Z",
      "series": [
        {
          "t": 1788660090,
          "v": 547351
        },
        {
          "t": 1788663690,
          "v": 612004
        }
      ]
    }

    from and to are unix seconds. Window is at most 7 days. series is raw samples in that window. Omit both for the default series. current is still the latest catalog total.

  • GET /api/v1/policyNo-edit statement
    https://api.ludodb.com/api/v1/policy
    {
      "statement": "LudoDB does not hide, edit, or omit player counts or prices after ingest. Corrections are append-only.",
      "chartsEdited": false,
      "publisherOptOut": false,
      "operator": "Musical Pig LLC",
      "operatorUrl": "https://musical-pig.com",
      "recentIngests": [
        {
          "kind": "ingest",
          "count": 100,
          "fingerprint": "abc123",
          "note": "730",
          "at": "2026-09-08T00:00:00Z"
        }
      ]
    }
  • GET /api/v1/apps?q=Title search (max 80 characters)
    https://api.ludodb.com/api/v1/apps?q=counter
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "type": "game",
        "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
        "developers": "Valve",
        "publishers": "Valve",
        "free": true,
        "mature": false,
        "requiredAge": 0,
        "tags": [
          "Action",
          "Free to Play",
          "Multiplayer"
        ],
        "currentPlayers": 499779,
        "peakAll": 1337437,
        "peak24h": 1337437,
        "delta24h": -58331,
        "reviewPositive": 8452479,
        "reviewNegative": 1387191,
        "releaseDate": "Aug 21, 2012",
        "comingSoon": false,
        "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
        "usCents": 0,
        "usInitialCents": 0,
        "usLowCents": 0,
        "steamDeck": "playable",
        "steamAi": false
      }
    ]

    AppCard[]. q is at most 80 characters. Add local=1 to skip the Steam store fallback.

  • GET /api/v1/export/apps.csvCSV dump
    https://api.ludodb.com/api/v1/export/apps.csv
    appid,name,currentPlayers,usCents
    730,Counter-Strike 2,499779,0
    

    text/csv snapshot, refreshed about every five minutes. Not JSON.

Charts12Most played, gems, movers, sales
  • GET /api/v1/charts/playersMost played (top 100)
    https://api.ludodb.com/api/v1/charts/players
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "type": "game",
        "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
        "developers": "Valve",
        "publishers": "Valve",
        "free": true,
        "mature": false,
        "requiredAge": 0,
        "tags": [
          "Action",
          "Free to Play",
          "Multiplayer"
        ],
        "currentPlayers": 499779,
        "peakAll": 1337437,
        "peak24h": 1337437,
        "delta24h": -58331,
        "reviewPositive": 8452479,
        "reviewNegative": 1387191,
        "releaseDate": "Aug 21, 2012",
        "comingSoon": false,
        "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
        "usCents": 0,
        "usInitialCents": 0,
        "usLowCents": 0,
        "steamDeck": "playable",
        "steamAi": false
      }
    ]

    AppCard[] — top 100 by current players.

  • GET /api/v1/charts/gemsHidden gems filter
    https://api.ludodb.com/api/v1/charts/gems
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "type": "game",
        "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
        "developers": "Valve",
        "publishers": "Valve",
        "free": true,
        "mature": false,
        "requiredAge": 0,
        "tags": [
          "Action",
          "Free to Play",
          "Multiplayer"
        ],
        "currentPlayers": 499779,
        "peakAll": 1337437,
        "peak24h": 1337437,
        "delta24h": -58331,
        "reviewPositive": 8452479,
        "reviewNegative": 1387191,
        "releaseDate": "Aug 21, 2012",
        "comingSoon": false,
        "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
        "usCents": 0,
        "usInitialCents": 0,
        "usLowCents": 0,
        "steamDeck": "playable",
        "steamAi": false
      }
    ]

    AppCard[] after the hidden-gems filter.

  • GET /api/v1/charts/lookupsMost opened titles (hashed unique-ish views)
    https://api.ludodb.com/api/v1/charts/lookups
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
        "hits": 16,
        "firstAt": "2026-09-06T21:00:00Z",
        "lastAt": "2026-09-08T23:00:00Z",
        "hours": 11,
        "peakHourHits": 3
      }
    ]

    Unique-ish game-page opens. Query text and IPs are not stored.

  • GET /api/v1/charts/searchesTitles that appeared in search (query text is not stored)
    https://api.ludodb.com/api/v1/charts/searches
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
        "hits": 4,
        "firstAt": "2026-09-07T18:00:00Z",
        "lastAt": "2026-09-08T22:00:00Z",
        "hours": 3,
        "peakHourHits": 2
      }
    ]

    Titles that appeared in search. The search string is not stored.

  • GET /api/v1/charts/moversUnusual in-game counts versus that title's typical hour of week
    https://api.ludodb.com/api/v1/charts/movers
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
        "currentPlayers": 900000,
        "expected": 620000,
        "residualPct": 45,
        "delta24h": 12000,
        "steamDeck": "playable",
        "mature": false,
        "reviewPositive": 8452479,
        "reviewNegative": 1387191,
        "reviewDelta": 420
      }
    ]

    Ranked by residual after that title's typical hour of week, not raw percent. Titles below about 150 in-game stay out. No extra Steam calls.

  • GET /api/v1/charts/new?days=90Released titles in a lookback (7, 30, 90, 182, or 365 days)
    https://api.ludodb.com/api/v1/charts/new?days=90
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "releaseDate": "Aug 21, 2012",
        "currentPlayers": 499779
      }
    ]

    Released titles whose store date falls in the lookback. Coming soon stays out. Days are 7, 30, 90, 182, or 365.

  • GET /api/v1/charts/deals?cc=usOn-sale titles for a region (top 200)
    https://api.ludodb.com/api/v1/charts/deals?cc=us
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "priceCents": 0,
        "priceInitialCents": 0
      }
    ]

    Current sampled discounts for the region, highest percent first. Not the full catalog.

  • GET /api/v1/charts/upcomingComing-soon titles
    https://api.ludodb.com/api/v1/charts/upcoming
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "comingSoon": true,
        "releaseDate": "Dec 1, 2026"
      }
    ]

    Sampled titles marked coming soon. Dates can be placeholders.

  • GET /api/v1/charts/trackedPlayer-poll bands and the tracked in-game ladder
    https://api.ludodb.com/api/v1/charts/tracked
    {
      "counts": [
        150,
        1850,
        3000,
        10000
      ],
      "titles": [
        {
          "appid": 730,
          "name": "Counter-Strike 2",
          "currentPlayers": 499779
        }
      ]
    }

    Poll-band counts for the tracked ladder, plus every title on that ladder by people in-game.

  • GET /api/v1/salesSale calendar
    https://api.ludodb.com/api/v1/sales
    [
      {
        "name": "Steam Autumn Sale 2026",
        "kind": "seasonal",
        "starts": "2026-10-01T00:00:00Z",
        "ends": "2026-10-08T00:00:00Z",
        "source": "https://partner.steamgames.com/doc/marketing/upcoming_events"
      }
    ]
  • GET /api/v1/deals?cc=usCurrent discounts for a region
    https://api.ludodb.com/api/v1/deals?cc=us
    [
      {
        "appid": 570,
        "name": "Dota 2",
        "cc": "us",
        "currency": "USD",
        "cents": 0,
        "initialCents": 0,
        "discount": 0
      }
    ]

    cc is a store region. cents are the current price in the smallest currency unit.

  • GET /api/v1/updatesRecent depot build IDs
    https://api.ludodb.com/api/v1/updates
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "buildId": 20458890,
        "branch": "public",
        "at": "2026-08-24T23:39:20Z"
      }
    ]

    Recent depot build IDs LudoDB has sampled.

One title13Card, players, prices, news
  • GET /api/v1/apps/{id}App card
    https://api.ludodb.com/api/v1/apps/730
    {
      "appid": 730,
      "name": "Counter-Strike 2",
      "type": "game",
      "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
      "developers": "Valve",
      "publishers": "Valve",
      "free": true,
      "mature": false,
      "requiredAge": 0,
      "tags": [
        "Action",
        "Free to Play",
        "Multiplayer"
      ],
      "currentPlayers": 499779,
      "peakAll": 1337437,
      "peak24h": 1337437,
      "delta24h": -58331,
      "reviewPositive": 8452479,
      "reviewNegative": 1387191,
      "releaseDate": "Aug 21, 2012",
      "comingSoon": false,
      "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
      "usCents": 0,
      "usInitialCents": 0,
      "usLowCents": 0,
      "steamDeck": "playable",
      "steamAi": false
    }

    Optional ?cc=us for regional price fields. Live objects may also include dlc, editions, and spark24.

  • GET /api/v1/apps/{id}/similarSame tags, similar review volume
    https://api.ludodb.com/api/v1/apps/730/similar
    [
      {
        "appid": 730,
        "name": "Counter-Strike 2",
        "type": "game",
        "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
        "developers": "Valve",
        "publishers": "Valve",
        "free": true,
        "mature": false,
        "requiredAge": 0,
        "tags": [
          "Action",
          "Free to Play",
          "Multiplayer"
        ],
        "currentPlayers": 499779,
        "peakAll": 1337437,
        "peak24h": 1337437,
        "delta24h": -58331,
        "reviewPositive": 8452479,
        "reviewNegative": 1387191,
        "releaseDate": "Aug 21, 2012",
        "comingSoon": false,
        "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…",
        "usCents": 0,
        "usInitialCents": 0,
        "usLowCents": 0,
        "steamDeck": "playable",
        "steamAi": false
      }
    ]

    Slim AppCard[]. Shares at least one of this title's first three store tags and the same review-count band. A mechanical overlap, not a recommendation.

  • GET /api/v1/apps/{id}/playersPlayer series
    https://api.ludodb.com/api/v1/apps/730/players
    {
      "appid": 730,
      "current": 492943,
      "peak24h": 1337437,
      "peakAll": 1337437,
      "intervalMs": 60000,
      "sampledAt": "2026-09-08T23:31:00Z",
      "steam": {
        "exhausted": false
      },
      "gapFill": {
        "active": false,
        "since": null,
        "series": []
      },
      "onLadder": true,
      "rank": 1,
      "ladderMs": 300000,
      "series": [
        {
          "t": 1788660090,
          "v": 547351
        },
        {
          "t": 1788663690,
          "v": 612004
        }
      ]
    }

    series is { t, v }[] (t unix seconds, v in-game count). Default is all-time downsampled to about 2000 min/max points plus the last 7 days at full poll cadence. gapFill.active is true only when catalog-wide Steam samples are stale; the fill series is an hour-of-week guess, not a live count and not a maintenance zero. intervalMs is the open-page sample, often 60s. rank and ladderMs match /rank and are the chart timer.

  • GET /api/v1/apps/{id}/rankCCU rank and the chart update timer (5m, 15m, 1h, 4h)
    https://api.ludodb.com/api/v1/apps/960910/rank
    {
      "appid": 960910,
      "rank": 1842,
      "onLadder": true,
      "ladderMs": 900000,
      "band": "15m"
    }

    Chart update timer. rank is the 1-based in-game place. ladderMs is the rank poll: 300000 (ranks 1–150), 900000 (151–2000), 3600000 (2001–5000), 14400000 (5001–15000). Off the ladder: rank 0, onLadder false, ladderMs 0, band out. This route does not watch the title and does not take a Steam sample. The 60s interval on /players is the open-page sample, not this timer.

  • GET /api/v1/apps/{id}/players?from=&to=Player series, raw window (unix seconds, max 7 days)
    https://api.ludodb.com/api/v1/apps/730/players?from=1788660090&to=1789264890
    {
      "appid": 730,
      "current": 492943,
      "peak24h": 1337437,
      "peakAll": 1337437,
      "intervalMs": 60000,
      "sampledAt": "2026-09-08T23:31:00Z",
      "steam": {
        "exhausted": false
      },
      "series": [
        {
          "t": 1788660090,
          "v": 547351
        },
        {
          "t": 1788663690,
          "v": 612004
        }
      ]
    }

    from and to are unix seconds. Window is at most 7 days. series is raw samples in that window. Omit both for the default series. Same JSON shape as /players.

  • GET /api/v1/apps/{id}/forecast?horizon=7dPlayer estimates (24h, 7d, 14d, 21d, 30d)
    https://api.ludodb.com/api/v1/apps/730/forecast?horizon=24h
    {
      "ok": true,
      "horizonHours": 24,
      "lines": {
        "fit": [
          {
            "t": 1788660090,
            "v": 547351
          },
          {
            "t": 1788663690,
            "v": 612004
          }
        ],
        "low": [
          {
            "t": 1788660090,
            "v": 547351
          },
          {
            "t": 1788663690,
            "v": 612004
          }
        ],
        "likely": [
          {
            "t": 1788660090,
            "v": 547351
          },
          {
            "t": 1788663690,
            "v": 612004
          }
        ],
        "high": [
          {
            "t": 1788660090,
            "v": 547351
          },
          {
            "t": 1788663690,
            "v": 612004
          }
        ],
        "tags": [
          {
            "t": 1788660090,
            "v": 547351
          },
          {
            "t": 1788663690,
            "v": 612004
          }
        ]
      },
      "mapePct": 14,
      "missPct": 18,
      "trajectory": "steady",
      "peak": {
        "t": 1788746490,
        "v": 512000
      },
      "model": {
        "now": 499779,
        "daily": 0.012,
        "sigma": 0.14,
        "mapePct": 14,
        "season": "title",
        "trajectory": "steady",
        "kind": "steady"
      }
    }

    horizon is 24h, 7d, 14d, 21d, or 30d. ok is false with reason short_history when too few samples exist (horizonHours is still set). tags is omitted without a tag cohort. fit is the same model drawn on hours already sampled. trajectory is launch, sale, growth, or steady. model.kind is fade (launch and post-discount: also floor and halfLifeHours), growth (climbing weeks: also ceiling), or steady. mapePct is the hour-of-week residual as a percent, used for the low/high band. missPct is a 48-hour walk-forward miss on titles with enough history, not an accuracy badge. peak is the highest likely point in the chosen window. These lines are guesses, not Valve forecasts.

  • GET /api/v1/apps/{id}/pricesRegional prices
    https://api.ludodb.com/api/v1/apps/730/prices
    [
      {
        "cc": "us",
        "currency": "USD",
        "cents": 0,
        "initialCents": 0,
        "discount": 0,
        "sampledAt": "2026-09-06T02:03:08Z"
      }
    ]

    One row per sampled store region. cents are in the smallest currency unit.

  • GET /api/v1/apps/{id}/prices/history?cc=usPrice history + historical low
    https://api.ludodb.com/api/v1/apps/730/prices/history?cc=us
    {
      "appid": 730,
      "cc": "us",
      "lowCents": 0,
      "lowAt": "2026-09-05T22:01:00Z",
      "series": [
        {
          "t": 1788660090,
          "v": 0
        },
        {
          "t": 1788746490,
          "v": 0
        }
      ]
    }

    cc is required. series v is cents. lowCents is the lowest sampled price in that region. Default series is all-time downsampled plus the last 7 days raw.

  • GET /api/v1/apps/{id}/prices/history?cc=us&from=&to=Price history, raw window (unix seconds, max 7 days)
    https://api.ludodb.com/api/v1/apps/730/prices/history?cc=us&from=1788660090&to=1789264890
    {
      "appid": 730,
      "cc": "us",
      "lowCents": 0,
      "lowAt": "2026-09-05T22:01:00Z",
      "series": [
        {
          "t": 1788660090,
          "v": 0
        },
        {
          "t": 1788746490,
          "v": 0
        }
      ]
    }

    from and to are unix seconds. Window is at most 7 days. series is raw samples in that window. Omit both for the default series. cc is still required. lowCents stays the all-time sampled low.

  • GET /api/v1/apps/{id}/buildsDepot build history
    https://api.ludodb.com/api/v1/apps/730/builds
    [
      {
        "buildId": 20458890,
        "branch": "public",
        "description": "",
        "timeUpdated": "2026-08-24T23:39:20Z"
      }
    ]
  • GET /api/v1/apps/{id}/newsPublic Steam news
    https://api.ludodb.com/api/v1/apps/730/news
    [
      {
        "gid": "1841579228676851",
        "title": "Counter-Strike 2 Update",
        "url": "https://steamcommunity.com/games/730/announcements",
        "at": "2026-08-24T23:39:20Z",
        "feed": "Community Announcements"
      }
    ]
  • GET /api/v1/apps/{id}/reviews?lang=englishReview summary
    https://api.ludodb.com/api/v1/apps/730/reviews?lang=english
    {
      "recent": {
        "desc": "Very Positive",
        "total": 9845359,
        "positive": 8456710,
        "negative": 1388649
      },
      "language": {
        "desc": "Very Positive",
        "total": 2610407,
        "positive": 2245824,
        "negative": 364583
      },
      "languageCode": "english",
      "languageLabel": "English reviews"
    }

    lang is a Steam review language code, default english.

  • GET /api/v1/apps/{id}/regionsRegion-locked SKUs
    https://api.ludodb.com/api/v1/apps/730/regions
    [
      {
        "cc": "us",
        "available": true,
        "reason": ""
      }
    ]

    Region-locked SKU flags LudoDB has sampled.