Shadower — User Guide

Everything you need to know about setting up and using Shadower to copy trade on Polymarket.

What is Shadower? #

Shadower is a desktop app for Windows that automatically copies the trades of top Polymarket traders to your account. You pick the wallets you want to follow — Shadower monitors them in real time via blockchain WebSocket and places the same bets on your behalf.

🎯 How it works

  1. You add a trader's wallet address
  2. Bot monitors it via Polygon blockchain
  3. Trader places a bet → Shadower copies it
  4. Your position updates in real time

🔧 What you need

  • Polymarket account with USDC
  • MetaMask or any Polygon wallet
  • Free Alchemy API key
  • Windows 10 / 11 · macOS 12+

Two modes

DRY-RUN Simulation

Bot runs without spending USDC. All actions are logged so you can test your strategy risk-free.

LIVE Real Trading

Bot executes real transactions on Polymarket. Requires Private Key + Alchemy API key.

Installation #

1
Download the installer Go to shadower.trade and click Download. You'll get a Shadower-Setup.exe file.
2
Run the installer Double-click Shadower-Setup.exe → click NextInstallFinish.
3
Windows SmartScreen warning You may see "Windows protected your PC". This is normal for new apps. Click "More info""Run anyway".
4
First launch The app opens the login screen. Proceed to create your account.
⚠️

The SmartScreen warning appears because the app is new and not yet widely downloaded. Your data stays local — Shadower never uploads your keys or wallet data.

Account & Login #

Shadower uses a cloud account to manage your subscription. Your private key and wallet data are stored locally only.

Sign in options

G
Google Click "Sign in with Google" → your browser opens → authorize → the app detects the login automatically.
D
Discord Click "Sign in with Discord" → browser opens → authorize → return to app.
@
Email + Password Enter email and password → click "Create account" → check inbox for a confirmation link → click it → you're logged in.

Returning users

Your session is saved locally for ~30 days. On next launch the app logs you in automatically. If the session expires, you'll need to sign in again.

ℹ️

One account = one device. If you log in on a second device, the first device will show a warning: "Account active on another device." Only the most recent device can trade actively.

First-time Setup #

After login, the Setup window appears. Fill in your wallet credentials to enable LIVE trading.

💡

DRY-RUN (simulation) works without any setup. You only need the keys below to enable real trading.

1. Private Key

Your Polygon wallet's private key. Used to sign transactions on Polymarket.

  • Format: 64 hex characters, optionally prefixed with 0x
  • Storage: Encrypted with AES-256-GCM, machine-bound. Never sent anywhere.
🔐

Never share your private key with anyone. Use a dedicated wallet with only the funds you want to trade.

🌐 Signed up via Google / Email

Most Polymarket users. Your wallet is managed by Polymarket.

  1. Go to polymarket.com/settings
  2. Open the Export Private Key tab
  3. Confirm with your login → copy the key

🦊 Connected MetaMask / Rabby

If you connected an existing Web3 wallet.

  1. Open MetaMask → click account avatar
  2. Account details → Export private key
  3. Enter MetaMask password → copy the key

Option A — Polymarket Settings (Google / Email login)

Polymarket — click avatar top right
Step 1 — Click your avatar (top right)
Polymarket — dropdown menu, click settings
Step 2 — Click the ⚙️ gear icon in the dropdown
Polymarket Settings — click Private Key in sidebar
Step 3 — Click "Private Key" in the left sidebar
Polymarket Private Key page — click Start Export
Step 4 — Click "Start Export"
Magic.link — Before you continue, click Reveal Private Key
Step 5 — Confirm and click "Reveal Private Key"
Wallet Private Key — click Copy
Step 6 — Click "Copy" — the key is ready to paste into Shadower

Option B — MetaMask

Open MetaMask and click Account 1 dropdown
Step 1 — Open MetaMask → click "Account 1" to open accounts list
MetaMask accounts — click three dots next to account
Step 2 — Click the ⋮ three dots
MetaMask Account details — click Private keys
Step 3 — Click "Private keys"
MetaMask Private keys — copy Polygon key
Step 4 — Copy icon next to Polygon

2. Wallet Address

Your public wallet address (the one matching your private key).

  • Format: 0x + 40 hex characters
  • Example: 0xAbC1234...7890dEf
  • This must match the private key above
Polymarket profile — copy wallet address
Your wallet address is shown on your Polymarket profile page — click the copy icon

3. Alchemy API Key

Used to receive real-time blockchain events from Polygon network.

1
Register at alchemy.com — free account
2
Create an app — Chain: Polygon, Network: Polygon Mainnet
3
Copy the API Key from the app dashboard
⚠️

Make sure you select Polygon Mainnet, not Ethereum. An Ethereum key will not work.

Alchemy dashboard — click Create new app
Step 1 — Click "+ Create new app" on the Alchemy dashboard
⚙️
App settings — Polygon Mainnet
Chain: Polygon · Network: Polygon Mainnet (not Ethereum!)
Step 2 — Select Polygon Mainnet
🗝️
Copy API Key
App dashboard → "API Key" tab → copy the key string
Step 3 — Copy the API Key and paste it into Shadower

4. Language

Choose your preferred interface language. Available: English, Русский, Українська, Español, Português, Türkçe, 한국어, 中文.

Saving settings

Click Save. The app validates the data and starts the bot in DRY-RUN mode. You can change any setting later via the Settings button in the toolbar.

🖥️
Shadower — Setup window
The Setup window after first login — all fields filled in correctly
Shadower Setup window — filled in and ready to save

App Overview #

The main window is divided into 5 zones:

┌──────────────────────────────────────────────────────────────────┐ │ TOOLBAR: [DRY-RUN] [Live Trading] [Ratio] [Min Bet] [Limit/h] │ │ [Sell Mode] [Settings] [Active until] │ ├─────────────────┬────────────────────────────────┬───────────────┤ │ │ [All] [Trader 1] [Trader 2] │ Open │ │ Statistics │ ────────────────────────── │ Positions │ │ ───────────── │ Trades table │ │ │ Traders list │ ────────────────────────── ├───────────────┤ │ │ Log output │ Errors │ │ [+ Add Trader] │ │ │ ├─────────────────┴────────────────────────────────┴───────────────┤ │ Shadower 1.1 | Copying: Trader 1 | Mode: DRY-RUN | 78ms │ └──────────────────────────────────────────────────────────────────┘
ZoneDescription
ToolbarMode toggle, all settings buttons, subscription status
Left panelStatistics block + trader list + Add Trader button
CenterTabs with trade history and bot log for each trader
Right panelCurrently open positions with live P&L + error log
Status barApp version, active traders, mode, blockchain ping

Toolbar #

ButtonWhat it does
DRY-RUN / LIVE Current mode indicator (read-only label)
Live Trading Toggle between DRY-RUN and LIVE mode. Bot restarts on toggle.
Ratio Set copy coefficient (0.01%–100%). Opens a number input dialog.
Min Bet Skip trader bets below this amount ($1–$100,000).
Limit/h Max % of your balance to spend per hour.
Sell Mode How to exit positions + Auto-Sell settings.
Settings Change Private Key, Alchemy key, wallet address, language.
Active until… Subscription status badge. Click to manage or upgrade.

Traders Panel #

The left sidebar shows all wallets you're copying. Up to 5 traders can be active at once.

Adding a trader

1
Click "+ Add Trader" at the bottom of the left panel.
2
Paste the wallet address — format: 0x + 40 hex characters.
Find a trader's address on their Polymarket profile page (it's in the URL or shown on their page).

Not sure who to follow? Browse our curated leaderboard: View Top Polymarket Traders →
3
Enter a label (optional) — e.g. "Whale #1". Helps you identify them in the tab bar.
4
Click OK. The bot restarts and begins watching the new wallet.

Managing a trader

Right-click any trader in the list (or hover and click ···) to open the context menu:

ActionDescription
Enable / DisablePause copying without removing the trader. Disabled traders show instead of .
RenameChange the display label.
RemoveDelete this trader. Their tab and history are removed.

Trades Table #

The central area shows a tab for All traders combined, plus an individual tab for each trader you've added. Each tab contains a trades table and a log below it.

Table columns

ColumnDescriptionExample
TimeWhen the event occurred15:42:07
ActionWhat the bot did (see below)BUY
SideDirection of the betUp / Down
MarketPolymarket event nameBitcoin Up or Down - Mar 29
PriceToken price in cents72¢
AmountBet size in USDC$5.40

Action types

ActionColorMeaning
BUYGreenTrade was copied and submitted
SELLRedPosition sold when trader sold
AUTO-SELLOrangePosition sold automatically at target price
REDEEMOrangeWinning token redeemed for USDC
SKIPGrayTrade ignored — see skip reasons

Statistics Block #

The left panel shows 8 real-time metrics, updated every second while the bot is running:

MetricDescription
RatioCurrent copy coefficient (e.g. 0.5%)
CopiedNumber of trades copied this session. During trial: shows 3 / 10
Min Orig BetCurrent minimum trader bet filter (e.g. $205)
HourlyHourly spend used vs. total allowed (e.g. $43 / $200)
PortfolioTotal account value: available USDC + value of all open positions
CashAvailable USDC not currently invested in positions
UptimeHow long the bot has been running this session
Src BCTotal blockchain events received from Polygon since bot started

Open Positions #

The top-right panel shows all positions currently held by the bot, with live unrealized P&L.

ColumnDescription
MarketEvent name + outcome (Up/Down)
PriceCurrent market price of the token (in cents)
P&LUnrealized profit/loss. Green = profit, red = loss

At the bottom of the table: Total unrealized P&L for all open positions combined.

ℹ️

Positions are updated every second. P&L is calculated based on the current market price, not your entry price. It becomes realized when you SELL or REDEEM.

Log & Errors #

Bot Log (center-bottom)

Full history of everything the bot does, with timestamps:

ColorMeaningExample
GraySkipped trades, status messagesSKIP ($45 < $205)
White/coloredBUY / SELL actionsBUY Up 72¢ Bitcoin...
OrangeAuto-sell eventsAUTO-SELL Up 99¢...
RedErrors and failuresFAIL: order rejected

The log is cleared when the bot restarts. To save a session's log, copy the text manually.

Errors Block (right-bottom)

Shows only error messages filtered from the main log. Use this panel to quickly spot issues without scrolling through all activity.

Status Bar #

Shadower 1.1 | Copying: Trader 1, Trader 2 | Mode: DRY-RUN | Ping: 78ms
FieldDescription
Shadower 1.1Current app version
Copying: ...Names of traders being actively copied. Shows "—" if none.
ModeDRY-RUN (gray) or LIVE (green)
PingLatency to the Polygon blockchain in milliseconds. Normal: 50–200ms

Ratio (Coefficient) #

The ratio determines the size of your bet relative to the trader you're copying.

Your bet = Trader's bet × Ratio

Example: Trader bets $1,000 · Ratio = 5% → Your bet = $50
Range0.01% to 100%
Default1%
Saved in.env as BET_RATIO
TipStart at 1–5% while testing in DRY-RUN mode

Min Bet #

Bets from traders that are smaller than this value are ignored (logged as SKIP). Useful for filtering out small/experimental trades.

If trader's bet < Min Bet → SKIP

Example: Min Bet = $200, trader bets $150 → SKIP
Range$1 to $100,000
Default$100
TipSet higher ($200–$500) to only copy serious positions

Hourly Limit #

Sets the maximum amount of USDC the bot can spend in any rolling 60-minute window, expressed as a percentage of your balance.

Max spend per hour = Balance × Hourly Limit %

Example: Balance = $1,000 · Limit = 20% → Max $200/hour

Once the limit is reached, all new trades are skipped until the oldest bets fall outside the 60-minute window.

💡

Use this as a risk control to prevent the bot from over-betting during a highly active market period.

Sell Mode #

Controls what happens to your position when the copied trader sells their position.

ModeWhat happensBest for
Ignore Your position stays open. Bot never sells based on trader actions. Manual traders who want full control over exits
Full Bot sells 100% of your position when the trader exits. Most users — mirrors the trader's full exit
Percentage Bot sells only X% of your position (e.g. 50%). Partially locking in gains while keeping exposure
💡

Recommended: Start with Full — it most faithfully mirrors your trader's behavior.

Auto-Sell #

An independent feature that automatically sells a position when its market price reaches your target threshold, regardless of what the trader does.

Auto-Sell: ON · Threshold: 99¢

Bought token at 72¢ → price rises to 99¢ → bot sells automatically
Profit: (99 - 72) / 72 ≈ 37.5%
Default threshold99¢
Range50¢ to 100¢
Check intervalEvery 1 second
Works in DRY-RUNYes (simulated)
ℹ️

Auto-Sell is independent of Sell Mode. You can have Sell Mode = Ignore but still use Auto-Sell to take profit when a token approaches resolution.

DRY-RUN vs LIVE #

DRY-RUNLIVE
Real transactions❌ No✅ Yes
USDC spent❌ No✅ Yes
Logged in app✅ Yes✅ Yes
Requires Private Key❌ No✅ Yes
Requires Alchemy Key❌ No✅ Yes
Use forTesting strategies risk-freeReal copy trading

How to switch to LIVE

1
Ensure Private Key and Alchemy Key are configured (Settings button).
2
Click "Live Trading" in the toolbar.
3
The bot restarts. Status changes to LIVE in toolbar and status bar.
⚠️

In LIVE mode, the bot spends real USDC. Start with a small Ratio (1–2%) and monitor the log closely for the first few hours.

How Copying Works #

When the bot is running, it monitors your traders' wallets via the Polygon blockchain WebSocket in real time. Here's the full flow for each copied trade:

1
Trader places a bet on Polymarket (on-chain transaction)
2
Blockchain event received via Alchemy WebSocket (typically within 1–3 seconds after block confirmation)
3
Filters applied: price range check (3¢–97¢), min bet check, hourly limit check, age check (<120 seconds old)
4
Bet size calculated: trader's bet × Ratio, minimum $1
5
DRY-RUN: trade is logged only
LIVE: order submitted to Polymarket CLOB
6
Trades table updated, statistics refreshed, position added to Open Positions panel

Why Trades Are Skipped #

When a trade shows as SKIP in the log, one of these filters blocked it:

Log messageReasonFix
SKIP ($45 < $205) Trader's bet is below your Min Bet setting Lower the Min Bet threshold
SKIP (price 0.98 out of range) Token price is above 97¢ or below 3¢ These are near-resolved markets — this is intentional
SKIP (hourly $200/$200) Hourly spending limit reached Wait for the hour to roll over, or increase the limit
SKIP (stale event) Blockchain event is older than 120 seconds Normal during startup warmup — not an error
SKIP (trial limit) 10 trial copies used up Subscribe to continue

Subscription & Trial #

Free Trial

  • Duration: 24 hours from account creation
  • Copy limit: 10 trades
  • Ends when either the time runs out OR 10 copies are used — whichever comes first
  • Trial status shown in top-right badge: Trial: 18h 30m · 3/10

Paid Plans

MonthlyYearly
Price$19.99/month$189.99/year
Per month$19.99$15.83
SavingsSave 21%
Copy tradesUnlimitedUnlimited
SupportStandardPriority

How to subscribe

1
Click the badge in the top-right corner of the app (Trial: ...)
2
Choose a plan: Monthly or Yearly
3
Choose payment method: Crypto (BTC, ETH, USDT, USDC) or Card (Visa, Mastercard, Apple/Google Pay)
4
Complete payment — subscription activates automatically within a few minutes

Subscription statuses

BadgeMeaning
Trial: 6d 12h · 3/10Trial active — time and copies remaining
Active until 28.04.2026Paid subscription active
Cancelled until 28.04.2026Cancelled but still works until the date shown

App Updates #

Shadower checks for updates automatically in the background when you launch it.

Soft update (orange banner at the bottom)

A new version is available but you can keep using the current one.

  • Click "Download" to open the download page in your browser
  • Click "×" to dismiss and continue using the app

Forced update (blocking dialog)

Your version is too old and is no longer supported. The bot stops.

  • Click "Download" → browser opens with the download page → app closes
  • Clicking "×" on the dialog also closes the app
  • Install the new version and relaunch to continue

Security #

WhatHow it's protected
Private Key Encrypted with AES-256-GCM. The encryption key is derived from your machine's hostname using PBKDF2-HMAC-SHA256 (260,000 iterations). The encrypted value is stored in a local .env file — it cannot be decrypted on another machine.
Cloud data Only your email and subscription status are stored server-side (Supabase). No keys, no trades, no wallet data.
Network All connections use HTTPS/WSS (TLS encrypted). Blockchain data comes through your own Alchemy key.
🔐

Best practices: Use a dedicated wallet with only the USDC you intend to trade. Never reuse your main MetaMask wallet's private key. Do not share your .env file.

Log Reference #

Every line in the log follows a pattern. Here's how to read it:

[15:42:07] +1240ms  Trader 1  Up 72¢  Bitcoin Up or Down - Mar 29  $5.40 (x3)
[15:42:09] SKIP ($45 < $205)
[15:42:11] BUY placed: orderID=0x3f9a...

Line parts explained

PartMeaningExample
[15:42:07]Local time the event was processedHH:MM:SS
+1240msBlockchain delay — how many milliseconds after the block was confirmed that Shadower received the event. Normal: 1000–2500ms. Only shown when delay > 1 second.+1420ms
Trader 1Label of the trader who placed the betWhale #1
Up / DownDirection of the bet on the marketUp = betting the outcome happens
72¢Price of the token in cents at the time of the trade (100¢ = $1 = certain outcome)72¢ = 72% implied probability
$5.40Size of YOUR copied bet in USDCTrader bet $750 × 0.72% Ratio = $5.40
(x3)The trader placed this same bet 3 times in quick succession — grouped into one line(x3)

Common log messages

MessageMeaning
SKIP ($45 < $205)Trader bet $45 but your Min Orig Bet is $205 — ignored
SKIP (price 0.98 out of range)Token is priced above 97¢ — market is near resolution, skipped by design
SKIP (hourly $200/$200)Hourly spending cap reached
BUY placed: orderID=0x…Order submitted to Polymarket successfully (LIVE mode)
AUTO-SELL Up 99¢ …Auto-sell triggered — position sold at target price
REDEEM Win …A winning outcome token was redeemed for USDC
CLOB: initializing…Bot is connecting to Polymarket's order system on startup
CLOB: readyConnection established, bot is ready to trade
── Starting Shadower (LIVE) ──Bot started in LIVE mode
── Starting Shadower (DRY-RUN) ──Bot started in simulation mode
Loading… $11.72 (x3)Startup warmup — bot is loading last 100 trades per trader to get context. Normal at launch.
BC error: …Blockchain WebSocket connection issue — bot will auto-reconnect

Glossary

TermMeaning
USDCUSD Coin — a stablecoin pegged 1:1 to the US dollar. Used as currency on Polymarket.
CLOBCentral Limit Order Book — Polymarket's order matching system. All buy/sell orders go through it.
Outcome tokenA token representing one possible result of a Polymarket event (e.g. "Yes" or "Up"). Resolves to $1 if the outcome is correct, $0 if not.
72¢The current price of an outcome token. Roughly equals the market's implied probability of that outcome occurring (72% chance).
99¢A token near $1.00 — means the market has almost fully resolved in that direction. Auto-Sell target is usually set here.
Up / DownThe two sides on price-based Polymarket events (e.g. "Will Bitcoin be Up or Down today?").
P&LProfit & Loss — the difference between what you paid and what the position is currently worth.
Unrealized P&LP&L on a position you still hold. Becomes realized when you sell or redeem.
DRY-RUNSimulation mode — bot runs all logic but submits no real orders.
AllowanceA permission you give Polymarket's smart contract to spend your USDC. Required once before first trade in LIVE mode.
Src BCSource Blockchain — number of raw events received from the Polygon network since bot started.
WarmupThe startup phase where the bot loads the last 100 trades per trader to build context before live monitoring begins.

Error Reference #

Red messages in the log or the Errors panel mean something went wrong. Here's what each one means and how to fix it:

Error messageCauseFix
BUY error (insufficient_balance) Not enough USDC in your wallet, or Polymarket's spending allowance hasn't been approved Add USDC to your wallet. The bot will auto-retry and approve allowances. If it persists, restart the app.
BUY error (size_too_small) Your calculated bet is below Polymarket's minimum order size (~$1) Increase your Ratio setting, or lower Min Orig Bet so you copy larger trades.
BUY error (duplicate) Polymarket rejected the order because an identical order already exists Not a real error — happens occasionally with fast traders. Bot ignores it automatically.
BUY error (market_closed) The market has closed or trading is paused Normal — bot skips it automatically. No action needed.
BUY error (other): … Unexpected error from Polymarket's API Check the full error text. If it mentions "signature" or "key", verify your Private Key in Settings.
SELL FAIL … Sell order was rejected by Polymarket Usually a temporary API issue. Position remains open — you can sell manually on Polymarket.com.
CLOB init error: … Bot couldn't connect to Polymarket's order system at startup Check your Private Key and Wallet Address in Settings. Ensure they match.
BC error: … Blockchain WebSocket connection dropped Bot reconnects automatically. If it keeps happening, check your Alchemy API key.
Red connection status (Disconnected) Lost connection to the Polygon blockchain Check internet connection and Alchemy API key. Bot will reconnect automatically when connection is restored.
Order too small (0.0012 sh). Increase Ratio or Min Bet. The number of tokens to buy is too tiny to be valid Raise your Ratio (e.g. from 0.5% to 2%) or lower Min Orig Bet to only copy larger trader positions.
💡

Most errors are temporary and resolve automatically. The bot is designed to skip failed orders gracefully and continue monitoring. If you see the same error repeatedly, that usually points to a configuration issue (wrong key, insufficient funds).

FAQ #

Why are my trades showing as SKIP?

Most common reasons: the trader's bet is below your Min Bet setting, the token price is outside the 3¢–97¢ range, or you've hit the hourly spend limit. Check the log message — it always says the exact reason.

What is DRY-RUN?

A simulation mode. The bot runs exactly as in LIVE — it monitors traders, evaluates bets, logs everything — but no real transactions are submitted. USDC is never spent. Use it to test your settings before going live.

The connection status shows red. What do I do?

Go to Settings and check your Alchemy API Key. Make sure the app you created in Alchemy uses Polygon Mainnet, not Ethereum. After saving, the bot restarts and reconnects.

Can I use Shadower on two computers?

No. One account = one active device. Logging in on a second device will invalidate the first device's session. It won't show an error immediately, but on the next startup the first device will see a session conflict warning.

How do I find a trader's wallet address?

Go to Polymarket.com → open the trader's profile → the wallet address is in the URL or displayed on their page. It starts with 0x.

How do I cancel my subscription?

Click the subscription badge (top-right) → "Manage Subscription" → follow the LemonSqueezy cancellation flow. Your subscription stays active until the end of the current billing period.

How many traders can I follow at once?

Up to 5 wallets simultaneously.

What happens when the trader wins and the token goes to $1.00?

Polymarket resolves the market and winning tokens become redeemable for $1 USDC each. If Auto-Sell is enabled at 99¢, the bot sells just before resolution. Otherwise, the bot performs a REDEEM action to claim the USDC.

I see "Account active on another device" — what now?

Simply log out and log back in on the device you want to use. The session transfers to the current device.

System Requirements #

ComponentRequirement
OSWindows 10 / 11 (64-bit) · macOS 12+
RAM100 MB or more available
Disk space~50 MB
InternetRequired, must stay connected while bot is running
USDC balanceRecommended $100+ for LIVE mode (depends on your Ratio × trader bets)
Alchemy accountFree tier is sufficient
ℹ️

The app is lightweight and can run in the background. Just keep the internet connection active — if it drops, the bot will auto-reconnect when it comes back.

Still have questions? Contact us via Discord or email from the main site.