Grounding Data with Citations

Tracing inputs back to their source is critical to verifying and understanding financial models. Grounding values in their sources matters even more as modeling work shifts to AI agents.

In a spreadsheet, hardcoded values rely on cell comments or surrounding context to explain where they came from. In Orcaset, the values themselves can carry annotations and structured metadata that link them to their origin.Annotating with text

Consider a company model that holds two 2027 revenue assumptions. One number comes from management guidance, and the other is the investor's own base-case estimate.

In Excel, we'd annotate each number with a comment on its cell or a note in a neighboring cell. Both approaches can break when values are copied or cells are rearranged.

Annotations in Excel using a cell comment and adjacent cell

Orcaset lets users define values that carry their own annotations. They behave like regular numbers and work with ordinary arithmetic. The only difference is the attached annotation, which is retained when values are copied or the model is restructured.

Plain text citation in Orcaset

Structured citations

Citations aren't limited to text. They can be complex, structured values. For example, we can link a value back to a specific fact in a public company filing, including its reporting period and source URL.




Clicking the citation link opens the filing in EDGAR's viewer, which scrolls to and highlights the specific fact on the page.

Orcaset citation linking to EDGAR

There are no restrictions on citation format. A citation can be plain text, a PDF deep link, a file reference, a database query, or any other content that provides meaningful attribution.

Enforcing citations

Orcaset is generic and type-safe with respect to values. In plain English, models can work with arbitrary "types" of values, and Orcaset makes sure the pieces fit together properly.

We can use these properties to require certain values to carry a citation. For example, we might require every historical number to link back to its filing or statement. Before a model is ever evaluated, Orcaset runs a deterministic type checker over it and rejects plain numbers anywhere the model expects a cited value. This guarantees that models stay transparent, with references in the appropriate form and location.

[Image: type checker rejecting a model that expects an annotated number]

Verifying data beyond citations

Source citations are a good step toward better data integrity. They provide context and give reviewers a way to check numbers, but values and their citations can drift apart.

Orcaset lets you go beyond citations by fetching values directly from their source. Whenever the model runs, it retrieves each value from its source of truth, whether that's an internal database, a file, a vendor's API, an ERP or CRM system, or any other digital resource. Fetching values at the source keeps them accurate and avoids AI hallucinations. Unlike MCP connectors, where values pass through the agent's context window, a direct request between the model and the data source runs in a deterministic process outside the agent.

For a look at how citations are implemented under the hood in Python, see our earlier post, Data Citations for Financial Models.

Reach out to the Orcaset team to learn more, or explore the library code on GitHub.