{"id":16535912,"url":"https://github.com/offish/tf2-arbitrage","last_synced_at":"2025-10-28T12:30:17.929Z","repository":{"id":232801326,"uuid":"781847107","full_name":"offish/tf2-arbitrage","owner":"offish","description":"Arbitrage TF2 items on trading sites to profit","archived":false,"fork":false,"pushed_at":"2024-05-06T05:46:51.000Z","size":22,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-05-06T06:39:59.891Z","etag":null,"topics":["arbitrage","arbitrage-bot","steambot","team-fortress-2","tf2","tf2-trading-bot"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/offish.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-04T06:42:00.000Z","updated_at":"2024-05-06T05:46:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"0ce5773b-485d-48cf-9837-96db30b0bbd3","html_url":"https://github.com/offish/tf2-arbitrage","commit_stats":null,"previous_names":["offish/tf2-arbitrage"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/offish%2Ftf2-arbitrage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/offish%2Ftf2-arbitrage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/offish%2Ftf2-arbitrage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/offish%2Ftf2-arbitrage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/offish","download_url":"https://codeload.github.com/offish/tf2-arbitrage/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219859543,"owners_count":16556035,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arbitrage","arbitrage-bot","steambot","team-fortress-2","tf2","tf2-trading-bot"],"created_at":"2024-10-11T18:29:13.916Z","updated_at":"2025-10-28T12:30:17.286Z","avatar_url":"https://github.com/offish.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tf2-arbitrage\r\n[![License](https://img.shields.io/github/license/offish/tf2-arbitrage.svg)](https://github.com/offish/tf2-arbitrage/blob/master/LICENSE)\r\n[![Stars](https://img.shields.io/github/stars/offish/tf2-arbitrage.svg)](https://github.com/offish/tf2-arbitrage/stargazers)\r\n[![Issues](https://img.shields.io/github/issues/offish/tf2-arbitrage.svg)](https://github.com/offish/tf2-arbitrage/issues)\r\n[![Size](https://img.shields.io/github/repo-size/offish/tf2-arbitrage.svg)](https://github.com/offish/tf2-arbitrage)\r\n[![Discord](https://img.shields.io/discord/467040686982692865?color=7289da\u0026label=Discord\u0026logo=discord)](https://discord.gg/t8nHSvA)\r\n[![Code style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\r\n\r\nBot for arbitraging TF2 items on different sites for profit.\r\n\r\nThis bot will find deals, request trades and notify [tf2-express](https://github.com/offish/tf2-express) to accept.\r\n\r\n## Donate\r\n- BTC: `bc1qntlxs7v76j0zpgkwm62f6z0spsvyezhcmsp0z2`\r\n- [Steam Trade Offer](https://steamcommunity.com/tradeoffer/new/?partner=293059984\u0026token=0-l_idZR)\r\n\r\nYou can reach me at [Steam](https://steamcommunity.com/id/confern), \r\nmy [Discord server](https://discord.gg/t8nHSvA) \r\nor [Discord profile](https://discord.com/users/252183247843229696\u003e`).\r\n\r\n## How does it work?\r\n- Using a Firefox profile, login to the sites listed below\r\n- Will check MongoDB for saved cookies\r\n- If outdated, get new cookies using `Selenium`\r\n- Save cookies, such that `requests` can imitate a legitimate internal API request \r\n- Fetches prices from Prices.tf as a comparison basis\r\n- Fetches prices from STN, taking stock into consideration\r\n- Fetches prices from Quicksell.store\r\n- Fetches prices from Sfuminator\r\n- Compares prices between sites, and finds deals\r\n- If a Prices.tf price is included in a deal, check Backpack.TF for buyers/sellers with a matching price\r\n- If buyer/seller is from Backpack.TF, get their Trade URL\r\n- Save up to 3 pages of classifieds for Trade URLs, so they can be used later (can skip fetching)\r\n- Send deals using a TCP socket so `tf2-express` can act on the trades\r\n- When `tf2-express` has accepted a \"buy deal\" trade offer, send the \"sell deal\" request to one of the trading sites (different for Backpack.TF)\r\n- Repeat step 6-16 (fetching Prices.tf is uneccessary when we are connected to the websocket)\r\n\r\n## Supported sites\r\n- Backpack.TF\r\n- STNTrading.eu\r\n- Quicksell.store\r\n- Sfuminator.tf\r\n\r\nScrap.TF is not supported, due to their ToS.\r\n\r\n## Installation\r\n- Clone the repo and install the packages `pip install -r requirements.txt`\r\n- The bot uses MongoDB, so `pymongo` needs to work\r\n- Install `geckodriver`\r\n\r\n## Setup\r\n- Have a `tf2-express` bot setup and ready to go\r\n- If `geckodriver` is not added to PATH, this needs to be specified in `GECKODRIVER_EXECUTABLE_PATH` in the [config](/tf2_arbitrage/config.py). If it is in PATH, do not change this value\r\n- Create a new Firefox profile and login to all the sites listed above (STN is not neccessary). Copy the `Root Directory` of this Firefox profile. This is your `FIREFOX_PROFILE_PATH` in the [config](/tf2_arbitrage/config.py)\r\n- Register a STN API key at https://stntrading.eu/dev/apikey\r\n- Make sure you have credits for your API calls. This can be increased at https://stntrading.eu/dev/credits\r\n\r\n## Configuration\r\n- Specify `STEAM_ID` in the [config](/tf2_arbitrage/config.py), this has to match the SteamID64 for the owner of the STN API key \r\n- Other optional modifications to the [config](/tf2_arbitrage/config.py)\r\n\r\n## Running\r\n- Start `tf2-arbitrage` by running `python main.py`\r\n- Start a `tf2-express` instance\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foffish%2Ftf2-arbitrage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foffish%2Ftf2-arbitrage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foffish%2Ftf2-arbitrage/lists"}