Trading bot stale data is one of the most common — and most underdiagnosed — causes of unexpected fill prices and strategy underperformance. Your bot fires at the right signal, the order goes in, and the fill comes back worse than expected. The culprit is often not your execution logic but the data your bot consumed before placing the trade. If that data was stale, the price your bot acted on was not the price the market was at when the order arrived.

This article explains how staleness happens, how to measure it, and what to do about it.

What Stale Data Means

Stale data is market data that has been delayed between when a price event occurred on an exchange and when your trading application consumed it. The delay may be milliseconds, seconds, or even longer depending on your data feed tier and the delivery path.

For most retail-grade trading bots using free or low-cost data subscriptions, staleness is a structural feature, not a bug. The data provider deliberately introduces delay as part of their free tier terms. When your bot reads that price and places a market order, the fill arrives at the real current price — which may be significantly different from what the bot measured.

In slow-moving, multi-day trend strategies this matters little. In intraday strategies, momentum scalps, or any approach that depends on acting quickly after a signal, stale data is a systematic tax on every trade.

The IEX vs SIP Problem

The most widely used free data feed for retail trading bots is IEX (Investors Exchange). IEX provides real-time and historical data for free under its public API. However, IEX has structural characteristics that create data delay relative to the National Best Bid and Offer (NBBO) and the consolidated Securities Information Processor (SIP) feeds that institutional participants use.

For a full explanation of how IEX, SIP, NBBO, and consolidated feeds work together, see the US Stock Market Exchanges and Data Feeds guide. The key point for this article: IEX data reflects IEX's own order book and the trades that occur on IEX's exchange. It does not always reflect the consolidated NBBO in real time. When a large move happens primarily on NASDAQ or NYSE, your IEX feed may not update immediately.

Here is the flow from a market-moving news event to your bot's order:

sequenceDiagram participant News as News Event participant NASDAQ as NASDAQ / NYSE participant SIP as SIP Consolidated Feed participant IEX as IEX Feed participant Bot as Trading Bot participant Fill as Order Fill News->>NASDAQ: Price moves immediately NASDAQ->>SIP: Quote update in microseconds SIP->>IEX: IEX reflects move (seconds later) IEX->>Bot: Bot reads updated quote Bot->>Fill: Order routed and filled Note over Fill: Fill price = current market price\n(not the IEX quote the bot read)

By the time your bot reads the IEX update and routes an order, the market has continued moving from the initial event price. The SIP-feed traders were already positioned. Your bot is chasing a print that is now history.

How Staleness Causes Bad Fills

The practical effect of stale data depends on your strategy type:

50–500ms in normal conditions; spikes to 2–5s during high-volatility events
Typical IEX Feed Delay vs SIP
5–20 bps per trade on average
Estimated Fill Slippage (scalp strategies)
~15–30% of trades during momentum events
Trades Affected by Staleness (IEX + intraday)
Negligible — staleness resolves before next-day open
Impact on Multi-Day Swing Strategies

For scalping or intraday momentum strategies, a 200ms data lag on a $50 stock moving 0.5% per minute means your quote is already 0.08% stale before your bot processes it. On a round trip, that is 0.16% of slippage from data alone — before you account for spread and market impact. At 10 trades per day, that is roughly 1.6% daily drag on a strategy whose edge may only be 0.2–0.3% per trade.

🚨 DANGER
Free data feed plus intraday scalping equals guaranteed edge erosion. The math is not close. If your strategy depends on capturing moves of less than 0.5%, you cannot afford to operate on delayed quotes. The data cost is the strategy cost.

How to Detect Stale Data in Your Bot

Before upgrading your data feed, confirm that staleness is actually your problem. Three diagnostic approaches work reliably:

Compare your bot's received quote timestamps against trade execution timestamps. Log quote_timestamp, signal_timestamp, and fill_timestamp for every order. Calculate fill_price - quote_price across 50+ trades. If the average is consistently negative (you are buying above your quote price), staleness or slippage is the cause. Also compare your bot's quote against a second data source at the same moment — use requests.get against two different endpoints and log the prices with time.time() nanosecond precision. A consistent delta between sources is your staleness estimate.

Data Feed Options and What They Cost

IEX Free
Latency50–500ms typical; spikes during events | Under 100ms WebSocket | Near-real-time via TWS API | Microseconds — co-located
CoverageIEX exchange trades only | All US exchanges consolidated | All US exchanges via IBKR routing | Full consolidated tape
CostFree | ~$29/month | Included with IBKR account (commissions apply) | $1,000+/month plus infrastructure
Suitable ForSwing trading, EOD signals, learning | Intraday strategies, mid-frequency bots | Active intraday traders already using IBKR | Professional HFT and institutional

For most retail systematic traders, the practical upgrade path is: IEX for development and swing strategies, Polygon Starter for intraday bot deployment, IBKR TWS API if you are already routing orders through Interactive Brokers. There is no meaningful reason to use a paid feed if you are running daily or weekly signals — IEX latency resolves well within your strategy's decision window.

ℹ️ INFO
For swing trading strategies that place orders at the market open or close, IEX data is entirely adequate. Staleness is a problem proportional to how time-sensitive your entries are. A strategy that enters on daily close prices has zero staleness exposure — the candle is already complete.

Survivorship and the Bigger Picture

Data quality is not only about latency. The other dimension is completeness. Free tiers often strip corporate actions, adjust prices inconsistently, or omit pre-market and after-hours data. If your strategy backtested on adjusted close prices but your bot reads unadjusted real-time prices, you have a different kind of data mismatch — not staleness but price series inconsistency. Verify that your live data source and your historical data source use the same adjustment methodology before deploying.

Frequently Asked Questions

Does stale data matter for my swing trading bot?

For swing trading strategies — holding positions for days or weeks, entering at daily close or open — IEX free data is entirely sufficient. The milliseconds of delay are irrelevant when your signal is based on end-of-day prices. Stale data becomes a meaningful problem only when your strategy requires acting on intraday price events where the window between signal and optimal entry is short. If you are placing limit orders rather than market orders, staleness impact is also reduced since you define your fill price rather than accepting the market.

What is the cheapest way to get reliable intraday data for a trading bot?

Polygon.io's Starter plan at approximately $29/month provides WebSocket streaming with full consolidated US equity coverage at sub-100ms latency — the most cost-effective entry point for intraday bot data. If you are already routing orders through Interactive Brokers, their TWS API provides real-time quotes included with the account and is the simplest path for IBKR users. Alpaca's market data subscription is another option if you are already using Alpaca for order execution.

How do I know if data latency is causing my bot's underperformance?

Log three timestamps for every order: when the quote was received, when the signal fired, and when the fill came back. Calculate fill_price - quote_price across at least 50 trades. Consistent negative values (paying more than the quote on buys, receiving less than the quote on sells) indicate staleness or market impact. If the average slip per trade exceeds 0.1%, start with a data feed diagnostic before changing your strategy logic — the problem may be infrastructure, not edge.

Key Takeaway
Trading bot stale data is a structural problem with free-tier data feeds, not a code bug. IEX free data is adequate for swing strategies and end-of-day signals, but intraday bots that act on momentum events need a consolidated feed with sub-100ms latency. Diagnose before upgrading: log quote vs fill prices across 50 trades. If average fill slippage exceeds the cost of a paid feed divided by monthly trade count, the upgrade pays for itself.