Quickstart
Mostly Right returns historical and live public data with the same core fields, plus explicit sources and timestamps. Call the weather, markets, economy, or finance domain directly.
01 · Install
Section titled “01 · Install”pip install mostlyrightmdPython 3.11+. The import name is mostlyright.
pnpm add mostlyrightNode 20+. The package is ESM-first.
02 · Set the API key
Section titled “02 · Set the API key”Get your key with the subscription (USD 29/month), then set it in your environment:
export MOSTLYRIGHT_API_KEY="..."The key downloads the current source manifest; the SDK uses the returned
endpoint and schema definitions, then fetches rows directly from each source.
Without a configured key, calls raise ApiKeyRequiredError.
03 · Compare live with history
Section titled “03 · Compare live with history”Fetch the newest report from KNYC, the Central Park weather station in New York, beside a fixed historical day.
from mostlyright import weather
live = await weather.live.latest("KNYC")historical = weather.observations( "KNYC", "2025-01-15", "2025-01-15", return_type="list",)[-1]
for label, row in (("live", live), ("historical", historical)): print(label, row["event_time_utc"], row["temp_f"], row["source"])import { weather } from "mostlyright";
const live = await weather.latest("KNYC");const { rows: reports } = await weather.observations( "KNYC", "2025-01-15", "2025-01-15",);const historical = reports.at(-1);
console.log( "live", live.event_time_utc, live.temp_f?.toFixed(1), live.source,);console.log( "historical", historical?.event_time_utc, historical?.temp_f?.toFixed(1), historical?.source,);Example output—the live values move; the historical row stays fixed:
live 2026-07-23T17:51:00Z 77.0 awc.livehistorical 2025-01-15T23:51:00Z 28.0 iemBoth rows expose event_time_utc, temp_f, and source with the same meanings. Their values differ because the observations are eighteen months apart. Full rows retain raw_metar; historical rows also add local_standard_date, the station-local calendar day, and use the canonical ICAO station key (KNYC rather than the live AWC row’s NYC).
If the live source has no fresh report, the call raises NoLiveDataError instead of returning stale data.
04 · Explore another domain
Section titled “04 · Explore another domain”Each domain exposes methods for its own data:
weather.observations()andweather.forecasts()for weather inputseconomy.series()andeconomy.snapshot()for release vintagesmarkets.kalshi.*andmarkets.polymarket.*for venue datafinance.*for earnings transcripts and facts
Start with these methods when you need to choose the sources, date window, or joins.
05 · Read official daily reports
Section titled “05 · Read official daily reports”Daily summaries are a separate source from per-report observations:
from mostlyright import weather
daily = weather.daily_summaries( "KNYC", "2025-01-06", "2025-01-12",)import { dailySummaries } from "@mostlyrightmd/weather/daily-summaries";
const { rows: daily } = await dailySummaries( "KNYC", "2025-01-06", "2025-01-12",);Each row contains the official high and low for a station-local date, the published report type, issuance time when available, and source. These are not aggregates reconstructed from METAR observations.