{"slug":"free-stock-data-api-in-python","qid":"aapl_volume_trace","label":"aapl_volume_trace","post_title":"free-stock-data-api-in-python","post_url":"/blog/free-stock-data-api-in-python#q-aapl_volume_trace","columns":["session","volume_millions","avg_20d_millions"],"rows":[{"session":"2026-07-31","volume_millions":132.5,"avg_20d_millions":53.6},{"session":"2026-08-03","volume_millions":75.1,"avg_20d_millions":54.7},{"session":"2026-08-04","volume_millions":68,"avg_20d_millions":56},{"session":"2026-08-05","volume_millions":49.4,"avg_20d_millions":56.4},{"session":"2026-08-06","volume_millions":46.1,"avg_20d_millions":56.3},{"session":"2026-08-07","volume_millions":34.4,"avg_20d_millions":56.3},{"session":"2026-08-10","volume_millions":44.8,"avg_20d_millions":56.4},{"session":"2026-08-11","volume_millions":37.5,"avg_20d_millions":56.5},{"session":"2026-08-12","volume_millions":41.7,"avg_20d_millions":55.5},{"session":"2026-08-13","volume_millions":40.3,"avg_20d_millions":54.4},{"session":"2026-08-14","volume_millions":28.2,"avg_20d_millions":52.6},{"session":"2026-08-17","volume_millions":38.2,"avg_20d_millions":51.9},{"session":"2026-08-18","volume_millions":53.4,"avg_20d_millions":52.5},{"session":"2026-08-19","volume_millions":50.5,"avg_20d_millions":53},{"session":"2026-08-20","volume_millions":41,"avg_20d_millions":53.1},{"session":"2026-08-21","volume_millions":46.9,"avg_20d_millions":53},{"session":"2026-08-24","volume_millions":34.7,"avg_20d_millions":52.3},{"session":"2026-08-25","volume_millions":25.9,"avg_20d_millions":51},{"session":"2026-08-26","volume_millions":34,"avg_20d_millions":49.9},{"session":"2026-08-27","volume_millions":32.4,"avg_20d_millions":47.8},{"session":"2026-08-28","volume_millions":38.6,"avg_20d_millions":43.1},{"session":"2026-08-31","volume_millions":41.2,"avg_20d_millions":41.4},{"session":"2026-09-01","volume_millions":53.2,"avg_20d_millions":40.6},{"session":"2026-09-02","volume_millions":33.8,"avg_20d_millions":39.8},{"session":"2026-09-03","volume_millions":37.2,"avg_20d_millions":39.4},{"session":"2026-09-04","volume_millions":39.6,"avg_20d_millions":39.7},{"session":"2026-09-08","volume_millions":35.5,"avg_20d_millions":39.2},{"session":"2026-09-09","volume_millions":65.6,"avg_20d_millions":40.6},{"session":"2026-09-10","volume_millions":70,"avg_20d_millions":42},{"session":"2026-09-11","volume_millions":50.7,"avg_20d_millions":42.5},{"session":"2026-09-14","volume_millions":39.3,"avg_20d_millions":43.1},{"session":"2026-09-15","volume_millions":31.7,"avg_20d_millions":42.8},{"session":"2026-09-16","volume_millions":36,"avg_20d_millions":41.9},{"session":"2026-09-17","volume_millions":36.7,"avg_20d_millions":41.2}],"shape":"series","sql":"SELECT\n    session,\n    volume_millions,\n    avg_20d_millions\nFROM\n(\n    SELECT\n        toString(d)                                                                            AS session,\n        round(vol / 1e6, 1)                                                                    AS volume_millions,\n        round(avg(vol) OVER (ORDER BY d ROWS BETWEEN 19 PRECEDING AND CURRENT ROW) / 1e6, 1)  AS avg_20d_millions,\n        count() OVER (ORDER BY d ROWS BETWEEN 19 PRECEDING AND CURRENT ROW)                    AS sessions_in_window\n    FROM\n    (\n        SELECT\n            date                    AS d,\n            toFloat64(max(volume))  AS vol\n        FROM global_markets.stocks_daily_aggs\n        WHERE ticker = 'AAPL'\n          AND date >= today() - 75\n          AND date <  today()\n        GROUP BY date\n    )\n)\nWHERE sessions_in_window = 20\nORDER BY session","computed_at":"2026-09-18T14:57:25.639174+00:00","elapsed":0.178743942}