Riffle watches how fast every SKU actually sells, counts each supplier's lead time, deducts what is already on the water, and hands you the order. You check the working and send it.
Connects to Shopify, or works from two CSV exports. No card to start.
| SKU | Product | Cover | Qty | Line |
|---|---|---|---|---|
| BRD-CHS-WAL | Cheese Board · Walnut | 10d | 646 | £10,594 |
| 10 days of cover left · selling 8.95/day · 45 day lead time · should have been ordered 30 days ago | ||||
| BRD-CHP-OAK | Chopping Board · Oak | 15d | 324 | £4,536 |
| 15 days of cover · 4.73/day · 43 units of buffer for variability | ||||
| BRD-CHP-WAL | Chopping Board · Walnut | 22d | 137 | £2,945 |
| 22 days of cover · 2.27/day · 19 units of buffer | ||||
| STD-PHN-OAK | Phone Stand · Oak | 36d | 26 | £177 |
| SKU | Status | On hand | Per day | Cover | Order by |
|---|---|---|---|---|---|
| MUG-STO-BLU | Out of stock | 0 | 8.73 | 0d | 10 Jul |
| TWL-TEA-NAT | Order today | 118 | 12.62 | 9d | 5 Jul |
| BWL-SRV-LG | At reorder point | 61 | 2.41 | 25d | 4 Aug |
| NAP-SET4-NAT | Fine | 96 | 4.41 | 67d | — |
| TRY-BRK-OAK | Overstocked | 1,400 | 1.32 | 1058d | — |
Sorted so the things that need action are at the top. Overstocked and dead lines stay visible — £39,977 of this shop's stock is not moving, and that is worth knowing too.
Purchase order PO-20260731-01 from Marlow & Finch. 646 × BRD-CHS-WAL — Cheese Board · Walnut 324 × BRD-CHP-OAK — Chopping Board · Oak 137 × BRD-CHP-WAL — Chopping Board · Walnut 26 × STD-PHN-OAK — Phone Stand · Oak 1,133 units across 4 lines. Requested delivery: 14 September 2026.
Sent from Riffle, replies go to you. The order marks itself sent, and you receive against it line by line when the pallet lands.
Nothing here is a black box. Every quantity on a purchase order can be traced back to a row in an export you can open yourself.
Units a day, counting days with no sales as zeros. Leaving the quiet days out is how a product that sells forty units on one Tuesday a month gets read as selling forty a day.
Per SKUz × σ × √lead time, at the service level you pick. A buffer sized to how erratic that SKU actually is, rather than a flat percentage applied to everything.
95% defaultThe day it runs out, minus the lead time. When that lands in the past — and on a real catalogue it often does — the line says how many days late you already are.
DatedOne per supplier, priced, with the reasoning frozen onto every line. Email it as a PDF, then receive against it when the delivery arrives.
PDF · emailMost of the work in this product is not the forecast. It is the handful of things a Shopify export does that quietly produce the wrong answer.
Shopify writes one row per line item and leaves the date blank on every row after the first. Those rows are the second and third things in real baskets. Dropping them halves your demand; Riffle carries the order date down and tells you how many rows it did that to.
A SKU added six weeks into a ninety-day window has not been selling slowly — it did not exist. Averaging across the silence reads it at a third of its real rate and under-orders the thing most likely to sell out.
A returned unit was never demand. Refunds are netted off the day the order was placed, cancelled orders are dropped, and test orders never count.
They differ by committed stock. Ordering against on-hand buys the units you have already sold but not yet shipped, twice.
What Shopify has marked incoming, plus anything on an open purchase order here, is deducted before a quantity is suggested. If both are set for the same SKU, it says so rather than assuming.
A missing lead time, a missing cost, a window shorter than you asked for. All of it is listed on the plan and printed on the PDF, because a number nobody can defend should not be sent to a supplier.
Because that is what drives both the value and the cost. Fourteen days free, then billed through Shopify on the invoice you already pay.
$29 /month
Up to 500 SKUs
$79 /month
Up to 5,000 SKUs
$199 /month
Unlimited SKUs
Shopify's orders API only returns the last 60 days unless a store grants extended access. Where you need more history than that, upload an orders export and Riffle will plan from it — the CSV path is not a fallback, it is how the backfill works.
Mostly the ones about what it will not do.
No. Riffle holds read access only. Receiving a delivery here closes the line so it stops counting as inbound; the stock figure goes up when you receive it in Shopify and the next sync picks it up. A tool that silently edits your catalogue is a tool you cannot leave running.
Never. It writes drafts. Nothing is sent until you open it, look at the quantities, and press send.
An order line becomes a SKU, a day and a count. No customer names, no addresses, no email addresses, nothing that identifies a buyer — which is also why the GDPR data-request webhook has nothing to hand back.
Every variant needs a SKU, because a SKU is what a supplier order is placed against. Variants without one are counted and reported rather than quietly merged. Beyond that it reads whatever column names your export uses.
Yes — the sample plan runs on a synthetic store with the same export format Shopify produces, and you can upload your own two exports without connecting anything.