Kalshi Weather Price History avatar

Kalshi Weather Price History

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Kalshi Weather Price History

Kalshi Weather Price History

Read hourly or daily candles for up to 12 named Kalshi weather markets in a UTC window of up to 48 hours. Export prices, bids, asks, volume and open interest as exact decimal strings, with event and response provenance.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

Eli J

Eli J

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

What Kalshi Weather Price History does

Export Kalshi weather price history: hourly or daily candlestick price history for Kalshi markets in the Climate and Weather category. Name up to 12 markets, a UTC window of up to 48 hours and a period of 60 or 1440 minutes: each candle the public Kalshi Trade API returns for that window becomes one flat typed dataset row, with prices, bids, asks, volume and open interest kept as the exact decimal strings the source sent.

How each market is read

A run that names at least one market reads Kalshi's historical cutoff once. Then, market by market in input order, it reads the live market detail (and, only when that answers 404, the historical market detail), the market's own event and that event's series. A market whose series' primary category is not exactly Climate and Weather gets no candle request. A market that settled before the cutoff is read from the historical candle route; any other market is read from the live candle route. An event or series is read once per run and shared by every market that belongs to it.

Rows per market

One row per candle the source actually returned, in input order and ascending endPeriodTs. Both window bounds select candles by their end time, inclusively, so a first period can begin before startTime. A 48-hour window holds at most 49 hourly or 3 daily candle ends, so one market yields at most 49 hourly or 3 daily rows. Actual counts are usually lower and depend on the source, which can skip periods: the prefilled market and window returned 35 hourly candles when captured. A skipped period is never filled in and no price is inferred.

How to export Kalshi weather price history

  1. Name the Kalshi market tickers in marketTickers, at most 12.
  2. Set startTime and endTime in UTC, as YYYY-MM-DDTHH:MM:SSZ, at most 48 hours apart.
  3. Choose periodInterval: 60 for hourly or 1440 for daily candles.
  4. Start the run.
  5. Read the candle rows from the run's default dataset, and any failures from its ERRORS key-value record.

Two public example tasks carry ready inputs for one Austin weather market: hourly candles and daily candles.

Pricing

How much does it cost to export Kalshi weather-market candles?

A run is charged per dataset row plus the platform's automatic apify-actor-start event, which is charged separately when the run starts; an empty or invalid input still incurs that start event. The number of start events depends on the run's memory, one event per GB with a minimum of one event, and the default run memory is 512 MB, so a run at the default memory is charged one start event. A failure, note or notice is never a dataset row, so it is never charged as one. One market's rows come to at most 49 hourly or 3 daily dataset rows before the start event, and actual counts are usually lower. Each row and each start event is charged at the rate in the current Pricing section of this Actor's Apify Store listing.

Input

FieldTypePrefillRule
marketTickersarray["KXHIGHAUS-26JUL12-T97"]Kalshi market tickers, read in the order given. At most 12 entries, counted before duplicates are removed; the first occurrence of a ticker wins. Each entry is used exactly as typed: 1 to 200 uppercase ASCII letters, digits, dots or hyphens, starting with a letter or digit.
startTimestring2026-07-11T14:00:00ZWindow start in UTC, written exactly as YYYY-MM-DDTHH:MM:SSZ with a real calendar date and time. Required when a market is named.
endTimestring2026-07-13T05:59:00ZWindow end in the same format: later than startTime, at most 172800 seconds (48 hours) after it, and not later than the moment the run starts. Required when a market is named.
periodIntervalinteger60Candle period in minutes: 60 for hourly or 1440 for daily candles. Required when a market is named.

No field has a default. With no market named and every supplied field valid, the run makes no request and writes no rows.

A malformed input is reported by field name only: the run fails before any request, and its ERRORS record names the field and the rule it broke, never the value you sent.

The hourly example task uses the four prefills as its input:

{
"marketTickers": ["KXHIGHAUS-26JUL12-T97"],
"startTime": "2026-07-11T14:00:00Z",
"endTime": "2026-07-13T05:59:00Z",
"periodInterval": 60
}

The daily example task differs only in periodInterval 1440.

Requests and time

Every request is one GET to the public Kalshi Trade API, counted before it is sent. Nothing is retried and no redirect is followed.

  • The prefilled market, with the live detail answering: 5 requests (cutoff, live detail, event, series and candles).
  • The same market when the live detail answers 404 and the historical detail is read instead: 6 requests.
  • Whatever the input: at most 61 requests, 1 for the cutoff plus up to 5 per market for 12 markets; a shared event or series only lowers the count.

Request starts are at least 3 seconds apart, so a 61-request run has at least 180 seconds between its first and last start. That is a bound on the span of the starts, not time added on top of response durations: a response slower than 3 seconds needs no extra wait.

Each request has a configured 30-second timeout for each blocking operation, such as the connection attempt. It is a blocking operation timeout, not a whole-response deadline. The platform's default run timeout is 300 seconds, and a long run is not guaranteed to finish within it.

Output

One row per candle in the default dataset, recordType marketCandle, with 41 columns. Prices, bids and asks are USD decimal strings with up to 6 decimal places, and volume and open interest are contract counts with 2 decimal places; each is kept exactly as the source sent it and never converted to a number or rounded.

When captured, the hourly example input returned 35 rows and the daily example input returned 2; source responses determine actual counts.

An excerpt of one hourly row from the example input, showing only the columns whose values that input fixes:

{
"recordType": "marketCandle",
"marketTicker": "KXHIGHAUS-26JUL12-T97",
"periodInterval": 60,
"priceCurrency": "USD",
"quantityUnit": "contracts"
}
ColumnTypeMeaning
recordTypestringLiteral marketCandle
rowKeystring<marketTicker>:<periodInterval>:<endPeriodTs>, unique per row
marketTickerstringThe market ticker you named
eventTickerstringThe market's event ticker
seriesTickerstringThe event's series ticker
eventTitlestringEvent title, as returned
yesSubTitlestringYES subtitle, as returned
strikeTypestring or nullSource text, not interpreted
marketStatusstringMarket status, as returned
marketResultstringMarket result, as returned; an empty string is kept
settlementTsstring or nullSettlement time, verbatim source text
settlementValueDollarsstring or nullUSD decimal string: the YES/LONG contract payout, not observed weather
expirationValuestringSource settlement text, verbatim, not a labelled temperature; an empty string is kept
marketDetailRoutestringlive or historical: the detail request that answered
marketCapturedAtstringUTC receipt time of that market detail, YYYY-MM-DDTHH:MM:SSZ
eventSettlementSourcesarray or nullThe market's own event's settlement sources, members {name, url} as returned
eventCapturedAtstringUTC receipt time of the event; markets sharing an event share its first receipt time
candleRoutestringlive or historical: the candle route this run's cutoff selected
historicalCutoffTsstringThis run's historical cutoff, verbatim
periodIntervalintegerCandle period in minutes, 60 or 1440
endPeriodTsintegerUnix seconds: the inclusive end of the candle period
periodEndstringThe same instant as YYYY-MM-DDTHH:MM:SSZ
priceOpenstring or nullOpen price, USD decimal string
priceHighstring or nullHigh price, USD decimal string
priceLowstring or nullLow price, USD decimal string
priceClosestring or nullClose price, USD decimal string
priceMeanstring or nullMean price, USD decimal string
pricePreviousstring or nullPrevious price, USD decimal string, under the definition of the route that answered
yesBidOpenstringYES bid open, USD decimal string
yesBidHighstringYES bid high, USD decimal string
yesBidLowstringYES bid low, USD decimal string
yesBidClosestringYES bid close, USD decimal string
yesAskOpenstringYES ask open, USD decimal string
yesAskHighstringYES ask high, USD decimal string
yesAskLowstringYES ask low, USD decimal string
yesAskClosestringYES ask close, USD decimal string
volumestringVolume in contracts, decimal string
openIntereststringOpen interest in contracts, decimal string
priceCurrencystringLiteral USD
quantityUnitstringLiteral contracts
candlesCapturedAtstringUTC receipt time of that market's candle response

Null prices

A null price is a source null or an omitted optional live value; it does not by itself establish that no trade occurred. The historical route documents its open, high, low, close and mean prices as null if no trades occurred, while the live route says only that they may be null if there was no trade during the period, and a live candle can omit a price key while keeping other trading values. No price is filled in, carried forward or inferred from bids, asks or volume.

pricePrevious follows the definition of the route that answered, and neither definition is a missing open, high, low or close:

  • Historical candle route: "Close price from the previous candlestick period (in dollars). Null if this is the first candlestick or no prior trade exists."
  • Live candle route: "Last traded YES contract price on the market before the candlestick period (in dollars). May be null if there were no trades before the period."

Settlement fields

expirationValue is the source's settlement text, kept verbatim. It is not a labelled temperature, and this Actor does not parse a temperature out of it.

settlementValueDollars is the YES/LONG contract payout as a USD decimal string, not an observed weather value.

ActorFitWhat it exports
UFCStats Fight & Round StatsFight and round statisticsUFCStats fight and round statistics as flat rows with fighter IDs, event dates and locations, from event or fight URLs; CSV or JSON.
Tennis Abstract Data APITennis match historyATP and WTA player match histories from Tennis Abstract, including scores, opponents, surfaces and available serve and return statistics, filtered by season, surface or head-to-head opponent; JSON, CSV or Excel.
Google Trends Data APIKeyword interestGoogle Trends interest over time, interest by region and related/rising queries for your keywords, location and date range, plus the Trending Now board by country; JSON, CSV or Excel.
Clutch Scraper: Agency DirectoryAgency researchB2B agency listings from Clutch.co directories: company names, websites, ratings, review counts, locations, rates, headcounts and service mix; JSON, CSV or Excel.
Google Ads Archive: Ads Transparency ExportAd-creative researchAdvertiser ad records from Google's Ads Transparency Center: creative format, available images, first and last shown dates and source links, for selected advertisers and a region; JSON, CSV or Excel.

FAQ and support

Does it export daily and hourly candles?

Yes. Set periodInterval to 60 for hourly or 1440 for daily candles; no other period is accepted.

How many markets and how long a window can one run read?

Up to 12 markets, counted before duplicates are removed, and a window of at most 172800 seconds (48 hours) from startTime to endTime.

Why are some prices null?

A null price is a source null or an omitted optional live value, not by itself proof that no trade occurred; nothing is filled in. pricePrevious follows the definition of the route that answered. Both are described under Null prices in the Output section.

Are expirationValue and settlementValueDollars measured weather?

No. expirationValue is the source's settlement text, kept verbatim and not parsed into a temperature, and settlementValueDollars is the YES/LONG contract payout, not an observed weather value.

Is a run that names no market charged?

A run with no market named makes no request and writes no rows, so no row is charged, but the platform's apify-actor-start event is still charged.

When a market produces no rows

Failures are never dataset rows. Each one is recorded in the run's ERRORS key-value record as an object with exactly four keys, target, id, errorClass and message, and the key-value store schema lists every class. Per market, market-not-found, event-not-found, series-not-found, not-weather, candles-not-found, blocked, transport and unreadable-response are failures, and no-candles is a note, not a failure, for a market whose candle request returned an empty list. At run level, invalid-input and cutoff-unavailable fail the run before any market is read, while rate-limited (the source answered HTTP 429), request-ceiling and charge-limit are notices that stop further requests and end the run normally; a rate-limited or request-ceiling notice names the markets it left unprocessed.

The run log reports markets selected, markets with rows, markets with no candles, markets failed, rows pushed and requests sent. Rows are counted as delivered, never as offered, and when the platform does not report how many rows the last push delivered, the log says that count is unknown.

Data rights

The data comes from Kalshi's public Trade API. Kalshi's Data Terms of Service and Developer Agreement restrict commercial redistribution, AI/ML use and API data sharing without written authorization from Kalshi. This Actor grants no data-use rights and does not confirm that your use is permitted; you are responsible for your use of the data.

Developer Agreement section 6.4 also says "You must obtain prior written approval from Kalshi prior to releasing any statements" relating to Kalshi or its API, including promotional or marketing materials. That is an additional unresolved conflict, recorded here as a disclosure, not as permission. Disclosing these conflicts does not cure them.

This Actor reads no page behind a login, uses no credential and writes nothing back to the source.

Support

Report a problem or ask a question in the Issues tab of this Actor's Apify Store page.