npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

scm-price-history

v0.0.3

Published

Accessing the price history of an item

Downloads

21

Readme

SCM Price History Module version Minified size

Accessing the price history of an item on the Steam Community Market (SCM) can be helpful for seeing the general trend of sales for an item. This includes the volume sold and the median price of sales.

However, this data isn't as easily accessible.

Contents

Installation

npm install scm-price-history

Usage

To find the item The Elite Mr. Muhlik | Elite Crew from CS:GO (appid 730), do

getItemOnSCM("The Elite Mr. Muhlik | Elite Crew", "730").then((item) => {
    console.log(item.getItemInfo()); // Returns item information
    console.log(item.getPriceHistory()); // Returns price history
    console.log(item.getPriceSnapshots()); // Returns price snapshots
});

SCMItem

The SCMItem class returned from getItemOnSCM has the following methods:

getItemInfo()

Returns general information on the item to be able to display it. It follows the format

{
    market_hash_name: string,

    appid: number, // Should be the same as the appid value you have entered

    icon_url: string, // A direct url for displaying an image of the url

    type: string, // A short tagline describing the item's type.

    descriptions: {
        type: string, // Either `html` or `text` to denote how to render
        value: string, // Text - will be `` if a line break is wanted
        color?: string // Optional key of the color of the description line
    }[];
}

getPriceSnapshots()

Returns an array of snapshots. It follows the format

{
    time: number, // Unixtime
    value: number, // USD value rounded to 3 d.p
    volume: number // Integer
}[]

getPriceHistory()

Returns a map of snapshots, indexed by time. It follows the format

{
    [time: number]: { 
        time: number, // Unixtime
        value: number, // USD value rounded to 3 d.p
        volume: number // Integer
    }
}

Context

Accessing the price history of an item on the Steam Community Market (SCM) can be helpful for seeing the general trend of sales for an item. This includes the volume sold and the median price of sales.

However, this data isn't as easily accessible.

Process

It can be done manually via accessing the item's market page, an example being

https://steamcommunity.com/market/listings/730/The%20Elite%20Mr.%20Muhlik%20%7C%20Elite%20Crew

or programmatically in JSON form by doing a GET request to

https://steamcommunity.com/market/pricehistory/?appid=APPID&market_hash_name=MARKET_HASH_NAME

with a logged-in steamcommunity.com session.

A general response from the API link /market/pricehistory/ is:

{
    "success":true,
    "price_prefix":"\u00a3",
    "price_suffix":"",
    "prices":[
        ["Nov 27 2013 01: +0",12.767,"1"],
        ["Nov 29 2013 01: +0",12.929,"2"],
        ["Dec 01 2013 01: +0",7.777,"1"],
        ["Dec 03 2013 01: +0",7.173,"2"],
        ["Dec 04 2013 01: +0",6.586,"2"]
    ]
}

Each array inside the prices follows the structure of [Date, MedianSalesPrice, Volume] in which:

  • Date details the date/time in the logged-in user's set timezone
  • MedianSalesPrice details the median sales price in the logged-in user's native currency, rounded to 3 decimal places for slack with currency conversions to the user's currency.
  • Volume details the number of items sold within the last price evaluation. In the above case, they all detail the number of that item sold in the last 24 hours, however, the API will normally provide entries that describe the hourly sales for each hour of the last 24 hours.

The Problem

Accessing https://steamcommunity.com/market/pricehistory/?appid=APPID&market_hash_name=MARKET_HASH_NAME on a clean slate session will load the following:

[]

For those who are interested in retrieving the price history of an item on SCM programmatically, you will need to provide login credentials and login to steamcommunity.com with a session to be able to use the API, however, this can be circumvented.

Furthermore, for those who are logged into their own account, the API will always return prices in the currency native to you, meaning that for a UK user using GBP, you can not alter the API in any way to see the price history of an item in USD, one of the most popular currencies used on the platform.

The Solution

A non-user can view an item's market page, which shows the item's price history as a line graph.

On a clean window without any previous cookies or user sessions, you can view the line graph shown at https://steamcommunity.com/market/listings/730/The%20Elite%20Mr.%20Muhlik%20%7C%20Elite%20Crew that details the previous price history of the item.

This shows that either:

  1. The item price history data is sourced from a public API that doesn't require a logged-in session, with the rendering being done on the client side.
  2. The item price history data is sourced internally, and the data is embedded as a JavaScript variable into the page so that the line graph is rendered on client-side.
  3. The item price history data is sourced internally, and the line graph is rendered on the server-side and the page is delivered to us.

These are ranked in order of how easy it is to come up with a solution to circumvent the problem of requiring a user session.

  • In the case of 1, we can simply look at the source code and make use of that public API url link instead of what is done above, without needing any credentials.
  • 2 can be solved by finding the data embedded in the returned source code of the page and parsing to get the data.
  • With server-side rendering delivering us a page that has done all of the calculations of what HTML elements to show, 3 is a lot trickier. However, once one knows how each datapoint in the dataset is rendered as a HTML element on the line graph, a function can be written to extract the data out from each HTML element.

In the case of an item's market page, looking at the source code, case 2 applies.

Image showing that the data is embedded in the source code of an item's market page

This module applies a solution that extracts the price history data embedded in the source code.