Nasdaq ITCH restatement

The Nasdaq ITCH restatement: how to re-validate your bars

As of October 2026, Databento has announced that on 31 October 2026 it restates its historical Nasdaq TotalView-ITCH data. If your research reads Nasdaq ITCH history, this is a good week to snapshot what you have, re-pull after the change, and check both against an independent source.

Get a free API key See pricing Download free samples

What changes on 31 October

According to Databento's announcement, the restated Nasdaq TotalView-ITCH history brings new instrument IDs for data before 28 November 2023, a fix to after-hours data, and midnight snapshots. Databento says the change may be breaking for some code. Restatements like this are a normal part of keeping a long history clean, and Databento announced it in advance, so there is time to prepare.

The practical risks for a research pipeline are simple: joins that key on instrument_id silently drop or mismatch rows, cached files no longer match a fresh pull, and after-hours bars move. None of this is visible unless you look.

A four-step checklist

  • Snapshot now. Before 31 October, export the symbols and date ranges your models use, for the schemas you rely on, and store them with the pull date.
  • Re-pull after. After the restatement, pull the same symbols, schemas and dates again into a separate folder.
  • Diff on symbol and date. Join the two pulls on symbol and timestamp, never on instrument_id, and list every bar whose open, high, low, close or volume changed. Expect changes concentrated in after-hours bars and before 28 November 2023.
  • Check against a second source. For the bars that changed, and for a random sample of the ones that did not, compare against an independent consolidated source. A difference that shows up in both pulls but not in the consolidated data points to the feed; a difference that only shows up in one pull points to the restatement.

Keep the diff as a file with the pull dates, so that when a backtest result moves after 31 October you can tell whether the data or the model changed. Re-run your key backtests on both pulls and record the difference in their headline statistics.

Exchange feed or consolidated bars

ITCH is Nasdaq's own feed: it reports trades on Nasdaq venues. Consolidated bars include every venue, so their volume is larger by design, and the high and low can differ when the extreme print happened elsewhere. When you compare the two, compare closes and close-to-close returns, and treat volume as a ratio rather than a match.

Check which close your daily bars carry. A single-exchange feed covers the whole extended session, roughly 04:00 to 20:00 Eastern, and a daily bar built on the UTC calendar day can end on the last after-hours trade rather than the official 16:00 close. In our own check on Nasdaq-only daily bars, the daily close matched the last after-hours trade on the days we tested, not the official close, which is enough to shift daily returns by several basis points. Before you compare sources or compute returns, build your close from the regular session (the last trade before 16:00 Eastern, or the official closing price) so both sides measure the same thing.

For a daily return check, a tolerance of a few basis points on the close is a sensible start. Days above it are the ones to read by hand: splits and dividends, half days, and corporate actions explain most of them.

Compare with Python

import databento as db
import finzdata as yf
import pandas as pd

client = db.Historical("YOUR_DATABENTO_KEY")
dbn = client.timeseries.get_range(dataset="XNAS.ITCH", schema="ohlcv-1d", symbols=["AAPL"],
                                  start="2024-01-02", end="2024-06-28").to_df()
dbn["date"] = dbn.index.tz_convert("UTC").date
a = dbn.groupby("date")["close"].last()

fz = yf.download("AAPL", start="2024-01-02", end="2024-06-28")
b = fz["Close"].squeeze()
b.index = pd.to_datetime(b.index).date

both = pd.concat({"itch": a, "consolidated": b}, axis=1).dropna()
diff_bp = (both["itch"].pct_change() - both["consolidated"].pct_change()).abs() * 1e4
print(both[diff_bp > 5])   # days whose returns differ by more than 5 basis points

A free second source

FinzData publishes consolidated US stock and ETF bars from 2000, delisted names included, through one API and a Python client. The free bar-check tool reads a Databento OHLCV CSV export as it comes, with nanosecond ts_event and fixed-point prices, and compares it against FinzData daily bars, so you can check a file without writing code.

A free key covers the last 12 months of daily bars. For longer history, one ticker with 5 years of 1-minute to daily bars is $19, and the whole US market for 5 years is $195. More on running two sources: second-source market data.

Start free

Get a free API key (email only, no card) and run the check on your own symbols, or buy the history you need in the shop.

Frequently asked questions

When does the Nasdaq ITCH restatement happen?

Databento has announced it for 31 October 2026, as of October 2026. Check its announcement for any change to the date.

What should I compare before and after?

Open, high, low, close and volume for the symbols and dates you use, joined on symbol and timestamp. Do not join on instrument_id, because IDs before 28 November 2023 change.

Why does consolidated volume differ from ITCH volume?

ITCH covers trades on Nasdaq venues only; consolidated bars include every venue, so their volume is larger by design.

Can I check a Databento CSV without code?

Yes. The free bar-check tool at finzdata.com/tools/bar-check reads a Databento OHLCV CSV export and compares it against FinzData daily bars.

Is FinzData a replacement for ITCH data?

No. FinzData provides consolidated bars and does not sell order-book data. It works as an independent second source for bar-level research.