Skip to content
investiDocs

Coverage and provenance

Coverage windows show what your records span, provenance shows where each number came from, and unlicensed data is never shown or approximated.

On this page

Every figure in Investi answers two questions: what period of your records does it cover, and where did the inputs come from. Coverage windows answer the first, provenance the second. Data Investi is not licensed to show is left out entirely rather than estimated.

Coverage windows#

A coverage window is the span between the earliest and latest record behind a number, given as coverageStart and coverageEnd. Nothing outside the window is filled in by estimate. If your imports start in 2023, a realized P/L figure covers 2023 onward and says so.

Where What the window spans
A security's trading history (research page, company report tradingHistory) Your first and last fill in that security, across accounts.
Portfolio and round trips (/api/v1/portfolio, /api/v1/round-trips, MCP portfolio tools) Your first and last fill overall, with the list of record sources (for example schwab_csv, schwab_api, generic_csv, sample).
An import batch The earliest and latest dated row in that file, fills and cash events both.
Price history (/api/v1/securities/{ticker}/history) The first and last daily bar returned.

The History page header shows your fill count, closed round trips and coverage dates, and each import batch shows its own window. When a window is shorter than you expect, the fix is to import an older export; see Import your history.

Gaps and mismatches#

Investi does not hide holes in your record:

  • A sell larger than the long shares Investi knows about raises a warning that earlier history is probably missing. See The ledger.
  • When a broker position snapshot disagrees with the quantity your fills imply, the position is marked as a mismatch with a warning such as "broker reports 120 sh, imported fills imply 100. History may be incomplete." The portfolio response's provenance then reads reconciliation: "unreconciled" instead of "verified".
  • Shares transferred in without cost basis stay out of verified realized P/L, and their proceeds are reported separately.

Provenance#

In the company report#

The report's provenance field is an array with one entry per dataset. Each entry has a dataset, source, observedAt time, version, and optional notes:

Dataset Source Version means Notes
quote nasdaq.com (public, delayed) The quote's market time "Delayed ~15 min; not real-time."
daily_bars nasdaq.com (public, delayed) Date of the latest bar Bar count; regular-session, split-adjusted by provider.
fundamentals SEC EDGAR XBRL Filing date of the latest annual figures
filings SEC EDGAR Accession number of the newest filing
analyst nasdaq.com (public, delayed) The consensus as-of date "Consensus via Zacks; individual firm targets require a licensed feed."
trades Your record sources Number of fills

The research page prints these sources under the report along with the schema version, report id and generation time. See Research.

The evaluation behind the report also records the dataset versions its inputs came from (for example the latest bar date and the newest filing accession). Those versions are part of the input fingerprint, so a verdict can always be traced to the exact data that produced it. See Verdicts and policy.

In API and MCP responses#

Most REST and MCP responses carry a provenance object next to the data, with at least a source and an observedAt time. Depending on the endpoint it adds:

  • coverageStart and coverageEnd for record-based and price-history data,
  • delayedBy: 900 (seconds) and the entitlement text for quotes,
  • reconciliation for the portfolio,
  • sample: true in MCP portfolio responses when sample data is loaded.

See the REST API and MCP.

What is never shown#

These are not licensed, so Investi neither shows them nor approximates them:

Not shown What you get instead
Real-time exchange quotes Nasdaq public quotes, delayed about 15 minutes and labeled with a freshness state. See Data sources.
Level II (market depth) Nothing. When the delayed feed carries no bid and ask, the spread check becomes a MANUAL row asking you to confirm the live spread before ordering.
Licensed news SEC filings, with a sourced note when a recent decline lines up with a material filing (or "no SEC filing in the window" when it does not).
Individual analyst firm price targets The consensus only. See below.
Options, futures and FX Nothing. Imports and Schwab sync skip these asset classes with a warning, and the screener universe is limited to common stock and ADRs.

Imports and Schwab sync keep equities, ETFs and funds. A positions row of another type is reported as "not an equity; other asset classes are not yet supported," and a Schwab position of another asset type as "asset class not supported yet." Nothing about those holdings is guessed.

Analyst consensus#

Analyst views come from the consensus that Nasdaq publishes (sourced from Zacks): the consensus price target, the low and high targets, buy, hold and sell counts, monthly history, and the names of contributing firms. Investi derives the dispersion as (high minus low) divided by the consensus. It does not show any single firm's target; the panel says "Individual firm price targets require a licensed feed and are not shown."

Staleness#

The consensus overview carries no date of its own, so Investi dates it by the newest point in its monthly history. The report marks analyst views stale: true when there is no date at all or the date is more than 120 days old, and the research page shows a Stale tag instead of "As of" with the date.

Analyst views are context. They are not one of the policy's rules and do not affect the verdict.