Prediction Markets Scraper: Kalshi & Polymarket Odds avatar

Prediction Markets Scraper: Kalshi & Polymarket Odds

Pricing

from $0.70 / 1,000 markets

Go to Apify Store
Prediction Markets Scraper: Kalshi & Polymarket Odds

Prediction Markets Scraper: Kalshi & Polymarket Odds

Prediction markets scraper and API for Kalshi and Polymarket: one normalized table of odds (Yes/No probability), bid/ask, 24h volume, liquidity, close time and rules. Filter by keyword or category, open or closed. $1 per 1,000 markets. Public data, no login or API key.

Pricing

from $0.70 / 1,000 markets

Rating

0.0

(0)

Developer

Data Gleaner

Data Gleaner

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Prediction Markets Scraper: Kalshi and Polymarket odds, volume and rules in one table

One normalized dataset of prediction-market prices from Kalshi and Polymarket. Each row is one market with the Yes and No probability, best bid and ask, last trade, 24-hour and total volume, liquidity, close time, resolution rules and a link to the market page. Filter by keyword or category, read open or settled markets, and sort by 24-hour volume. JSON, CSV or Excel. No login, no API key, no browser. $1.00 per 1,000 markets ($0.001 each).

Why this one

  • Two venues, one schema. Kalshi (US-regulated exchange) and Polymarket speak different dialects: Kalshi sends prices as dollar strings and volume in contracts, Polymarket sends outcomes and prices as JSON strings and volume in USD. Every row comes out with the same field names, numeric probabilities from 0 to 1, ISO 8601 times and a stated volumeUnit, so you can put the two side by side in a spreadsheet, a dashboard or an LLM prompt.
  • The official public market-data APIs. It reads Kalshi's public market-data API and Polymarket's public Gamma API over plain HTTP. No trading account, no key, no scraping around a block. Requests are paced politely (0.25 s by default) to stay well inside both venues' published rate limits.
  • Works from Apify's servers without a proxy. Both APIs answered from Apify datacenter IPs in testing. A proxy field is there if you want one.
  • Cheap to schedule. Pull the top 100 markets by 24-hour volume every hour for about $0.10 a run, or the full order book of open markets once a day.
  • Built for pipelines and AI agents. Flat rows, stable camelCase fields, numbers as numbers, a run summary in the status message (rows per venue, failures, anything that stopped the run early).

Minimal input

{"venues": ["kalshi", "polymarket"], "search": "bitcoin", "maxMarkets": 50}

An empty input runs a built-in example: the top 5 markets by 24-hour volume across both venues.

Sample output rows

A Kalshi market and a Polymarket market from a platform run on 2026-10-21 (rules text and tags shortened here):

{
"venue": "kalshi",
"marketId": "CONTROLH-2026-R",
"ticker": "CONTROLH-2026-R",
"eventId": "CONTROLH-2026",
"eventTicker": "CONTROLH-2026",
"eventTitle": "Which party will win the U.S. House?",
"question": "Will Republicans win the House in 2026?",
"outcomeLabel": "Republican Party",
"outcomes": ["Yes", "No"],
"yesPrice": 0.0905,
"noPrice": 0.9095,
"yesBid": 0.09,
"yesAsk": 0.091,
"noBid": 0.909,
"noAsk": 0.91,
"lastPrice": 0.091,
"volume24h": 1274457.26,
"volumeUnit": "contracts",
"totalVolume": 42666645.13,
"liquidity": null,
"openInterest": 31330400.78,
"closeTime": "2027-02-01T15:00:00Z",
"status": "open",
"result": null,
"category": "Elections",
"tags": ["Elections", "CONTROLH"],
"rules": "If the Republican Party has won control of the House in 2026, then the market resolves to Yes. ...",
"resolutionSource": "Library of Congress",
"url": "https://kalshi.com/markets/controlh",
"scrapedAt": "2026-10-21T15:53:21Z",
"input": {"venue": "kalshi", "search": null, "categories": null, "status": "open", "sortBy": "volume24h", "minVolume24h": null}
}
{
"venue": "polymarket",
"marketId": "2589811",
"ticker": "will-the-fed-decrease-interest-rates-by-25-bps-after-the-october-2026-meeting-20260617190324030",
"eventId": "606422",
"eventTicker": "fed-decision-in-october-20260617190323537",
"eventTitle": "Fed Decision in October?",
"question": "Will the Fed decrease interest rates by 25 bps after the October 2026 meeting?",
"outcomeLabel": "25 bps decrease",
"outcomes": ["Yes", "No"],
"yesPrice": 0.0035,
"noPrice": 0.9965,
"yesBid": 0.003,
"yesAsk": 0.004,
"noBid": null,
"noAsk": null,
"lastPrice": 0.003,
"volume24h": 858432.985999,
"volumeUnit": "USD",
"totalVolume": 9540985.758944,
"liquidity": 1129077.11034,
"openInterest": null,
"closeTime": "2026-10-29T03:59:00Z",
"status": "open",
"result": null,
"category": "Economy",
"tags": ["Fed", "fomc", "Economy", "Fed Rates", "Macro Indicators"],
"rules": "The FED interest rates are defined in this market by the upper bound of the target federal funds range. ...",
"resolutionSource": "https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm",
"url": "https://polymarket.com/event/fed-decision-in-october-20260617190323537",
"conditionId": "0x9cf563d7b55aa9aa876d5d7e55126347eee473f0ae56d799e325fdef2bf25297",
"scrapedAt": "2026-10-21T15:53:22Z",
"input": {"venue": "polymarket", "search": null, "categories": null, "status": "open", "sortBy": "volume24h", "minVolume24h": null}
}

Price

$1.00 per 1,000 markets ($0.001 per market row), final. Volume discounts apply automatically by Apify plan: Free and Bronze $0.001, Silver $0.00085, Gold $0.0007 per market.

RunMarketsCost at $0.001
Top 100 markets by 24h volume, hourly for a day24 runs x 100$2.40
Every open market about "bitcoin", onceabout 1,000about $1.00
1,000 markets, once1,000$1.00

Each returned market is one billed row, so maxMarkets is also your cost cap. Set a maximum charge per run in Apify and the run stops when it is reached.

What does Prediction Markets Scraper do?

  • Reads every open market on Kalshi and Polymarket, or only the venue you choose.
  • Returns one row per market with Yes and No probability, best bid and ask, last price, 24h volume, total volume, liquidity, open interest, close time, status, category and tags.
  • Adds the resolution rules (shortened to 600 characters), the named resolution source where the venue gives one, and a link to the market page.
  • Keeps multi-outcome events as one row per market, with eventTitle, eventId and outcomeLabel (candidate, bracket or team) to group them.
  • Filters by keyword (search), by categories (politics, sports, crypto, economics, weather, tech or any Polymarket tag such as bitcoin or nba) and by minimum 24h volume.
  • Reads open markets, or closed and settled ones (status), including the result of settled markets.
  • Sorts by 24h volume, total volume, liquidity or closing soonest.

Use cases

  • Arbitrage and spread watch. Schedule a run, join Kalshi and Polymarket rows on the same question and look for gaps between the two prices.
  • Research and forecasting. Collect odds for elections, rate decisions, inflation prints or sports as a dataset, and track how probabilities move run over run.
  • News and trading signals. Alert when the Yes probability of a market jumps, or when 24h volume spikes on a topic.
  • AI agents and LLM pipelines. Give an agent flat, labelled probabilities with rules and sources instead of making it parse two different APIs.
  • Dashboards and newsletters. Feed "most traded markets today" tables to a site, a Google Sheet or a Slack message.

Input

FieldTypeWhat it does
venueslistkalshi, polymarket or both. Prefilled with both.
searchtextOptional. Keep markets whose event title, question or option contains every word (case-insensitive).
categorieslist of textOptional. politics, sports, crypto, economics, weather, tech or any Polymarket tag slug. Kalshi matches its own category names (Politics, Elections, Economics, Financials, Climate and Weather, Science and Technology, Sports, Crypto, and so on).
statuschoiceopen (default, trading now) or closed (ended or settled).
minVolume24hnumberOptional. Drop markets traded less than this in the last 24 hours (Kalshi contracts, Polymarket USD).
sortBychoicevolume24h (default), totalVolume, liquidity or closeTime (soonest first).
maxMarketsnumberDefault 1,000, prefilled 10. Maximum rows across all venues, and your cost cap.
requestDelaySecondsnumberDefault 0.25. Pause between API requests.
proxyConfigurationproxyOptional. Default none.

Example inputs:

{"venues": ["polymarket", "kalshi"], "categories": ["politics"], "maxMarkets": 100}
{"venues": ["kalshi", "polymarket"], "search": "bitcoin", "sortBy": "volume24h", "maxMarkets": 50}
{"venues": ["polymarket"], "status": "closed", "categories": ["crypto"], "maxMarkets": 200}

Output fields

FieldMeaning
venuekalshi or polymarket
marketId, tickerKalshi ticker, or Polymarket market id and slug
eventId, eventTicker, eventTitleThe event the market belongs to
question, outcomeLabelThe market question and its short label inside a multi-market event
outcomesOutcome labels (Yes and No on Kalshi; Polymarket sometimes uses team names or Over and Under)
yesPrice, noPriceProbability of the first and second outcome, 0 to 1
yesBid, yesAsk, noBid, noAsk, lastPriceQuotes, 0 to 1. The No quotes are Kalshi only
volume24h, totalVolume, volumeUnitVolume, with its unit: contracts on Kalshi, USD on Polymarket
liquidityUSD, Polymarket only
openInterestContracts on Kalshi; on Polymarket only for single-market events
closeTime, status, resultISO close time; open, paused, closed or settled; winning outcome of settled markets
category, tagsCategory and tags
rules, resolutionSourceResolution rules (600 characters at most) and named source
urlMarket page on kalshi.com or polymarket.com
conditionIdPolymarket on-chain condition id
scrapedAt, inputWhen it was read and which input produced the row

How the numbers are defined

  • Polymarket yesPrice is the first outcome's price from the API (outcomePrices), which is the market's displayed probability. For markets that are not Yes/No, read outcomes for the labels.
  • Kalshi yesPrice is the midpoint of the best Yes bid and ask when both sides are quoted, and the last traded price when the book is one-sided or empty. noPrice is 1 - yesPrice.
  • Volume units differ. A Kalshi contract pays 1 USD if it wins, so contract counts and USD are the same order of magnitude, but they are not the same thing. Rankings that mix both venues are approximate; sort one venue at a time if it matters.
  • Prices are the venue's quote at scrapedAt. Run on a schedule and compare rows for changes over time.

Limits

  • Kalshi's API cannot sort by volume, so an open-market run reads all open Kalshi events first (about a minute in total) and then ranks them. Closed markets: Kalshi returns the most recent history first, so status: closed gives the newest settled markets, sorted among those; Polymarket closed markets are sorted by total volume.
  • Polymarket search and category filters read events in descending order of volume; a very rare keyword in a low-volume market can sit beyond the 7,500 events read per tag.
  • search matches words in titles, labels and tags, not meaning.
  • Market lists change by the minute. Two runs a minute apart can differ.

FAQ

Do I need a Kalshi or Polymarket account or API key? No. The Actor reads public market-data endpoints only.

Why is liquidity empty on Kalshi? Kalshi's public API does not give a liquidity number; use yesBid, yesAsk and openInterest.

How do I match the same event on both venues? Search the same keywords on both and join on the question or eventTitle. Titles are written differently on each venue, so a fuzzy match works better than an exact one.

How fresh is the data? Live: each run reads the venues' current quotes.

Can it place trades? No. It only reads public data.

Responsible use

This Actor collects public market data that Kalshi and Polymarket publish through their own public APIs. It is provided for research and information, not financial advice, and it does not place or recommend trades. Prediction-market access and trading are regulated differently by country; check the rules that apply to you. Respect each venue's terms of use and rate limits, and keep your own volume modest.