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
- You add a trader's wallet address
- Bot monitors it via Polygon blockchain
- Trader places a bet → Shadower copies it
- 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 #
Shadower-Setup.exe file.
Shadower-Setup.exe → click Next → Install → Finish.
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
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.
- Go to polymarket.com/settings
- Open the Export Private Key tab
- Confirm with your login → copy the key
🦊 Connected MetaMask / Rabby
If you connected an existing Web3 wallet.
- Open MetaMask → click account avatar
- Account details → Export private key
- Enter MetaMask password → copy the key
Option A — Polymarket Settings (Google / Email login)
Option B — MetaMask
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
3. Alchemy API Key
Used to receive real-time blockchain events from Polygon network.
Make sure you select Polygon Mainnet, not Ethereum. An Ethereum key will not work.
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.
App Overview #
The main window is divided into 5 zones:
| Zone | Description |
|---|---|
| Toolbar | Mode toggle, all settings buttons, subscription status |
| Left panel | Statistics block + trader list + Add Trader button |
| Center | Tabs with trade history and bot log for each trader |
| Right panel | Currently open positions with live P&L + error log |
| Status bar | App version, active traders, mode, blockchain ping |
Toolbar #
| Button | What 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
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 →
Managing a trader
Right-click any trader in the list (or hover and click ···) to open the context menu:
| Action | Description |
|---|---|
| Enable / Disable | Pause copying without removing the trader. Disabled traders show ○ instead of ●. |
| Rename | Change the display label. |
| Remove | Delete 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
| Column | Description | Example |
|---|---|---|
| Time | When the event occurred | 15:42:07 |
| Action | What the bot did (see below) | BUY |
| Side | Direction of the bet | Up / Down |
| Market | Polymarket event name | Bitcoin Up or Down - Mar 29 |
| Price | Token price in cents | 72¢ |
| Amount | Bet size in USDC | $5.40 |
Action types
| Action | Color | Meaning |
|---|---|---|
| BUY | Green | Trade was copied and submitted |
| SELL | Red | Position sold when trader sold |
| AUTO-SELL | Orange | Position sold automatically at target price |
| REDEEM | Orange | Winning token redeemed for USDC |
| SKIP | Gray | Trade ignored — see skip reasons |
Statistics Block #
The left panel shows 8 real-time metrics, updated every second while the bot is running:
| Metric | Description |
|---|---|
| Ratio | Current copy coefficient (e.g. 0.5%) |
| Copied | Number of trades copied this session. During trial: shows 3 / 10 |
| Min Orig Bet | Current minimum trader bet filter (e.g. $205) |
| Hourly | Hourly spend used vs. total allowed (e.g. $43 / $200) |
| Portfolio | Total account value: available USDC + value of all open positions |
| Cash | Available USDC not currently invested in positions |
| Uptime | How long the bot has been running this session |
| Src BC | Total 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.
| Column | Description |
|---|---|
| Market | Event name + outcome (Up/Down) |
| Price | Current market price of the token (in cents) |
| P&L | Unrealized 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:
| Color | Meaning | Example |
|---|---|---|
| Gray | Skipped trades, status messages | SKIP ($45 < $205) |
| White/colored | BUY / SELL actions | BUY Up 72¢ Bitcoin... |
| Orange | Auto-sell events | AUTO-SELL Up 99¢... |
| Red | Errors and failures | FAIL: 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 #
| Field | Description |
|---|---|
| Shadower 1.1 | Current app version |
| Copying: ... | Names of traders being actively copied. Shows "—" if none. |
| Mode | DRY-RUN (gray) or LIVE (green) |
| Ping | Latency 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
| Range | 0.01% to 100% |
| Default | 1% |
| Saved in | .env as BET_RATIO |
| Tip | Start 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 |
| Tip | Set 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.
| Mode | What happens | Best 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 threshold | 99¢ |
| Range | 50¢ to 100¢ |
| Check interval | Every 1 second |
| Works in DRY-RUN | Yes (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-RUN | LIVE | |
|---|---|---|
| Real transactions | ❌ No | ✅ Yes |
| USDC spent | ❌ No | ✅ Yes |
| Logged in app | ✅ Yes | ✅ Yes |
| Requires Private Key | ❌ No | ✅ Yes |
| Requires Alchemy Key | ❌ No | ✅ Yes |
| Use for | Testing strategies risk-free | Real copy trading |
How to switch to LIVE
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:
trader's bet × Ratio, minimum $1LIVE: order submitted to Polymarket CLOB
Why Trades Are Skipped #
When a trade shows as SKIP in the log, one of these filters blocked it:
| Log message | Reason | Fix |
|---|---|---|
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
| Monthly | Yearly | |
|---|---|---|
| Price | $19.99/month | $189.99/year |
| Per month | $19.99 | $15.83 |
| Savings | — | Save 21% |
| Copy trades | Unlimited | Unlimited |
| Support | Standard | Priority |
How to subscribe
Subscription statuses
| Badge | Meaning |
|---|---|
| Trial: 6d 12h · 3/10 | Trial active — time and copies remaining |
| Active until 28.04.2026 | Paid subscription active |
| Cancelled until 28.04.2026 | Cancelled 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 #
| What | How 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
| Part | Meaning | Example |
|---|---|---|
[15:42:07] | Local time the event was processed | HH:MM:SS |
+1240ms | Blockchain 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 1 | Label of the trader who placed the bet | Whale #1 |
Up / Down | Direction of the bet on the market | Up = 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.40 | Size of YOUR copied bet in USDC | Trader 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
| Message | Meaning |
|---|---|
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: ready | Connection 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
| Term | Meaning |
|---|---|
| USDC | USD Coin — a stablecoin pegged 1:1 to the US dollar. Used as currency on Polymarket. |
| CLOB | Central Limit Order Book — Polymarket's order matching system. All buy/sell orders go through it. |
| Outcome token | A 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 / Down | The two sides on price-based Polymarket events (e.g. "Will Bitcoin be Up or Down today?"). |
| P&L | Profit & Loss — the difference between what you paid and what the position is currently worth. |
| Unrealized P&L | P&L on a position you still hold. Becomes realized when you sell or redeem. |
| DRY-RUN | Simulation mode — bot runs all logic but submits no real orders. |
| Allowance | A permission you give Polymarket's smart contract to spend your USDC. Required once before first trade in LIVE mode. |
| Src BC | Source Blockchain — number of raw events received from the Polygon network since bot started. |
| Warmup | The 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 message | Cause | Fix |
|---|---|---|
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 #
| Component | Requirement |
|---|---|
| OS | Windows 10 / 11 (64-bit) · macOS 12+ |
| RAM | 100 MB or more available |
| Disk space | ~50 MB |
| Internet | Required, must stay connected while bot is running |
| USDC balance | Recommended $100+ for LIVE mode (depends on your Ratio × trader bets) |
| Alchemy account | Free 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.