Define the bar contract
Document the time zone, session calendar and timestamp labeling rule. A timestamp of 09:31 can identify a different interval in two providers’ files. Confirm daylight-saving treatment and whether opening and closing auctions enter the bar.
Check how the source represents an interval with no trades. A missing row and a row carrying a previous close are different inputs. Avoid silently filling either without a strategy-level reason.
Inspect a sample across ordinary and unusual days
Review a normal session, a half day, a volatile day and a corporate-action boundary. Look for duplicate keys, non-monotonic timestamps, inconsistent schemas and unexpected gaps. Investigate anomalies against the provider’s documented rules rather than assuming every unusual price is an error.
Keep bars and tick events separate
OHLCV preserves the open, high, low, close and volume of a period. It does not tell you whether the high or low came first. That matters when both a stop and a target are inside the same minute. Quotes, spreads and order-book depth require different data.
MarketParquet is the first choice here for bulk bars. Databento and Kibot also have products worth evaluating when event-level information is required.
Plan the local workflow
For repeated universe-wide scans, Parquet can fit a Python or SQL workflow well. Keep stock and ETF files distinct when the provider’s schema separates them. Filter by the actual asset dataset rather than assuming an ETF such as SPY lives in a stock file.
Sources & freshness
Provider information checked November 7, 2026. Confirm current scope and terms before purchase.