Kalshi Trades Scraper & Monitor - Large Trades, Order Book
Pricing
from $2.10 / 1,000 trade returneds
Kalshi Trades Scraper & Monitor - Large Trades, Order Book
Kalshi Trades as rows: time, market, Yes and No price, contracts, USD amount and taker side. Filter by market, event, series, trade size or time. Optional order book row per market. Monitoring mode returns only trades made since the last run, such as 1,000+ contract trades.
Pricing
from $2.10 / 1,000 trade returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
Get Kalshi trades as rows: when each trade happened, in which market, at what Yes and No price, how many contracts, how many dollars the taker paid and which side the taker took. Filter by market, event, series, trade size or time, add the current order book of each market, or switch on monitoring mode to get only the trades made since your previous run, for example every trade of 1,000 contracts or more.
It reads Kalshi's own public market-data API (the endpoints Kalshi documents as needing no API key). No login, no proxy, no browser.
What you get
One row per trade:
| Field | Meaning |
|---|---|
createdTime | When the trade was executed (UTC, milliseconds). createdTimeRaw keeps Kalshi's own value with microseconds. |
ticker, marketTitle, marketSubtitle | The market, its question and the name of its Yes side |
eventTicker, eventTitle, seriesTicker, category | The event and series the market belongs to |
yesPrice, noPrice | Trade price of each side in dollars (0.14 = 14 cents; the two add up to 1) |
contracts | Number of contracts (Kalshi allows fractions, for example 33.68) |
takerSide, takerBookSide | Side the taker took (yes or no) and Kalshi's book wording for it (bid or ask) |
takerPrice, amountUsd | Price of the taker's side, and contracts x that price = what the taker paid, before fees |
isBlockTrade | True for trades matched off the book as block trades |
marketStatus | Kalshi's status of the market when the row was written |
kalshiUrl | Page of the market's series on kalshi.com |
tradeId | Kalshi's id of the trade |
With Add order book rows switched on, one more row per market (rowType: "orderbook"):
| Field | Meaning |
|---|---|
bestYesBid, bestNoBid | Highest resting bid on each side |
bestYesAsk, bestNoAsk | Implied asks: a Yes ask is 1 minus the best No bid, and the other way round (Kalshi's book holds bids only) |
spread | bestYesAsk minus bestYesBid |
yesBids, noBids | The top price levels, best first, each with price and contracts |
yesBidContractsShown, yesBidUsdShown (and the no pair) | Size of the returned levels in contracts and in dollars |
An empty side gives null for its best price, never 0.
Typical uses
- Follow large trades: set Minimum amount (USD) to 1000 (or Minimum contracts), switch on monitoring mode and run it every few minutes. Each run returns only the new large trades.
- Trade tape of one market or event: give a market ticker or an event ticker and get its trades, newest first.
- Flow by side: filter on Taker side and Minimum amount (USD) to see where money is going.
- Liquidity check: add order book rows to see spread and depth of the markets that just traded.
Input
- Market / event / series tickers: any mix. Leave all empty to read the trades of every market. Tickers are the codes in Kalshi's API, such as
KXFEDDECISION-26OCT-H0(market),KXFEDDECISION-26OCT(event) orKXFEDDECISION(series). Lower case is accepted. - Minimum contracts, Minimum amount (USD), Taker side: filters applied to every trade.
- Last hours, or Since and Until: time window (UTC). Since includes its second, Until does not.
- Maximum trade rows: 1,000 by default.
- Add order book rows, Order book levels, Maximum order book rows.
- Monitoring mode and Reset monitoring memory.
Example: large trades of the last hour
{ "minAmountUsd": 1000, "lastHours": "1", "maxResults": 500 }
Example: watch one event for new trades, with the order book
{ "eventTickers": ["KXFEDDECISION-26OCT"], "monitoringMode": true, "includeOrderbook": true }
Monitoring mode
Run the same input on a schedule.
- The first run only remembers the starting point. It returns no trade row and charges nothing.
- Later runs return only trades made after the previous run that match your filters, oldest first.
- A run that finds nothing new returns one free row with the status
no-new-trades-since-last-runand charges one small scan check. - If a run stops at Maximum trade rows or at the maximum charge you set, the trades it could not return are not marked as returned. The next run returns them.
- If Kalshi cannot be read to the remembered point, the run returns nothing, charges nothing and keeps the starting point, so the next run reads the same stretch again.
- Trades are compared by Kalshi's trade id, so several trades with the same timestamp are neither dropped nor repeated.
- The memory is kept per set of tickers and filters. A different filter starts its own memory.
Things to know before you rely on it
- Volume. Across all markets Kalshi printed about 1,000 trades every 8 seconds when this was measured (October 2026, a weekday afternoon in the US). Reading every market for a whole day means millions of trades. One run reads at most 1,000,000 trades; if that is not enough to reach the start of your window or the remembered point, the run says so in a free row with
truncated: true, and those older trades are not returned. Run monitoring more often or name markets. - Contracts are not dollars. Many trades are in combination (parlay) markets, whose tickers start with
KXMVEand whose contracts often cost a cent or less: 1,000 contracts there can be a few dollars. To follow large money, filter on Minimum amount (USD);amountUsdis on every row. - Series with many markets. A series with more than 100 markets is read from the all-markets feed and filtered, which needs a time window or monitoring mode. Without one you get a free
too-many-marketsrow and nothing is read. - Unknown tickers come back as free rows (
unknown-market,unknown-event,unknown-series). Kalshi's trade endpoint answers an unknown ticker with an empty list, so this Actor checks every ticker first instead of reporting "no trades". - Market details. Titles come from a second lookup. If it fails, the trade row is still returned with
marketTitle: nullanddetailsNotesays why. Event details are looked up for at most 300 events per run. - Old markets. Kalshi moves long-settled markets to a historical archive; their trades are not returned here.
amountUsdis contracts x the price of the taker's side. It is not Kalshi's fee and not the payout.- When Kalshi refuses or cannot be read, you get a free row with the status
blocked,unreadableorincomplete. A failure is never reported as "no trades".
Pricing
Pay per result:
- Trade row returned.
- Order book row returned (only when you switch it on).
- Scan check: only for a monitoring run that compared and found nothing new.
Free: the first monitoring run, every row that explains why something was not returned, and runs that could not read Kalshi.
Related Actors
- Kalshi Markets Scraper: every Kalshi market with prices, volume and open interest, and a monitoring mode for price moves.
- Kalshi Weather Markets API: Kalshi temperature and weather markets.
Notes
This is an unofficial tool. It is not affiliated with, endorsed by or sponsored by Kalshi. It reads public market data only: no account data, no orders, no personal information. Nothing here is trading, investment or legal advice, and the data may be delayed or incomplete. You are responsible for how you use the data and for following Kalshi's terms and the rules that apply to you.
Thanks for using this Actor
We build these tools for people who run them every day, and we improve them from what users tell us.
- Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
- Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.
If this Actor saved you time, a short review helps other people find it.