Try Stackwise
See what your sales data can tell you
Run a demand forecast on sample data or upload your own CSV. No account, no setup, no commitment.
How the demo works
Three steps. Results appear on this page.
-
01
Upload your sales CSV
Use our sample dataset to explore, or upload your own sales history CSV.
-
02
View your demand forecast
See SKU-level demand projections and velocity metrics based on historical sales.
-
03
Optionally add stock levels
Provide current stock to unlock risk assessment, stock coverage, and reorder suggestions.
Try with sample data
Explore Stackwise using a pre-loaded dataset of 12 SKUs across 6 months.
Upload your own CSV
Use your real sales history. No account required.
Drag your CSV here or browse
CSV files only. Max 5 MB.
CSV format guidance
Your sales CSV should include columns for dates, product identifiers, and quantities. Below is the recommended format. Column order does not matter.
Sales CSV columns
| Column | Required | Description | Example |
|---|---|---|---|
date |
Required | Order or sale date | 2025-09-14 |
sku |
Required | Unique product identifier | BK-1042 |
quantity_sold |
Required | Units sold in this row | 3 |
product_name |
Optional | Human-readable product name | Ceramic Mug — Sage |
Stock CSV columns (optional)
To enable risk assessment and reorder suggestions, upload a separate stock CSV
or include a current_stock column in your sales CSV. If provided via a separate file,
the stock CSV should contain:
| Column | Required | Description | Example |
|---|---|---|---|
sku |
Required | Must match SKUs in sales CSV | BK-1042 |
current_stock |
Required | Units currently in inventory | 120 |
Example sales CSV
date,sku,quantity_sold,product_name
2025-09-14,BK-1042,3,Ceramic Mug — Sage
2025-09-14,LT-0887,1,Linen Tote — Natural
2025-09-15,BK-1042,5,Ceramic Mug — Sage
2025-09-15,CN-2215,2,Soy Candle — Cedar
Example stock CSV (optional)
sku,current_stock
BK-1042,120
LT-0887,45
CN-2215,88
Sales CSV schema is recommended, not enforced. Stackwise will attempt to map common column names (e.g., "order_date", "product_id", "qty") automatically. Stock data is entirely optional. If no stock is provided, forecasts and velocity metrics are still generated — risk and reorder suggestions will not appear.
Your forecast
—
Add stock levels
Unlock stockout risk, reorder dates, and suggested quantities.
| SKU | Product | Current stock |
|---|
One SKU per line. Accepts: SKU,stock • SKU stock • SKU stock
BK-1042 120
LT-0887 45
CN-2215 200
| SKU | Stock | Status |
|---|
Drop your stock CSV here or browse
Any CSV with SKU and stock columns. Headers can be named anything.
Map your columns
Select which column contains SKU identifiers and which contains stock quantities.
Missing SKUs (in sales data but not in stock file):
Stock levels applied
—
Lead time
How many days between placing and receiving an order. Used to calculate reorder dates.
| SKU | Product | Lead time (days) |
|---|
safety_stock = z × σ_daily × √lead_time
reorder_qty = ceil(max(0, 30d × avg_daily + safety_stock − current_stock))
Inventory Health Overview
Aggregated from current stock levels, demand velocity, and lead time settings.
How these are calculated
at_risk = count(risk ∈ {Stockout, Reorder now, Watch})
overdue = count(risk ≠ On track AND last_safe_reorder_date < today)
avg_coverage = mean(coverage_days) [SKUs where avg_daily > 0 and coverage is finite]
coverage_days = (avg_daily > 0) ? current_stock / avg_daily : (current_stock > 0 ? — : 0)
safety_stock = z × sigma_daily × sqrt(lead_time_days)
reorder_qty = ceil(max(0, target_coverage_days × avg_daily + safety_stock − current_stock))
last_safe_reorder_date = today + max(0, coverage_days − lead_time_days)
days_out_of_stock = max(0, lead_time − coverage_days)
lost_revenue = Σ(avg_daily × price × days_out_of_stock) [already 0 when coverage ≥ lead_time]
cv = (avg_daily > 0) ? sigma_daily / avg_daily : null (no demand — not measurable, displayed as "—")
slow_mover = velocity_pct < 0; overstocked = coverage_days > target_coverage_days
slow_overstocked_capital = Σ(stock × unit_price) for slow movers + Σ(stock × unit_price) for overstocked
| SKU | Product | Forecast Total | Avg Daily | Velocity | Volatility | Stock | Coverage | Last safe reorder date | Reorder Qty | Risk |
|---|
No SKU data to display. Upload a CSV or run the demo to see results.
No items need reordering in this time frame.
How reorder quantities are calculated:
Core formulas
reorder_qty = ceil(max(0, target_coverage_days × avg_daily + safety_stock − current_stock))
safety_stock = z × sigma_daily × √(lead_time_days)
Coverage days
coverage_days = current_stock / avg_daily (when avg_daily > 0)
coverage_days = ∞ (when avg_daily ≤ 0, current_stock > 0 — no demand, stock does not deplete)
coverage_days = 0 (when avg_daily ≤ 0, current_stock = 0)
Coefficient of variation
cv = sigma_daily / avg_daily (when avg_daily > 0)
cv = undefined (when avg_daily ≤ 0 — not measurable)
Derived metrics
last_safe_reorder_date = today + max(0, coverage_days − lead_time_days)
days_out_of_stock = max(0, lead_time_days − coverage_days)
lost_revenue = avg_daily × unit_price × days_out_of_stock
Risk logic
Stockout: coverage_days ≤ 0
Reorder now: coverage_days < lead_time_days
Watch: coverage_days < target_coverage_days (and ≥ lead_time_days)
On track: otherwise
overdue: risk ≠ On track AND last_safe_reorder_date < today
when avg_daily ≤ 0: reorder_qty = 0 (no demand to reorder for)
Display rules
coverage_days = ∞ → displayed as "—"
cv = undefined → displayed as "—" with tooltip "not measurable (no demand)"
reorder_qty only shown when risk ≠ On track
Safety stock uses 95% service level (z-score: 90%→1.28, 95%→1.65, 99%→2.33) with volatility-based calculation. Lead time default: 7 days. Target coverage is decoupled from the forecast horizon — you can view 90-day forecasts while ordering for 30 days of coverage.
Save your results
Export this forecast or save it to revisit later. Enter your email and we'll send a login link — no password needed.
Check your inbox
We sent a login link to —. Click it to access your saved forecasts and export data.
How we handle your data
CSV-only upload
We only accept CSV files. No store connections, no API access, no tracking scripts on your site.
You control your data
Files are processed for forecasting only. We don't sell, share, or repurpose your data.
Delete anytime
Remove your uploads instantly from your account. No questions, no waiting period.
Data retention
Uploaded files are deleted after 30 days. Demo data is not stored. Retention controls for accounts are being finalized.
Pricing
Simple, transparent pricing
Start free, upgrade when you need more.
Free
Explore with sample data and basic forecasts.
- Up to 25 SKUs
- 30-day forecasts
- Sample data access
- Basic risk indicators
Pro
Full forecasting suite for growing stores.
- Up to 500 SKUs
- 90-day forecasts
- CSV export
- Save scenarios
- Priority support
Team
Multi-store support and team collaboration.
- Unlimited SKUs
- Multi-store support
- Team access (5 seats)
- API access
- Dedicated support
Demo FAQ
Questions about the demo
Do I need to create an account to try the demo?
No. The demo with sample data works without any account. If you upload your own CSV, that also works without signing up. You only need an email if you want to save results, export data, or come back later.
What happens to the CSV I upload?
Your file is processed to generate the forecast. If you don't create an account, the file is discarded after your session ends. If you sign in with your email, uploads are stored for 30 days so you can re-run forecasts.
Is the sample dataset realistic?
The sample uses synthetic data modeled after a small e-commerce store with 12 SKUs across 6 months. It includes realistic patterns — seasonal variation, mixed velocities, and some stockout gaps — so the forecast output is representative of what you'd see with real data.
What is a "magic link" sign-in?
Instead of setting a password, we send a one-time login link to your email. Click it and you're signed in. Each link expires after 15 minutes for security.
Can I upload more than one CSV?
Yes. You upload a sales CSV to generate forecasts. You can optionally upload a second CSV with current stock levels per SKU to unlock risk assessment and reorder suggestions. After creating an account, you can manage multiple uploads and re-run forecasts.
What if I don't provide stock data?
Forecasts work without stock data. You'll see demand projections, average daily sales, and velocity trends per SKU. Risk status (On track / Watch / Reorder now), stock coverage, and reorder quantity suggestions require stock levels and will not be shown without them. This prevents Stackwise from making unfounded claims about your inventory position.
How are reorder quantities calculated?
reorder_qty = ceil(max(0, target_coverage × avg_daily_sales + safety_stock − current_stock))
Safety stock is calculated using z × σ_daily × √lead_time, where z is derived from the
selected service level (default 95%). This accounts for demand volatility per SKU.
The formula is deterministic; there are no hidden adjustments.
How is this different from the paid plans?
The demo shows the core forecast output — demand projections, risk indicators, and the reorder list. Paid plans add saved history, higher SKU limits, stockout alerts, scenario forecasting, and multi-store support depending on the tier. View plans.
Ready to use Stackwise
with your own data?
Start a 7-day free trial. Upload your sales history and get ongoing forecasts.
No credit card required. Cancel anytime.