Realtime Stream
Live SSE feed of every trade, move and whale event
The Realtime Stream is a live, no-refresh feed of market activity across Polymarket and Kalshi. Open it at **/dashboard/realtime** and leave it running: prices, volume, and the biggest movers update on their own while you work. It is built as a heads-up display (HUD) β a single screen you keep visible on a second monitor or phone so you never miss a market repricing while you are reading signals, sizing a position, or watching a whale.
This page is read-only intelligence. It shows you what is happening; it does not place orders. Execution lives in [Live Trading](/docs/live-trading) and the bot stack. The Realtime Stream exists to give you the fastest possible awareness of movement, so you can act in the right tool a few seconds sooner.
## What It Does
Behind the page is a **Server-Sent Events (SSE)** connection to `/api/realtime/stream`. SSE is a one-way, long-lived HTTP stream from our servers to your browser β lighter than a raw WebSocket, and far more reliable through corporate proxies, mobile carriers, and CDNs that mangle WebSocket upgrades. You will see a small **SSE** badge on the live table confirming the transport.
Once connected, the stream pushes a fresh snapshot of active markets every few seconds. Each row carries:
- **Market question** β the contract being priced
- β’**YES price** and **NO price**, shown in cents (e.g. `63.0Β’`)
- β’**1h change** and **24h change** as percentages, colored teal for up and rose for down
- β’**Volume**, abbreviated (`1.2M`, `48k`)
At the top, a **Top Movers** strip surfaces the five markets with the largest absolute 1-hour move, regardless of direction. That is your at-a-glance "what is hot right now" panel β the markets most likely to be reacting to fresh news or a large order hitting the book.
A note on the change percentages: they reflect the **real price delta reported upstream**. When the source does not provide a 1h or 24h delta for a given market, the field reads `0` / `β` rather than a fabricated number. If you see a flat `0.0%`, that means "no reported movement," not "we made something up." Trust the teal and rose only when there is a real figure behind them.
## Connection Status, Always Visible
The top-left status pill is the single most important element on the page. It has two states:
- **LIVE** (teal, pulsing dot) β the stream is open and data is flowing.
- β’**Reconnecting** (rose, solid dot) β the connection dropped and the client is working to restore it.
Next to the pill, a **last-updated timestamp** shows the local time of the most recent snapshot, and a market count shows how many contracts are currently in the feed. Glance at the timestamp before you trust the numbers: if the pill says LIVE but the timestamp is two minutes stale, something upstream stalled and you should treat the prices as indicative, not exact.
## How To Use It
1. Open **/dashboard/realtime** from the sidebar. The page connects automatically β there is no "start" button. 2. Wait for the status pill to flip to **LIVE**. The first snapshot usually lands within a second or two; on a cold serverless start it may take a moment longer. 3. Scan the **Top Movers** strip first. These five cards tell you where the action is before you read a single table row. 4. Use the **filter box** to narrow the table. Type any part of a market question β "election", "Fed", "BTC", a candidate name β and the table instantly shows only matching markets. The filter is case-insensitive and matches substrings, so partial words work. 5. Watch the rows you care about. New snapshots replace the table in place; rows do not scroll away or require a reload. 6. When a market moves enough to act on, jump to the [EV Scanner](/docs/ev-scanner) or the [Market Detail](/docs/reading-signals) view for that contract to confirm the edge, then size and execute in your trading tool of choice.
On mobile the layout switches automatically from a wide table to stacked cards β each market becomes a compact card with YES/NO, 1h, 24h, and volume β so the feed stays readable on a narrow screen without horizontal scrolling.
## Pause and Resume
The stream is designed to run unattended, but you control its lifecycle through the page itself:
- **To pause**, navigate away from /dashboard/realtime (open another dashboard page) or close the tab. The client cleanly closes the SSE connection and tears down its timers β no zombie connection is left running in the background. This matters: an abandoned stream consumes a server slot and counts against connection limits, so leaving the page is the correct way to "turn it off."
- β’**To resume**, return to /dashboard/realtime. A brand-new connection opens automatically and the feed repopulates from the next snapshot.
If you want a persistent HUD, the recommended pattern is to dock the page in its own browser window or a second monitor and simply leave it open. It will keep itself alive and reconnect through interruptions on its own (see below). When you are done for the session, close that window so the connection is released.
## Reconnect Behavior on Flaky Networks
This is where the Realtime Stream earns its keep on mobile and unreliable Wi-Fi. The client does not just connect once and give up β it actively defends the connection.
### Exponential backoff
When the stream drops, the client retries with increasing delays: **1s, 2s, 4s, 8s, 16s, then capped at 30s**. This avoids hammering the server during an outage while still recovering quickly from a brief blip. The moment a reconnect succeeds, the backoff **resets to 1s**, so the next hiccup is handled fast rather than starting from a long delay.
### Network-flip recovery
Mobile devices constantly switch between Wi-Fi and 4G/5G, and each handoff briefly takes the device offline. The page listens for the browser's **online** event: the instant connectivity returns, it cancels any pending backoff timer and reconnects **immediately**, rather than waiting out the current delay. Conversely, while the device reports itself offline, the client skips connection attempts entirely and waits for the network to come back β no wasted retries against a dead radio.
### Background-tab recovery
Browsers β especially on phones β often kill or freeze SSE connections when a tab goes to the background to save battery. The page listens for **visibility changes**: when you switch back to the tab and it becomes visible again, the client checks whether the stream is still open. If it was killed in the background, it reconnects immediately. In practice this means you can lock your phone, come back ten minutes later, tap the tab, and see fresh data almost instantly instead of a frozen screen.
The takeaway for traders: **trust the status pill, not your assumptions.** If you have been away, glance at the pill and the last-updated timestamp when you return. If it shows LIVE with a current timestamp, the recovery worked and the numbers are good. If it is still Reconnecting after a few seconds on a known-good network, a manual page refresh forces a clean restart.
## Security: Periodic Auth Re-Check
The stream is authenticated, and it stays authenticated for its entire life β not just at the moment you open it.
- **At the handshake**, the server verifies your session before opening the stream. No session, no data: the request is rejected with `401 Unauthorized`.
- β’**Every 60 seconds during the stream**, the server **re-validates your session**. If your session has expired, or you logged out in another tab, or an admin revoked it, the connection is closed immediately. Without this, a stream opened once could keep delivering data for its full lifetime even after you logged out β the re-check closes that window to at most a minute.
- β’**Each connection auto-closes after 5 minutes** (a platform constraint of our serverless infrastructure). This is invisible to you: the client's reconnect logic simply opens a fresh stream, so the feed continues without interruption. You may notice a one-frame flicker of the status pill roughly every five minutes β that is the seamless reconnect, working as intended.
Because access is tied to your live session, signing out anywhere stops the feed everywhere. For more on session handling and account protection, see [Security](/docs/security).
## Plan Requirements
The Realtime Stream requires the **Pro plan ($59/mo)** or the **Bot plan ($99/mo)**. It is not available on Starter ($29/mo). If you are on Starter, the page shows an upgrade gate instead of the live feed.
What each tier gets here is the same live feed β the difference is what you can *do* with the awareness it gives you:
- **Pro ($59/mo)** β full Realtime Stream, plus the analysis stack it pairs with: [Whale Tracker](/docs/whale-tracker), [Arbitrage](/docs/arbitrage), and the [EV Scanner](/docs/ev-scanner). Pro traders use the stream as a manual HUD.
- β’**Bot ($99/mo)** β everything in Pro, plus **live execution**. Live CLOB trading on Polymarket and automated strategies are Bot-only. If you want to turn a move you spot on the stream into an automatic order, that automation lives in the bot stack, not on this page.
To be explicit: spotting a move here is available from Pro up, but **placing a real order requires the Bot plan**. The Realtime Stream never executes trades itself β it is intelligence, and execution is a separate, gated capability.
## Tips for Using It as a HUD
- **Dock it.** Put the page in its own window on a second monitor or a spare phone. A glanceable, always-on feed beats refreshing a tab every few minutes.
- β’**Filter to your book.** If you only trade three or four markets at a time, type a keyword into the filter and keep the table tight. Less noise, faster reactions.
- β’**Read Top Movers like a radar.** A market suddenly appearing in the five movers with a big 1h jump is your cue to investigate *why* β often there is fresh news. Cross-check it against the [News & Calendar](/docs/news-calendar) feed.
- β’**Confirm before you act.** The stream tells you something moved; it does not tell you the edge is real. Use it to *trigger* analysis, then validate in the [AI Probability](/docs/ai-probability) view or the [EV Scanner](/docs/ev-scanner) before sizing.
- β’**Watch the timestamp on weak connections.** On hotel Wi-Fi or a train, the pill plus the last-updated time tell you instantly whether the data is current or stale.
## Common Gotchas
- **Flat 0.0% changes are not a bug.** They mean the upstream source did not report a delta for that market. Do not read them as "no opportunity" β read them as "no movement data."
- β’**A brief flicker every ~5 minutes is normal.** That is the automatic reconnect after the connection's lifetime cap. The feed continues; nothing is lost.
- β’**The feed stops when you leave the page β by design.** This is not a notifications system. To get alerted while you are *not* watching, configure [Notifications](/docs/notifications) instead.
- β’**Stuck on Reconnecting?** First confirm you actually have network. If you do and it persists past a few seconds, refresh the page for a clean handshake. A failed re-auth (e.g. you logged out elsewhere) will also keep it from reconnecting β in that case, sign back in.
- β’**This is awareness, not automation.** If you want the platform to *act* on moves without you watching, that is the job of bots and copy trading on the Bot plan.
## Related Docs
- [Whale Tracker](/docs/whale-tracker)
- β’[Arbitrage](/docs/arbitrage)
- β’[News & Calendar](/docs/news-calendar)
- β’[Notifications](/docs/notifications)