Polymarket & Kalshi Scraper - Prediction Market Odds API avatar

Polymarket & Kalshi Scraper - Prediction Market Odds API

Pricing

from $2.00 / 1,000 market returneds

Go to Apify Store
Polymarket & Kalshi Scraper - Prediction Market Odds API

Polymarket & Kalshi Scraper - Prediction Market Odds API

Polymarket and Kalshi prediction market odds in one table, no API key: chance in percent, volume, close date, result, link and 24h change per market. Search both sites, compare Polymarket vs Kalshi (gap in points), browse Fed, election, sports and crypto markets, paste URLs, add price history.

Pricing

from $2.00 / 1,000 market returneds

Rating

0.0

(0)

Developer

Michal Búci

Michal Búci

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Categories

Share

Polymarket & Kalshi Scraper: Prediction Market Odds in One Table

Scrape live prediction market odds from Polymarket and Kalshi, the two largest prediction markets, into one table: the question, the chance in percent of the side named next to it (usually Yes; a team name on match markets), volume, close date, the final result once known, a link, and the 24h change where the site publishes it. Same columns for both sites, so you can plug the output into a script, a spreadsheet or an AI agent without reconciling two formats. Search both sites at once, browse the most-traded markets by topic, or paste market URLs to fetch exactly those. Read-only public data, no account or key needed.

One row per yes/no market. A question with several possible answers (who wins the election, what the Fed does, a game's side bets) becomes several rows, one per answer, all sharing the same eventTitle. The chance always refers to the side named in outcomeYes, which sits right next to it.

Polymarket API and Kalshi API without a key

Data comes from the same public market-data feeds the two sites' own pages use, read at run time, so the numbers are as fresh as the page and the chance is the one the page shows (Polymarket's displayed price, Kalshi's last trade; settled markets 100 or 0). No accounts, no keys, no trading and no rate limits for you to manage: read-only market data. Every row links to the market's page for verification.

What data you get from Polymarket and Kalshi

ColumnMeaning
question, outcomeYes, probability, change24hthe question, the side the chance refers to, the chance in percent, and how many points it moved in the last 24 hours (blank on markets listed less than a day ago; Polymarket's page arrow covers a longer window)
venue, eventTitle, category, endDate, urlwhich site, the question group, topic, when trading closes, and the link
outcome, outcomeNo, eventMarketCount, statusanswer label within its group, the opposite side, how many answers the group has on the site (more than the rows you got = the per-question cap cut some), open / closed / resolved
volume, volume24h, openInterest, liquidity, yesBid, yesAsksize and order book. liquidity fills on Polymarket, openInterest on Kalshi, so each is blank half the time; for one "how big is this" number use volume
resolvedOutcome, resolvedAtthe winning side and when the result was posted (settled markets only)
marketId, eventId, description, createdAtpermanent ids (paste back into marketIds), the rules text (shortened), listing date
matched*, probabilityGap, matchScoreonly with "Compare Polymarket vs Kalshi" on
priceHistoryonly with "Add daily price history" on

Example rows from a search for "fed decision" with comparison on:

questionoutcomeYesprobabilitychange24hvenuematchedProbabilityprobabilityGap
Will the Fed increase interest rates by 25 bps after the October 2026 meeting?Yes68.54.0polymarket70.01.5
Will the Federal Reserve Hike rates by 25bps at their October 2026 meeting?Yes70.04.0kalshi68.51.5
Will there be no change in Fed interest rates after the October 2026 meeting?Yes30.5-3.0polymarket31.00.5

Search, browse or look up Polymarket and Kalshi markets

Browse (empty input): the 25 markets with the most trading in the last 24 hours on each site, interleaved so both sites are on the first screen. On a match day that is mostly games; set sortBy: "volume" for the big standing questions (Fed, elections, Bitcoin). Add a topic (category: politics, elections, sports, crypto, economics, finance, science_tech, entertainment, weather, world, health) to narrow it down.

Search (query): e.g. "fed decision", "bitcoin 100k", "super bowl". Results are ordered by trading volume, not by best match, so add a word like "october" to narrow down. Every word must appear somewhere in the question, its group or its answer, in any order. Common aliases count: BTC = Bitcoin, 100k = 100,000, fed = Federal Reserve, Super Bowl = Pro Football Champion (both sites renamed it).

Look up (marketIds): paste the page URLs from polymarket.com or kalshi.com, one per line, to fetch exactly those markets. A page with several answers returns all of them (up to 100, most traded first). Kalshi tickers (KXFED-26SEP-T3.75, or the event ticker KXFED-26SEP for the whole group) and the Polymarket 0x… ids from the marketId column also work, including settled markets. Ids that can't be found come back as free lookup_failed notice rows.

Resolved Polymarket and Kalshi markets with outcomes

Add status: "resolved" to browse or search and you get settled markets with the winning side in resolvedOutcome, probability at 100 for the winner and 0 for the rest, and the time the result was posted, most recent first. Pair it with includePriceHistory to see what the market said before the result. Handy for checking how often the market was right.

Compare Polymarket vs Kalshi odds on the same question

Only works on the rows a run returns, so search for a phrase that appears on both sites (e.g. "fed decision" or "2028 democratic nominee"), then turn on matchAcrossVenues: the actor pairs markets that ask the same question on both sites and writes the other site's id, question and chance plus the gap in points onto both rows. For multi-answer questions raise maxMarketsPerEvent first, since only returned rows can pair. Matching is strict on purpose: the numbers (cutoffs, basis points, years) and the direction (cut / hike / hold) must agree, topics must agree, close dates must be within a week, and the cleaned-up wording must still be nearly the same. Sibling markets that differ by one number never pair. Unmatched rows are left blank rather than guessed. The gap is how far the two sites disagree, in points.

Polymarket and Kalshi historical odds (daily price history)

Turn on includePriceHistory for a priceHistory column holding one chance per day for the last historyDays days (default 30), so you see the trend and not just today's move. On open markets the last point is today so far and equals probability. It is a nested list, so in a CSV export it is one cell of text per row; use the JSON export or a script to chart it. Blank (and not charged) on markets listed less than a day ago.

Polymarket and Kalshi scraper input parameters

All optional. {} returns the 25 most-traded open markets per site.

FieldDefaultNotes
query""search phrase; empty = browse
marketIds[]URLs, tickers or ids to fetch exactly (ignores everything below except the extras and the rules-text length)
venuesboth["polymarket"], ["kalshi"] or both
categoryalltopic list above
statusopenopen or resolved
sortByvolume24hvolume24h / volume / liquidity / endingSoon / newest
limit25rows per site, up to 500
endingWithinDays0only markets closing within N days
matchAcrossVenuesfalsecompare Polymarket vs Kalshi
includePriceHistory / historyDaysfalse / 30daily price history
maxMarketsPerEvent3answers shown per question, most traded first; eventMarketCount shows how many exist (advanced)
minVolume0skip thin markets (advanced)
maxDescriptionChars1500 drops the rules text (advanced)

Why some Kalshi parlays and sports side bets are missing

Kalshi combo bets (parlays) are always left out, and so are Polymarket's reserved placeholder answers ("Team H", "Other" with no trading), which its pages hide too. In browse and search, a game with 100 side bets or an election with 50 candidates shows only its 3 most-traded answers by default (raise "Answers shown per question" under Advanced to see all; a pasted URL always returns the whole group). In browse mode, games that already finished but whose result isn't posted yet (price at 0 or 100, close time passed) are skipped; in search and lookup you get whatever you asked for.

Error rows (free)

If something goes wrong you get one free row with a type and a message instead of data: no_results (nothing matched, or one site matched nothing while the other did), invalid_input (the run continued with defaults), lookup_failed (one per id not found), venue_error (one site failed; the other site's rows are still returned) or charge_limit_reached (your spending cap cut the list). Error rows are never charged.

How much does it cost to scrape Polymarket and Kalshi

You pay per row (Apify pay-per-event): $0.002 per market row and $0.003 extra per row that gets price history. The default run (50 rows) is about $0.10 and finishes in about 5 seconds; 500 rows per site with 30-day history is about $5 and takes a few minutes. Error rows are free.

Prediction market data for AI agents (MCP server)

Call it from Claude, ChatGPT or any MCP-compatible agent through the Apify MCP server:

$npx @apify/actors-mcp-server --tools michael_b/prediction-market-odds

Questions this answers in one call:

  • "What does the market expect from the next Fed meetings, and do Polymarket and Kalshi agree?" → query: "fed decision", matchAcrossVenues: true
  • "What's the market pricing for the 2028 nominees?" → query: "2028 nominee", category: "elections"
  • "What gets decided this week in politics?" → category: "politics", endingWithinDays: 7
  • "How has the Bitcoin $100k market moved this month?" → query: "bitcoin 100k", includePriceHistory: true
  • "What were the results of last month's economics markets?" → category: "economics", status: "resolved"

Pairs well with economic-calendar-fed-watch, stock-earnings-calendar and finviz-ticker-news for the "why" behind a move in the odds.