All Projects → woctezuma → Steam Market

woctezuma / Steam Market

Licence: mit
Find arbitrages on the Steam Market.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Steam Market

SteamAuthOOP
OpenID-Login through Steam for your website
Stars: ✭ 32 (+28%)
Mutual labels:  steam, steam-api
Archisteamfarm
C# application with primary purpose of idling Steam cards from multiple accounts simultaneously.
Stars: ✭ 7,219 (+28776%)
Mutual labels:  steam-api, steam
Chat-LoggerPP
Steam Chat Logger
Stars: ✭ 13 (-48%)
Mutual labels:  steam, steam-api
idle master extended
🃏 Get your Steam Trading Cards the Fast Way (Fast Mode Extension 🚀)
Stars: ✭ 1,771 (+6984%)
Mutual labels:  steam, steam-api
steam-stylegan2
Train a StyleGAN2 model on Colaboratory to generate Steam banners.
Stars: ✭ 30 (+20%)
Mutual labels:  steam, steam-api
csgo-cli
CS:GO Console shows your user account, stats and latest matches. It also uploads demo sharecodes to csgostats.gg.
Stars: ✭ 31 (+24%)
Mutual labels:  steam, steam-api
steam.py
An async python wrapper to interact with the Steam API and its CMs
Stars: ✭ 74 (+196%)
Mutual labels:  steam, steam-api
steam community market
Get item prices and volumes from the Steam Community Market using Python 3
Stars: ✭ 24 (-4%)
Mutual labels:  steam, steam-api
steampak
Nicely packed tools to work with Steam APIs
Stars: ✭ 21 (-16%)
Mutual labels:  steam, steam-api
Steamworks.Net-MonoGame-Integration
This repo is for everyone who is about to integrate the Steamworks.Net.dll into a MonoGame project. It shows some Steamworks.Net features and how easy it is to integrate it into a MonoGame project.
Stars: ✭ 30 (+20%)
Mutual labels:  steam, steam-api
steamworks
Steamworks API wrapper for Go
Stars: ✭ 26 (+4%)
Mutual labels:  steam, steam-api
SteamCMD-AppID-List
Complete Steam AppID List
Stars: ✭ 12 (-52%)
Mutual labels:  steam, steam-api
CreamInstaller
Automatically finds all installed Steam, Epic and Ubisoft games with their respective DLC-related DLL locations on the user's computer, parses SteamCMD, Steam Store and Epic Games Store for user-selected games' DLCs, then provides a very simple graphical interface utilizing the gathered information.
Stars: ✭ 274 (+996%)
Mutual labels:  steam, steam-api
steam-data
A simple data project for Steam data
Stars: ✭ 29 (+16%)
Mutual labels:  steam, steam-api
g-steam
steam web api for golang
Stars: ✭ 22 (-12%)
Mutual labels:  steam, steam-api
SteamAchievementNotifier
Steam Achievement Notifier is an Electron application that shows a customisable notification when you unlock any Steam Achievement! It uses the Steam Web API to track achievement stats in real time, and displays an achievement summary within the notification.
Stars: ✭ 77 (+208%)
Mutual labels:  steam, steam-api
steam-group-members
A node module to get a steam groups members list using promises.
Stars: ✭ 17 (-32%)
Mutual labels:  steam, steam-api
steam-openid-connect-provider
Steam OpenID Connect Identity Provider (IdP)
Stars: ✭ 40 (+60%)
Mutual labels:  steam, steam-api
SteamTradeOffersBot
SteamBot fork that provides an easy-to-use Trade Offer library and a true generic inventory interface.
Stars: ✭ 45 (+80%)
Mutual labels:  steam, steam-api
download-steam-reviews
Download Steam reviews for any game. Available on PyPI.
Stars: ✭ 26 (+4%)
Mutual labels:  steam, steam-api

Steam Market

Build status Updates Python 3 Code coverage Code Quality

This repository contains Python code to find arbitrages on the Steam Market.

Cover: ranking of market arbitrages

Arbitrages could consist in:

  • purchasing gems to craft booster packs, which are then immediately sold for more than their crafting cost,
  • purchasing items, typically foil cards, which are then immediately turned into more gems than they are worth,
  • purchasing games in order to produce the corresponding booster packs, with total profit greater than the game price,
  • turning normal cards into badges, if the expected value is positive, to create items worth more than the badge cost.

Requirements

  • Install the latest version of Python 3.X.
  • Install the required packages:
pip install -r requirements.txt

Data acquisition

Cookie

To relax the rate limits enforced by Steam API, fill-in your cookie information in a file called personal_info.json:

  1. To do so, make sure you are connected to your Steam account on a Steam Community page, e.g. Steam Market.
    steam community

  2. Press <Shift-F9> in your web browser to access the storage section of the developer tools.
    storage section

  3. Use the filtering option (in the top right of the storage section) to find the cookie value for steamLoginSecure.
    filter for steamLoginSecure

  4. Copy-paste this cookie value into a new file called personal_info.json, which will be read by personal_info.py.

    {
      "steamLoginSecure": "PASTE_YOUR_COOKIE_VALUE_HERE"
    }  
    

NB: In the future, if you notice that the program bugs out due to seemingly very strict rate limits, then it may be a sign that the cookie value tied to your session has changed. In this case, try to fill-in your cookie information with its new value.

NB²: If you want to automate the creation and sale of booster packs, you may need:

  1. to have a mobile authenticator app running in the background and auto-confirming market transactions,
  2. to fill-in more cookie information. I have been using the following entries, but you might not need to use all of them. Except for steamLoginSecure and sessionid, the values of the other entries are set in stone and do not need to be updated afterwards.
    {
      "browserid": "PASTE_YOUR_COOKIE_VALUE_HERE",
      "steamMachineAuth_PASTE_YOUR_STEAM_ID_HERE": "PASTE_YOUR_COOKIE_VALUE_HERE",
      "steamRememberLogin": "PASTE_YOUR_COOKIE_VALUE_HERE",
      "sessionid": "PASTE_YOUR_COOKIE_VALUE_HERE",
      "steamLoginSecure": "PASTE_YOUR_COOKIE_VALUE_HERE"
    }
    

Gem cost for crafting Booster Packs

To have access to the gem cost for crafting Booster Packs, you will need to manually copy information available here.

There are two solutions:

  • solution A is my original solution, but it requires a browser extension called Augmented Steam,
  • solution B is a more recent solution, and does not require any third-party browser extension.

Solution A

  1. Install the browser extension called Augmented Steam, so that the number of gems required to craft a Booster Pack appears in the drop-down menu:
    browser extension

  2. Then, right-click the drop-down menu and "inspect" the corresponding HTML code in your browser:
    drop-down menu

  3. Copy the following line and paste it to data/booster_game_creator.txt:
    inspection

  4. Add line-breaks, so that the file is formatted in the following way:
    formatting

    For instance, with Visual Studio Code, press <Ctrl-H> and run:
    Visual Studio Code: replace

  5. Strip the following unnecessary lines:

    • three lines (including an empty line) at the beginning:
    <select id="booster_game_selector">
                            <option value="">Select a game...</option>
     
    
    • one line at the end:
    </select>
    

Solution B

Alternatively, if you wish not to install any browser extension:

  1. Press <Ctrl-U> to display the HTML code of the Booser Creation webpage.

  2. At the end of the HTML code, find and copy the line below CBoosterCreatorPage.Init:
    javascript list of games

  3. Paste the line to data/booster_game_creator_from_javascript.txt.

  4. Strip mentions of packs unavailable because they were crafted less than 24 hours ago. For instance:

    {"appid":996580,"name":"Spyro\u2122 Reignited Trilogy","series":1,"price":"400",
    "unavailable":true,"available_at_time":"4 Sep @ 7:06pm"}
    

    should be replaced with:

    {"appid":996580,"name":"Spyro\u2122 Reignited Trilogy","series":1,"price":"400"}
    

    To do so, with Visual Studio Code, press <Ctrl-H> and remove occurences of :
    Visual Studio Code: remove mentions of unavailability

    ,"unavailable":true,"available_at_time":"[\w ]*@[\w :]*"
    

Usage

  • To parse all the options to craft 'Booster Packs', for the games you own, run:
python parsing_utils.py
  • To retrieve all the listings of 'Booster Packs' on the Steam Market, along with the sell price and volume, run:
python market_search.py
python sack_of_gems.py
  • To retrieve i) the "item name id" of a listing, and ii) whether a crafted item would really be marketable, run:
python market_listing.py
  • To match listing hashes with badge creation details, run:
python market_utils.py
  • To retrieve the ask and bid for 'Booster Packs', run:
python market_order.py
  • To look for free games which i) feature trading cards (and thus crafting of booster packs), and ii) which I do not own, run:
python free_games_with_trading_cards.py
  • To create packs for a manual selection of games, e.g. if you want to create these specific packs every day, run:
python batch_create_packs.py
  • To list appIDs of interest for which we can under-cut the lowest sell order and still hope to make a profit:
python list_possible_lures.py
  • To look for games which i) are likely to have high bid orders for their booster packs, and ii) which I may not own yet, run:
python market_buzz_detector.py
  • To look for potentially profitable gambles on profile backgrounds and emoticons of "Common" rarity, run:
python market_gamble_detector.py
  • To find market arbitrages, e.g. sell a pack for more (fee excluded) than the cost to craft it (fee included), run:
python market_arbitrage.py
  • To find market arbitrages with foil cards, e.g. buy a foil card to turn it into more gems than its cost, run:
python market_arbitrage_with_foil_cards.py

Caveat: make sure to manually check the goo value of cards with a tool such as this bookmarklet. Indeed, if an arbitrage with foil cards looks too good to be true, it is likely that the goo value was bugged, because of a wrong item type. It can happen for instance if the goo value actually corresponds to emoticon or a profile background, and was then multiplied by 10 to get the value of the non-existent "foil" version of this emoticon or profile background.

Caveat²: the bookmarklet linked above does not account for foil versions, so you should multiply by 10 the goo value if you are interested in foil cards. You can check by yourself that the bookmarklet returns the same goo values for normal cards and for foil cards.

Drop-rate estimates

For the gamble detector, we are interested in drop-rate estimates, when crafting badges, for items of Common rarity.

Based on the data so far (239 crafed badges):

  • the drop-rates for Profile Backgrounds and for Emoticons are different (reject null hypothesis with 95% confidence),
  • conditionally to C/UC/R patterns, the drop-rates may be similar (fail to reject null hypothesis with 95% confidence).

where:

  • C/UC/R patterns are the numbers of Common/Uncommon/Rare items associated with each appID.

Therefore, we choose to estimate the drop-rates for Common rarity, conditionally to C/UC/R patterns.
The values hard-coded in drop_rate_estimates.py are the centers of the Wilson score intervals with 95% confidence.

Results

The Wiki shows a ranking of packs with high buy orders.

Rankings are also available for gambles with items of "Common" rarity, obtained after crafting a badge:

References

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].