● Point-in-time data for Indian equities

The market, as it was known.

Lamda Terminal rebuilds the record of Indian listed companies from original regulatory filings. Every number is as-reported, every revision is kept, and every figure carries the second it became public.

Source
Original filings
Values
As-reported
History
Every vintage
Universe
Survivorship-free
01The problem

Most financial data quietly rewrites history.

When a company restates a quarter, most data vendors overwrite the old figure. When a company delists, it drops out of the universe. When a filing goes public at 4:12 pm, the database records only the date, or the end of the quarter it describes.

Each of these looks harmless. Together they make every backtest a little too good. A strategy tested on today's numbers trades on figures nobody could have seen at the time, on a universe that leaves out the companies that failed. For Indian equities the gaps are wider still. Global vendors cover small caps and delisted names thinly, and the original disclosures are scattered across exchange portals in XBRL, HTML and scanned PDF.

look-ahead 01

Restated numbers

The figure you backtest on is often not the figure the market saw. Once a vendor overwrites a restatement, the original can't be recovered by any query.

survivorship 02

Missing companies

A universe built from today's listed names and filled in backwards leaves out every company that failed, merged or delisted.

timing 03

Blurred knowledge-time

Results are often announced hours before the formal filing. Without the exact second, signals leak forward in time.

02The product

A dataset with two clocks, and a terminal built around it.

Each fact in Lamda carries two times: valid time, the period it describes, and knowledge time, the second it became knowable. Nothing is ever updated or deleted. A restatement is stored as a new version of the fact with a later knowledge time, so you can view the whole market at any past moment, the way it looked then.

known-as-of · DVL · revenue · Q1 FY24
known as of 9 Aug 202310 Aug 2023
₹40.32₹91.67cr
first reportedrestated · +127%
This is the figure that was public on 9 August 2023.Restated the next day. The original stays in the store, untouched.
vintages stored
A real restatement.
Both versions are kept, each with its own knowledge time.
A store that keeps only the latest version has lost ₹40.32 for good.
extraction center

From original disclosures

We collect results filings, shareholding patterns and corporate announcements straight from the exchange and keep every raw artifact byte for byte. Facts are parsed verbatim, with exact decimals throughout, and checked against accounting identities. Filings that fail the checks are quarantined and never served.

engine rust

A bitemporal column store

Pi DB is an append-only, memory-mapped Arrow store. Its asof read returns one version per fact, either the latest known at time T or the first reported. Run both and the difference between them is the restatement history.

workbench language

A pipeline language for time

A purpose-built language for bitemporal tables. Every row is resolved at its own point in time. It refuses operations that would give a silently wrong number, such as screening a universe that quietly drops the companies that failed, and it says why.

surfaces tui · web · sdk

Terminal, web, SDK

A keyboard-driven terminal UI for analysts, a web app with a "known as of" time slider for evaluators, and a Python and Excel SDK that pulls sealed, versioned tables. Provenance is attached to every cell.

03The workbench

Write a line. Get a table you can trust.

A pipeline reads left to right. The first stage sets the time axis, and each stage after it takes a table and returns one. Every cell resolves at its own point in time, and you can drill into any cell to see the filing, the valid time and the second it became known.

The Lamda Terminal workbench: a pipeline producing a quarterly TCS table of close, P/E and revenue, with one cell's knowledge-time provenance open below
The terminal UI. One line builds the table, and the panel below shows the vintage behind the selected cell.
AI · powered by Claude

Where AI comes in: one stage inside the pipe

Type ask "…" anywhere in a line. Claude searches the catalog and proposes series that already exist, and you tick the ones you want. Claude can't name a series that isn't in the catalog, and it never computes a number.

you typeλ quarterly since 2020 | [TCS, INFY, WIPRO].revenue | ask "balance-sheet stress"
Claude ranks
The ask picker in the Lamda terminal: Claude has ranked eight real balance-sheet series for 'balance-sheet stress', each with a one-line reason, and three are ticked
Real output. Claude ranks only series that exist in the catalog, gives a reason for each, and you tick the ones you want.
line freezes toλ quarterly since 2020 | [TCS@NSE, INFY@NSE, WIPRO@NSE].revenue | TCS@NSE.[balance_sheet:AmountOfDefault…Loans…, balance_sheet:AmountOfDefault…DebtSecurities…, balance_sheet:BorrowingsNoncurrent]

What gets stored is the approved selection, not the conversation, so replaying the table never calls the model. You can also describe a whole screen in plain English and Claude drafts the sheet from the same vetted vocabulary.

refusal survivorship

It argues back

λ quarterly since 2015 | [mcap > 1e11].close
refused · selects members by a RULE, not a list.
today's members were not yesterday's, so fanning
it wide would backfill survivors into a past that
never held them. enumerate the members.

"Today's large caps, back to 2015" is the most common backtest mistake. Most tools run it without a word. Lamda refuses at parse time and explains why.

custom table sealed · it_pe v3

Your own tables, versioned

TTCSINFYHCLTECHWIPRO
2025-12-3123.323.325.920.4
2026-03-3117.818.122.114.8
2026-06-3014.913.817.513.5
2026-09-3014.713.019.311.7

quarterly since 2025 | [TCS, INFY, HCLTECH, WIPRO].pe_ttm · trailing P/E, each row as known at its date

Seal any table under a name, then refresh, roll back or pull it into Python and Excel. The line that built it travels with it.

04Who it's for

One record. Two ways to work.

Systematic and discretionary investors ask different questions of the same data. Both need it to be what was actually known, when it was known.

quant systematic

Backtests you can defend

  • Two-clock as-of joins: no look-ahead, every row stamped with knowledge time
  • Survivorship-free universes, with dead names kept and gaps explained
  • As-first-reported or latest-restated, chosen per series
  • Arrow-native Rust engine, Python SDK, Polars and pandas
  • Sealed, replayable tables with an EXPLAIN plan for every implicit choice
  • Your own functions anywhere the defaults don't fit
discretionary fundamental

The story behind every number

  • Company pages with full as-reported statements, line by line
  • A time slider that shows exactly what the market knew on any date
  • As-reported versus restated, side by side, with the change highlighted
  • Every cell links to the original filing it came from
  • Ask in plain English and Claude builds the screen from vetted metrics
  • Excel workbooks that refresh from the same sealed tables
05The moat

The data is the product. It can only be built from the source.

Any team can build a UI. A full-history, as-reported dataset can't be rebuilt from a vendor feed after the fact, because the vendor has already thrown away the versions that matter. It has to be built from the original filings, one disclosure at a time.

vintages 01

Every version, kept forever

Our storage is append-only, so retaining versions isn't a feature we bolted on. A competitor that collapses data to the latest version can't add this later without going back to the source and re-acquiring it.

timing 02

Knowledge time to the second

We line up each formal filing with the earlier exchange announcement and stamp each fact with when it was first actually public, often hours before the filing itself.

universe 03

No survivorship bias

The whole market, not an index. Companies that have since delisted, merged or failed stay in the record, and where a value no longer exists the gap is shown and explained rather than filled.

integrity 04

Verified and traceable

Monetary values are exact decimals, never floats. Every fact is checked against accounting identities and linked to the raw filing, URL and timestamp it came from.

read-time 05

Raw data stays untouched

Concept mapping, ratios and price adjustments are computed when you read and versioned by table code, so improving a method never corrupts the record.

λ 06

Open by design

Each choice comes with a sensible default, a registry of alternatives, and a slot for your own function, and each one is recorded in provenance so the result stays auditable.

06Principles

What we refuse to do.

01No overwritingA restatement is a new row, and every version is kept. Nothing is ever deduplicated down to the latest.
02No floats for moneyDecimal from parser to engine. If a number fails its accounting identity, it is quarantined, not served.
03No silent look-aheadForward-looking windows and interpolation are refused unless you ask for them explicitly, and then they are stamped in provenance.
04No synthetic dataEvery number comes from a real disclosure. We never simulate figures to fill a gap.
05No AI-generated numbersClaude writes the query. The deterministic engine computes the answer, and the query itself is kept as a record.
07Where it goes

One trustworthy record of the Indian market.

Fundamentals are where we start. The same approach (original source, every version, exact knowledge time) works for every disclosure a listed company makes and every dataset a market moves on.

coverage 01

Every exchange, every era

NSE, BSE and regulatory registries, back to the earliest disclosures. Old scanned filings get extracted by vision models and held to the same accounting checks.

disclosures 02

Every filing type

Results, shareholding, insider trades, takeovers, board meetings, credit ratings and annual reports, all on one bitemporal timeline.

alt data 03

The wider economy

Government and regulator data such as trade flows, prices, power and credit, with each revision kept, so macro signals line up with company data in time.

edge 04

Private by default

Data is delivered to nodes on the client's own infrastructure. Their research, their own datasets and their broker feed never leave their walls.

workbench 05

Research you can replay

Every table is a sealed, versioned pipeline that you can refresh, roll back and audit, then pull straight into Python, Excel or a production system.

agents 06

AI that can be trusted with numbers

Built on Claude. Ask questions in plain language. Claude writes the query and the engine computes the answer, with every cell traceable to its source.

08Company

Why "Lamda".

The name comes from the lambda, the anonymous function. Lamda shouldn't limit what its users can do. We want an unopinionated surface over trustworthy data, not another canned screener. Guardrails exist only where a number would otherwise be silently wrong.

FoundedMay 2026

Building the record Indian markets never kept.

Get in touch →