Everything you need to know about the data: sources, cleaning, variables, and quality.
Raw and Clean — what each version contains and who should use it.
Every column, data type, and description. All 25 computed academic variables.
REST endpoints, authentication, rate limits, response formats, and examples.
Python, R, and Stata examples. Jupyter notebooks for common research tasks.
Every data update, versioned and documented. What changed and when.
Living errata log. Every discovered issue documented with date and resolution.
Source: IEX Exchange market data. Every bar, from March 7, 2022 onward, is parsed directly from IEX Exchange HIST TOPS pcap files (IEX's top-of-book feed) into one-minute OHLCV bars. IEX represents approximately 2–3% of consolidated volume, so these bars capture IEX-only activity, not the full tape.
Data provided for free by IEX. By accessing or using IEX Historical Data, you agree to the IEX Historical Data Terms of Use.
Every file carries a source column; every bar is iex.
The Clean version applies the following pipeline. Each step is applied in order. A bar that fails any step is removed.
| Step | Rule | Rationale |
|---|---|---|
| 1 | Remove bars outside 09:30–16:00 ET | Pre/post-market bars have different microstructure properties |
| 2 | Remove bars with non-positive prices (Open, High, Low, or Close ≤ 0) | Clearly erroneous |
| 3 | Remove bars where High < Low | OHLC violation — impossible in valid trade data |
| 4 | Remove bars where Open or Close falls outside [Low, High] | OHLC violation — Open and Close must be within the bar's range |
| 5 | Remove duplicate timestamps (keep first occurrence) | Source data occasionally contains exact duplicates |
| 6 | Remove bars with zero volume | No trade occurred — price is stale or indicative |
| 7 | Remove bars where |log return| > 25% (relative to previous close) | Extreme outlier filter — returns exceeding 25% in one minute are almost certainly errors |
| 8 | Brownlees-Gallo filter: remove bars where |close − median| > 3 × MAD, computed over a 50-bar centered window | Adaptive outlier detection that accounts for local price level |
| 9 | Reserved (no operation): the former splice step has nothing to join in IEX-only data | Kept so the step numbers stay the same |
Bars removed: 9,336,718 (about 3% of raw). The cleaning is conservative by design.
The ticker list is not reconstructed point-in-time: names are not added or removed automatically as companies list, delist, merge, or fail. Each ticker's series starts at its first IEX bar on or after March 7, 2022 and ends at its last one.
⚠ The ticker list is not point-in-time.
It includes names that traded on IEX in the covered period and later delisted (e.g. SVB Financial, First Republic), so delisted names are not simply dropped. But names are not added automatically as companies list, so a cross-sectional study should check that the tickers it needs are present.
Guidance:
A point-in-time, delisting-inclusive universe (built from CRSP/TAQ) is a known future direction, not part of the current release.