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

| Runtime | Namespace | Methods | | --- | --- | --- | | Python | mostlyright.finance.transcripts | resolve() and derive() | | TypeScript | @mostlyrightmd/finance | transcripts.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.

| Schema | One row represents | | --- | --- | | schema.finance.transcript.v1 | One attributed transcript segment | | schema.finance.fact.v1 | One 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.