Labor & Team

Build a Cafe Schedule Around Your Sales Data

Mark, founder of Parly·April 8, 2026·8 min read

The Sunday-night copy-paste

It is Sunday night. You open last week's schedule, save it as this week's, and start nudging. Someone wants Tuesday off. Someone can cover Saturday. By the time you post it to the group chat, the bones are exactly what they were the week before. Mornings get three people. Afternoons get two. Weekends get an extra closer.

I built that same schedule for a long time. It works well enough that you stop questioning it, which is the problem. A schedule that repeats no matter what sold quietly costs money every week. You pay for people during hours that do not need them, and you run thin during the hours that do.

A schedule built on gut feel in January does not know that March changed. The morning rush might have slid from 7:30 to 8:15 after a nearby office moved its hours. Wednesday afternoons might have picked up because a school down the block shifted dismissal. Those changes arrive slowly, and a copy-paste schedule never notices.

The fix is not a scheduling app that writes the week for you. It is reading the numbers you already have, then making the call yourself. This is the long version of that: what to look at, in what order, and how to turn it into a schedule that fits your actual week. Three shorter pieces go deeper on the parts, and I will point you to them as we go.

What the schedule cannot see on its own

Your schedule is a plan. It says who you meant to have on the floor. What it never shows, by itself, is what actually happened: when the shop was slammed, when it was dead, and how much you paid for each of those hours.

Two records hold that truth. Your Square sales tell you when the money came in, hour by hour. Your Square Labor timecards tell you who was clocked in while it did. Put those two next to each other and the schedule stops being a guess about demand and starts being a response to it.

Parly reads both. It pulls your Square sales and your Square Labor timecards and shows them side by side: sales per hour against people on the clock, revenue per labor hour, and the staffing pattern your last thirty days actually ran. What Parly does not do is write your schedule, run your payroll, or manage your team. It reads the numbers and lays them out. You still decide who works Saturday. That line matters, and I will come back to it, because the whole point of doing this with data is that the decision stays yours and gets easier, not that it gets handed to a tool.

Read the sales curve first

Start with when the money actually comes in. Every transaction on your Square carries a timestamp. Aggregate a few weeks of that by hour and by day of week, and you get a demand curve. It almost never matches your staffing curve.

Most cafes have a hard morning peak, then a long fade. Say your 8 to 10 window does the bulk of the day, the late morning slides off, there is a small lunch bump, and the afternoon goes quiet until a late-day coffee pickup. I am describing a shape, not your numbers. Yours depends on your block. A shop wedged between offices has a sharper peak and a deader afternoon than one on a residential street with steady foot traffic. Weekends usually run a later, wider peak that starts around nine and holds past noon.

What matters is that the shape is specific to your shop and it drifts over time. If your busiest hour rings four times your slowest, your staffing should not treat those two hours the same. Pulling the real hourly numbers is how you replace "mornings are busy" with a curve you can actually staff against. I wrote a full walkthrough of finding those patterns in thirty days of your own sales data; read that if the hourly view is new to you.

Put your labor next to it

The sales curve tells you when demand shows up. It does not tell you what you spent to meet it. For that you need your labor on the same timeline, and the honest source is your timecards, not your schedule. The schedule says Kai was meant to leave at two. The timecard says he clocked out at 2:40 because it got busy. That 40 minutes is real money the schedule never recorded. The gap between what you planned and what the clock actually logged is where labor cost hides, and it is worth its own read: scheduling versus reality is about exactly that gap.

The number that ties the two curves together is revenue per labor hour. Take the sales in an hour and divide by the people on the clock for it. It tells you whether a given hour is carrying its labor or bleeding it. Parly computes this for you from Square Labor timecards and shows it across the day, alongside your labor as a percent of revenue and your cost per operating hour. There is a healthy band for a specialty cafe, and where you sit inside it is a judgment call about your service and your prep, not a formula to obey. When an hour reads far below the band, you are likely overstaffed for what it sells. When it reads far above, your team is probably underwater and service is slipping.

Here is the part to keep straight. Parly shows you revenue per labor hour, the over and under hours, and advisory suggestions like "you could end this shift 30 minutes earlier" with the sales reasoning attached. It surfaces the pattern. It does not clock anyone out, cut anyone's hours, or send a schedule. Every one of those is your move. The tool hands you a clean read of what happened; you decide what next week should be.

Where the two lines pull apart

Lay your staffing line over your demand line and look for daylight between them. Where staffing sits above demand, you are paying for coverage the hour does not earn. Where it sits below, service is at risk and your team is eating it. Run that comparison once and most owners find the same two or three patterns.

The afternoon plateau. Sales slide off after the morning, but staffing stays flat because the mid-shift is booked straight through to two or three. That flat stretch over a falling sales line is the most common overstaffed hour in a cafe.

The weekend-morning dip. Saturday and Sunday mornings run heavier than weekday mornings, but the schedule opens both the same way, two on the bar. Weekend volume can run well above the weekday open, and when it does you get longer lines, a stressed team, and lower tips per hour for everyone on.

The closing overlap. Two closers booked to the last minute when the final hour rarely needs two. One person could carry the traffic while the other starts breakdown earlier.

Seeing these on the same chart is what makes the conversation with your team easy. You are not asking anyone to work harder. You are moving hours off the plateau and onto the weekend open, where the work actually is. That reframes data-driven scheduling as a fairness fix, not a cut, which is the whole difference between a team that trusts the change and one that dreads it.

You make the call, not the tool

This is the line I will not blur. Plenty of the daily routine can move off your plate; you can hand off the routine of the count to whoever opens and never touch it again. A schedule is not that kind of task. It is a promise to people about their week and their pay. That belongs to the owner, or to the manager the owner trusts with it. It does not belong to an algorithm reading a chart.

So be clear on the division of labor. Parly reads your Square sales and your Square Labor timecards and lays out the picture: the demand curve, revenue per labor hour, the over and under hours, a weekly grid of what your team actually ran, and advisory trim-or-extend suggestions with the numbers behind them. You can even print that weekly view to post in the shop. What Parly never touches is the decision. It does not build the schedule, it does not run payroll, and it does not manage your staff. It gives you a clean read so the schedule you write is a response to your real week instead of a copy of last week's.

That distinction is not a limitation to apologize for. It is the point. The owner who reads the data and still owns the call ends up with a schedule that fits, and a team that knows a person weighed their week, not a machine.

What the team feels when the schedule fits

The money case is the obvious one. Move hours off the overstaffed plateau and onto the understaffed rushes and your total hours can hold flat or even drop while the sales those hours support go up. Your labor as a percent of revenue improves without cutting the service that fills the tip jar. Parly shows that percent moving so you can see the change land instead of hoping it did.

But the schedule your team notices is the one that stops feeling like improvisation. When the rush is properly staffed, drinks go out faster, the line moves, and nobody is drowning. Tips tend to climb when the team is not visibly buried, which softens any drop in an individual's total hours. If you want the version of this that is written for what your team actually tracks, tips, wages, and the numbers your team cares about covers it.

There is a trust dividend too. The most common gripe in cafe staffing is uneven shifts: "I always get the slow afternoon," or "my shifts are always the buried ones." When the schedule visibly follows demand and you can show the reasoning, that complaint loses its footing. Hours are distributed by what the shop actually needs, and everyone can see it. Getting a shop out of that week-to-week scramble and into something steady is its own long project, and I wrote about the systems that get you there in turning shift chaos into shift confidence.

Make it a habit, not a project

A data-driven schedule is not a one-time rebuild. It is a small habit. Every two to four weeks, look at your updated hourly sales, lay your labor next to it, find the fresh gaps, and adjust. Seasons shift, the block changes, the menu moves, and your schedule keeps up because you keep checking. Parly refreshes the read on every Square sync, so the picture is current whenever you sit down to write the week.

If you are still copying last week's schedule tonight, do one thing differently. Pull a few weeks of hourly sales, put your labor beside it, and find the first gap. Move those hours. You do not need a tool to make that call. You just need to see the numbers first, and then it is yours to make.