Polymarket Market Monitor + Whale & Arbitrage Signals
Pricing
from $5.00 / 1,000 polymarket market signals
Polymarket Market Monitor + Whale & Arbitrage Signals
Turn Polymarket into a trading-signal feed: watchlist any market by slug, track price and volume changes between runs, whale flow, top holders, price history, orderbook depth, and Kalshi arbitrage spreads. Category, keyword and volume filters. JSON or CSV. First 5 results per run free
Pricing
from $5.00 / 1,000 polymarket market signals
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Polymarket Market Monitor — Prices, Whale Trades & Arbitrage Signals
Turn Polymarket into a structured trading-signal feed. Track prediction markets by category or keyword — live prices, 24h/1wk/1mo price moves, volume, liquidity, resolution dates — plus signal layers no plain scraper gives you: price & volume deltas versus your previous run, whale trade flow, live orderbook depth, and experimental Kalshi cross-market arbitrage matching. One row per market (or per event group), JSON or CSV out. First 5 results of every run are free so you can validate the output shape.
How it works

✨ Why use this monitor?
Watching hundreds of prediction markets by hand doesn't scale, and a plain market scraper only tells you where prices are — not what changed, who's moving size, or whether the same question is priced differently elsewhere.
- 📌 Watchlist mode. Pass
marketSlugs/eventSlugsstraight from polymarket.com URLs to track exactly the markets you care about — watchlist items are always included, bypassing the volume/keyword filters, and combine freely with category discovery. - 📈 Cross-run change detection. The actor remembers every market it saw and reports
priceChangeSinceLastRun,volume24hChangeSinceLastRun, andvolumeTradedSinceLastRunon the next run — schedule it hourly and you have a change feed, not a snapshot. - 🕰️ Price history (opt-in). Each market's full YES-price time series from the CLOB — daily candles over the market's lifetime, or 6h/1h candles for the last month. Backtest or chart without waiting for scheduled runs to accumulate.
- 🏦 Top holders (opt-in). The largest position holders on each side of the market — wallet, display name, shares, and estimated USD value. Whale positions to complement the whale flow feed.
- 🐋 Whale trade flow (opt-in). Large-trade count, buy/sell/net USD flow, and the top 5 biggest recent trades per market — trader name, side, outcome, USD value — joined from Polymarket's public trade feed in a single extra API sweep.
- 📚 Live orderbook depth (opt-in). Best bid/ask, spread, bid/ask depth in USD (top 10 levels), and book imbalance from the CLOB — see whether a price can actually absorb your size.
- ⚖️ Kalshi arbitrage matching (opt-in, experimental). Each Polymarket question is fuzzy-matched against ~70k open Kalshi markets; when a twin is found you get its ticker, yes bid/ask, the price spread in points, and an
arbSignalflag. Matching is deliberately conservative — a missed match beats a false signal. - 🚨 Odds-outlier flags. Every row carries heuristic signals:
isBigMover(10+ point move in 24h),isLongshotRally(+5 points on a ≤20¢ market),isNearResolution(resolves within 48h with active volume),isThinBook(high volume on thin liquidity). - 🎛️ Trader-grade filters. Minimum 24h volume, minimum liquidity, minimum lifetime volume, minimum price move, minimum minutes until resolution — keep only markets that matter to your strategy.
- ⚡ Pure JSON APIs. No HTML parsing, no login, no proxies needed — data comes straight from Polymarket's public Gamma, CLOB, and Data APIs plus Kalshi's public API. Fast and stable.
🎯 Use cases
| Team | What they build |
|---|---|
| Prediction-market traders | Hourly change feeds with whale flow and thin-book warnings before entering positions |
| Arbitrage hunters | Polymarket-vs-Kalshi spread screens on matched markets |
| Quant / data teams | Historical price+volume time series by scheduling runs and appending datasets |
| Journalists / researchers | Odds trackers for elections, geopolitics, Fed decisions, sports |
| Crypto analysts | BTC/ETH strike-market dashboards with orderbook depth |
| Alert builders | Pipe arbSignal / isBigMover rows into Slack, Telegram or email via Apify integrations |
📥 Supported inputs
No URLs needed — pick what to track with filters:
| Input | Behaviour |
|---|---|
marketSlugs | Watchlist: exact markets by URL slug (the last path segment of a polymarket.com market URL). Always included, filters bypassed |
eventSlugs | Watchlist: event groups from polymarket.com/event/<slug>. In markets mode every market inside the event is tracked; in events mode each slug is one row |
categories | Top-level category shortcuts: sports, politics, crypto, technology, science, business, finance, elections, entertainment, economy, world |
tagIds | Raw Polymarket Gamma tag IDs for anything outside the shortcuts (browse at gamma-api.polymarket.com/tags) |
searchQueries | Keyword filter on the market question/description, e.g. ["bitcoin", "fed"] |
itemType | markets = one row per question · events = one row per event group (e.g. "World Cup Winner") with a nested markets summary |
status | active (default), closed (resolved), or all |
Watchlist slugs and category/keyword discovery combine in one run (watchlist rows come first). Leave everything empty to track the whole exchange sorted by your sortBy choice.
🔄 How it works
- Pull markets (or event groups) from Polymarket's public Gamma API for each selected category/tag, sorted by 24h volume, liquidity, end date, or recency.
- Apply your filters — volume, liquidity, price move, minutes-until-resolution, keywords.
- Diff against the previous run — price/volume deltas are computed from a persistent snapshot (stored in a named key-value store, so it survives between runs and works on schedules).
- Join the signal layers you enabled — whale trades (one API sweep for all markets), orderbook depth (one CLOB call per market, fetched in parallel), Kalshi twin matching (one index build per run).
- Flag outliers and push one row per market/event to the dataset. JSON and CSV export automatically.
⚙️ Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
marketSlugs | array | [] | Watchlist of exact market slugs — always included, filters bypassed |
eventSlugs | array | [] | Watchlist of event slugs — expanded to their markets in markets mode |
categories | array | ["politics"] | Category shortcuts (see Supported inputs) |
searchQueries | array | [] | Case-insensitive keyword filter on question + description |
tagIds | array | [] | Raw Gamma tag IDs, combined with categories |
itemType | string | markets | markets or events |
status | string | active | active / closed / all |
sortBy | string | volume24hr | volume24hr / liquidity / endDate / startDate / newest |
minVolume24h | integer | 0 | Drop markets under this 24h USD volume |
minLiquidity | integer | 0 | Drop markets under this resting liquidity |
minTotalVolume | integer | 0 | Drop markets under this lifetime volume |
minPriceChangePct | integer | 0 | Keep only markets whose 1wk/1mo price moved ≥ N points |
minutesUntilEnd | integer | 0 | Drop markets resolving sooner than N minutes from now |
includeWhaleTrades | boolean | false | Join whale flow + top 5 whale trades per market |
whaleMinUsd | integer | 10000 | Minimum single-trade cash value to count as a whale |
includeOrderbook | boolean | false | Fetch live CLOB book per market (best bid/ask, depth, imbalance) |
includePriceHistory | boolean | false | Attach the YES-price time series (up to 400 points, newest last) |
priceHistoryInterval | string | daily | daily (full lifetime) / 6h / 1h (last ~month) |
includeTopHolders | boolean | false | Attach largest position holders per outcome side |
topHoldersCount | integer | 10 | Holders fetched per outcome side |
kalshiArb | boolean | false | Fuzzy-match against open Kalshi markets and compute arb spreads |
kalshiArbMinSpreadPct | integer | 5 | Points of spread needed to flag arbSignal: true |
dedupe | boolean | false | Skip rows already pushed on previous runs. Leave off for monitoring — deltas are computed either way |
maxItemsPerSource | integer | 300 | Per-category fetch cap before filtering |
maxItemsTotal | integer | 100 | Hard cap on dataset rows per run (controls cost) |
📊 Output overview
Each tracked market is one single dataset row of type: "market" (or type: "event" in events mode). All enabled signal layers — cross-run deltas, whale flow, orderbook, Kalshi match — are merged into the same row, so the dataset row count equals the market count exactly. You're charged per result after the first 5 free rows each run.
📦 Output sample
{"type": "market","id": "531217","question": "Will the price of Bitcoin be above $66,000 on July 11?","slug": "will-the-price-of-bitcoin-be-above-66000-on-july-11","url": "https://polymarket.com/event/bitcoin-price-on-july-11","conditionId": "0x66b0824d3e2fe1c...","eventTitle": "Bitcoin price on July 11?","outcomes": ["Yes", "No"],"outcomePrices": [0.0145, 0.9855],"yesPrice": 0.0145,"lastTradePrice": 0.014,"bestBid": 0.014,"bestAsk": 0.015,"spread": 0.001,"volume24h": 311480.51,"volume1wk": 1102873.22,"totalVolume": 4817263.9,"liquidity": 54921.34,"startDate": "2026-07-04T20:01:44Z","endDate": "2026-07-11T21:00:00Z","minutesUntilEnd": 1362,"oneDayPriceChange": -0.011,"oneWeekPriceChange": -0.045,"oneMonthPriceChange": null,"priceChangeSinceLastRun": -0.002,"volume24hChangeSinceLastRun": 18211.4,"volumeTradedSinceLastRun": 21830.7,"lastSeenAt": "2026-07-10T21:24:21.931Z","isBigMover": false,"isLongshotRally": false,"isNearResolution": true,"isThinBook": false,"signals": ["resolves within 48h with active volume"],"whaleTradeCount": 3,"whaleBuyUsd": 42100.5,"whaleSellUsd": 5250.47,"whaleNetFlowUsd": 36850.03,"topWhaleTrades": [{"side": "BUY","outcome": "No","usdValue": 18067.0,"shares": 50000,"price": 0.3613,"trader": "0x8bd3...f69a","tradedAt": "2026-07-10T18:14:50.000Z"}],"bookBestBid": 0.014,"bookBestAsk": 0.015,"bookSpread": 0.001,"bidDepthUsd": 8211.19,"askDepthUsd": 12081.53,"bookImbalance": -0.191,"priceHistory": [{ "t": "2026-07-04T00:00:08.000Z", "p": 0.031 },{ "t": "2026-07-05T00:00:08.000Z", "p": 0.024 }],"topHolders": [{ "outcome": "No", "wallet": "0xa5ef...2966", "name": "athelstan", "shares": 505624, "usdValue": 498293.4 }],"kalshiMatch": {"kalshiTicker": "KXBTCD-26JUL1117-T66000","kalshiTitle": "BTC price on Jul 11, 2026 at 5pm EDT? — $66,000 or above","kalshiYesBid": 0.01,"kalshiYesAsk": 0.01,"kalshiYesMid": 0.01,"matchScore": 0.67,"arbSpreadPct": 0.45,"arbSignal": false},"arbSpreadPct": 0.45,"arbSignal": false,"active": true,"closed": false,"scrapedAt": "2026-07-10T22:30:11.412Z"}
🗂 Key output fields
| Group | Fields |
|---|---|
| Identity | id, question, slug, url, conditionId, eventId, eventSlug, eventTitle |
| Prices | outcomes[], outcomePrices[], yesPrice, lastTradePrice, bestBid, bestAsk, spread |
| Volume & liquidity | volume24h, volume1wk, volume1mo, totalVolume, liquidity |
| Price moves | oneDayPriceChange, oneWeekPriceChange, oneMonthPriceChange (from the API, as decimals: 0.05 = 5 points) |
| Cross-run deltas | priceChangeSinceLastRun, volume24hChangeSinceLastRun, volumeTradedSinceLastRun, lastSeenAt — null on the first run a market is seen |
| Outlier flags | isBigMover, isLongshotRally, isNearResolution, isThinBook, signals[] (human-readable reasons) |
Whale flow (when includeWhaleTrades: true) | whaleTradeCount, whaleBuyUsd, whaleSellUsd, whaleNetFlowUsd, topWhaleTrades[] |
Orderbook (when includeOrderbook: true) | bookBestBid, bookBestAsk, bookSpread, bidDepthUsd, askDepthUsd, bookImbalance (−1…1, positive = bid-heavy) |
Price history (when includePriceHistory: true) | priceHistory[] — {t, p} points, ISO timestamp + YES price, newest last, up to 400 points |
Top holders (when includeTopHolders: true) | topHolders[] — {outcome, wallet, name, shares, usdValue} sorted by position value |
Kalshi arb (when kalshiArb: true) | kalshiMatch{} (ticker, title, yes bid/ask/mid, match score), arbSpreadPct (Polymarket yes − Kalshi mid, in points), arbSignal |
Event rows (itemType events) | title, tags[], marketCount, leadingOutcome, leadingOutcomePrice, markets[] (nested per-outcome summary), openInterest, commentCount |
❓ FAQ
How do the cross-run deltas work?
The actor stores a snapshot of every market it saw (price, 24h volume, lifetime volume) in a named key-value store called polymarket-monitor-state. On the next run it diffs current values against that snapshot. Deltas are null the first time a market is seen. Snapshots older than 30 days are pruned automatically.
How reliable is the Kalshi matching?
It's fuzzy title matching with a conservative threshold, and it's marked experimental for a reason. In testing it correctly pairs exact twins (e.g. Polymarket "Bitcoin above $66,000 on July 11" → Kalshi "BTC price on Jul 11 — $66,000 or above") and rejects near-misses (a "Fed +25bps" question will NOT match a "Fed funds rate above X%" market). But resolution criteria, timezones and fee structures differ between platforms — always verify both markets' rules before trading a flagged spread. matchScore is included so you can set your own bar.
Does a big arbSpreadPct mean free money?
No. Spreads can reflect different resolution sources, different cut-off times, fees, or stale quotes on the thinner platform. Treat arbSignal as a screening tool, not a trade instruction. Nothing in this actor's output is financial advice.
Where do I find a market's slug for the watchlist?
It's the last path segment of the market's polymarket.com URL. For event pages (polymarket.com/event/<slug>) use eventSlugs. Unresolvable slugs are reported in the run log and skipped — the run doesn't fail.
What's the difference between whale trades and top holders?
topWhaleTrades is flow — who traded size recently. topHolders is positions — who is currently sitting on the largest stake on each side. A market can have zero recent whale trades but a $1M standing position.
Why don't I see whale trades on my markets?
The whale feed covers recent large trades exchange-wide. Quiet markets often have none above your whaleMinUsd threshold — that's real signal (no size moving), not missing data.
How do I build a price history?
Schedule the actor (e.g. hourly) with dedupe: false. Each run appends a fresh snapshot per market, and the delta fields tell you what changed between runs.
Does it need a proxy or login? No. All four data sources (Polymarket Gamma, CLOB, Data API, Kalshi) are public JSON APIs. The proxy input exists for completeness but is rarely needed.
How is the run priced?
Pay-per-event: you're charged per dataset row, and the first 5 rows of every run are free so you can validate output on your exact input before scaling maxItemsTotal up.
💬 Support
- For issues or feature requests, please use the Issues tab on the actor's Apify Console page.
- Author's website: https://muhamed-didovic.github.io/
- Email: muhamed.didovic@gmail.com
🛠 Additional services
- Custom output shape, additional signal layers, or one-off datasets: muhamed.didovic@gmail.com
- Need a similar monitor for other prediction or betting markets (Kalshi-first, sports odds, etc.)? Drop an email.
- For API access (no Apify fee, just a usage fee for the API): muhamed.didovic@gmail.com
🔎 Explore more scrapers
If this Polymarket Market Monitor was useful, see other scrapers and actors at memo23's Apify profile — covering finance, social media, job boards, real estate, and more.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Polymarket, Kalshi, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.
The actor accesses only publicly available JSON APIs (Polymarket's Gamma, CLOB and Data APIs; Kalshi's public trade API) — no authenticated endpoints, no order placement, no wallet access, no content behind a login. Output is market data, not financial advice; users are responsible for their own trading decisions and for ensuring their use complies with each platform's Terms of Service and applicable law in their jurisdiction.
SEO Keywords
polymarket scraper, polymarket api, polymarket market monitor, polymarket price tracker, prediction market scraper, prediction market data, polymarket odds api, polymarket whale tracker, polymarket whale trades, polymarket kalshi arbitrage, kalshi polymarket spread, prediction market arbitrage finder, polymarket orderbook data, polymarket volume tracker, polymarket price alerts, polymarket monitoring tool, scrape polymarket, polymarket dataset, election odds scraper, crypto prediction market data, polymarket gamma api, prediction market signals