The real-world data that moves prediction-market prices, from official public sources. Research it in our Python & TypeScript SDK (access by request), or read it live on any contract page with the free Chrome extension.
1from mostlyright import weather 2 3# live obs + settlement join, cached locally 4df = weather.pairs("KNYC", "2025-01-06", "2025-01-09")
The extension reads the contract you're on and pulls the data that decides it onto the page: the live number, the record behind it, and the model's call. No tabs, no account, no API key.
Live preview · free on Kalshi and Polymarket · drag the timeline to scrub the trajectory
Research any market in four lines: call research() and get a
schema-versioned table of exactly what a contract settles on. It won't hand a backtest data
that didn't exist yet, so your results never train on the future. Python first, TypeScript
at parity.
1from mostlyright import weather 2from mostlyright.markets.catalog import kalshi_nhigh 3 4# 1. what does the contract settle on? 5c = kalshi_nhigh.resolve("KHIGHNYC", date(2025, 1, 15)) 6# 2. pull the data that decides it. 7df = weather.pairs(c.settlement_station, "2025-01-15", "2025-01-15") 8print(df.obs_high_f[0])
Live or historical, one research() call returns the same schema from
the same sources. What you backtest is exactly what you'd trade live, never a value from the
future.
Every reading a temperature market settles on: live observations, decades of archive, and 36 forecast models, from NOAA, NWS, IEM and GHCNh.
Kalshi NHIGH/NLOW resolvers, Polymarket discovery + settlement, and Kalshi + Polymarket trade history, every row tied to its settlement station.
Wherever the data is public, we ship the adapter.
Real-time METAR and multi-model forecasts. Fetch the current reading, the trajectory to settlement, and the model that's calling it.
METAR · forecastsDecades of climate and station archive, plus deterministic settlement backtests, cached byte-for-byte on first call, so re-runs never drift.
cache → parquet / jsonEvery weather market settles on a specific station. We map the contract to its ICAO and pull the data that station reports. US extremes in °F, international in °C.
| date | str · LST | settlement date |
| station | str | resolved NWS / ICAO code |
| cli_high_f | number | official CLI daily high |
| obs_high_f | number | observed high (fused) |
| obs_high_at | str · ISO | timestamp of the high |
| fcst_high_f | number | model forecast high |
| market_close_utc | str · ISO | contract close instant |
| station_code | str | reporting station |
| observed_at | str · ISO | METAR cycle time |
| temp_c | number | air temperature |
| dewpoint_c | number | dewpoint |
| sky_cover_1 | str | primary sky layer |
| source | str | awc / iem / ghcnh |
| schema_uri | str | schema.observation.v1 |
| eventId | str | venue event id |
| icao | str | settlement station |
| measure | "high"|"low" | extreme settled on |
| resolvedValueC | number | resolved value °C |
| resolvedValueF | number | resolved value °F |
| resolutionSourceType | str | noaa_wrh / cli |
| dataQualityAlert | str|null | QC flag |
Every response carries a stable schema.*.v1 URI and a source identity,
so a train/infer mismatch fails loudly instead of corrupting a model.
Direct calls to public APIs (NOAA, NWS, IEM, Kalshi, Polymarket) from your own runtime, with an optional local cache.
Every response stamps a schema.*.v1 URI. Outputs validate against
JSON-Schema shapes, ready to drop into MCP tools or function-call returns unchanged.
First call writes parquet (Python) or a JSON envelope (Node) to
~/.mostlyright. Byte-stable across runs, giving deterministic
backtests.
The same research() shape in both runtimes, byte-equivalent on the
canonical parity fixtures. Use whichever your stack prefers.
The same research() call shapes a live reading and a decade of
archive into one identical table. Backtest on exactly what you'll trade, down to the column.
No eval, no remote code. Runs in browser service workers and Web
Workers, on edge runtimes, and as a single-tag IIFE. Core stays under 25 KB gzipped.
The SDK is available by request. Tell us what you are building.