Polymarket logoKalshi logo

Finance & markets · Live on Apify

Polymarket and Kalshi Prediction Market Data in One Table

Search or look up markets on Polymarket and Kalshi. You get the question, Yes and No prices as odds, volume and status. You can add price history too.

About $3.51 for 1,000 markets$0.0035 per market + $0.007 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

recordTypemarket
platformpolymarket
marketId2589812

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: polymarket in Platforms. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Get prediction market data from Polymarket and Kalshi in one table: the question, Yes/No prices as implied probabilities, volume, open interest, close time, status and a link to the market, with optional price history. No login and no API key.

  • Polymarket — public Gamma, CLOB and Data APIs (docs).
  • Kalshi — public market data API (docs).
  • Find markets. Search by keywords, filter by category and by status (open or closed). You get the most traded markets first.
  • Look up markets. Paste market IDs, slugs, URLs or tickers. You get each market, and a clear "not found" row for each ID that does not exist.

Good for

  • Track the odds of elections, Fed decisions, crypto prices, sports and other events.
  • Compare the same question on Polymarket and Kalshi.
  • Get daily or hourly Yes-price history for charts and backtests.
  • Check if a market is open, closed or resolved, and which outcome won.

Not a good fit

  • No trading, no orders, no account data. This is a read-only data tool.
  • No order book depth and no trade-by-trade history. You get best bid, best ask, last price and a price history.
  • Not real time. You get the values at the moment of the run.
  • Not betting or investment advice.

Who uses it

Journalists

Quote what markets say about an event, with time and link.

Researchers

Track odds of elections, Fed decisions and other events.

Data scientists

Load daily or hourly price history into Python for backtests.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.007Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Market row$0.0035 (from $0.003 on paid Apify plans)One saved prediction market row (Polymarket or Kalshi) with prices, volume, status and URL. Price history for that market, when requested, is included.
Market ID not found$0.0003One requested market ID, URL or ticker that the platform does not know. Covers the lookup requests.

Examples

  • One market: about $0.01.
  • 1,000 markets: about $3.51.
  • Every day 100 markets, for 30 days: about $10.71 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 1,400 markets.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Do I need a Polymarket or Kalshi account?

No. It reads public data without a login or key.

Can I trade with it?

No. It is a read-only data tool. It is not betting or investment advice.

Is the data live?

No. You get the values at the moment of the run.

Why do the two platforms show different odds?

They are separate markets with different traders, so prices can differ.

Is the data real time?

No. You get the values at the moment of the run (fetchedAt). Prices on both platforms can change every second.

Why is a price null and not 0?

null means the platform has no price (no trade and no quote). The Actor never turns missing data into 0.

Why do Polymarket and Kalshi show different numbers for the same event?

They are different markets with different traders. Volume units also differ: Polymarket uses USD, Kalshi uses contracts.

Is this betting or investment advice?

No. This is a data export tool. Prices are crowd-implied probabilities copied from public data, not forecasts or buy and sell signals.

Details

Step by step on Apify
  1. Open the Input tab.
  2. Keep the prefilled values: Platforms = polymarket, Search = election, Max markets per platform = 20.
  3. Click Start.
  4. Open the Output tab, view Markets. Sort by volume or read outcomes.
Use cases
TaskInputKey fieldsNext step
Election and policy researchsearch: "election", both platformsquestion, outcomes, volume, closeTimeExport to a sheet, compare platforms
Macro tracking (Fed, CPI, recession)category: "Economics" or search: "fed"outcomes, openInterest, priceHistoryChart odds over time
Newsroom: "what do markets say?"marketIds of the markets you citeoutcomes, url, fetchedAtQuote the price with time and link
Backtest or data sciencestatus: "closed", includePriceHistory: trueresolvedOutcome, priceHistoryLoad the JSON or CSV into Python
Crypto event oddssearch: "bitcoin"outcomes, volume24hJoin with your price data
Tips for better results
  • Use longer search words. Short words like us also match bonus.
  • Compare the same question on both platforms side by side.
  • With history on, keep runs to about 400 markets per platform.
Limits and good to know
  • Max rows: maxItems is per platform, up to 1,000. Without history, 1,000 markets per platform (2,000 per run) were tested. With history, about 400 markets per platform fit in one run
  • Memory: 256 MB (default and maximum). More memory does not make the run faster; the time goes to waiting for the platforms
  • Time limit: source work stops after about 4 minutes. Each platform gets an equal share of the time. If a platform reaches its share, the run ends CAPPED with reason: DEADLINE; rows saved so far are kept, and you pay only for them. Split big jobs into smaller runs
  • Search: every search word must be in the market text: question, event title, outcome label, category, tags, slug, market/event ID or Kalshi series ticker. Words match as parts of words, so a short word like us also matches bonus; use longer words. The platforms' own search is fuzzy, so the Actor removes loose matches. Very general words can match fewer markets than you expect
  • Kalshi category: the category filter uses the Kalshi series category, but the row shows the event category. So a Politics filter can return rows with category: "Elections"
  • Kalshi URL: links go to the event page. Kalshi has no page for a single market
  • Open interest: can be null if the Polymarket Data API does not return it for a market. A warning in RUN_SUMMARY names how many markets are affected
  • Price history: best effort. If history fails for some markets, the run is PARTIAL with reason: PRICE_HISTORY_ERROR, and those rows have priceHistoryStatus: "error". Days without trades are missing from the list

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "recordType": "market",
  "platform": "polymarket",
  "marketId": "2589812",
  "marketSlug": "will-there-be-no-change-in-fed-interest-rates-after-the-october-2026-meeting-20260617190324031",
  "conditionId": "0xdf9bf27ee5757c55b44b8b9826ddc9ec3a8809aa3278634c45edbb7fc8f1a3e3",
  "eventId": "606422",
  "eventTitle": "Fed Decision in October?",
  "seriesTicker": null,
  "question": "Will there be no change in Fed interest rates after the October 2026 meeting?",
  "outcomeLabel": "No change",
  "category": "Economy",
  "tags": ["Fed", "fomc", "Economy", "Fed Rates"],
  "outcomes": [
    { "name": "Yes", "price": 0.795, "probability": 0.795 },
    { "name": "No", "price": 0.205, "probability": 0.205 }
  ],
  "lastTradePrice": 0.8,
  "bestBid": 0.79,
  "bestAsk": 0.8,
  "volume": 9190598.64,
  "volume24h": 461867.16,
  "liquidity": 424329.6,
  "openInterest": 3340859.05,
  "volumeUnit": "USD",
  "openTime": "2026-06-18T00:02:51.727Z",
  "closeTime": "2026-10-29T03:59:00.000Z",
  "status": "open",
  "sourceStatus": "active",
  "resolvedOutcome": null,
  "rules": "The FED interest rates are defined in this market by the upper bound of the target federal funds range. …",
  "url": "https://polymarket.com/event/fed-decision-in-october-20260617190323537/will-there-be-no-change-in-fed-interest-rates-after-the-october-2026-meeting-20260617190324031",
  "priceHistoryStatus": "complete",
  "priceHistory": [
    { "timestamp": "2026-07-16T00:00:04.000Z", "price": 0.66 },
    { "timestamp": "2026-07-17T00:00:06.000Z", "price": 0.68 }
  ],
  "source": "Polymarket Gamma, CLOB and Data public APIs",
  "sourceApiUrl": "https://gamma-api.polymarket.com/events?slug=fed-decision-in-october-20260617190323537",
  "fetchedAt": "2026-10-13T18:20:02.515Z"
}

Use it from code

Actor ID: cliqtomedia/prediction-markets-data. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/prediction-markets-data").call(run_input={
    "platforms": [
        "polymarket"
    ],
    "search": "election"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~prediction-markets-data/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"platforms": ["polymarket"], "search": "election"}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/prediction-markets-data")
result = tool.invoke({"run_input": {"platforms": ["polymarket"], "search": "election"}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (35)
FieldTypeMeaning
recordTypestringmarket for market rows; lookup-status for an identifier that was not found, invalid or failed (one row per identifier).
platformstringpolymarket or kalshi; null on lookup-status rows for identifiers that match neither platform.
marketIdstringPolymarket market ID or Kalshi market ticker. Lookup-status rows: the identifier exactly as you entered it.
marketSlugstringPolymarket market slug (null on Kalshi).
conditionIdstringPolymarket condition ID (0x…); null on Kalshi.
eventIdstringParent event: Polymarket event ID or Kalshi event ticker.
eventTitlestringTitle of the parent event, e.g. Fed decision in Oct 2026?
seriesTickerstringKalshi series ticker (null on Polymarket).
questionstringMarket question as shown by the platform.
outcomeLabelstringShort label of this market inside a multi-outcome event, e.g. a candidate name or a range.
categorystringCategory: Kalshi event category or the main Polymarket tag.
tagsarrayPolymarket event tags (empty on Kalshi).
outcomesarrayOutcomes with name, price (USD per $1 payout, 0–1) and probability (the same price read as an implied probability).
lastTradePricenumberLast traded price of the first outcome (Yes), 0–1.
bestBidnumberBest bid for Yes, 0–1.
bestAsknumberBest ask for Yes, 0–1.
volumenumberLifetime traded volume; unit in volumeUnit.
volume24hnumberVolume over the last 24 hours; unit in volumeUnit.
liquiditynumberOrder book liquidity in USD (Polymarket; Kalshi does not publish it, so null).
openInterestnumberOpen interest: USD on Polymarket, contracts on Kalshi.
volumeUnitstringUSD (Polymarket) or contracts (Kalshi, $1 payout each).
openTimestringWhen trading opened (ISO 8601).
closeTimestringScheduled or actual close time (ISO 8601).
statusstringMarket rows: open, closed or resolved. Lookup-status rows: not_found, invalid or error.
sourceStatusstringRaw status from the platform, e.g. active, finalized.
resolvedOutcomestringWinning outcome for resolved markets, otherwise null.
rulesstringResolution rules as published by the platform (Polymarket market description; Kalshi primary and secondary rules), trimmed to 2,000 characters.
urlstringMarket page on polymarket.com or kalshi.com.
priceHistoryStatusstringnot_requested, complete, empty, unavailable or error.
priceHistoryarrayList of {timestamp, price} for the Yes price; null unless requested.
statusReasonstringLookup-status rows: why the IDs were not returned.
errorCodestringLookup-status rows: INVALID_IDENTIFIER or a source error code.
sourcestringWhich public API the row came from.
sourceApiUrlstringAPI request that produced the row.
fetchedAtstringWhen the row was fetched (ISO 8601).
Input settings (8)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Platformsplatformsarray["polymarket"]
Search keywordssearchstring"election"
Categorycategorystring
Market statusstatusstring"open"
Market IDs or URLsmarketIdsarray
Include price historyincludePriceHistorybooleanfalse
Price history dayspriceHistoryDaysinteger30
Max markets per platformmaxItemsinteger20

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure