BlockQuery powered by Chainlabs.ai

Answers  /  4 September 2026

What is point-in-time attribution, and why do backtests need it?

Point-in-time attribution records not just what an address is, but when that was established. Query March 2025 and you see only what was knowable in March 2025. Without it, a backtest quietly uses knowledge that did not exist at the time, looks excellent, and fails live.

Published 4 September 2026 · BlockQuery, powered by Chainlabs

2
timestamps on every record
300
attributions added monthly
6
years of attribution history
18,000
commercial entities

Attribution improves over time

You discover months later that a wallet belonged to an OTC desk. The chain did not change; your knowledge did. Around 300 attributions are added to the BlockQuery layer each month, so the dataset you hold today knows more about last year than anyone did last year.

How hindsight contaminates a backtest

If a vendor serves everything it knows today across a historical window, a model tested on that window is trained with hindsight. It sees the desk behind the address on the day of the trade, when in reality nobody could have. The result looks excellent, you deploy it, and it fails live, because the live feed only knows what is knowable now.

What point-in-time does

Every BlockQuery attribution carries the date it was established, separate from the transaction date. A query as of a date returns only attributions established by that date. In a record this is two fields side by side: first_known 2025-06-11 and tx_date 2025-03-14. Queried as of 14 March 2025, that entity is not yet attributed, and the backtest sees exactly what a desk would have seen. The honest result is worse-looking and far more useful: it reflects a signal you could actually have traded.

What it takes to provide

It requires keeping the history of the dataset itself, not just the history of the chain, and answering every query against it. That is why it is offered as a property of the feed rather than a report, and why history and live share the identical schema: what you research is what you run. See the entity data feeds.

Frequently asked questions

Does point-in-time attribution make results look worse?

In a backtest, often yes, because it removes hindsight. That is the point. The result you get is one you could have had at the time.

Is the live feed point-in-time as well?

The live feed is point-in-time by definition: it carries what is known now. History and live share the identical schema, so a model built on the honest history runs unchanged in production.

Can I still get the latest view of history?

Yes. Query as of today and you get every attribution known today applied across the full history. The as-of date is yours to set.

Is this the same as dataset versioning?

Related, but at record level. Each attribution carries its own establishment date, so any as-of query is answerable without reconstructing a snapshot of the whole dataset.

Request one month of sample data

Entity data feeds: the attribution layer as data you own, in the schema you would receive.

Request one month of sample data