Skip to content

Finance

Fetch completed earnings-call transcripts, follow a live call, and turn supported earnings-mention contracts into validated resolution fields. Every transcript row identifies its source and when the text became available.

The meta packages include Finance:

Terminal window
pip install mostlyrightmd
pnpm add mostlyright

Install only the domain package when you do not need the other packages:

Terminal window
pip install mostlyrightmd-finance
pnpm add @mostlyrightmd/finance
RuntimeNamespaceMethods
Pythonmostlyright.finance.transcriptsresolve() and derive()
TypeScript@mostlyrightmd/financetranscripts.get(), transcripts.stream(), transcripts.resolve(), and transcripts.derive()

Finance does not expose a general price or fundamentals series. The current package is limited to earnings-call transcripts and earnings-mention resolution.

resolve() validates the contract root, ticker, event date, and target phrase. It returns an immutable resolution tuple.

from datetime import date
from mostlyright.finance import transcripts
resolution = transcripts.resolve(
"KXEARNINGSMENTIONNKE",
date(2026, 6, 25),
target_word="tariffs",
)
print(resolution.ticker)
print(resolution.target_word)
print(resolution.resolution_rule)

Unknown contract roots, unsupported tickers, time-bearing dates, and empty target phrases raise an error. The resolver does not guess missing contract fields.

The TypeScript package exposes the same operation:

import { transcripts } from "@mostlyrightmd/finance";
const resolution = transcripts.resolve(
"KXEARNINGSMENTIONNKE",
"2026-06-25",
{ targetWord: "tariffs" },
);

derive() validates an untrusted event payload before returning resolution fields. It returns null when the event is not an earnings-mention market, the ticker or date is missing, or a supplied webcast host is not allowlisted.

import { transcripts } from "@mostlyrightmd/finance";
const resolution = transcripts.derive({
title: "Will Nike say tariffs on its earnings call?",
slug: "will-nike-say-tariffs-on-its-earnings-call",
ticker: "NKE",
targetWord: "tariffs",
eventDate: "2026-06-25",
webcastUrl: "https://events.q4inc.com/example",
});

TypeScript can fetch the authoritative hosted rows for a ticker and event date:

import { transcripts } from "@mostlyrightmd/finance";
const result = await transcripts.get("NKE", "2026-06-25", {
hostedUrl: process.env.MOSTLYRIGHT_FINANCE_HOSTED_URL!,
});
for (const row of result.rows) {
console.log(row.segment, row.speakerRole, row.text);
}

hostedUrl is required. The package does not ship a default hosted endpoint. Transport failures and exhausted retries raise HttpError. A malformed response raises SchemaValidationError, and a valid response with no transcript rows raises NoDataError. An aborted request still propagates the caller’s AbortSignal.

The TypeScript stream reconnects with the last event id after a connection ends. Iteration stops when the call ends, the supplied signal is aborted, or reconnection attempts are exhausted.

import { transcripts } from "@mostlyrightmd/finance";
for await (const row of transcripts.stream({
hostedUrl: process.env.MOSTLYRIGHT_FINANCE_HOSTED_URL!,
apiKey: process.env.MOSTLYRIGHT_API_KEY!,
ticker: "NKE",
callId: "NKE-2026-06-25",
})) {
console.log(row.event, row.text);
}

transcripts.stream() emits live transcript segments and fact deltas over SSE. These rows use source="earnings.hosted.stream" and resolution_status="provisional". Do not use them as settlement truth or historical labels.

Authoritative post-call rows use transcript availability as their knowledge time. The call date or spoken time cannot substitute for the time the transcript became available.

SchemaOne row represents
schema.finance.transcript.v1One attributed transcript segment
schema.finance.fact.v1One counted mention occurrence with venue-specific counting fields

Fact rows retain the matched phrase, mention count, speaker role, call segment, source, delivery path, and resolution status. This lets consumers audit why an occurrence counts for a venue.

Hosted transcript reads use MOSTLYRIGHT_FINANCE_HOSTED_URL. Live SSE streaming also requires MOSTLYRIGHT_API_KEY. See Credentials for the configuration matrix.