Maven Roasters — Coffee Shop Sales

Six months of transaction-level performance across three New York City shops: what grew, what drove it, and the one lever the business has never pulled.

Period 1 Jan – 30 Jun 2023 (181 days) Records 149,116 line items → 116,790 orders Stores Astoria · Hell's Kitchen · Lower Manhattan Source Coffee Shop Sales.xlsx

The headline

Six months, three shops, $698,812. Revenue more than doubled — and the decomposition below shows that every dollar of that growth came from one lever, while another sat completely untouched.

Revenue
$698,812
1 Jan – 30 Jun 2023
Orders
116,790
true baskets, not line items
Average order value
$5.98
flat all six months
Units per order
1.84
median order is one item
Revenue per day
$3,861
across three stores
Orders per day
645
≈215 per store
Attach rate
25.1%
orders with >1 product
Trading days
181
no gaps, no closed days
Growth is entirely traffic

Revenue +103.8%, orders +104.1%, AOV −0.1%. Six months of doubling without a single cent of increase in what a customer spends per visit. Confirmed at the daily grain too: revenue↔orders r = 0.94, revenue↔AOV r = 0.22.

One store already runs the playbook

Lower Manhattan serves 12% fewer customers than the other two and still matches them on revenue — because 30.4% of its orders hold more than one item, against 22–23% elsewhere. The AOV upside is proven, not theoretical.

The business is a clock, not a calendar

36.7% of revenue lands between 08:00 and 10:59; 48.9% before 11am. The spread between the best and worst day of the week is just 3.4%. Staff to the hour.

Daily revenue and 7-day average

Revenue more than doubled across the six months. The 7-day average strips out day-to-day noise; the trend is a clean, uninterrupted climb with no plateau.

What actually drove the growth? Every term of the revenue identity, indexed to January = 100

Revenue = Orders × AOV. Revenue and Orders rise together to 204; AOV, units per order and average selling price sit flat on 100 for six straight months. The growth is entirely traffic — not one cent came from customers spending more.

Revenue per trading day by month

Normalised for month length — the only honest way to compare a 28-day February with a 31-day January.

Revenue by store — a three-way tie

33.8% / 33.2% / 32.9%. But the three shops reach that number in completely different ways — see the Stores tab.

Can this extract be trusted?

The audit before the analysis: completeness, uniqueness, ranges, price integrity and calendar coverage — plus the structural discovery that changes every customer-facing metric in the project, and the caveats we are not going to bury.

Rows
149,116
line items
Missing values
0
across all 11 columns
Duplicate rows
0
IDs unique too
Calendar gaps
0
181 of 181 days
True orders
116,790
from 149,116 lines
Basket ID contiguity
100.00%
hypothesis confirmed
Off-modal prices
1,262
lines across 15 products — 178 are the bakery fault, the rest SKU variants
Quantity outliers
36
lines at 4+ units

The structural finding: transaction_id is not a transaction

The data dictionary calls it "a unique sequential ID representing an individual transaction". It is not. A customer buying a latte and a croissant is written as two rows sharing one store and one timestamp. Taken at face value, the column inflates the transaction count by 27.7%.

So we defined an order as all lines sharing a store and an exact second — then tested it. If those rows really are one checkout written sequentially, their transaction_ids must be contiguous.

149,116line items
116,790true orders
100.00%contiguous IDs

Every one of the 116,790 inferred baskets passes. Getting this wrong would have reported AOV as $4.69 instead of the true $5.98 — understating what a Maven Roasters customer actually spends by 21.7%.

Assumptions and decisions

  • An order = one store + one exact timestamp. Validated at 100% by transaction-ID contiguity. All order-level KPIs use this grain; product KPIs stay on the line grain.
  • Revenue is derived as transaction_qty × unit_price. The source ships no revenue column — the most important measure in the project is calculated.
  • Nothing was dropped. No nulls or duplicates existed; the 36 high-quantity lines and 178 mispriced lines are genuine transactions and are retained.
  • Month-over-month is always per trading day. Comparing raw monthly totals makes February look like a 6.8% decline when it actually grew 3.2%.
  • Store is reported by store_location; store_id maps 1:1 and is redundant.
  • Size (Small / Regular / Large) is parsed from the product_detail suffix; the 30% of products without a suffix are labelled "One size".

Caveats we state openly

  • The mix is implausibly stable. Coffee's revenue share stays inside a 0.6pp band for six months while volume doubles. The same flatness appears in the hourly profile, the size mix and weekday-versus-weekend. Real retail mixes drift with weather and season.
  • The largest order ($368.60) repeats identically on five dates, always at Hell's Kitchen, four times at exactly 11:18:31.
  • Both are consistent with a synthetic dataset — which the brief confirms ("a fictitious coffee shop"). The growth trend, the traffic-versus-AOV split, the store differences and the affinity structure are all real properties of this data, but seasonality and mix-stability conclusions should not be projected onto a real business.
  • No customer identifier — retention, frequency, cohort and LTV analysis are impossible. We report no proxy for them.
  • No cost or margin data — every figure here is revenue, never profit.

Units per line item

99.98% of lines are 1–3 units. The 36 lines at 4+ are genuine bulk purchases of syrups, mugs and whole-bean coffee — retained, not trimmed.

Products with more than one observed price

Fifteen products break the one-price rule. Ten are bakery items carrying a price exactly 1.25× the norm, found only at Lower Manhattan — a POS fault worth $158 in overcharge (0.02% of revenue). The rest are pack-size variants sharing a product_id.

Line items collapse into orders

149,116 line items are really 116,790 orders. A customer buying a latte and a croissant is written as two rows sharing one store and one timestamp — and in 100.00% of cases those rows carry consecutive transaction_ids.

How the business moved

Trend at three grains — daily, weekly, monthly — then the decomposition that separates how much it grew from what actually drove it. Note the February trap: raw monthly totals report a decline that did not happen.

Daily revenue with 7-day and 28-day averages

The 28-day line shows the underlying trajectory: steady acceleration from March onward with no sign of levelling off by the end of June.

Total revenue by month — distorted by month length

Read naively, February fell 6.8%. It did not — it simply has three fewer trading days.

Revenue per trading day — the honest comparison

On a per-day basis February grew 3.2%. Month-length normalisation flips the sign of the result — the most common false alarm in retail reporting.

Revenue decomposition, indexed to January = 100

The central finding of the project, stated as a chart.

Revenue added January → June, by category

Growth is broad-based: all nine categories grew, at rates clustered between 81% and 114%. Coffee contributed the most in dollars (39.5%) purely because it is the biggest category. Nothing is being cannibalised.

Cumulative revenue

The upward curvature is the growth: the second three months delivered $442k against the first three months' $257k.

Revenue by complete ISO week

Only whole 7-day weeks are shown, so no bar is penalised for a partial period.

Monthly KPI detail

MonthDaysRevenueRevenue/dayOrdersAOVUnits/orderAvg priceRev MoM %Rev/day MoM %
Jan31$81,678$2,63513,575$6.021.83$3.28NoneNone
Feb28$76,145$2,71912,813$5.941.84$3.23-6.8%3.2%
Mar31$98,835$3,18816,606$5.951.83$3.2529.8%17.2%
Apr30$118,941$3,96519,838$6.001.84$3.2620.3%24.4%
May31$156,728$5,05626,248$5.971.84$3.2531.8%27.5%
Jun30$166,486$5,55027,710$6.011.84$3.276.2%9.8%

When the money is made

Maven Roasters is a commuter business. Time of day dominates everything; the day of the week barely registers. That single fact drives the whole staffing recommendation.

Revenue by hour of day

08:00–10:59 alone carries 36.7% of all revenue, and half the business (48.9%) is done before 11am. The 20:00 hour produced $2,936 across three stores in six months — $5.41 per store per day.

Revenue by day of week and hour

The pattern is a vertical band, not a grid. Time of day dominates completely; the day of the week barely registers.

Revenue per day by day of week

Monday indexes 101.3, Sunday 98.0 — a 3.4% spread across the entire week. The dataset asks which days are busiest; the honest answer is that none of them are. This is a commuter habit business: staff to the clock, not the calendar.

Revenue by daypart

Morning Peak (08:00–10:59) is 36.7% of revenue in three of fifteen trading hours.

Average order value by daypart

Morning customers spend 11% more per order than evening customers ($6.29 vs $5.65) — they are the ones adding a pastry or a second drink to the run.

Category mix by daypart

Coffee's share climbs from 37% in the morning to 40% later in the day, while whole-bean coffee (a morning errand) halves. Otherwise the mix is remarkably steady.

Hour-of-day revenue profile, by month

Six lines lying on top of each other. The daily rhythm never shifted while the business doubled — the new customers behave exactly like the old ones.

Weekday vs weekend, per day

Revenue per day differs by 1.2% and AOV by two cents. No category mix shifts by even a third of a percentage point. There is no distinct weekend customer here.

Three shops, one revenue number

Revenue splits almost perfectly three ways — but the route to it differs sharply. One store already runs the basket-building playbook the other two are missing, which turns a hypothetical AOV opportunity into a proven one.

Revenue by store

A dead heat: 33.8% / 33.2% / 32.9%.

Orders by store

Lower Manhattan serves roughly 5,000 fewer customers than the other two.

Average order value by store

…and makes up all of it here. Lower Manhattan's basket is 13% larger than Astoria's.

Attach rate — share of orders with more than one product

The mechanism behind the AOV gap. Lower Manhattan builds a multi-item basket 30.4% of the time; the other two manage 22–23%. This is the single most valuable fact in the store analysis — the AOV upside is not hypothetical, one shop already achieves it.

Monthly revenue by store

All three grew at almost exactly the same rate (Astoria +102%, Hell's Kitchen +105%, Lower Manhattan +105%). Whatever is driving traffic is a chain-wide effect, not a local one.

Category mix by store

Nearly identical. The three shops sell the same things in the same proportions — the difference between them is how many items go into each order, not what those items are.

Product-type index by store (100 = chain average)

Astoria over-trades on comfort drinks — hot chocolate 109, drip coffee 107, chai 107. Lower Manhattan over-trades on food and espresso — pastry 105, scones 104, barista espresso 103, which is exactly the behaviour producing its larger basket. Hell's Kitchen is the purest grab-a-drink shop.

Hour-of-day profile by store

Lower Manhattan skews hardest into the morning peak — a financial-district commuter pattern. Astoria's curve is flatter, consistent with a residential catchment.

Daypart mix by store

Read down a daypart: each store's share of its own revenue earned in that window.

Sizing the prize: what if Astoria and Hell's Kitchen built baskets like Lower Manhattan?

Each store keeps its own average selling price; only units per order rises to Lower Manhattan's 2.01. That credits nothing to price or mix — only to basket-building. An opportunity ceiling, not a forecast.

StoreOrdersAOV nowAOV at LM basket sizeRevenue nowRevenue at LMOpportunity (6 months)
Astoria40,684$5.71$6.58$232,244$267,833$35,589
Hell's Kitchen40,454$5.85$6.63$236,511$268,386$31,875
Combined$67,464

What sells, and what it is worth

A 9 → 29 → 80 hierarchy holding two different businesses: constant cheap drinks, and a rare high-ticket retail tail. Neither a hero SKU nor a dead tail — which rules out range rationalisation as a lever.

Revenue by category

Coffee 38.6%, Tea 28.1%, Bakery 11.8%, Drinking Chocolate 10.4% — the four everyday categories are 88.9% of the business.

Frequency versus ticket — two different businesses in one shop

Top-left: rare but expensive — whole-bean coffee, loose tea, merchandise (9.9% of revenue from 1.8% of units). Bottom-right: cheap and constant — the daily drinks. Bubble area is revenue. Both axes are logarithmic.

Pareto curve — cumulative share of revenue

It takes 43 of 80 products (54%) to reach 80% of revenue, and the best-selling product is only 3.0% of the total. There is no hero SKU to protect and no dead tail to cut — the bottom 20 products still earn $35.9k. Range rationalisation is the wrong lever here.

Top 20 products by revenue

Large-format drinks dominate the top of the range.

Bottom 15 products by revenue

Small individually, but mostly high-ticket retail — loose tea at $8.95 and whole-bean bags at $10+. These are not failures; they are a low-frequency, high-margin tail worth keeping.

Size mix — share of units versus share of revenue

Large is 42.8% of sized drinks but 49.2% of their revenue. Only 13.4% of sized drinks are sold Small — the range is already skewed upward, which limits how much a pure size-upsell push could add.

Size mix by hour of day

Completely flat. There is no morning-large / afternoon-small effect to exploit — size choice is a fixed personal preference here, not a time-of-day decision.

Revenue and units by price band

The $2.50–3.49 band is the engine: 51.4% of units and 44.5% of revenue. At the other end, the $10+ band turns 1.3% of units into 8.2% of revenue.

Category mix by month

Coffee's revenue share stays inside a 0.6 percentage-point band for six months while volume doubles. Real retail mixes drift; this stability is a hallmark of simulated data and is flagged as a caveat rather than presented as an insight.

Fastest and slowest growing products, January → June

Every product with meaningful volume grew. The spread (28% to 275%) is mostly the small-base volatility of the low-frequency retail lines, not a mix shift.

The lever nobody has pulled

Three in four orders contain exactly one item. This tab finds the specific mechanism behind that — and the one product pairing customers already make that the shop is barely capturing.

Products per order

74.9% of orders contain exactly one product. The median order is $5.00 — one drink. That single bar is the entire AOV problem.

Distribution of order value

Mean $5.98, median $5.00, 95th percentile $12.00. Values are capped at $40 for display; the largest single order in the data is $368.60.

Orders and revenue by order-value band

Orders above $12 are just 5.1% of transactions but 16.7% of revenue. Moving a sliver of the $3–5 population up one band is worth more than chasing new footfall.

Category affinity — lift above independence

Lift of 1.0 means two categories are bought together exactly as often as chance predicts. Coffee + Flavours tops the list at 2.00 — and it is the only pair with both a high lift and meaningful volume (6,741 orders).

Does it ride along with a coffee? (100 = no relationship)

Syrups index near 200 — strongly coffee-dependent. Food does not: scones 102, biscotti 97, pastries 84. The classic 'coffee and a croissant' pairing is simply not happening at Maven Roasters. Bakery sells $82k entirely on its own merits.

Sizing the flavour-shot opportunity

58,171 orders contain a coffee; 6,741 of them (11.6%) add a flavour shot, even though 99.6% of shots sold are already attached to a coffee. At $0.80 the prize is modest — but it is near-pure margin, costs nothing to implement, and is the cheapest possible live test of the attach mechanism that the store gap says is worth ~$135k a year.

Attach rateAdditional shotsRevenue (6 months)Annualised
11.6% (today)0$0$0
15%1,985$1,588$3,175
20%4,893$3,915$7,829
25%7,802$6,241$12,483

AOV by daypart

AOV by day of week

Peak orders in a single store-hour

Hell's Kitchen once served 85 orders in one hour — an order every 42 seconds sustained for sixty minutes. Any basket-building script has to survive that pace, which is a real constraint on recommendation 1.

Findings, recommendations and limits

Nine findings from the data, six recommendations ordered by size of prize, and an explicit statement of what this analysis cannot tell you.

What the data says

1
Revenue more than doubled — and every dollar came from traffic. Jan → Jun: revenue +103.8%, orders +104.1%, AOV −0.1%. Independently confirmed at the daily grain (revenue↔orders r = 0.94; revenue↔AOV r = 0.22).
2
February did not decline. −6.8% on the month, +3.2% per trading day. Normalising for month length flips the sign of the result.
3
The business runs on a clock, not a calendar. 08:00–10:59 = 36.7% of revenue; before 11am = 48.9%. Day-of-week spread is 3.4%, and weekends are statistically indistinguishable from weekdays.
4
The 20:00 hour does not pay. $2,936 across three stores over six months — $5.41 per store per day, on 0.8 orders.
5
Three stores, one revenue number, two business models. Lower Manhattan serves 12% fewer customers yet matches the others, on a 30.4% attach rate versus 22–23%.
6
Three in four orders are a single item. 74.9% of orders contain exactly one product; the median order is $5.00.
7
Syrup is a perfect add-on nobody is asked for. Flavours→Coffee confidence 99.6% (lift 2.00), but Coffee→Flavours only 11.6%.
8
Coffee and food are not bought together. Against coffee orders, pastry indexes 84, biscotti 97, scones 102 — no pairing effect at all. The most obvious AOV play in a coffee shop is currently at zero effectiveness.
9
No hero product, no dead tail. 43 of 80 products carry 80% of revenue; the top product is 3.0%; the bottom 20 still earn $35.9k.

What to do about it

Ordered by size of prize, not by ease.

#RecommendationEvidenceSizing
1Roll out the Lower Manhattan attach playbook to Astoria and Hell's Kitchen. Find what its staff do differently and script it.Finding 5 +$67.5k / 6 months
≈$135k a year, 9.7% of revenue
2Build a genuine coffee + bakery prompt. There is no existing pairing behaviour to protect, so this is greenfield.Finding 8 ≈$2.1k / 6 months
per point of attach on 58k coffee orders
3Prompt a flavour shot on every coffee order. Near-zero cost, near-pure margin.Finding 7 +$3.9k / 6 months
≈$7.8k a year at 20% attach
4Staff to the hour, flat across the week.Finding 3 3 morning hours need cover that 7 afternoon hours do not
5Trial a 20:00 close at one store.Finding 4 Recovers ≈1 staff-hour/store/day at a cost of $5.41
6Keep the range. Stop looking for a tail to cut.Finding 9 Bottom 20 SKUs = $35.9k of real, high-ticket revenue

How recommendation 1 is sized

Each store keeps its own average selling price; only units per order rises to Lower Manhattan's 2.01. That credits nothing to price or mix — only to basket-building. It is an opportunity ceiling, not a forecast: it assumes the gap is entirely operational and fully closable, which is the optimistic end. Treat it as the size of a prize worth investigating, not a number to put in a budget. Note too that Hell's Kitchen once served 85 orders in a single hour — any basket-building script has to survive that pace.

The conclusion in one line

Maven Roasters has proved it can fill the shop. It has never once tested whether it can fill the cup — AOV has not moved a cent in six months while orders doubled, three in four customers still buy a single item, and one of its own three stores already runs a basket 13% larger. The growth engine works; the basket has never been switched on.

Honest limits of this analysis

  • No customer identifier — no retention, frequency, cohort or lifetime-value analysis is possible, so no ARR-style metric is reported.
  • No cost or margin data — all sizing is revenue, not profit. A $0.80 syrup and a $0.80 slice of a latte are not equally valuable, and this data cannot tell them apart.
  • Six months, one season. January to June cannot separate underlying growth from a seasonal ramp into summer.
  • Synthetic data characteristics (see Data & Quality) — the mix stability should not be projected onto a real shop.