Money & sales
Money across your venues
Net revenue per hour at each level of fullness — your POS sales sliced by the crowd band actually observed on the same clock. Shows where filling further stops paying, and where two rooms differ at the same fullness.
What it is
Money across your venues is net revenue per hour at each level of fullness — a venue's POS sales sliced by how full the room actually was on the same clock. For a completed night, each hour's net sales are grouped by the crowd band observed that hour, then averaged per hour within each band, giving one money-per-hour figure for Empty, Chill, Busy and so on up the scale.
It measures with observed bands rather than headcounts on purpose. A band is a level of fullness read straight from door scans, so the figure does not depend on the occupancy model being calibrated to a person count. That makes it the honest, size-agnostic cousin of the restaurant industry's revenue-per-available-seat-hour framework, which holds that raw fullness is the wrong signal — what matters is how much revenue a room extracts per unit of time at a given level of demand, because revenue does not scale linearly with how packed the room is.[1]
How to use it at your venue
Operators often read this the way its academic parent was meant to be read: not as a scoreboard, but as a per-venue diagnostic reviewed across nights and dayparts, asking which levels of fullness actually pay.[2] The revenue-management literature repeatedly finds that "busier" is not "better" — service can slow, discounting and bottlenecks can bite at the crush, so a moderate band sometimes nets more per hour than a packed one.[1] A grounded use is to notice where a row stops rising: the band beyond which filling further has stopped adding money is a signal to protect service and pacing there rather than chase maximum headcount.
The two levers the literature points at when a band earns thinly are pricing (cover, minimum spend, deal timing) and duration and pacing — shifting demand toward under-earning windows and tightening the service cycle.[2] Empirical work in a real multi-unit chain showed that analysing revenue against occupancy in this way changed real seating and capacity decisions,[3] and later research refined the same idea toward profit and net dollars rather than gross — which is why this metric reports net sales per hour, not gross.[4] A quietly strong low-occupancy band (a slow night with high spend per guest) may be worth promoting rather than writing off; the suggestive move is to treat the whole row as a diagnostic, not a single number to optimise.
How to read it
A row normally rises left to right — more people means more money, and that part is arithmetic, not a finding. Two things are worth actually reading. The first is where a row stops rising: the point at which filling the room further has stopped paying. The second is how two venues compare in the same column — the same size of crowd, so any gap is what is being sold, or how fast, not who has the bigger room.
Higher is not automatically better. Format, programming and price point differ between rooms for honest reasons, so read the shape of one venue's own row first, and read gaps between your venues at the same band as questions, not verdicts. The metric's level of comparison is your own history; the only cross-venue read it supports is band-for-band, never raw totals.
What it doesn't mean
⚠ What it can't tell you
It is not a total and it is not a ranking of venues by sales. A bigger room taking more money is size, not performance, which is why raw sales across differently sized venues are never ranked here — only the same band against the same band.
One night cannot separate how full the room was from how late it got: both move together, so a falling row is context, not a proven cause. Average check, tips and refunds live in your POS and are not shown here — this is only what the observed crowd bands and your sales feed can say together. Orders the feed classified as takeaway, delivery, drive-through or shipping are left out, but orders it did not classify stay in, so a row is the room plus any unidentified trade rather than a purely on-premise reading. And a band the room never reached that night contributes nothing and is named as absent — no reading at a band is a missing state, never a zero.
How it's calculated
For a completed night, each venue's hourly net sales are placed on the same clock as its observed crowd, hour by hour. Every hour is tagged with the crowd band read from door scans during that hour, the hours are grouped by band, and the net sales in each group are averaged per hour — giving one money-per-hour figure for each level of fullness the room actually reached.
The hourly sales-and-crowd curve is built once on RollCall's servers from the settled night; the band grouping is done on the dashboard from data already loaded, so it costs no extra reads. Values are never summed into a group total — venues are compared band-for-band, not added together.
The exact method
The server curve is produced by hourlyCurve(...): net sales are bucketed by order timestamp into hourly slots; off-premise channels (takeaway, delivery, drive-through, shipping) are excluded while orders the feed did not classify are retained under the standing bar-tab rule; the crowd for each hour is the mean occupancy band from that hour's door-scan snapshots. The curve returns null unless the night has at least 2 sales hours and at least 2 crowd hours — thin nights produce no row rather than a misleading one.
The band aggregation runs by moneyByBand(pos): it buckets pos.curve.sales[i] by the integer band pos.curve.crowd[i] across bands 0–4 (Empty through Packed) and sets perSlot = sum ÷ slots for each band. "Net" throughout is item prices after discounts, before tax, with tips excluded. A band with no measured hours on the night is omitted, not rendered as zero.
The research behind it
A full room isn't automatically a valuable room. What matters is how many dollars come in per hour at each level of crowd — because the busiest hour of the week isn't always the most profitable one. This metric puts real POS sales side-by-side with the actual observed crowd level at that same moment, so an owner can see, band by band, whether 'packed' is really outperforming 'comfortably busy' — or just feels like it should.
-
Restaurant Revenue Management: Applying Yield Management to the Restaurant Industry ✓ verified
Read the source ↗ -
Implementing Restaurant Revenue Management: A Five-Step Approach ✓ verified
Read the source ↗ -
Restaurant Revenue Management at Chevys: Determining the Best Table Mix ✓ verified
Read the source ↗ -
New Performance Indicators for Restaurant Revenue Management: ProPASH and ProPASM ✓ verified
Read the source ↗
Confidence & caveats
The arithmetic is exact for the hours actually observed — there is no estimate or band of uncertainty on the money itself. But "exact" is not "judged": the figure carries no quality verdict, no target, and no group total, and its only fair comparison is a venue against its own history or one band against the same band elsewhere.
Two honest limits bound how far to push a single night. It cannot separate how full the room was from how late it got, so a falling row is a prompt to look, not a proven cause. And because unclassified orders stay in while classified off-premise orders drop out, a row reflects coverage of the room plus any unidentified trade — coverage, not a purely on-premise total. Where too few hours were measured at a band, the metric withholds that band rather than inventing a zero.