Kalshi and Polymarket Scraper
Pricing
from $0.50 / 1,000 markets
Kalshi and Polymarket Scraper
Prediction market data from Kalshi and Polymarket in one table, with the probability, bid and ask, volume and close date of each market. Search by keyword, filter by volume or closing date, and schedule runs to see which probabilities moved since the last one.
Pricing
from $0.50 / 1,000 markets
Rating
0.0
(0)
Developer
deriverge s.r.o.
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Kalshi and Polymarket Scraper reads the public market data of both exchanges and returns one row per market in the same shape: the question, the probability of Yes from 0 to 1, best bid and ask, last price, volume, close time, resolution rules and a link. Type a Search phrase such as fed rate and click Start. Without a search phrase or filter, Kalshi's newest markets come first, and many of them have not traded yet. It costs $1.00 per 1,000 markets on the Free plan ($0.50 on Business), and the $5 of monthly credit in Apify's Free plan covers about 5,000 markets.
What data does it return?
| Field | Description |
|---|---|
exchange, marketId, eventId | kalshi or polymarket, the market's ID on the exchange (a Kalshi ticker such as KXFEDFUNDSYEAR-37JAN01-T6.00, a Polymarket number such as 2589813) and the event it belongs to. |
question, subtitle | The question the market resolves, and the label of this market within its event, such as Above 6.00%. |
category, tags | On Kalshi the event category, such as Economics, and the series ticker. On Polymarket the tags of the market or of its event, with the first tag as category. |
status | open, closed (trading has ended, not yet settled), settled or unknown. |
probability | Probability of Yes (of the first outcome on Polymarket) from 0 to 1. On Kalshi it is the last traded price, or the midpoint of bid and ask when nothing has traded. |
probabilityChange | Change since the previous run with the same watch name: 0.24 means 24 percentage points. |
yesBid, yesAsk, lastPrice | Best bid, best ask and last trade for Yes, in dollars per contract from 0 to 1. |
outcomes, outcomePrices | Outcome labels, Yes and No on Kalshi, and the price of each. |
volumeUsd, volume24hUsd | Lifetime and 24-hour volume: in US dollars on Polymarket, in contracts on Kalshi, where each contract settles at $1. |
liquidityUsd, openInterest | Liquidity in US dollars as Polymarket reports it, null on Kalshi rows (see Limits), and open interest in contracts (Kalshi only). |
openedAt, closesAt | When trading opened and when it closes, as ISO 8601 UTC timestamps. |
resolvedOutcome, settlementValue | Winning outcome once the market is resolved; on Kalshi also the value it settled on, for example the measured temperature of a weather market. |
rules | Resolution rules as text. |
url | Market page. On Kalshi it is the page of the series, so every KXFEDFUNDSYEAR market links to the same address. |
orderBook | Only with Include the order book: bids and asks for Yes as [price, size] pairs, best first, up to Order book depth levels a side (10 by default). Kalshi's asks are derived from its bids for No. |
fetchedAt | When the market was read. |
How to scrape Kalshi and Polymarket
- Choose Exchanges, or leave it empty to read both.
- Type a Search phrase, such as
bitcoin,electionorfed rate. Polymarket runs it through its own full-text search, and on Kalshi it is matched against event and market titles. You can also pick a Preset; Weather reads Kalshi's daily temperature markets. - Narrow the list with Minimum total volume (USD) and Closing within N days, pick a Market status (open, settled or all) and set Maximum markets per exchange, which is 200 unless you change it.
- To follow changes, give the run a Watch name or save it as a task, and schedule it.
- Click Start. The Output tab shows the markets as a table and exports them as CSV, Excel or JSON. Over the API, the same run looks like this:
{"exchanges": ["kalshi", "polymarket"],"query": "fed rate","status": "open","minVolumeUsd": 1000,"closingWithinDays": 90,"maxMarkets": 100,"watchName": "fed"}
Example output
A Kalshi market from a run on 29 September 2026 that used a watch name, so probabilityChange is filled in. The run came before liquidityUsd was set to null for Kalshi, so it still shows Kalshi's 0.
{"key": "kalshi:KXFEDFUNDSYEAR-37JAN01-T6.00","exchange": "kalshi","marketId": "KXFEDFUNDSYEAR-37JAN01-T6.00","eventId": "KXFEDFUNDSYEAR-37JAN01","question": "Will the upper bound of the target range for the federal funds rate in effect at 11:59 PM ET on December 31, 2036 be above 6.00%?","subtitle": "Above 6.00%","category": "Economics","tags": ["KXFEDFUNDSYEAR"],"status": "open","probability": 0.34,"probabilityChange": 0.24,"yesBid": 0.01,"yesAsk": 0.34,"lastPrice": 0.34,"outcomes": ["Yes","No"],"outcomePrices": [0.34,0.66],"volumeUsd": 232.94,"volume24hUsd": 20.93,"liquidityUsd": 0,"openInterest": 63.94,"openedAt": "2026-07-29T18:00:00.000Z","closesAt": "2037-01-01T04:59:00.000Z","resolvedOutcome": null,"settlementValue": null,"rules": "If the upper bound of the target range for the federal funds rate in effect at 11:59 PM ET on December 31, 2036, as published on the Federal Reserve’s official website, is above 6.00%, then the market resolves to Yes.","url": "https://kalshi.com/markets/kxfedfundsyear","orderBook": null,"fetchedAt": "2026-09-29T06:20:18.227Z"}
How much does it cost to scrape Kalshi and Polymarket?
| Free plan | Starter | Scale | Business | |
|---|---|---|---|---|
| 1,000 markets | $1.00 | $0.80 | $0.65 | $0.50 |
| Order book snapshot, per 1,000 | $1.00 | $0.80 | $0.65 | $0.50 |
| Probability move, per 1,000 | $5.00 | $4.00 | $3.25 | $2.50 |
You pay only for the events in the table. There is no start fee, and compute time and proxies are included.
The first two rows of every run are not charged, so a run that returns 100 markets costs $0.098 on the Free plan. Each order book adds $0.001, and in watch mode each returned market that moved by 5 points or more since the last run adds $0.005.
Limits
- Without a search phrase, category, preset or volume filter, Kalshi lists its newest markets first. On 28 September 2026 the first 50 were memory-chip price markets and tennis matches, none of them traded yet. Polymarket's list is sorted by 24-hour volume.
- A Kalshi search by keyword, category or preset reads Kalshi's event list for the chosen status and stops once it has enough markets. Open events are searched in full, 12,601 of them on 30 September 2026. For settled markets or all markets the search reads at most 30,000 events, newest dates first, so older events are left out.
- Without a search phrase or category, each Kalshi row gets
categoryandtagsfrom a lookup of its event, for up to 500 events per run. Rows of further events keep both empty. - On Polymarket, Categories and the presets match the tags Polymarket gives a market. A market without tags has an empty
categoryand is found only by keyword. - Kalshi's API reported a liquidity of 0 for every market in September 2026, so
liquidityUsdis leftnullon Kalshi rows. UseopenInterestor the order book there. - The volume filter, Minimum total volume (USD), compares US dollars on Polymarket and contracts on Kalshi.
- A run reads at most 60 pages of each exchange's general market list: 12,000 Kalshi markets or 6,000 Polymarket markets. On Polymarket it also stops after 10 pages in a row without a match.
- Kalshi's combination markets (tickers starting with
KXMVE) are left out of the general listing because they carry no price.
Tracking changes between runs
Runs with the same Watch name, or runs of one saved task, compare every market they read with the previous snapshot. Each row gets probabilityChange, and the CHANGES record in the key-value store holds the number of new markets and of markets settled since the last run, plus a list of up to 100 markets that moved by 5 points or more, largest move first, with the old and the new probability. Turn on Return only markets that appeared since the last run to receive new markets only.
Kalshi weather markets
The Weather preset reads every Kalshi series in the Climate and Weather category whose ticker starts with KXHIGH, KXLOW, KXRAIN, KXSNOW, KXTEMP, KXGTEMP or KXHMONTH: 159 series on 30 September 2026, among them KXHIGHNY and KXLOWNY for New York. A typical question is Will the maximum temperature be >82° on Sep 3, 2026?, with subtitle 83° or above. Each series lists several temperature brackets per day, so raise Maximum markets per exchange when you want every city.
FAQ
Is it legal to scrape Kalshi and Polymarket?
Both exchanges publish market data through public APIs that need no account or key, and the actor reads only that data: prices, volumes, rules and order books. It collects nothing about accounts, positions or traders. You are responsible for how you use the results.
Do I need an account or an API key?
No. The actor uses Kalshi's public trade API and Polymarket's public Gamma and CLOB endpoints without credentials.
Can I compare the same question on both exchanges?
Rows from both exchanges share the same fields, so one keyword returns them side by side. The actor does not pair equivalent markets automatically, because the wording and the resolution rules differ between the exchanges.
How current are the prices?
Each market is read when the run reaches it, and fetchedAt records that moment. An order book is fetched right before its market row is saved.
Related scrapers
Support
This actor is built and maintained by deriverge s.r.o., a software company based in the Czech Republic. If a run fails or a field you need is missing, please open an issue in the Issues tab or write to us at info@deriverge.com. We respond in English and Czech. Runs can be scheduled in Apify Console or started from the API tab, which has examples for Python, JavaScript and cURL and works with Make, Zapier, n8n and the Apify MCP server. If the actor saves you time, a short review helps other people find it.