datagrit

datagrit › Data › Kalshi Settlement Calendar & Order Book Depth

Data

Kalshi Settlement Calendar & Order Book Depth

Kalshi markets ranked by when they settle, with the order book depth, spread and settlement source of each one.

Run it on Apify StoreUse the APIfrom $1.75 per 1,000 results + $10 per run · no code needed
from $1.75 per 1,000 results + $10 per runpay only for markets you get
JSON · CSV · Excelexport or call via API
Scheduled runsdaily or weekly feeds with Apify schedules
v0.6updated 2026-10-01

It lists the open Kalshi prediction markets that are expected to settle inside a time window you choose, for example the next 24 hours, and returns one flat row per market: expected settlement time, hours to settle, the sources Kalshi settles on, YES bid, ask and spread, 24-hour volume, open interest and the contracts resting near the best bid and ask. It is built for traders, quants and bot builders who want a settlement calendar with liquidity attached, not a dump of every market. Export the rows as JSON, CSV or Excel, call the Actor through the Apify API, or plug it into n8n, Make and AI agents through MCP.

What can you use the Kalshi settlement calendar for?

How to use the Kalshi order book and settlement filters

  1. Set Settles within (hours) to the horizon you care about. The default is 24.
  2. Optionally narrow the scope by category (Sports, Crypto, Financials, Politics, Economics, Transportation and others; a series Kalshi lists under several categories is kept when any of them matches), by series ticker or by words in the market title. Naming series is much faster than scanning the whole exchange.
  3. Add liquidity filters: minimum 24h volume, minimum open interest, maximum spread. By default only markets quoted on both sides are listed.
  4. Choose how to sort and how many markets to return, then run.

Order book depth

When Include order book depth is on, the Actor reads the order book of every returned market. yesBidDepth is the number of contracts resting within the depth window below the best YES bid, and yesAskDepth is the number of contracts you can buy within the window above the best YES ask. The window width is set in cents. The levels and totals cover the whole book. Turn the option off for a faster run without depth.

Output fields

Each row contains the identifiers (ticker, eventTicker, seriesTicker), the series description (seriesTitle, category, categories, frequency; categories lists every category the series is listed under, the same membership the category filter uses), title and outcome, the timing fields (expectedSettlementTime, hoursToSettle, closeTime, latestSettlementTime, settlementTimerSeconds, canCloseEarly), the settlement sources and their URLs, the quotes (yesBid, yesAsk, noBid, noAsk, lastPrice, midPrice, spreadCents, sizes), the activity fields (volume, volume24h, openInterest), the depth fields, optional rules text, sourceUrl and scrapedAt. Fields the source does not publish are null. When no market matches you get one row with found: false, and the run status says why: the series has no open markets right now, nothing settles inside the window, the liquidity and keyword filters removed every market in the window, or Kalshi returned only combination or not-open markets. A source that stops applying its own filters (combination markets or markets that are not active in more than 1% of the scan) fails the run instead of returning rows.

Output fields

Every result is one flat record, so it drops straight into a spreadsheet, a database or a CRM.

FieldTypeDescriptionExample
foundbooleanFalse only for the single status row emitted when no market matches the input.true
tickerstringUnique Kalshi market ticker. Empty only on the status row.KXBTCD-26OCT0117-T83249.99
eventTickerstringTicker of the Kalshi event the market belongs to.KXBTCD-26OCT0117
seriesTickerstringTicker of the recurring series the event belongs to, matched to the Kalshi series catalog by the longest event ticker prefix. Null when the event matches no series in the catalog.KXBTCD
seriesTitlestringHuman-readable title of the series.Bitcoin price Above/below
categorystringPrimary Kalshi category of the series, for example Sports, Crypto, Financials, Politics or Climate and Weather. A series can be listed under more than one category; all of them are in categories, and the categories filter matches any of them.Crypto
categoriesarrayEvery Kalshi category the series is listed under, the same membership the categories input filter uses. Null on the status row.["Economics","Transportation"]
frequencystringHow often the series repeats, as published by Kalshi (hourly, daily, weekly, custom and others).hourly
titlestringQuestion or statement the market settles on.Bitcoin price on Oct 1, 2026?
outcomestringWhat a YES contract pays on, as written by Kalshi (for example the team or the price bracket).Dallas
statusstringMarket status reported by Kalshi. The Actor lists markets whose status is active (open for trading) only.active
expectedSettlementTimestringISO 8601 time at which Kalshi expects the market to settle (expected_expiration_time). This is the sort and filter key of the Actor.2026-10-01T10:00:00.000Z
hoursToSettlenumberHours between the start of the run and the expected settlement time, rounded to 2 decimals. Negative means the expected time has passed and the market has not settled yet.18.34
closeTimestringISO 8601 time after which the market stops trading at the latest. Markets that can close early often settle long before it.2026-10-03T01:00:00.000Z
latestSettlementTimestringISO 8601 latest time by which Kalshi will settle the market (latest_expiration_time).2026-10-03T01:00:00.000Z
settlementTimerSecondsnumberSeconds Kalshi waits after the outcome is known before it pays out the market.90
canCloseEarlybooleanTrue when the market closes as soon as its outcome is decided instead of waiting for the close time.true
settlementSourcesstringNames of the sources Kalshi uses to settle the series, joined with semicolons. Null when the series lists none.CF Benchmarks
settlementSourceUrlsstringLinks to the settlement sources, separated by single spaces, in the same order as the names.https://www.cfbenchmarks.com/data/indices/BRTI
yesBidnumberBest price in dollars someone is willing to pay for a YES contract. 0 means there is no bid.0.58
yesAsknumberBest price in dollars at which a YES contract can be bought. 1 means there is no offer.0.59
noBidnumberBest price in dollars someone is willing to pay for a NO contract.0.41
noAsknumberBest price in dollars at which a NO contract can be bought.0.42
lastPricenumberPrice of the last trade in dollars. 0 when the market has not traded.0.58
midPricenumberMidpoint of the YES bid and ask in dollars, read as the implied probability of YES. Null unless the market has a bid of at least 1 cent and an ask of at most 99 cents.0.585
spreadCentsnumberYES ask minus YES bid in cents. Null unless the market is quoted on both sides.1
yesBidSizenumberContracts resting at the best YES bid.7442.21
yesAskSizenumberContracts resting at the best YES ask.525.33
volumenumberContracts traded over the lifetime of the market.29185.23
volume24hnumberContracts traded in the last 24 hours.29185.23
openInterestnumberContracts currently held across all traders.17101.47
yesBidDepthnumberContracts resting on the YES bid side within the depth window below the best bid. Null when the order book was skipped or unavailable.16839.01
yesAskDepthnumberContracts available to buy YES within the depth window above the best ask (resting NO bids, which are YES offers). Null when the order book was skipped or unavailable.19022.45
yesBidLevelsnumberNumber of price levels on the YES bid side of the whole book. Null when the order book was skipped or unavailable.31
yesAskLevelsnumberNumber of price levels on the YES ask side of the whole book. Null when the order book was skipped or unavailable.59
yesBidTotalnumberContracts on the YES bid side across all price levels. Null when the order book was skipped or unavailable.101444.2
yesAskTotalnumberContracts on the YES ask side across all price levels. Null when the order book was skipped or unavailable.150167.1
depthWindowCentsnumberWidth in cents of the window used for the two depth fields. Null when the order book was skipped or unavailable.5
rulesPrimarystringPrimary settlement rules text of the market. Present only when "Include rules text" is on.If Bitcoin is above 83249.99 at 5pm EDT, the market resolves to Yes.
rulesSecondarystringSecondary settlement rules text of the market. Present only when "Include rules text" is on.If the source is unavailable, the market settles on the next published value.
sourceUrlstringKalshi API URL of the market. Empty only on the status row.https://api.elections.kalshi.com/trade-api/v2/markets/KXBTCD-26OCT0117-T83249.99
scrapedAtstringISO 8601 time of the run.2026-10-01T02:44:42.436Z

Sample record

{
  "found": true,
  "ticker": "KXBTCD-26OCT0117-T83249.99",
  "eventTicker": "KXBTCD-26OCT0117",
  "seriesTicker": "KXBTCD",
  "seriesTitle": "Bitcoin price Above/below",
  "category": "Crypto",
  "categories": [
    "Economics",
    "Transportation"
  ],
  "frequency": "hourly",
  "title": "Bitcoin price on Oct 1, 2026?",
  "outcome": "Dallas",
  "status": "active",
  "expectedSettlementTime": "2026-10-01T10:00:00.000Z",
  "hoursToSettle": 18.34,
  "closeTime": "2026-10-03T01:00:00.000Z",
  "latestSettlementTime": "2026-10-03T01:00:00.000Z",
  "settlementTimerSeconds": 90,
  "canCloseEarly": true,
  "settlementSources": "CF Benchmarks",
  "settlementSourceUrls": "https://www.cfbenchmarks.com/data/indices/BRTI",
  "yesBid": 0.58,
  "yesAsk": 0.59,
  "noBid": 0.41,
  "noAsk": 0.42,
  "lastPrice": 0.58,
  "midPrice": 0.585,
  "spreadCents": 1,
  "yesBidSize": 7442.21,
  "yesAskSize": 525.33,
  "volume": 29185.23,
  "volume24h": 29185.23,
  "openInterest": 17101.47,
  "yesBidDepth": 16839.01,
  "yesAskDepth": 19022.45,
  "yesBidLevels": 31,
  "yesAskLevels": 59,
  "yesBidTotal": 101444.2,
  "yesAskTotal": 150167.1,
  "depthWindowCents": 5,
  "rulesPrimary": "If Bitcoin is above 83249.99 at 5pm EDT, the market resolves to Yes.",
  "rulesSecondary": "If the source is unavailable, the market settles on the next published value.",
  "sourceUrl": "https://api.elections.kalshi.com/trade-api/v2/markets/KXBTCD-26OCT0117-T83249.99",
  "scrapedAt": "2026-10-01T02:44:42.436Z"
}

Input

FieldNameTypeWhat it does
settlesWithinHoursSettles within (hours)numberKeep markets whose expected settlement time is at most this many hours from now. 24 means everything that settles today and tonight; 168 is one week.
settlesAfterHoursSettles after (hours)numberKeep markets whose expected settlement time is at least this many hours from now. 0 starts at the present moment; a negative value also returns markets whose expected time has passed but which are not settled yet (for example -6).
categoriesCategoriesarrayOptional. Only markets of series that Kalshi lists under these categories (a series can be listed under several, so a row can show another category than the one you asked for; see the categories field), for example Sports, Crypto, Financials, Politics, Economics, Transportation, Climate and Weather, Entertainment. Case-insensitive; leave empty for all categories.
seriesTickersSeries tickersarrayOptional. Only these Kalshi series, for example KXBTCD or KXNASDAQ100U. Scanning named series is much faster than scanning the whole exchange.
keywordsTitle keywordsarrayOptional. Keep markets whose market title contains at least one of these words or phrases (case-insensitive). Only the market title is searched, not the outcome or series name.
minVolume24hMinimum 24h volumeintegerKeep markets with at least this many contracts traded in the last 24 hours. 0 turns the filter off.
minOpenInterestMinimum open interestintegerKeep markets with at least this many contracts outstanding. 0 turns the filter off.
requireTwoSidedQuoteOnly two-sided quotesbooleanKeep only markets with a YES bid of at least 1 cent and a YES ask of at most 99 cents, so that you can actually trade both ways. Turn off to also list markets that nobody quotes.
maxSpreadCentsMaximum spread (cents)numberKeep markets whose YES ask minus YES bid is at most this many cents. 100 turns the filter off; any lower value also drops markets that are not quoted on both sides.
sortBySort bystringOrder of the results before "Maximum results" is applied: soonest settlement, highest 24h volume, highest open interest or tightest spread.
includeOrderbookInclude order book depthbooleanRead the order book of every returned market and add the depth fields (contracts near the best bid and ask, levels, totals). Turn off for a faster run without depth.
depthCentsDepth window (cents)integerWidth of the window used by the depth fields: contracts resting within this many cents of the best bid, and within this many cents of the best ask.
includeRulesInclude rules textbooleanAdd the primary and secondary settlement rules text of every market. Makes the rows larger.
maxItemsMaximum resultsintegerStop after this many markets.
proxyConfigurationProxy configurationobjectOptional proxy. Leave disabled: the Kalshi public API does not need one.

Call it from your code

Run the Actor and get the results in one request. Replace YOUR_APIFY_TOKEN with the token from your Apify account settings.

curl -X POST "https://api.apify.com/v2/acts/datagrit~kalshi-settlement-calendar/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"settlesWithinHours":48,"maxItems":50}'
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagrit/kalshi-settlement-calendar').call({
  "settlesWithinHours": 48,
  "maxItems": 50
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

Install with npm i apify-client.

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagrit/kalshi-settlement-calendar").call(run_input={
  "settlesWithinHours": 48,
  "maxItems": 50
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items), items[0] if items else None)

Install with pip install apify-client.

Try Kalshi Settlement Calendar & Order Book Depth on Apify

Related Actors

Company data

French Company Finder - Sirene Financials

French company lead lists from Sirene screened by net result and revenue, with net margin, size, matching establishment and optional directors.

from $5.60 / 1,000 results
Jobs & salaries

Career Site Jobs Aggregator - ATS Salary Data

Open jobs from Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Recruitee and Personio in one schema with normalized salaries.

from $2.80 / 1,000 results