Polymarket & Kalshi Odds API Data Scraper avatar

Polymarket & Kalshi Odds API Data Scraper

Pricing

from $0.80 / 1,000 market row delivereds

Go to Apify Store
Polymarket & Kalshi Odds API Data Scraper

Polymarket & Kalshi Odds API Data Scraper

Get live Polymarket and Kalshi odds in one table. Filter markets by keyword, category, venue, volume or close time and export clean JSON for analysis.

Pricing

from $0.80 / 1,000 market row delivereds

Rating

0.0

(0)

Developer

Pulse Data

Pulse Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Polymarket & Kalshi Odds Scraper: Market Data API

Get live Polymarket and Kalshi odds in one clean table. This Actor reads the public market-data APIs of Polymarket and Kalshi and returns one row per prediction market: the question, the price and implied probability of every outcome, best bid and ask, last trade, 24-hour and total volume, liquidity or open interest, status, close time, a unified category and a link. No API key, no login, no proxy and no browser are needed, and the rows of the two venues have exactly the same fields, so you can sort, filter and compare them in Google Sheets, Excel, Python, n8n or Make without writing two different API clients.

Example output

One Polymarket row (a Federal Reserve market) and one Kalshi row (a daily high-temperature bracket for New York City), exactly as the Actor returns them:

{"schemaVersion": 1, "venue": "polymarket", "marketId": "2589811", "slug": "will-the-fed-decrease-interest-rates-by-25-bps-after-the-october-2026-meeting-20260617190324030", "eventId": "606422", "eventTitle": "Fed Decision in October?", "series": "fomc", "question": "Will the Fed decrease interest rates by 25 bps after the October 2026 meeting?", "outcomes": [{"name": "Yes", "price": 0.0055, "probabilityPct": 0.55}, {"name": "No", "price": 0.9945, "probabilityPct": 99.45}], "primaryOutcome": "Yes", "primaryProbabilityPct": 0.55, "bestBid": 0.005, "bestAsk": 0.006, "lastPrice": 0.006, "volume24h": 534822.74, "volumeTotal": 6622382.12, "volumeUnit": "USD", "liquidity": 367175.36, "openInterest": null, "status": "open", "winningOutcome": null, "openTime": "2026-06-18T00:02:08Z", "closeTime": "2026-10-29T03:59:00Z", "category": "economics", "venueCategory": "economy", "tags": ["fed", "fomc", "trump", "economy", "fed-rates", "kevin-warsh", "Global-Rates", "economic-policy", "macro-indicators", "recurring"], "marketType": "binary", "strikeType": null, "floorStrike": null, "capStrike": null, "url": "https://polymarket.com/event/fed-decision-in-october-20260617190323537", "rules": null, "fetchedAt": "2026-10-13T06:08:33Z"}
{"schemaVersion": 1, "venue": "kalshi", "marketId": "KXHIGHNY-26OCT13-T71", "slug": null, "eventId": "KXHIGHNY-26OCT13", "eventTitle": "Highest temperature in New York City on Oct 13, 2026?", "series": "KXHIGHNY", "question": "Will the maximum temperature be <71° on Oct 13, 2026?", "outcomes": [{"name": "Yes", "price": 0.365, "probabilityPct": 36.5}, {"name": "No", "price": 0.635, "probabilityPct": 63.5}], "primaryOutcome": "Yes", "primaryProbabilityPct": 36.5, "bestBid": 0.34, "bestAsk": 0.39, "lastPrice": 0.35, "volume24h": 4558.25, "volumeTotal": 4668.45, "volumeUnit": "contracts", "liquidity": null, "openInterest": 3376.95, "status": "open", "winningOutcome": null, "openTime": "2026-10-12T14:00:00Z", "closeTime": "2026-10-14T05:00:00Z", "category": "weather", "venueCategory": "Climate and Weather", "tags": [], "marketType": "binary", "strikeType": "less", "floorStrike": null, "capStrike": 71.0, "url": "https://kalshi.com/markets/kxhighny", "rules": null, "fetchedAt": "2026-10-13T06:10:42Z"}

Prices are in US dollars for a contract that pays 1 dollar, so 0.365 means an implied probability of 36.5 percent. Polymarket volume is in US dollars; Kalshi volume is in contracts (see the FAQ).

What you can do with it

  • Follow the most active open markets on both venues in one table, ranked by 24-hour volume. On Kalshi the Actor always reads the popular series (NFL, NBA, MLB, NHL, college football and UFC game winners, daily high temperatures in five US cities, Fed decisions and CPI) before it samples other events, so the sports games and weather brackets people trade today are in the table.
  • Search by keyword: bitcoin, fed rate, election, hurricane, a candidate or a team.
  • Filter by unified category: politics, elections, world, economics, finance, crypto, sports, weather, entertainment, science-tech.
  • Read whole Kalshi series, for example KXHIGHNY (highest temperature in New York City) with its temperature brackets as numbers (strikeType, floorStrike, capStrike).
  • Feed a spreadsheet, a dashboard, a newsletter or a research notebook on a schedule; every row carries a fetchedAt time in UTC.
  • Export the closed markets of a venue to study how questions were priced before they ended.

Kalshi combination ("parlay") markets are left out on purpose, because they drown out the real markets in the venue's default listing.

How it works

  1. Choose the venues, an optional keyword or category, and how many market rows you want.
  2. Run the Actor. It reads the venues politely (one request at a time, about two requests per second at most), drops what you filtered out and turns every market into the same row format.
  3. Open the Markets overview view or export the dataset as JSON, CSV or Excel, or call it from your own code or automation. In the overview, the Event column shows the event each market belongs to (for example the matchup, city and date), so short questions such as "Denver wins" stay unambiguous.

If one venue is temporarily unavailable, the Actor still returns the rows of the other one and says so in the run's status message. A summary record (RUN_SUMMARY) in the key-value store shows what was read and why the run stopped.

Output fields

FieldMeaning
schemaVersionVersion of this output format.
venueWhich prediction market the row comes from.
marketIdPolymarket market id, or Kalshi market ticker.
slugPolymarket market slug; null for Kalshi.
eventIdPolymarket event id, or Kalshi event ticker.
eventTitleTitle of the event that groups related markets.
seriesKalshi series ticker, or the Polymarket series slug when the event belongs to one.
questionThe market question.
outcomesEvery outcome with its current price (US dollars for a 1 dollar payout) and implied probability in percent.
primaryOutcomeName of the first outcome (Yes for Yes/No markets).
primaryProbabilityPctImplied probability in percent of the first outcome.
bestBidHighest buy price of the first outcome in US dollars; null when nobody is bidding.
bestAskLowest sell price of the first outcome in US dollars; null when nobody is offering.
lastPricePrice of the last trade of the first outcome in US dollars; null when unknown.
volume24hTraded volume in the last 24 hours, in the unit given by volumeUnit.
volumeTotalTotal traded volume since the market opened, in the unit given by volumeUnit.
volumeUnitUnit of the volume fields: USD for Polymarket, contracts for Kalshi.
liquidityPolymarket order book liquidity in US dollars; null for Kalshi.
openInterestKalshi open interest in contracts; null for Polymarket.
statusUnified market status.
winningOutcomeName of the winning outcome once settled; null otherwise.
openTimeWhen the market opened for trading, UTC.
closeTimeWhen trading closes or closed, UTC.
categoryUnified category.
venueCategoryThe venue's own category label (Kalshi) or the Polymarket tag slug used for the unified category.
tagsPolymarket tag slugs of the event (at most 20); empty for Kalshi.
marketTypebinary: two outcomes; scalar: Kalshi numeric market; multi: more than two outcomes.
strikeTypeKalshi strike type of the market, for example less, between or greater; null otherwise.
floorStrikeKalshi lower strike value, for example a temperature bracket start; null otherwise.
capStrikeKalshi upper strike value; null otherwise.
urlLink to the market page on the venue's website.
rulesResolution rules text; null unless Include resolution rules is on.
fetchedAtWhen the Actor received this data, UTC.

Pricing

You pay per delivered market row: 0.0008 US dollars per row (0.80 US dollars per 1,000 rows) on the free plan, less on higher Apify plans, plus Apify's small start fee per run. You are charged only for rows that were actually delivered to the dataset: nothing for filtered, duplicate or skipped markets, nothing for failed requests, nothing for runs that fail. Platform costs are not passed on to you. If you set a maximum cost per run, the Actor stops at that limit and tells you how many rows it delivered.

FAQ

Do I need an API key or an account at Polymarket or Kalshi? No. The Actor uses only public, documented market-data endpoints that need no key.

Is this legal? The Actor requests only the public APIs of the two venues, politely and without logging in or bypassing anything. You are responsible for using the data in line with the terms of Polymarket and Kalshi. This Actor is not affiliated with or endorsed by either venue; the names are used only to say where the data comes from.

Is this financial advice? No. It is data, not advice, and it does not trade. Prices can change at any moment; check the venue before you rely on a number.

Why is Kalshi volume in contracts and Polymarket volume in dollars? Because that is what each venue publishes. The volumeUnit field tells you which unit a row uses. The Actor does not convert one into the other, and it ranks the two venues separately, then alternates their rows, so that the units are never mixed.

How are the most active Kalshi markets found? Kalshi's API cannot sort by volume and lists long-dated events first, so the Actor ranks what it reads: a fixed list of popular series (game winners in the main US sports and UFC, daily high temperatures in New York City, Los Angeles, Chicago, Miami and Austin, Fed decisions and CPI), then a sample of 600 other open events. Full depth reads up to 12,000 events and takes much longer. A popular market outside these series is found only if it is in the sample, which for politics, elections, entertainment and world markets is rarely the case; enter the series ticker to read such a series directly. The RUN_SUMMARY record tells you how many requests and pages were read.

Why did I get fewer rows than my maximum? Fewer markets matched your filters, or one venue was unavailable (the status message says so).

What are Kalshi series tickers? A series is a family of recurring Kalshi markets, for example KXHIGHNY for the daily high temperature in New York City. Enter tickers to read only those families.

How fresh is the data? The Actor reads the venues when it runs; the fetchedAt field is the moment each page was received. Schedule the Actor to refresh it.

Does it include settled markets from Kalshi? Only markets the live Kalshi API still lists with their details; the closed status returns trading-ended markets. Long-term history is not part of this Actor.

Input settings

SettingWhat it doesDefault
VenuesPolymarket, Kalshi or bothboth
KeywordEvery word must appear in the event title or question (case-insensitive)empty
CategoriesUnified categories to keepall
Market statusOpen (tradable now) or closed (trading ended)open
Kalshi series tickersRead only these Kalshi series (up to 20); skips the popular series and the samplenone
Minimum 24h volumeSkip quieter markets (USD for Polymarket, contracts for Kalshi)0
Include resolution rulesAdd the full rules text to each rowoff
Sort by24h volume (highest first, venues alternate) or close time (soonest first; markets already past their close time are left out)24h volume
Kalshi scan depthStandard (popular series + 600 events) or full (up to 12,000 events)standard
Maximum market rowsStop after this many rows (1 to 5,000)20