{"slug":"free-stock-market-data-api","qid":"spy_qqq_trace","label":"SPY vs QQQ, normalized return over the last 45 days","post_title":"Free Stock Market Data API, No Key Required","post_url":"/blog/free-stock-market-data-api#q-spy_qqq_trace","columns":["day","spy_return_pct","qqq_return_pct"],"rows":[{"day":"2026-07-08","spy_return_pct":0,"qqq_return_pct":0},{"day":"2026-07-09","spy_return_pct":0.81,"qqq_return_pct":1.5},{"day":"2026-07-10","spy_return_pct":1.27,"qqq_return_pct":1.97},{"day":"2026-07-13","spy_return_pct":0.37,"qqq_return_pct":-0.24},{"day":"2026-07-14","spy_return_pct":1.04,"qqq_return_pct":1.38},{"day":"2026-07-15","spy_return_pct":1.25,"qqq_return_pct":0.72},{"day":"2026-07-16","spy_return_pct":0.5,"qqq_return_pct":-1.32},{"day":"2026-07-17","spy_return_pct":-0.39,"qqq_return_pct":-2.62},{"day":"2026-07-20","spy_return_pct":-0.44,"qqq_return_pct":-2.31},{"day":"2026-07-21","spy_return_pct":0.36,"qqq_return_pct":-0.51},{"day":"2026-07-22","spy_return_pct":0.17,"qqq_return_pct":-1.05},{"day":"2026-07-23","spy_return_pct":-0.88,"qqq_return_pct":-2.63},{"day":"2026-07-24","spy_return_pct":-0.9,"qqq_return_pct":-3.98},{"day":"2026-07-27","spy_return_pct":-0.87,"qqq_return_pct":-4.36},{"day":"2026-07-28","spy_return_pct":-0.24,"qqq_return_pct":-4.55},{"day":"2026-07-29","spy_return_pct":-1.74,"qqq_return_pct":-6.49},{"day":"2026-07-30","spy_return_pct":-0.28,"qqq_return_pct":-3.37},{"day":"2026-07-31","spy_return_pct":-0.16,"qqq_return_pct":-3.9},{"day":"2026-08-03","spy_return_pct":1.74,"qqq_return_pct":-1.47},{"day":"2026-08-04","spy_return_pct":3.66,"qqq_return_pct":1.47},{"day":"2026-08-05","spy_return_pct":3.45,"qqq_return_pct":0.59},{"day":"2026-08-06","spy_return_pct":3.17,"qqq_return_pct":0.66},{"day":"2026-08-07","spy_return_pct":3.76,"qqq_return_pct":1.54},{"day":"2026-08-10","spy_return_pct":3.62,"qqq_return_pct":1.08},{"day":"2026-08-11","spy_return_pct":3.43,"qqq_return_pct":0.94},{"day":"2026-08-12","spy_return_pct":3.61,"qqq_return_pct":1.45},{"day":"2026-08-13","spy_return_pct":4.39,"qqq_return_pct":2.81},{"day":"2026-08-14","spy_return_pct":4.11,"qqq_return_pct":2.61},{"day":"2026-08-17","spy_return_pct":3.67,"qqq_return_pct":2.48},{"day":"2026-08-18","spy_return_pct":2.91,"qqq_return_pct":0.55},{"day":"2026-08-19","spy_return_pct":3.3,"qqq_return_pct":0.91},{"day":"2026-08-20","spy_return_pct":2.34,"qqq_return_pct":-0.22},{"day":"2026-08-21","spy_return_pct":2.89,"qqq_return_pct":0.29}],"shape":"series","sql":"SELECT day,\n       round((spy / first_value(spy) OVER (ORDER BY day ASC) - 1) * 100, 2) AS spy_return_pct,\n       round((qqq / first_value(qqq) OVER (ORDER BY day ASC) - 1) * 100, 2) AS qqq_return_pct\nFROM (\n    SELECT toDate(window_start) AS day,\n           argMaxIf(close, window_start, ticker = 'SPY') AS spy,\n           argMaxIf(close, window_start, ticker = 'QQQ') AS qqq\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('SPY', 'QQQ') AND window_start >= now() - INTERVAL 45 DAY\n    GROUP BY day\n)\nORDER BY day","computed_at":"2026-08-22T04:06:30.017695+00:00","elapsed":0.094035109}