Kalshi Scraper | Prediction Market API
Pricing
from $0.80 / 1,000 market scrapeds
Kalshi Scraper | Prediction Market API
Extract prediction market data from Kalshi: series, events, markets, prices, volume, and resolution rules. Search by keyword or paste Kalshi market URLs.
Pricing
from $0.80 / 1,000 market scrapeds
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Kalshi Scraper | Prediction Market API
Extract prediction market data from Kalshi, the CFTC-regulated U.S. prediction market exchange. The Kalshi Scraper searches by keyword or reads individual market/event URLs directly, returning structured data on series, events, markets, prices, volume, and resolution rules.
| Search Kalshi by keyword across every category — politics, economics, sports, crypto — or pull a specific market's live yes/no pricing, volume, settlement timing, and full resolution rules from its URL. |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.
Apify Actor: parsebird/kalshi-scraper. Scrapes prediction market data from Kalshi (kalshi.com), the CFTC-regulated U.S. prediction market exchange. Call via ApifyClient: client.actor("parsebird/kalshi-scraper").call(run_input={"searchQueries": ["inflation"], "maxResults": 50}). Also accepts startUrls/targetUrls/targetUrl (Kalshi search URLs or individual market/event URLs), pageSize (items per API call, 1-100), and proxyConfiguration. Search results return series/event-grouped records: query, sourceUrl, series_ticker, series_title, event_ticker, event_title, category, total_volume, active_market_count, markets[] (ticker, yes_bid, yes_ask, last_price, volume), tags. Direct listing URLs return flattened per-market records: ticker, series_ticker, event_ticker, title, subtitle, description, categories, market_type, status, yes_price, no_price, last_trade_price, volume, settlement_timing, resolution_source, rules, created_at, close_date. Full API spec: https://apify.com/parsebird/kalshi-scraper/api. Get your token: https://console.apify.com/settings/integrations.
What does Kalshi Scraper do?
This actor calls Kalshi's own public search and trading APIs directly — no browser, no HTML scraping, no rate-limit guesswork. You give it a keyword, a Kalshi search URL, or a specific market/event URL, and it returns structured pricing, volume, and resolution data.
- 🔍 Multi-keyword search — run several search terms in one job; each query's results are tagged so you know which term surfaced them.
- 🔗 Direct market and event URLs — paste a Kalshi listing URL to pull one specific market, or an event URL to pull every market under that event (e.g. all strike-price variants of the same question).
- 🔎 Search-URL support — paste a
kalshi.com/markets?search=...URL directly and it's parsed into the equivalent keyword search. - 💰 Live pricing and volume — yes/no bid/ask, last traded price, and volume for every market.
- 📜 Full resolution details — settlement timing, resolution/settlement sources, and complete primary/secondary rules text.
- 📄 Configurable pagination — control page size (up to 100 per call) and a per-query result cap independently.
What data can you extract from Kalshi?
| Field | Description |
|---|---|
series_ticker / event_ticker / ticker | Kalshi identifiers you can map back to the exchange |
title / subtitle / description | Human-readable market copy |
category / tags | Classification (Politics, Sports, Economics, Crypto, etc.) |
yes_price / no_price / last_trade_price | Current market pricing |
volume | Trading volume |
status / market_type | Lifecycle status and contract type (e.g. binary) |
settlement_timing / resolution_source / rules | How and when the contract resolves |
close_date / open_date / expiration_date | Key lifecycle timestamps |
Search results return a series/event-grouped shape with a nested markets[] array (matching Kalshi's own search API); direct listing URLs return one flattened record per market. See the full field reference for both shapes.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
searchQueries | array | No | ["new york"] | Keywords to search; each query runs independently |
startUrls | array | No | — | Kalshi search URLs or individual market/event URLs |
targetUrl | string | No | — | Single Kalshi URL for quick one-off pulls |
targetUrls | array | No | — | Alias of startUrls |
maxResults | integer | No | 200 | Maximum markets to save per query |
pageSize | integer | No | min(maxResults, 50) | Items fetched per API call (1–100) |
proxyConfiguration | object | No | Off | Optional Apify Proxy settings |
Output example
{"query": "new york","sourceUrl": "https://api.elections.kalshi.com/v1/search/series","type": "contract","series_ticker": "GOVPARTYNY","series_title": "New York Governor","event_ticker": "GOVPARTYNY-26","event_title": "New York Governor winner?","category": "Elections","total_volume": 295509,"active_market_count": 2,"markets": [{"ticker": "GOVPARTYNY-26-D","yes_subtitle": "Democratic party","yes_bid": 89,"yes_ask": 90,"last_price": 89,"volume": 223875}],"tags": ["US Elections", "Governor"]}
Download results as JSON, CSV, Excel, HTML, or XML directly from the Apify Console, or fetch them via the Apify API / dataset endpoint.
Use cases
- Market monitoring — track pricing and volume shifts on specific Kalshi markets over time.
- Sentiment and forecasting research — use live yes/no pricing as a real-time probability signal for politics, economics, or sports questions.
- Cross-market analysis — pull every market under an event (e.g. all outcome variants of one question) in a single call.
- Content and newsletter automation — surface trending markets by keyword for a newsletter or trading dashboard.
- Rules and compliance research — pull full settlement rules and resolution sources for due diligence.
How to scrape Kalshi prediction markets
- Set your search — add one or more Search Queries, or paste Kalshi URLs into Start URLs / Target URL.
- Set limits — Max Results caps markets saved per query; Page Size controls API call batching.
- (Optional) add a proxy — enable Apify Proxy under Proxy Configuration for larger or repeated runs.
- Run the actor — click Start in the Apify Console, or trigger it via the API or on a schedule.
- Get your data — download the dataset as JSON/CSV/Excel, or pull it via the API.
How much does it cost to scrape Kalshi?
This actor uses Pay-Per-Event (PPE) pricing — you're charged per market/series record extracted, not per compute unit.
| Event | Price per event | Price per 1,000 |
|---|---|---|
market-scraped (Free plan) | $0.0009 | $0.90 |
market-scraped (Bronze / Silver / Gold plans) | $0.0008 | $0.80 |
A run collecting 1,000 records costs roughly $0.80–$0.90 depending on your Apify plan. All Apify accounts include a free trial with credits to try the actor before committing to a paid plan.
FAQ
Why do search results and listing-URL results look different?
Search results mirror Kalshi's own search API, which groups markets under their parent series/event with a nested markets[] array. Listing URLs (a specific market or event page) return one flattened record per market instead, since you're already targeting a specific contract.
What happens if I paste an event URL instead of a market URL? The actor detects whether the last URL segment resolves to a single market or an event, and if it's an event, returns one record per market under that event (e.g. every strike-price variant of the same question).
What happens if a market has expired or settled? Kalshi removes expired/settled markets from its API after a period. If a Start URL points to a market that's no longer available, the actor logs a warning and skips it rather than failing the run.
Are prices in cents or dollars?
Search results return Kalshi's raw pricing fields as-is (cents, e.g. "yes_bid": 89). Direct listing URL results normalize pricing to dollars (e.g. "yes_price": 0.89) to match the documented field names.
Does this actor support scheduling and integrations? Yes. Use Apify Schedules to run it daily or weekly, connect it to Zapier, Make, or Slack, or call it through the Apify API from your own backend.
Is it legal to scrape Kalshi?
Yes. This actor only accesses publicly available market data that Kalshi makes visible via its own public API. It does not bypass login walls, place trades, or access private account data. Scraping publicly available data is generally considered legal — see Apify's overview of web scraping legality for more detail. Users are responsible for ensuring their use of the collected data complies with applicable laws and Kalshi's Terms of Service. This actor is not affiliated with or endorsed by Kalshi and does not provide financial or investment advice.
Python and JavaScript usage
Python (apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run_input = {"searchQueries": ["inflation"],"maxResults": 50,}run = client.actor("parsebird/kalshi-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item.get("event_title") or item.get("title"))
JavaScript (apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const input = {searchQueries: ['inflation'],maxResults: 50,};const run = await client.actor('parsebird/kalshi-scraper').call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Related Actors
- Polymarket Leaderboard Scraper — trader rankings from Polymarket
- Polymarket Market Scraper — market data from Polymarket
- Polymarket Rewards Scraper — liquidity rewards data from Polymarket
Browse the full catalog on the ParseBird Apify Store page.