UBUnusualBets
Loading...

FAQ

The short answers. If something is missing, write to us at contact@unusualbets.com — the page will get longer.

Last reviewed 2026-06-13.

The basics

— what UnusualBets does
What is UnusualBets?

UnusualBets watches Polymarket for you. Pick a market you're already holding shares on, set a take-profit (TP) and/or stop-loss (SL) price, and our bot will sell those shares the moment the market crosses your trigger — even when your browser is closed.

We also surface Whale Flow: a live feed of every Polymarket trade ≥ $5,000 with one-click filters by category, side, market structure, and volume. Useful both as a research feed and to discover positions to hedge.

What's a "bracket"?

A bracket is a TP + SL pair on the same Polymarket position. They're linked one-cancels-other (OCO): if either leg fires, the other is automatically cancelled. You can also arm just one side if you only want a take-profit or only a stop-loss.

How is this different from selling manually on Polymarket?

Polymarket has no native TP/SL. You have to sit at your screen and sell yourself, or write code. UnusualBets is the missing automation layer: the bot signs the sell order on your behalf when the market hits your level, then stops watching.

Is this a wallet? A custodian?

Neither. We never take custody. You sign in via Privy (or by importing your existing Polymarket account); we delegate a single signer to a bot we run on your behalf. You can revoke that delegation at any time. Funds, deposits, and withdrawals always go through Polymarket directly — we never touch USDC, only sign sells when triggers fire.

What chain? What asset?

Polygon mainnet. Polymarket settles trades in pUSD (Polymarket USD, an ERC-20 backed 1:1 by USDC) — same as Polymarket itself; we don't change anything about the underlying market.

How much does it cost?Free in alpha

Free during the alpha. We'll communicate clearly before introducing any pricing; you'll always be able to cancel brackets first.

Setting up

— signing in, importing, key handling
Do I need to sign in just to use Whale Flow?

No. Whale Flow, Discover, and the FAQ are fully public. You only need to sign in if you want to bookmark markets/whales, receive alerts, or arm take-profit / stop-loss brackets on your Polymarket positions.

How do I sign in?

Click the avatar in the top right. The Privy login modal offers these methods:

  • Email — magic-link, lowest friction. No password.
  • Google — one-tap if you're already signed in to Google on the device.
  • Apple — Sign in with Apple, one-tap on iOS / Safari. (You can choose to hide your email; we just see the relay address Apple gives us.)
  • Wallet — picks up any injected wallet (MetaMask, Rabby) on desktop; falls back to WalletConnect on mobile, so you can deep-link straight into Trust Wallet, Rainbow, etc.

Whichever method you pick, Privy mints a stable identifier for you (your "Privy DID"). Everything in our database — watchlist, alerts, positions, brackets — is keyed on that identifier, not on a wallet address. So you can switch to a different wallet later without losing your data.

Pitfall: if you log out and log back in with a different Privy method (e.g. Trust Wallet the first time, email the second), Privy sees you as two different people. The second account starts with an empty watchlist. Pick one sign-in method and stick with it for now — we don't yet support merging two Privy accounts.

I signed in with MetaMask. Why does my account show a different address?

Because signing in is not the same thing as your trading account. The login you used (MetaMask, email, Google, Apple) only proves it's you. It does not create a Polymarket trading account.

UnusualBets runs your stop-losses on the Polymarket account you connect — the one you already trade with. The addresses you see after connecting come from that account: the EOA is its signing key, the Funder is your Polymarket wallet where your cash sits. The wallet you logged in with is unrelated to those — it was sign-in only.

So if you already trade on Polymarket, connect that account (Account dropdown → Connect Polymarket account). If you don't have one yet, create and fund one on polymarket.com first, then connect it.

What's the green "Connect your Polymarket account" banner that shows up after I sign in?

That's the opt-in into TP/SL automation. Signing in alone is enough for watchlist + alerts; you only need to click the banner if you want our bot to fire take-profit / stop-loss orders on your Polymarket positions.

UnusualBets does not create or hold a trading account for you, and never touches your money. It runs your exits on the Polymarket account you already trade with — so setup is just connecting that account. Two short screens:

  1. "How did you sign up to Polymarket?" Pick email/Google, your own wallet, or (rarely) a Gnosis Safe. We then show only the fields that apply.
  2. Paste your private key (and your Polymarket address, for email/Google sign-ups). We derive your Polymarket credentials server-side, encrypt the key, and bind the bot to your existing account. The bot can place and cancel trades on your behalf but cannot withdraw a single dollar.

Don't have a Polymarket account yet? Create and fund one on polymarket.com first, place at least one trade, then come back and connect it. You keep funding and buying on Polymarket exactly as you do today — we only place your exits.

You can close the wizard at any point and the rest of the app keeps working as a Reader.

I already have a Polymarket account. Can I bring it in?

Yes — that's exactly how UnusualBets works. Open the setup wizard (green banner on the home page, or *Connect Polymarket account* in the Account dropdown). It asks one plain-English question: how did you sign up on polymarket.com?

- "I signed up with email or Google" — almost everyone. You only need two things, both copied from polymarket.com: 1. Your private key. On polymarket.com: click your avatar (top-right) → Settings → Account tab → scroll to Sensitive → click Start Export → next to Private key. (Polymarket opens its key-reveal flow — same backend as reveal.magic.link/polymarket, just routed through their own UI.) Paste the resulting 0x… string into the wizard. 2. Your Polymarket trading address. On polymarket.com: click your avatar (top-right) → Profile. The full 0x… address is shown just under your username with a copy icon — use the copy icon (NOT the truncated 0x394f…4033 display) and paste into the wizard. It's the trading wallet Polymarket created for you; it is *different* from the private key in step 1. - "I connected my own wallet (MetaMask, Trust, Rabby, …)" — even simpler: one thing, your private key, exported from your wallet app (usually *Account details → Show private key*). The funder is the same as your wallet, so the wizard hides that field entirely. - "None of these match me" — a small disclosure expands to reveal the Gnosis Safe option for the rare users who configured a Safe as their Polymarket signer. Gated behind an "Are you sure?" checkbox.

No API key / secret / passphrase required. Polymarket's CLOB doesn't surface those strings anywhere in their UI — they're wallet-derived. We do the derivation server-side using the private key you paste, exactly like Polymarket's own SDK would. (This wasn't always true; before 2026-05-30 the form asked for three more strings that didn't exist anywhere users could find them. A friend's audit caught that.)

When you paste your private key the wizard echoes the derived wallet address back to you ("Got it. We see wallet 0x…") so you can spot a paste mistake before submitting. The key is then encrypted with AES-256-GCM (AAD = your user id) before it ever touches our database, using a master key that lives in GCP Secret Manager, not in Postgres. From that point on the bot signs sells with your existing Polymarket wallet, not a freshly-deployed Privy one.

What permission does the bot get over my Polymarket account?

Exactly one thing: the ability to sign Polymarket sell orders (FAK sells) on your behalf, so it can fire your take-profit / stop-loss exits even with the browser closed. It cannot transfer funds, withdraw, place buys, or approve anything else.

When you connect your account, the private key you paste is encrypted and used only by our worker, only for those sells. Revoking takes one click: Account dropdown → Disconnect Polymarket account, which deletes the stored key + credentials. The bot can no longer trade for you the moment you do that.

Do I have to approve a bunch of contracts to connect my account?

No. Polymarket's exchange contracts (Conditional Tokens, the CTF exchanges, Negative-Risk adapter) need approvals to move your pUSD collateral and outcome tokens — but you already granted those on Polymarket when you first set up and traded there. UnusualBets reuses your existing account, so connecting it doesn't add new approvals. After connecting, arming a bracket is one click.

Where does my private key go?

The private key you connect is encrypted with AES-256-GCM (AAD = your user id) before it ever touches our database, using a master key that lives in GCP Secret Manager — not in Postgres. Anyone with database access alone cannot recover it.

Only the worker process can use the key, and only to sign Polymarket sells. To make the stored copy useless at any time, move your funds off the wallet on Polymarket and/or rotate the key in your Polymarket settings, then disconnect here.

How do I add money to my account?

Always on Polymarket — we never hold or move your money. Click Add money on Polymarket to get started; it's in the Account dropdown (top-right) and on the green card on /portfolio when your balance is $0.

Because UnusualBets runs on the Polymarket account you connected, you fund it the same way you always have: log in to polymarket.com with the login that owns that account — the email, Google, or wallet you use on Polymarket, which may be different from your UnusualBets sign-in. Click Polymarket's Deposit button and follow their flow (card, bank, or USDC bridge — fiat onramps and crypto both work). Once your cash arrives it shows up under Cash (Polymarket) in the dropdown within a few seconds.

We never deposit on your behalf, hold your money, or move funds — Polymarket's deposit flow needs your logged-in session, which only you have. Adding money always happens on Polymarket.

What are "EOA" and "Funder" in my Account dropdown?

Two addresses from the Polymarket account you connected — both safe to ignore unless you're curious. Click What are these? under the addresses in the dropdown to read this inline.

  • EOA — the Polymarket signing key you connected. The bot uses it to place your stop-loss / take-profit sells on your behalf — nothing else.
  • Funder — your Polymarket trading wallet (the "Polymarket address" shown in your polymarket.com settings). Your cash sits here.

You never send funds to these addresses manually — adding money always goes through Polymarket's own deposit flow, using the login that owns the account.

How do I switch to a different Polymarket account, or disconnect entirely?

Both live in the Account dropdown (top-right):

  • Switch Polymarket account… — opens the connect flow again. Paste the private key (and Polymarket address, for email/Google users) of a different Polymarket account and the bot will trade on that one instead. Replacing the binding is instant; your previous credentials are deleted.
  • Disconnect Polymarket account — confirms with you, then wipes the encrypted private key + CLOB credentials from inside the dropdown. The bot stops being able to trade for you immediately. Your sign-in, watchlist, and alerts are unaffected. You can reconnect at any time from the *Connect Polymarket account* CTA.

Both actions refuse if you have any open brackets — cancel them on /portfolio first so they don't get stranded.

Brackets — the core feature

— arming, editing, slippage
How do I arm a bracket?
  1. Sign in (top-right avatar).
  2. Open /portfolio. You'll see your Polymarket positions.
  3. Click Set TP/SL on any position you want to protect.
  4. Pick a take-profit and/or stop-loss price (in cents or as a percentage from the current price).
  5. Hit Arm bracket. Done — you can close the tab.
What's the "Whale activity" panel inside the bracket modal?

It's pre-trade intelligence. When you open the modal to set TP/SL on a position, we plot every whale trade we've observed on that market in the chosen window (1h / 24h / 7d / All) as a dot on the price chart:

  • Green dot = buy pressure on your outcome, red dot = sell pressure on your outcome. Dot size scales with USDC value.
  • Amber dot = trader on your watchlist (so followed whales pop visually).
  • Circle = direct trade on your outcome, plotted at the actual fill price.
  • Square = opposite-side trade on a binary Yes/No market, plotted at the implied price on your outcome's line. A whale buying No at 58¢ shows up as a red square at 42¢ on the Yes chart, because that's the equivalent sell pressure on Yes.
  • On multi-outcome markets (e.g. 4-candidate elections), trades on a different candidate can't be cleanly reprojected, so they only appear in the trade list below the chart, not as dots.

Below the chart you get a list of recent trades — every outcome, no filter — with a ⭐ on each row so you can start following any whale without leaving the modal. The panel hides itself entirely if no whale activity has been observed on that market.

Can I edit a bracket after arming it?

Yes. Open the bracket from /portfolio and click Edit on the detail page. Editing cancels the current bracket and arms a fresh one with your changes — Polymarket doesn't allow truly atomic edits, so keep the tab open until the new bracket confirms.

Can I cancel a bracket?

Yes. Same place — Cancel bracket on the detail page. The worker stops watching within a tick.

What does "TP slippage" / "SL slippage" mean?

When your trigger fires we send an immediate-or-cancel sell order at your trigger price ± a slippage budget (default 100 bps for TP, 300 bps for SL). The wider the slippage, the more likely the order fills in a thin book — but at a worse price.

You can change the defaults under /account → Defaults, or override per-bracket under the Advanced disclosure when arming.

Why do you ask for a per-bracket "size"?

Most users want the whole position protected, but some want to scale out — sell half on TP, hold the rest. The size input lets you specify exactly how many shares the bracket should sell when triggered. It defaults to your full holding.

Why does my bracket show "Failed — no_match" or "no_liquidity"?

The market crossed your trigger but the order book didn't have enough volume within your slippage budget to fill the trade. This is rare on liquid markets. Two ways to handle it:

  • Widen the slippage on that bracket (next attempt is more likely to fill).
  • Re-arm at a slightly more conservative trigger.

We're working on automatic retry-with-widening-slippage; until then, failed brackets are surfaced on the bracket detail page so you can re-arm in one click.

What if my position has already partly resolved?

If part of the position fills before the trigger (say you sold half manually), the bracket still works — but it may end up only filling the remaining size. You can edit the bracket's size at any time.

Can I have multiple brackets on the same market?

Not at the same time. Polymarket gives us one position per (wallet, asset) and we keep brackets in 1-1 correspondence with that, to avoid race conditions. If you want to scale out at multiple price points, the cleanest pattern today is "edit the bracket" each time you want to roll the level.

Whale Flow

— the live $5k+ trade feed
What is Whale Flow?

A live, filterable feed of every Polymarket trade that crosses our ingest threshold (currently $5,000). One row per trade, with direction, market, outcome, dollar amount, and time. Click any trade to see the trader's other positions on Polymarket.

Why $5,000?

Below that the noise overwhelms the signal — Polymarket has thousands of $50 trades per hour. The $5k floor surfaces "real money moving" without drowning the feed. The threshold is server-controlled and we can tune it.

Why "200 of 200" / "500 of 500" at the top?

That's the in-memory window — the most recent N ingested whales the client is currently holding. Hit the Load older button at the bottom to extend it (cursor pagination, no caps until 5,000 rows). "End of feed" appears when there's nothing older to load.

Does Whale Flow update in real time?

Yes. New whale trades arrive over a Supabase Realtime channel within ~3 seconds of the on-chain event. No polling, no refresh.

Why does my filter show 0 trades?

Stacked filters can collapse the visible set to nothing. Try relaxing one filter, or click Load older to widen the in-memory pool the filters operate on.

Can I pause the feed so it stops scrolling out from under me?

Yes — top-right of the Whale Flow header there's a Pause toggle. While paused we keep ingesting in the background but don't push new rows into the visible list, so you can read without things shifting. Toggle off to flush the queued rows in one shot.

Watchlists, alerts & Telegram

— never miss a whale move on a market you care about
What's the watchlist for?

Two things, separately: markets and whales. Star a market on a Whale Flow row to bookmark that question. Star a whale (a trader chip) to follow that wallet across every market they touch. Your /watchlist page shows both lists side-by-side, with a small Alert chip on each row showing whether you'll be pinged.

Watchlists are private — neither markets nor whales know you're tracking them.

What's the difference between bookmarking and an alert?

They're independent. Bookmarking (the ⭐ button) saves a market or whale to your /watchlist so it's easy to find — no notifications. An alert is a rule on the /alerts page that pings you when a whale trade matches it (size, side, channel).

You can have alerts without bookmarks, bookmarks without alerts, or both. Unstarring a bookmark does not delete the alert that targets the same subject — alerts live on independently.

How do I save a market or whale for later?

Click ⭐ on any row in Whale Flow, Discover, or the search dropdown. It's instant — a toast confirms the save and offers a one-click Set up alerts → shortcut if you also want to be notified. The shortcut deep-links to /alerts with the subject pre-filled.

How do I set up an alert?

Three routes that all land on the same configuration modal:

  • Click the + Add alert chip next to a row on /watchlist.
  • Open /alerts and click + New alert (here you can also alert on a whole category, not just one market or whale).
  • Use the Set up alerts → action on the toast that appears after starring something.

Pick a size threshold, side, optional outcome, optional "this whale only" filter, then channels (in-app and/or Telegram).

How do alerts work, technically?

Whenever the worker ingests a Polymarket trade ≥ $5,000 into our whale_flow table, a Postgres trigger checks every active alert against the trade. Matching alerts produce one outbox row per channel (inapp, telegram). The In-App channel is delivered to your browser via Supabase Realtime in milliseconds; the Telegram channel is delivered by a small dispatcher on our worker VM within a few seconds.

If you're offline when a match fires, the in-app row is still queued — the bell icon will show the unread count next time you log in.

Why didn't I get a Telegram message I expected?

Walk down the list:

  1. Is the alert enabled and the Telegram channel checked? /alerts → click the alert row → channels.
  2. Are you linked? /account Telegram card should say Linked as @you. If it says Not connected, you may have blocked the bot at some point — re-link.
  3. Are you paused? Look for a pulsing red Paused pill next to *Your alerts* on /alerts (or on /account). Send /resume in Telegram to re-enable.
  4. Did the trade actually match? Whale-flow ingestion floor is $5k; alerts have their own size threshold (default $25k) and side filter. Lower them if you want noisier alerts.
  5. Outbox check (operator-side): a notifications_outbox row with status='failed' will surface here as a Telegram silence. Reach out and we'll look up the row.
What happens when I remove an item from the watchlist?

The bookmark goes away and that's it — any alert you set on the same market or whale keeps firing until you delete it on /alerts. A 6-second Undo toast restores the bookmark in one click if you mis-clicked.

What's the bell icon at the top right?

Your in-app notification inbox. Every time a whale on your watchlist (or a watched market) trades, an inapp notification is queued; the bell badge shows the unread count and pulses amber while there's something new. Click the bell to see the latest 50 — each row is clickable and opens the underlying market on Polymarket in a new tab.

Clear all at the top of the dropdown marks every unread row as read in one shot. The notifications themselves stay in the list as history; we just flip their read_at. The bell goes silent, the badge disappears.

What happens to my watchlist when a market resolves?

We mark the row with a red Resolved pill and dim it slightly. The row stays on your watchlist as a history reminder; remove it manually whenever you want. New whale trades on a resolved market are very rare (sometimes there's residual settlement activity), so alerts on it generally go quiet on their own.

Pricing & data

— where the numbers come from
Where does the price come from?

Polymarket's CLOB (Central Limit Order Book) — the same engine that matches every Polymarket trade. The mid-price you see on the bracket detail page is the average of the best bid and best ask.

Is the order book on the bracket page truly live?

Yes — we pull the order book directly from Polymarket every 2 seconds. It's real, current, no caching. We pause refreshes when the tab is in the background to avoid burning quota.

We don't run a WebSocket connection to Polymarket; 2-second polling is plenty for the "see what the book looks like" use case. The worker that fires triggers is independent and runs faster.

How is "Live P&L" computed?

(current_price - average_entry_price) × shares_held. We use the live mid-price from the order book; if the book is one-sided (only bids or only asks), we fall back to the most recent trade price. P&L on resolved or partially-filled positions reflects the realized cash delta from Polymarket's own data API.

What's "Cost basis" on the portfolio hero?

Sum of initial_value across your open positions — i.e. how much USDC you spent to enter them. Matches what Polymarket shows in your account.

Trust, security, custody

— what the worker can and can't do
What can the worker do with my account?

Only sell. Specifically: sign Polymarket FAK (fill-or-kill, post-allowed) sell orders against assets you currently hold, at a limit price within the slippage budget *you* set, and only when an active bracket triggers. The worker cannot:

  • Move funds off Polymarket
  • Approve new contracts
  • Place buy orders
  • Sign anything outside the Polymarket CLOB

For Privy users this is enforced by the session-signer policy. For imported-key users it's a self-imposed contract — the key is technically capable of more, but our worker code only ever signs sells.

Where is my data stored?
  • Brackets, rules, and execution logs: Supabase Postgres, scoped per user via Row-Level Security.
  • Encrypted credentials: Supabase Postgres, encrypted client-side before write with a master key that lives in GCP Secret Manager.
  • Whale Flow trades: same Postgres, but public (no PII).
  • Wallet balances: cached server-side for ~10s in Redis to reduce RPC load; never persisted.

We don't ship analytics SDKs that phone home with your trades.

Can the team see my private key?

No. Privy keys never leave Privy's hardware. Imported keys are encrypted with a master key only the worker process can decrypt at runtime; database backups by themselves can't recover them.

What happens if your worker goes down?

Your brackets stop watching for the duration of the outage. If a trigger condition is met during the outage, we miss it — the order won't fire late. We monitor uptime and the worker is set up to auto-restart; full operational hardening is on the roadmap.

This is why brackets are a "best-effort safety net," not a guaranteed-fill stop. Your real risk-cap is still the size of your Polymarket position.

What if Polymarket itself goes down?

We can't sign against a down CLOB. Brackets stay armed and resume the moment the API responds. Same caveat: a missed trigger window during a Polymarket outage isn't backfilled.

What about geoblocking?

The Polymarket CLOB is geoblocked in some jurisdictions. If you're in one of those, you can't sign in via the default flow — but you *can* import your existing Polymarket account ("Advanced setup"), because the worker itself runs on a non-geoblocked VM. Your Polymarket terms still apply.

Practical questions

— things that come up day to day
Can I close my browser after arming?

Yes — that's the whole point. The worker keeps watching from the VM 24/7. You'll get a toast notification on the page next time you log in if anything fired (and email notifications are coming).

Will I be notified when a bracket fires?

Yes, in three ways:

  • Telegram — if you've linked your Telegram, our bot messages you the moment a bracket is filled, partially filled, failed, or cancelled. This works even when the app is closed. You can mute it per-bracket with the TG alerts toggle, or pause everything from the bot.
  • In-app — a toast when you're online, plus a bell-icon feed that's always the full audit trail.
  • Status — the bracket flips to "Filled" / "Partial" / "Failed" in your /portfolio.

Email notifications on bracket fired/failed are on the roadmap.

Why didn't my bracket fire when the market clearly crossed my trigger?

Three common reasons:

  1. Slippage budget too tight. The book moved through your level faster than your max slippage allowed an order to fill. Widen slippage and re-arm.
  2. Liquidity vacuum. A market resolved or paused for a few seconds. Look at the bracket detail page's Activity log for the exact reason.
  3. Worker brief outage. Rare. We log every miss internally.
Can I withdraw cash?

Yes — exactly the way you always have. UnusualBets only signs sells. Withdrawals are a Polymarket → Polygon transfer, fully separate.

What happens if I revoke the worker's signer?

All open brackets become unfireable instantly. Their status flips to failed on next reconcile (or you can cancel them yourself before). You can re-arm them at any time by re-attaching a session signer or re-importing.

Can I use UnusualBets on mobile?

Yes — the whole UI is mobile-first (375px wide and up). We don't have a native app yet; web works on any modern phone browser.

Is this open source?

Not yet. Could change.

How do I get help?

Email us at contact@unusualbets.com. Bug reports are welcome — for anything trading-related, please include the bracket id (visible on /portfolio and in any toast) and the time of the issue so we can find the matching execution row. See the Contact section below for what to send for each kind of question.

Roadmap snippets

— what's not in v1, by design
What's coming next?

Set expectations:

  • Email / push notifications on bracket fired or failed.
  • Drag-to-set TP/SL directly on the price chart.
  • Trailing stops and other multi-leg bracket types.
  • Auto-retry with widening slippage when the book is briefly thin at trigger time.
  • Native mobile apps.

Contact

— how to reach us
How do I contact the team?

One inbox for everything: contact@unusualbets.com. We read it daily. There is no support chat, no Telegram bot, and no Discord today — anyone asking you to DM them claiming to be us is impersonating UnusualBets.

I think I found a bug — what should I send?

To save a round-trip, please include:

  • The bracket id if it's a TP/SL issue (visible on /portfolio and on the bracket detail page).
  • The rough time the issue happened (your timezone is fine — we'll convert).
  • The action you took and what you expected vs. what you saw.
  • A screenshot if anything visual is off.

Send it to contact@unusualbets.com. For severe bugs (e.g. order didn't fire, balance looks wrong) we usually reply same day.

I think I found a security issue — how do I report it responsibly?

Please email contact@unusualbets.com with the subject prefixed SECURITY. Don't open a public issue, don't post it on social media before we've had a chance to patch. We'll acknowledge within 48 hours and credit you (or stay anonymous, your call) once a fix is shipped.

I have a feature idea or general feedback.

Same inbox: contact@unusualbets.com. The roadmap above is steered heavily by what users actually ask for, so concrete "I want to do X but the app makes me do Y" notes are the most useful kind.

Anything off? UnusualBets is in alpha — pricing, supported markets, and operational guarantees may change. We'll surface major changes in-app and at the top of this page. For anything else, reach us at contact@unusualbets.com.