Forecast Demand Using Your Shopify Sales Data
How to turn your own Shopify order history into a demand forecast — which native reports to pull, how far back to look, and what to clean out first.
Every forecasting method described anywhere on this site assumes you already have a column of past sales sitting in front of you. Getting that column out of Shopify, in a shape a formula can actually use, is a separate problem nobody warns you about until you're three tabs deep in Analytics wondering why the report on screen has only one row per product.
This post is about that step specifically: where your sales data actually lives in Shopify, which report gets you a real per-SKU history instead of a single flattened total, how far back is worth pulling, and what to strip out before you trust the numbers. Once the data's clean, choosing a method and turning it into a target quantity are separate posts.
Where your sales data lives
Shopify keeps sales data in two different places, and they're not interchangeable. Orders themselves, the individual transactions, one row per line item, with SKU, quantity, price, and everything else attached, live under Orders in your admin and can be exported directly. Reports that summarize sales by product live under Analytics → Reports, in a Sales category.
Neither of these is the same as Shopify's native inventory reports, which track stock levels and adjustments rather than sales; we cover those separately. This post is about the sales side: the raw material a demand forecast is actually built from.
Which reports to pull
Start with the order export. In your admin, go to Orders → Export, choose Orders by date (pick a start and end date) or a fixed row count, select CSV, and export. Anything over 50 rows or a date-range export gets emailed to you rather than downloaded on the spot. The file itself is large, over 70 columns, covering order basics, financials, fulfillment status, addresses, and line-item SKU, quantity, and price. It's the rawest and most complete version of your sales data, and Shopify's own export documentation doesn't name a plan restriction on it. It reads as available to any store with order history to export.
For a faster look at product-level totals, Analytics → Reports → Sales has two reports built around products: Total sales by product and Total sales by product variant. Each gives you net quantity sold per SKU, plus the usual financial columns. The catch: neither has a native date breakdown. Every row is one product or variant, totalled across whatever date range you selected, not a week-by-week or month-by-month series. That's the same shape of number the reorder-point walkthrough calls "5 units a day" for Cedar & Fig, 250g: a single total divided by the days in the window, not an actual time series.
For the real series, sales broken down by period and by product, in one place, use Total sales over time with product columns added, or run the product-level report over shorter, successive date windows and stitch the results together. Shopify also offers custom reports and data explorations for building a report shaped exactly the way you need; the row limits and exact mechanics are worth confirming directly in your own admin if your catalog is large enough for it to matter.
fields in a full Shopify order export
native reports break sales down by product — neither has a date column
rows Shopify displays on screen before a full export is required
export formats available: CSV, XML, JSONL, Parquet
How far back to look
Shopify documents a hard historical cutoff for two categories of reporting data: session-based analytics only go back to October 2022, and inventory-based metrics only go back to October 2023. Sales and order data itself isn't covered by either of those cutoffs, and Shopify doesn't state a separate limit for it. Treat "how far back can I pull my own sales history" as a question your store's age answers, not a platform limit.
How much you need depends on what you're trying to see. A basic velocity number, average units sold per day, is usable from a short window; the reorder-point walkthrough on this site uses 60 to 90 days, and it's a reasonable default here too. A seasonal comparison is a different problem: it needs at least one full prior year to compare against, ideally more, and there's no settled figure for how many years count as enough. Nobody has published one; don't let a competitor's blog convince you otherwise.
Cleaning the data
Raw export in hand, a few things distort a demand number before you've even started forecasting from it.
- Exclude cancelled and fully refunded orders. Units that came back off the shelf aren't demand, even though they're sitting in the same export row as everything else.
- Flag any stretch where a SKU was actually out of stock. A sales report only records what sold, not what customers wanted. A week of zero sales because the shelf was empty looks identical to a week of genuinely zero demand, and a forecast that can't tell the two apart will order too little.
- Separate bulk or wholesale line items from ordinary orders. A single 200-unit wholesale order sitting inside a "units per day" average for a SKU that otherwise sells in ones and twos will badly distort the number.
- Note anything you know was a one-off (a pricing error, a warehouse mix-up, a test order) and pull it out rather than let it quietly become "normal" in next quarter's average.
A stockout doesn’t lower demand. It just stops your sales report from being able to see it.
Multi-channel sales
If POS, wholesale orders, or a marketplace channel write their orders into Shopify as part of the same order stream, they're already sitting inside whatever export or report you pulled above. Nothing extra to do.
If a channel isn't synced into Shopify at all (a marketplace fulfilled independently outside Shopify, a wholesale relationship that runs on a spreadsheet and an invoice), its sales won't show up anywhere in the data above, and a forecast built only from Shopify's own numbers will understate real demand for any SKU that channel moves in volume. The fix is manual: pull that channel's own sales history separately and combine it with Shopify's, at least for the SKUs where the untracked channel is a meaningful share of the total.
Once your sales data is exported, cleaned, and combined across channels, it feeds directly into the rest of the forecasting process. See our complete guide to Shopify inventory forecasting for how the pieces fit together end to end.
Doing all of the above by hand (exporting, waiting for the email, opening the CSV, deleting the promo week, redoing it next quarter because the file's stale) is real, recurring work, and it's why most stores stop doing it consistently past a few dozen SKUs. StockCue removes the export step specifically: it pulls a store's own order history automatically, backfills 24 months of it on install, and recalculates every SKU's forecast overnight against live data.
STOCKCUE
Pulling and cleaning two years of sales history by hand is a job most stores start once and never finish twice. StockCue backfills 24 months of your own Shopify order history automatically and recalculates the forecast every night, on every plan including Free.
Install StockCue on Shopify →Frequently Asked Questions
Which Shopify report shows sales history for forecasting?
No single native report is built as a time series. Total sales by product and Total sales by product variant, under Analytics → Reports, give you net quantity sold per SKU but total it across your whole selected date range in one row, with no date breakdown. For an actual period-by-period series, use Total sales over time with product columns added, or export raw orders under Orders → Export and build the series yourself.
How many months of Shopify sales data do you need to forecast accurately?
There's no fixed number, and it depends on what you're forecasting. A basic velocity figure — average units sold per day — is usable from 60 to 90 days of history, the same window this site's reorder-point guide recommends. A seasonal pattern needs at least one full prior year to compare against, and more than one is better, though no source pins down an exact number of years that counts as enough.
Should bulk or wholesale orders be excluded from a forecast?
Generally yes, if they'd distort a SKU's normal per-unit demand signal. A handful of large wholesale orders mixed into an otherwise steady retail sales history will inflate the average in a way that doesn't reflect how the product actually sells day to day — separate the two and forecast them independently if wholesale is a meaningful share of a SKU's volume.
Can Shopify sales data alone forecast demand across multiple sales channels?
Only for channels whose orders actually flow into Shopify. If a channel writes its orders into your Shopify order stream — POS, most marketplace integrations, wholesale orders entered manually — its sales are already included in the reports and exports above. If a channel operates entirely outside Shopify, its sales won't appear in any Shopify report, and forecasting from Shopify data alone will understate real demand for that SKU.