Kalshi Markets Scraper
Pricing
Pay per event
Kalshi Markets Scraper
Export Kalshi prediction markets, odds, bids, asks, liquidity, volume, open interest, dates, outcomes, and rules. No login required; schedule runs or use the API.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Kalshi Markets Scraper exports public prediction-market contracts from Kalshi into clean JSON, CSV, Excel, XML, or API-ready datasets.
It uses Kalshi's structured public market-data API, so no Kalshi login, API key, browser, or proxy is required.
Use it for live odds snapshots, liquidity screens, recurring forecasting research, historical settlement exports, and data pipelines.
What does Kalshi Markets Scraper do?
The Actor retrieves one normalized record per Kalshi market contract.
Each record can include:
- ๐ YES and NO bid/ask prices
- ๐ง liquidity, volume, 24-hour volume, and open interest
- ๐๏ธ open, close, and expiration timestamps
- ๐ฏ market, event, and series tickers
- ๐ market rules, result, and expiration value
- ๐งฉ multivariate-event legs and custom strike data
- ๐ stable source API and Kalshi market links
You can browse the catalog or request exact contract tickers.
Cursor pagination supports both small samples and larger exports.
Who is Kalshi Markets Scraper for?
Prediction-market analysts
- Compare implied probabilities across active contracts.
- Build recurring snapshots of price and liquidity changes.
- Export settled outcomes for forecast evaluation.
Quant and data teams
- Feed normalized market records into warehouses or notebooks.
- Screen for minimum liquidity, volume, or open interest.
- Join Kalshi contracts with other market datasets using tickers.
Journalists and researchers
- Track market sentiment around elections, economics, weather, and events.
- Cite source-backed contract titles, rules, and timestamps.
- Schedule reproducible data collections for longitudinal analysis.
Trading dashboards and automation builders
- Refresh market catalogs on an Apify schedule.
- Trigger webhooks when a downstream rule detects a change.
- Connect datasets to Sheets, Make, Zapier, Slack, or a database.
Why use this Kalshi scraper?
- โ No credentials: reads anonymous public market data.
- โ Structured API: avoids brittle browser selectors.
- โ Contract-level rows: every dataset item is one market.
- โ Useful filters: status, event, series, dates, keyword, liquidity, volume, and open interest.
- โ Exact lookup: retrieve known market tickers directly.
- โ Normalized numbers: dollar and fixed-point strings become JSON numbers.
- โ
Raw preservation:
rawJsonretains the complete source market object. - โ Resilient requests: retries 429 and temporary server failures with backoff.
- โ Apify platform: schedule runs, call an API, export files, and connect integrations.
What Kalshi market data can you extract?
| Category | Fields |
|---|---|
| Identity | ticker, eventTicker, seriesTicker, title |
| Outcomes | yesSubtitle, noSubtitle, result, expirationValue |
| Quotes | yesBid, yesAsk, noBid, noAsk, lastPrice, previous quotes |
| Order sizes | yesBidSize, yesAskSize |
| Activity | liquidity, volume, volume24h, openInterest |
| Lifecycle | status, openTime, closeTime, expiration and update dates |
| Mechanics | market type, strike type, price ranges, provisional and early-close flags |
| Rules | primary and secondary rules, settlement sources |
| Multivariate | collection ticker, selected market legs and sides |
| Provenance | Kalshi URL, source API URL, scrape timestamp, raw source JSON |
Optional event enrichment adds category, series ticker, event title, event subtitle, exclusivity, and settlement sources.
How much does it cost to scrape Kalshi markets?
This Actor uses pay-per-event pricing.
You pay a small run-start fee plus a fee for each market saved successfully.
| Event | Free | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| Run start | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 |
| Market saved | $0.000030926 | $0.000026892 | $0.000020976 | $0.000016135 | $0.000010757 | $0.00001 |
Cost examples:
Calculated at the Free tier as the run-start charge + saved markets ร the Free per-market rate.
| Saved markets | Estimated charge |
|---|---|
| 10 | ~$0.00531 |
| 100 | ~$0.00809 |
| 1,000 | ~$0.03593 |
Your Apify Free plan includes monthly platform credits, so small evaluations can fit within those credits.
Prices are formula-derived from a representative current-build cloud run and include the fixed run-start fee.
How to scrape Kalshi prediction markets
- Open Kalshi Markets Scraper.
- Keep Market status set to
openfor a live snapshot. - Optionally enter a series ticker, event ticker, exact market tickers, or numeric thresholds.
- Set Maximum markets to the number of contracts you need.
- Click Start.
- Open the Dataset tab to inspect the result.
- Export JSON, CSV, Excel, XML, or RSS, or retrieve the dataset through the API.
A simple live snapshot:
{"status": "open","maxItems": 25,"pageSize": 100,"maxPages": 5}
One recurring series with event context:
{"seriesTicker": "KXHIGHNY","status": "open","includeEventDetails": true,"maxItems": 100}
A liquidity scan:
{"status": "open","minLiquidityDollars": 1000,"minVolume": 100,"maxItems": 500,"pageSize": 1000}
Input parameters
| Parameter | Type | Default | Purpose |
|---|---|---|---|
marketTickers | string[] | empty | Fetch up to 100 exact Kalshi market tickers |
eventTicker | string | empty | Restrict catalog results to one parent event |
seriesTicker | string | empty | Restrict catalog results to one recurring series |
status | string | open | open, closed, settled, or all |
keyword | string | empty | Match ticker, event ticker, title, or outcome labels |
minCloseTime | ISO string | empty | Earliest accepted close timestamp |
maxCloseTime | ISO string | empty | Latest accepted close timestamp |
minLiquidityDollars | number | 0 | Minimum reported dollar liquidity |
minVolume | number | 0 | Minimum reported total volume |
minOpenInterest | number | 0 | Minimum reported open interest |
includeEventDetails | boolean | false | Add cached event/category/series context |
maxItems | integer | 25 | Maximum market records saved |
pageSize | integer | 100 | Source records requested per cursor page |
maxPages | integer | 25 | Maximum cursor pages scanned |
Exact ticker lookups still apply keyword and numeric filters.
Set status to all when retrieving an exact ticker whose lifecycle state is unknown.
Output example
{"ticker": "KXHIGHNY-26JUL19-T88","eventTicker": "KXHIGHNY-26JUL19","seriesTicker": "KXHIGHNY","title": "Will the high temperature in NYC be 88ยฐ or above?","status": "active","category": "Climate and Weather","yesBid": 0.42,"yesAsk": 0.45,"noBid": 0.55,"noAsk": 0.58,"lastPrice": 0.44,"liquidity": 1250.5,"volume": 4821,"openInterest": 761,"closeTime": "2026-07-20T03:00:00Z","marketUrl": "https://kalshi.com/markets/...","sourceApiUrl": "https://api.elections.kalshi.com/trade-api/v2/markets?...","scrapedAt": "2026-07-19T12:00:00.000Z"}
Fields that Kalshi does not provide for a contract are omitted instead of emitted as misleading zeroes or nulls.
rawJson contains the original market object for advanced users.
Filter behavior and result scope
Source-side filtersโstatus, event, series, and close-time boundsโare sent to Kalshi.
Keyword, liquidity, volume, and open-interest filters are applied locally to returned market records.
When a numeric filter is enabled, a missing or unparseable source value does not pass the filter.
That fail-closed behavior prevents unknown liquidity from being treated as sufficient liquidity.
maxPages bounds selective scans.
Increase it if a rare keyword or high threshold returns fewer records than expected.
Tips for best results
- ๐ Start with 10โ25 markets to inspect the schema cheaply.
- ๐ฏ Prefer a series or event ticker when you know the target.
- ๐ Use a larger
pageSizefor selective keyword or liquidity scans. - ๐งพ Enable event details only when category or settlement-source context is needed.
- ๐ Schedule identical inputs to create comparable snapshots over time.
- ๐งฎ Treat prices as contract-dollar values between 0 and 1, not percentages.
- ๐ฆ Keep
rawJsonwhen your pipeline must survive future Kalshi field additions. - โ ๏ธ Market data changes quickly; use
scrapedAtto identify snapshot age.
Integrations and monitoring workflows
Kalshi Markets Scraper โ Google Sheets
Schedule an open-market scan and append quote, volume, and close-time columns for an analyst-friendly dashboard.
Kalshi Markets Scraper โ Slack or Discord
Use an Apify webhook or Make scenario to alert when downstream logic finds high volume or a large probability move.
Kalshi Markets Scraper โ BigQuery, Snowflake, or PostgreSQL
Store timestamped contract snapshots for research, model features, and historical comparisons.
Kalshi Markets Scraper โ Make or Zapier
Start a run on a schedule, filter dataset items, then create notifications, spreadsheet rows, or database records.
Kalshi Markets Scraper โ Python notebook
Pull the dataset with apify-client, group by category or event, and analyze spreads and market activity.
Using the Apify API with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/kalshi-markets-scraper').call({status: 'open',minLiquidityDollars: 1000,maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Install the client with npm install apify-client.
Using the Apify API with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/kalshi-markets-scraper').call(run_input={'seriesTicker': 'KXHIGHNY','status': 'open','includeEventDetails': True,'maxItems': 100,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Install the client with pip install apify-client.
Using the Apify API with cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~kalshi-markets-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"status":"open","maxItems":25}'
Use the returned run ID to inspect status and retrieve the default dataset.
Never put a long-lived token in public source code.
Use with AI agents via MCP
Kalshi Markets Scraper can be called by AI assistants through Apify's hosted Model Context Protocol server.
For Claude Code:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/kalshi-markets-scraper"
For Claude Desktop, Cursor, or VS Code, add:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/kalshi-markets-scraper"}}}
Authenticate with your Apify account when prompted.
Example prompts:
- โUse
automation-lab/kalshi-markets-scraperto export 100 open markets with at least $1,000 liquidity.โ - โGet active contracts for Kalshi series KXHIGHNY and include event details.โ
- โCreate a current Kalshi odds snapshot that I can compare with tomorrow's run.โ
Data quality and source notes
This Actor reads Kalshi's public Trade API.
Market status values in output are preserved from the source; for example, an input status of open can correspond to source status active.
Dollar fields are parsed from Kalshi fixed-point strings.
The original record remains available in rawJson.
Market URLs are constructed from source tickers for convenience.
Kalshi may add, rename, or omit fields as its API evolves.
Is it legal to scrape Kalshi market data?
This Actor accesses publicly available market data without bypassing authentication or technical restrictions.
Scraping public information is generally lawful in many jurisdictions, but permitted use depends on your location, purpose, Kalshi's terms, and applicable financial-data rules.
Do not use the Actor to manipulate markets, misrepresent stale information, violate privacy, or breach contractual restrictions.
You are responsible for complying with Kalshi's terms, the Kalshi Developer Agreement, and applicable law.
This Actor is an independent data tool and is not affiliated with or endorsed by Kalshi.
Frequently asked questions
Does this Actor place trades or access my Kalshi account?
No. It only reads public market metadata. It never requests account credentials and cannot place orders.
How fast is a run?
A small snapshot usually needs only one public JSON request. Event enrichment adds one request per unique parent event, so enriched runs take longer.
Why are some optional fields absent?
Kalshi does not populate every field for every market type or lifecycle state. Missing source values are omitted rather than fabricated.
Why did a keyword scan return fewer markets than requested?
Keyword filtering happens after source pages arrive. Increase maxPages, use a broader keyword, or target a known event or series ticker.
Why did an exact ticker fail?
Check spelling and use the complete market ticker, not only an event or series ticker. Set status to all if you also apply lifecycle filtering downstream.
How are probabilities represented?
Quote prices are decimal contract-dollar values from 0 to 1. A YES ask of 0.63 is commonly interpreted as an implied 63% market price before spread and fees.
How is this different from Kalshi's official API?
The Actor wraps public endpoints with validation, pagination, normalization, Apify datasets, exports, schedules, webhooks, API clients, and MCP access.
Can I export settled markets?
Yes. Set status to settled, then optionally narrow by event, series, close window, keyword, or exact ticker.
Other prediction-market scrapers
Explore related Actors maintained by automation-lab:
- Polymarket Markets Scraper โ public Polymarket contracts and odds
- Polymarket Leaderboard Scraper โ ranked trader performance
- Polymarket Wallet Portfolio and Trade History Scraper โ wallet positions and activity
- Kalshi Trader Social Profile Scraper โ public trader profiles and social activity
- Limitless Prediction Markets Scraper โ another prediction-market catalog
For Kalshi contract-level snapshots, use this Actor. For trader-level identity or portfolio workflows, choose the related specialist Actor.
Support
Open an issue on the Actor page with:
- the input that produced the problem;
- the run URL;
- the expected market or ticker;
- whether the issue is repeatable.
Do not include private credentials or sensitive trading information.
The run log reports page counts, matched records, saved records, retries, and enrichment activity to help diagnose source changes.