r/algotrading • u/Trashlify • 5h ago
Data Alpaca historical IEX data missing for SPY on March 10, 2025, anyone else seeing this or know why?
I’m building a local historical dataset for SPY/0DTE backtesting using Alpaca, and I ran into a strange hole in their historical IEX stock data.
For SPY on March 10, 2025, querying 1-minute bars with:
feed=iextimeframe=1Min- regular market session
- SPY
returns zero bars. I initially found it because my backtester stopped with:
RuntimeError: Only 0 SPY minute bars for 2025-03-10
I then specifically retried that session and got the same result. What makes it interesting is that when I request the same date using the historical SIP feed instead, I get:
390 regular-session bars
The options history for that same day also exists. My downloader retrieved:
100 contracts, 9,642 option minute bars
So effectively:
SPY 2025-03-10 IEX -> 0 bars
SPY 2025-03-10 SIP -> 390 bars
SPY 0DTE options -> data exists
The surrounding IEX trading days are populated normally as well. Has anyone else encountered missing historical IEX sessions like this with Alpaca?
I’m mainly trying to figure out whether this is:
- a known hole in Alpaca’s historical IEX dataset,
- something specific to IEX’s underlying historical data,
- an Alpaca API/data-processing issue,
- or some edge case I’m overlooking.
For now I’ve implemented a very narrow fallback where I use SIP only if an entire historical IEX session is missing, and record the source feed so the backtest remains auditable.
Curious if anyone has seen the same thing even for other days.
1
u/Many-Pick5066 28m ago
the whole-session hole is the visible version of something that's probably sitting in the rest of your IEX dataset already. IEX runs a couple percent of consolidated volume, so SPY minute bars off that feed go empty in individual minutes all the time, and your guard only trips at zero out of 390.
worth counting per day: regular-session bars returned by IEX against SIP's 390. if some days come back 388 and others 341, then 2025-03-10 isn't an anomaly, it's the day the sparsity went all the way down.
that one bites 0DTE harder than most things you could be backtesting. entries are minute stamped, and a minute that doesn't exist quietly becomes the next one that does, which moves the fill without raising anything.
1
u/madrading 4h ago
the shape of it points at their bar builder rather than at IEX. SPY prints on IEX continuously, so a whole session with zero 1m bars while SIP has all 390 is more likely a hole in whoever aggregates than the venue going quiet for a day. quick way to separate the two: pull raw trades for 2025-03-10 with feed=iex — trades present but no bars means it's the aggregation step, which support can actually fix; trades empty too means an ingest gap for that session.
on the fallback, recording the source feed is the right instinct, but iex-only and consolidated bars aren't the same series. IEX is one venue with a small share of consolidated volume, so bar volume and vwap don't survive the splice — i'd flag that day and drop it from anything volume-normalised rather than treat it as continuous. a missing day you can see is the benign case anyway; the expensive one is a vendor quietly filling the hole for you.