Case study · Three Sisters Provisions

A family grocery that runs on data now.

Three dashboards. One nightly pipeline. Zero gut-feel ordering decisions. Here's what it took to wire a specialty grocery store's data together and make it useful by morning.

Toast POS · Databricks · GCP · Prophet · Open-Meteo · Lakeview · Delta Lake

01

Sales Actuals & Forecast

Revenue Intelligence · Demand Forecasting · Daily Delivery

"She had a gut feel for what Saturdays looked like. Now she has a number, a confidence range, and a weather forecast attached to it."

Toast POS captures every transaction. What it doesn't do is tell you where revenue is headed. For a family grocery with perishable inventory, a bread delivery schedule, and weather-sensitive foot traffic, flying blind on a Tuesday with $4,000 of milk in the walk-in is not a neutral position.

The pipeline ingests nightly from the Toast REST API, builds a medallion architecture on Databricks - Bronze raw JSON, Silver cleaned line items, Gold aggregated daily summaries - and then runs Meta's Prophet forecasting model, tuned to the specific weekly and seasonal patterns of a coastal New England store. The output lands in email before the store opens.

Prophet's out-of-the-box seasonality assumptions aren't built for a shop that does three times the volume in July that it does in February. The model was extended with a New England regional prior, exponentially-weighted recent actuals blended in for the first two weeks, and a horizon-based bias correction derived from 1,409 validated forecast-vs-actual pairs. The result: a model that learns from what actually happened last week instead of blindly extrapolating a trend line.

Before

Revenue decisions made by memory and instinct. No visibility beyond the current day's register. Monthly performance only visible after month-end close.

After

Thirty-day forward revenue forecast with measured accuracy, delivered by email at 3am. Month-to-date vs. prior period, rolling averages, and weather overlays - all in one view.

30
days of forward revenue visibility, every morning
19%
median forecast error on a typical day
1,409
forecast-vs-actual pairs validated to tune the model
5
pipeline layers from raw API to email

Toast Orders API · Databricks Serverless · Delta Lake · MLflow Model Registry · Prophet · Open-Meteo API · Lakeview AI/BI

02

Don't Run Out

Inventory Intelligence · Stockout Prevention · Par Level Automation

"The dashboard found six bottles of Savee Sea Sauvignon Blanc that the reorder report said didn't exist. The data was just never connected."

Toast has an inventory system. It also has a POS system. What it doesn't have is a live view of current stock that accounts for both what was received and what was sold since the last count. Out of the box, that gap grows by however many units you've rung up today - silently, invisibly.

The inventory pipeline ingests every RECEIVE, COUNT, DAMAGE, and INITIAL event from the Toast Retail API every morning at 1am. It then depletes each item's last-known position by every unit sold since that event, using the Silver order items table. The result is a live estimated on-hand quantity that reflects what's actually on the shelf, not what was there the last time someone counted.

Par levels are the second half of the problem. Most SKUs in a specialty grocery don't have configured reorder points - there are too many items and they turn too fast. The pipeline auto-computes suggested par levels from 60-day sales velocity: minimum order quantity is a week of stock, maximum is two weeks. For items with configured levels, those take precedence. Every SKU gets an actionable number.

The tricky part was the items that stopped being tracked entirely. Kneady Mama bread - one of the store's best-selling local vendors - was showing negative 387 units on hand. The inventory system never got a RECEIVE event after January 2026 because the store stopped entering them. The solution: detect items with no recent receive events and flag them as "not tracked" rather than computing absurd phantom quantities. Ninety-three items now correctly show as untracked instead of catastrophically negative.

Before

Stockout decisions made by walking the floor. No connection between what was received and what was sold. Phantom negatives making real stockout risks invisible by noise.

After

Live estimated on-hand quantity for every tracked SKU, auto-computed par levels, and a daily email that surfaces what's actually at risk before the store opens.

93
items correctly reclassified as "not tracked" - removing phantom negatives
57
items with negative on-hand quantity surfaced and ranked for investigation
60d
velocity window used to auto-compute par levels for every SKU
1am
daily inventory ingest, synchronized ahead of the 3am main pipeline

Toast Retail Inventory API · Databricks Delta Lake · DQ Layer · Silver Order Items · reference.item_catalog · Lakeview AI/BI

03

Move It - Aged & Stale Inventory

Margin Protection · Velocity Analysis · Markdown Intelligence

"Dead stock doesn't announce itself. It just sits there occupying shelf space and cash until someone walks past it one too many times."

A specialty grocery's biggest margin leak isn't shrinkage - it's slow-moving product that nobody's watching. A jar of imported jam that sold well in November and sat untouched through February doesn't trigger any alert. It just quietly moves toward waste while its slot on the shelf could be earning its keep.

The Move It dashboard is built on the same daily inventory refresh as the stockout dashboard, but turns the lens in the other direction: instead of what's running out, it surfaces what isn't moving. Every tracked SKU with a last-sold date is ranked by recency and velocity. Items that were selling well six weeks ago and have gone cold show up at the top. Items that have been sitting since before the last inventory count get flagged explicitly.

The supplier-level view is where this earns its keep for buying decisions. Seeing that three of the four products from a particular importer are in the bottom quartile of velocity is actionable intelligence for the next reorder conversation - the kind of thing you'd normally only notice from a gut feeling that the section never quite moves.

Shelf life and category context make the ranking meaningful rather than mechanical. A Bordeaux that's been on the shelf for 90 days is not the same problem as a wheel of brie that's been there for 14. The taxonomy built into the item catalog - category group, category, supplier - lets the dashboard filter down to where the actual decisions happen.

Before

Slow-moving inventory discovered on a walk-through, or when the next shipment arrived and there was nowhere to put it. Markdowns reactive and often too late.

After

Every SKU ranked by recency and velocity, updated daily. Slow movers surface in email before the buying decision, not after the expiry date.

60d
rolling velocity window - recent enough to be actionable
Daily
refresh - stale data doesn't protect margins
3
taxonomy levels - category group, category, supplier - for precision filtering
0
items that have to wait until the next floor walk to get noticed

Toast Retail Inventory API · Databricks Delta Lake · DQ Layer · Silver Order Items · reference.item_catalog · Lakeview AI/BI

Behind it all

The pipeline that makes it run.

Architecture · Automation · Observability

Three dashboards, one underlying system. Every data source - Toast orders, Toast inventory events, Open-Meteo weather - is ingested on a nightly schedule, deduplicated with idempotent MERGEs, and promoted through a medallion architecture that keeps raw data raw and derived data derived. Nothing overwrites anything that shouldn't be overwritten.

The pipeline runs at 2:59am ET. By the time the store opens, the forecast is in the inbox, the inventory positions are recomputed, and the par-level suggestions reflect last night's sales. If anything in the chain fails, the owner gets an email before anyone walks through the door.

7
automated pipeline tasks running nightly
3am
daily pipeline start - inbox by open
v21
current Prophet model version in production
0
manual steps between the POS and the dashboard

Databricks Jobs · Databricks Serverless Compute · Delta Lake · MLflow · GitHub Actions · GCP

Your business probably has the same data. It just isn't connected yet.

Most small businesses are sitting on a POS, an inventory system, and a gut feeling. The gap between that and a working dashboard is smaller than you think.