The report said sales were fine.
The data said act now.
Four years of messy Lightspeed exports from an independent Northwoods gift shop, turned into owner-ready intelligence — what to buy, what to clear, when to staff, and what the POS quietly leaves out.
no category tag
is frozen / dead
six-hour window
local art vs. furniture
A real shop. Real exports. Real decisions.
The shop had data. It didn't have decision intelligence.
Lightspeed answers what happened. It stays quiet on the harder questions: which dollars are working, which are stuck, where a small team should point its attention, and what to buy months before the summer crowd arrives. The owner already knows the customers, the taste and the vendors. The missing layer was interpretation, prioritization, and a clear next action.
Flat reports
- Revenue by month, and by hour
- Units sold and quantity on hand
- Category sales — where a category exists
- One number per metric, no priority
- No view of the cash trapped in stock
Ranked decisions
- Which families return the most profit per inventory dollar
- Exactly which stock is frozen, and how much
- When to protect the floor vs. do back-office work
- Calendar-adjusted reads on whether a "decline" is real
- A daily, one-screen brief instead of digging through reports
Five export shapes, each answering a different question.
Every file was schema-inspected before analysis — column names, real date ranges, completeness, and known messiness (grouped cards, custom SKUs, untagged categories). The 2026 files run year-to-date, so they're labelled and handled as partial.
Monthly revenue summaries
One row per year, twelve months wide, plus margin. Used to build the seasonal curve and year-over-year reads.
Hourly revenue summaries
Revenue by hour-of-day per year. Drives the time-of-day concentration and staffing-attention windows.
Product master report
~2,135 SKUs with cost, margin, on-hand, created and last-sale dates. The backbone of inventory risk.
Item count by year
Units per SKU for 2025 and 2026 YTD, plus lifetime totals. Used for repeatability and consistency.
Transaction export
~1,000 receipts of line-level detail (a 67-day spring window). Used for basket size and card attach rate.
A note on messiness
Cards are often rung under broad or custom SKUs, so any single view understates them. Insights here are built to survive imperfect tagging — they lean on families and ratios, not perfect SKU precision.
From raw export to a decision on the floor.
A repeatable pipeline, not a one-off. Each stage takes a defined input, does one job, and hands the next stage something more decision-shaped than it received.
Raw exports
Clean & group
Ask the question
Analyse
Decide
What the owner should know that the POS won't say.
Roughly three in five inventory dollars are sitting still — and furniture is the biggest trap.
Reading last-sale and never-sold together (not just on-hand counts) exposes capital that standard reports leave invisible. Furniture is the largest revenue line, yet almost none of its cash is moving.
The real profit engine is the local-creative line, not the big-ticket furniture.
Ranking families by gross profit per inventory dollar (a GMROI lens) flips the apparent hierarchy. Small, fast, high-margin paper and local art quietly out-earn the showroom pieces on every dollar tied up.
Summer is about 40% of the whole year — and July alone runs nearly double an average month.
In a lake-country tourist town, demand is front-loaded into a few months, but the buying that feeds it happens in late winter and spring. The curve is the buying calendar.
Almost nine in ten sales dollars land between 10am and 4pm — half in just three hours.
The hourly signature is remarkably stable across all four years, which makes it safe to plan around. It tells you exactly when to be on the floor and when to do everything else.
The "spring decline" mostly wasn't real — and 37% untagged revenue is hiding the truth.
A headline year-over-year dip looked like trouble. Splitting it by month and adjusting for an Easter shift shows a strong early year, not a slump — the kind of read the raw report can't give you.
The story, in pictures an owner can act on.
Each visual answers a specific operating question. The palette does the talking: spruce green = alive & efficient, lake-slate = frozen capital, amber = peak / attention.
The seasonal pulse
Monthly sales index (100 = an average month), averaged across the two full years, with each year drawn behind to show how stable the shape is.
The seasonal operating calendar
The same index, read as a year of operating modes — when to buy, build, sell hard, and clear.
Hourly sales heatmap
Revenue intensity by hour (each year normalized so its peak hour = 100). The boxed band is the 10am–4pm window that carries ~87% of the day. Hover any cell.
Time-of-day focus
Three blocks, three jobs. Match attention to where the money actually is.
Back-office window
Receiving, markdowns, reorder work, vendor calls, merchandising resets. Almost no customers to lose.
Protect the floor
Half the day in three hours. Full coverage; owner customer-facing; no meetings or back-room tasks.
The selling day
The whole engine. Keep the entry and register staffed and the high-margin families well-stocked.
Inventory risk matrix
Representative SKUs plotted by sales velocity (x) against capital exposure (y), both as 0–100 percentile indices. Color = the verdict. Hover any point.
Inventory risk table
The matrix as a worklist — anonymized family groups, their indices, the staleness signal, and the owner action.
| Item group | Velocity | Exposure | Last movement | Risk | Owner action |
|---|---|---|---|---|---|
| Furniture group 1 | 10 | 100 | never sold | dead | Liquidate; stop reorder |
| Furniture group 2 | 10 | 100 | never sold | dead | Liquidate; stop reorder |
| Furniture group 3 | 10 | 100 | never sold | dead | Liquidate; stop reorder |
| Uncategorized group 1 | 10 | 99 | never sold | dead | Tag, then clear |
| Seasonal group 1 | 10 | 99 | never sold | watch | Cap reorder; hold for season |
| Kitchen group 1 | 98 | 98 | active | healthy | Protect & feature |
| Cards group 1 | 99 | 88 | active | healthy | Protect; cross-sell anchor |
| Jewelry group 1 | 97 | 90 | active | healthy | Protect & feature |
| Art / Framing group 1 | 100 | 50 | active | reorder | Reorder before peak |
| Uncategorized group 3 | 100 | 39 | active | reorder | Tag, then reorder |
Where the cash earns — profit vs. capital tied up
For each family: slate dot = its share of inventory cash, green dot = its share of gross profit. Green to the right of slate means it earns more than it ties up. The ratio on the right is profit per inventory dollar.
From POS report to operating decision
The same numbers, re-read. The value isn't replacing Lightspeed — it's the interpretation layer on top of it.
One screen, every morning, instead of digging through reports.
A designed prototype built on the real analysis logic above. It is not an automated daily send — it shows what a one-glance owner brief would contain, with anonymized examples.
What this actually produced.
No claim of automated, deployed, or revenue-lifting systems — the files don't prove that. What it produced is a clearer way to see and decide.
A dollar-ranked view of inventory risk the POS never surfaced — including 324 SKUs that had never sold.
The high-return families (local art, cards) identified as deserving more buying attention and floor space.
The seasonal curve connected to concrete buying, cash, and markdown timing.
The daily window pinpointed where owner attention matters most — and where it doesn't.
A one-screen daily brief designed to cut owner mental load.
Existing exports turned into decision support — no new software, no price changes required.
From one-off analysis to a living system.
Daily export import
Auto-ingest the Lightspeed CSVs each morning instead of by hand.
Historical snapshots
Store daily sales & inventory states so trends and stockouts are reconstructable.
SQLite database
A small local store underneath it all — queryable, durable, no cloud bill.
Anomaly detection
Flag unusual days, sudden slowdowns, and stockout risk automatically.
Reorder & stale tracking
Live velocity-vs-cover and dead-stock watchlists, refreshed daily.
Weather / holiday / tourism
Wire in the external signals that actually move a lake-town's foot traffic.
Automated daily brief
Deliver the prototype above as a real morning send.
Reusable "Business MRI"
Package the diagnostic so any small retailer can scan their own POS exports.
The value wasn't AI replacing the owner. It was pairing a real merchant's eye with structure, so the shop could see patterns faster and act earlier.
An owner with decades behind the counter already understands the customers, the taste, the vendors, and the rhythm of a tourist town. None of that lives in a spreadsheet, and none of it should be automated away.
What the analysis added was a second set of eyes that never gets tired of counting: which dollars are working, which are stuck, where a small team's attention is worth the most, and whether a scary-looking number is actually a calendar quirk. The POS records the past faithfully. This layer turns that record into the next decision — and hands it back to the person best placed to make it.