Steam Control Panel

mode: core

Connection

Set this to your backend admin key (env STEAM_PANEL_ADMIN_KEY).
Accounts
Inventory
Settings
Profit
Pipeline
Trades
Logs
History
Prices
Inventory
Settings

Create Account from maFile

Live history

Recent buys, sells & reversals (auto-updating every 6s)

Accounts

Site Tools

csfloat
market.csgo
Seller controls moved to Strategy popup to avoid confusion.
waxpeer
Unfrozen balance auto-transfers to this SteamID every 5 min.
csgoempire
csmoney
skindeck
cs2dt
skinplace
skinswap
whitemarket
Full Setup
Runs sequentially: Trade URL → MarketCSGO key + pay pass → Waxpeer key + setup → CSGOEmpire key → WhiteMarket key. Skips already-set items.

Offer Tools (manual)

Inventory

Loading accounts...
All accounts

Profit

Realized profit is based on ItemPosition.sell_price - buy_price. Net applies site fee multipliers (MarketCSGO uses an extra ~6% here because sell_price is already reduced by ~5% at the source).
Bankroll deployed across all bots

VPS stats

CPU / load / RAM from the server (best-effort inside Docker).

Settings

Global pricing multipliers and strategy for inventory resale.
GET /inventory returns items when on
POST /buy accepts purchases when on

MarketCSGO

Global MarketCSGO-only settings.
Status: unknown
Sends unlocked balance_money to receiver when stats refresh runs.
Status: unknown

Waxpeer

Global Waxpeer pricing multipliers (relative to MarketCSGO min/max prices), fee rates for profit calculation, and transfer recipient.
1.0 = same as MarketCSGO min
1.0 = same as MarketCSGO max
0.96 = 4% sale fee
0.99 = 1% withdraw fee
Auto-transfers Waxpeer balance to this SteamID for all accounts.

CSGOEmpire Settings

Price multiplier and fee settings for CSGOEmpire listing prices.
1.63 = convert MarketCSGO max price to Empire coins
1.0 = no fee deduction

SkinDeck Settings

Global trader API key, price discount, and webhook secret for SkinDeck.
Status: not set
Status: not set
0.91 = MarketCSGO min_price -9%
Status: not set
1.07 = buy only if resell ≥7% profit
1.07 = buy only if resell ≥7% profit

CS2DT Settings

Global app-key and proxy for CS2DT marketplace API.
Status: not set
Status: not set

Skinplace Settings

Merchant API key (Bearer), secret key (SHA256 signature), public key, proxy, and price threshold for Skinplace.
Status: not set
Status: not set
Status: not set
Status: not set
0.90 = log if skinplace price >= 90% of MarketCSGO min

Auto pricer (MarketCSGO)

Prices tradable (no trade lock) inventory items across all accounts every ~3h, deduped by market_hash_name. Uses global env vars: STEAM_PANEL_AUTO_PRICER_MARKETCSGO_API_KEY and optional proxy/UA.
Emergency: Pauses seller tasks immediately (no external requests).

CS2DT Manual List (test)

List a single item on CS2DT at a specific price. Does NOT affect other marketplaces.

Profitable items JSON (results_market_buy.json)

Upload your latest results_market_buy.json so the strategy can place buy orders. This writes the shared file mounted into the containers.

Auto buyer (CSFloat buy orders)

Daily buy-order refresh across enabled accounts. Uses global owned-counts from inventory cache and allocates unique items per account.
n/a
High-velocity override (MarketCSGO): if avg daily sales in last 7d is above threshold AND final_profit >= threshold, desired qty is forced to the configured value (orders are still placed with qty <= 2).

Market buy pipeline (parser)

Runs market_buy_pipeline.py to generate results_market_buy.json. Configure API keys/proxies here; Auto buyer uses the generated JSON.

Auto buyer LOW (cheap items, $3-$15)

Separate auto-buyer for accounts with buyer_type = low. Uses its own pipeline, API keys, and proxies.
n/a

Market buy pipeline LOW (parser, $3-$15)

Separate pipeline for the low-price lane. Generates results_market_buy_low.json.

CS.Money Parser HIGH

Scans main pipeline items on cs.money. Buyer is set per-account in Accounts tab.
n/a

CS.Money Parser LOW

Scans low pipeline items on cs.money. Buyer is set per-account in Accounts tab.
n/a

SkinSwap Parser HIGH

Scans SkinSwap inventory for items cheaper than pipeline max_buy_price (high lane, hourly).
n/a

SkinSwap Parser LOW

Scans SkinSwap inventory for items cheaper than pipeline max_buy_price (low lane, hourly).
n/a

SkinSwap Buyer HIGH

Buys matched items from SkinSwap parser results (high lane). Enable buyer per-account in Accounts tab.
n/a

SkinSwap Buyer LOW

Buys matched items from SkinSwap parser results (low lane). Enable buyer per-account in Accounts tab.
n/a

SkinsBack — Project credentials

SkinsBack is a project-level integration: ONE Client ID + Client Secret + balance shared across ALL accounts. Per-account toggles + budget caps live in the Accounts tab.

SkinsBack buyer HIGH

Reads matches from the market_buy_pipeline HIGH lane and buys items where SkinsBack price ≤ max_buy_price and final_profit ≥ threshold. Runs every interval minutes; per-account budget caps are enforced.
n/a

SkinsBack buyer LOW

Same as HIGH but reads from market_buy_pipeline_low for cheap items.
n/a

Logs

Loading accounts...
All accounts

Pipeline vs Inventory

Trade History

Trade Time Offer ID Trade ID Dir Account Marketplace Offer State Trade Status Items

CSGORoll Trade History

Parser Status

Loading...

Rust Price Index

CS.Deals → TradeIt Arbitrage

Items where TradeIt wants ≥2 more stock. % = TradeIt deposit / CS.Deals buy. Higher % = more profitable.

TradeIt Buy → CS.Deals Sell

Buy on TradeIt, sell on CS.Deals. % = CS.Deals sell / TradeIt buy. Higher = more profitable. Items with ≥3 sales in 7d.

CS.Deals Balance

Click Refresh to load

CS.Deals Inventory

Use buttons to withdraw items or accept pending Steam trade offers.

Rust Inventory (appid 252490)

Set a min price to list an item on SkinDeck (when SkinDeck is enabled for the account). Leave blank to unlist. Sold or missing items are auto-removed on the next sync.
Loading...

Rust Stack

--
Each tile shows the last time the loop reported in. OK = fresh, STALE = hasn't ticked within its expected window, ERROR = last run failed, OFF = enable flag disabled. Click a tile to flip its enable flag.
Loading status...

TradeIt Parser

CS.Deals Parser

CS.Deals Sale History

Fetches sale history from CS.Deals to compute sell prices. Reuses CS.Deals proxy. Items priced more than Max Overprice % above avg sale price are filtered from CS.Deals → TradeIt comparison.

CS.Deals Account

CS.Deals marketplace account. API key and TOTP secret for authenticated operations (buy, sell, reprice, withdraw). Auto-buyer: Min Profit % = deposit/buy*100 threshold, Max Overprice % = max above avg sale price, Buy Interval = loop cadence.

Newest Items Buyer

TradeIt Deposit

TradeIt.gg deposit after CS.Deals purchase. Paste cookies from browser. Min Deposit % = TradeIt deposit price / CS.Deals buy price * 100 threshold. Auto-Deposit: automatically deposit items on TradeIt after auto-buyer withdraw.

TradeIt Buyer

Buy items from TradeIt store → sell on CS.Deals. Max Buy % = csdeals_sell / tradeit_buy * 100 (higher = more profit). Separate proxy pool to avoid rate limits on the price parser. Test: list item on CS.Deals via ListItems/v2 using asset ID.

DMarket Credentials

Two keypairs: Main signs trading calls (buy/deposit/withdraw/list/reprice). History signs read-only calls (sales-history, aggregated-prices) from a separate blank account so the trading account isn't rate-limited by parsing. Both are stored encrypted at rest.

DMarket Target Buyer (autorefresh)

In-panel port of dmarket_rust_autorefresh. Places, updates, and removes buy targets across all profitable Rust items every 1h (full scan) plus a 15min targets-only re-check. Stock-gated to ≤ 2 of any title; overpay-protected (lowers target when the next-best competitor is >1.5% cheaper). Self-gates on this flag + a configured DMarket main keypair.

DMarket Seller (repricer)

In-panel port of dmarket_rust_lister. Every cycle: fetches our DMarket on-site inventory, lists not-yet-listed items at target × (1 + Target Markup %) capped at min_listing (uses the same parser-fed price cache as the deposit scanner — single source of truth), then refetches active offers and reprices any whose price drifts ≥ $0.01 from the target. Self-gates on this flag + a configured DMarket main keypair.

DMarket Withdraw Router

Periodically scans our DMarket on-site inventory (items the external lister hasn't listed yet, or that were listed but we want to relocate). For each item compares DMarket net (effective_sell × 0.95) vs CS.Deals / TradeIt net. If other_net > dmarket_net × (relocate_threshold/100), withdraws the item via /exchange/v1/withdraw-assets. The 105% default means we only relocate when CS.Deals or TradeIt would pay 5%+ more after fees — safely above the round-trip cost (Steam trade friction + listing latency) so the loop can never flap items back and forth at a loss.

DMarket Auto-Deposit

Orphan scanner: deposits ItemPositions with dest_site=dmarket via /deposit-assets, accepts the bot's Steam offer, then lists. Min Deposit % is applied ONLY to CS.Deals-sourced positions (real USD buy price); TradeIt-sourced positions bypass the threshold because buy_price is denominated in TradeIt credit (~80% of USD), so the ratio would be meaningless. Default 105% means dmarket_effective_sell ≥ 1.05 × csdeals_buy_price.

DMarket Withdraw Router

Scans our DMarket on-site inventory; if any item pays more on CS.Deals or TradeIt, withdraws via /exchange/v1/withdraw-assets so the auto-deposit scanners can route it.

DMarket Sales History & Routing

Effective DMarket sell price = min(target × (1 + markup%), min listing). Target = highest active buy order; min listing = sell-side floor. With 6% markup we list 6% above the top buyer, capped by the floor. Tiebreaker %: when two destinations are within X% on net price, the one with higher 7d sales volume wins.

Deposit Multiplier