Reporting

Your till already prints these numbers. Send them here.

Your POS emails a daily sales report to somebody every morning, and a payroll report every pay period. Add a crewmuster address to that list. The takings and your crew's punches land on their own, and the week comes back as labor against sales.

Two addresses per store · sales and time cards stay separate · manager-only

Getting the numbers in

One address for sales. A different one for time cards.

Both exist the first time you open the setup panel, so you can paste one into your POS before you've configured anything else. They're separate on purpose. A payroll report can never be read as a sales figure, or the other way round.

Nothing is read until you say so

  • The first message from an address you haven't approved is held. Approve it and everything already held from that sender is read, oldest first. Block it and what was held is discarded unread.
  • Held mail writes nothing you'd see as data. No sales figure, no punch, not even the placeholder row a refused sender files.
  • You get one email and one push the first time an address writes. Nothing per report after that.

Approval matches the envelope address and never the display name a sender picked, which is why the review screen shows you the bare address first. It's your judgement about an address. It isn't proof of where the mail came from. Each door holds up to 20 unapproved senders and 14 messages each, after which further mail is dropped and recorded.

You don't need any of this to start

  • Type the day's sales in. Manual entry works from day one and needs no integration at all. The labor percent is the same number either way.
  • Bring your history in at once. Paste a block of cells out of Excel or Sheets, or upload a CSV. Two columns are enough, the date and that day's net sales. Up to 1,000 rows.
  • Nothing is written until you've seen every row. A date or an amount that can't be read is refused, never guessed at, and so is a future date or the same day twice.

An imported figure counts as confirmed, because a person supplied it, and it's stored apart from an emailed report for the same day so neither overwrites the other. Re-import a corrected file to replace what you brought in before.

The sales report

Forward it once and the shape is learned.

Reading a report is a matter of finding the labels your POS prints. A layout crewmuster recognizes is read the moment it arrives, with no model involved. One it hasn't met is read once by Claude, and what's kept from that reading is the layout's labels rather than its figures, so the next report of that shape is read here.

A figure nobody checked An emailed figure lands unconfirmed until you say it looks right. Anything more than about 30% off that weekday's usual carries the reason with it.
A number the software invented A report crewmuster can't read is filed for you to type in, with a note saying why. It is never guessed at.
Confirming 60 days one at a time Once you've confirmed 10 emailed days by hand you can let ordinary days confirm themselves. A figure that failed the check against your own trailing average never qualifies.
45 days of history and no sign of the rest Two years on the sales page. Days still waiting on you come first, then one row a month that opens into days, or a chart of daily takings.

A day with no figure is drawn as a gap rather than a zero, so the weeks before you started recording don't read as weeks you took nothing.

What leaves, and where it goes

  • An unfamiliar layout goes once. That report's text goes to Anthropic, and what we keep from the answer is the layout's labels. The next report of that shape is read here.
  • A scan goes every time. Worth knowing before you set this up. If your POS emails an image instead of a text file there are no labels to learn from it, so those reports go as a page until you change that setting at your till.
  • Nothing else is sent. Not your schedule, your availability, your roster, or your wages. The payroll report on your time-card address is read by pattern matching, with no model at any point.

Processing happens in the United States, which crewmuster requests on every call. Anthropic deletes what it receives within 30 days and doesn't train on it, and it's named as a sub-processor in our DPA.

Typing the day's sales in, or importing a spreadsheet, involves none of this. The model path exists for the emailed reports and nothing else.

The payroll report

If your till already has a clock, keep using it.

Send the payroll report to your time-card address and the punches land on crewmuster timesheets beside what you scheduled. A report can cover one day or a whole pay period, and only the days its punches fall on are rewritten. A weekly report never blanks the days it's silent about.

Clock times, and nothing else

Rate, pay, tips, and any employee ID number on the report are not read and not stored. crewmuster takes the clock-in and clock-out instants. This path involves no model at any point, so a layout that can't be read is filed with a note and those hours are added by hand.

You say who's who

A name on the report writes no punches until you match it to one of your crew. There's no fuzzy name matching, because a POS routinely spells somebody differently from your roster. Reports that arrive before you've finished matching are kept, so matching a name fills in every day it has already appeared on.

The till wins

Fix a punch at the till, re-send the report, and the corrected version overwrites what was recorded for that person and date. That includes overwriting a correction a manager made here. It's counted and shown on the report list rather than prevented, because the POS is the system of record on this path. The punch-history trail keeps both either way.

No clock on your till? Crew punch in at the kiosk with a four-digit PIN instead. Imported punches behave exactly like kiosk ones from there: worked time, overtime classification, break rules, the payroll export, and actual against scheduled all read the same. Crew see their own imported hours on their schedule.

What comes back

Labor against sales, from Tuesday to last quarter.

Labor percent while you build

The schedule builder shows labor as a percent of sales for the week and for each day, against a target you set. Open a day for the labor cost, the sales figure behind it, and whether that figure is a forecast. A day with no sales yet uses a forecast from the same weekday, and a projected number always says it's projected. The figure is labelled planned, because a week you're still building has no punches yet.

Any period, set against another

Hours, labor cost, sales, and labor percent by day, week, and month, over 1 to 26 weeks. Slide the window back as far as two years, and slide a second one beside it to compare last July with this one. Broken out by day of week and crew member, and rolled up across every store on one account.

Scheduled against actual

Who starts late, who leaves early, which shifts run over, and what the unplanned time cost. Across a range, not one week at a time. More than five minutes either side counts, which is tighter than the alert threshold on purpose. Someone seven minutes late every day is invisible at ten.

Plan against actual labor

What you scheduled, what people actually worked, and what your POS says labor cost, on one screen by week or by day. The gap is broken down by crew member. Hours compare exactly. Cost is directional, and the screen says so.

A morning recap Beta

Yesterday's sales, hours, labor percent, and who missed a shift or came in late, as an email and a push, with today's schedule and weather alongside. Off until a manager picks a send time, and each manager chooses whether to get it.

When the reports stop

crewmuster learns when your POS usually mails and notices when it doesn't. The first two quiet mornings show in the recap and on the dashboard. A third in a row sends an email and a push, once. It starts watching after ten reports over at least a fortnight.

Labor percent counts only the days that have both a labor cost and a sales figure. It's measured from the best source you have, the POS's own labor figure, then clock-ins, then the schedule, and it always names which. A cross-store roll-up uses the best source every store can supply.

The lateness figure per person is the median of their late shifts rather than the mean, so one bad morning doesn't define somebody. Punch rounding is never applied here. That's an export setting, and applying it to a report would let a store configure its own lateness away.

And out again as a file

Any report exports to CSV or JSON. Approve a week's timesheet and the hours become a payroll file with overtime split out and paid time off under its own earning code, in a summary or a per-day detail shape. Take the whole account back as a zip of CSVs whenever you like.

Check the earning-code names against a current template from your payroll provider before the first real run. The export refuses a week nobody approved, and a person nobody has matched to a payroll record, until you override it deliberately.

Read this part

Where the reporting stops, on purpose.

Every number above has an edge, and you should know where it is before you plan around it.

One labor figure is payroll's

Scheduled and worked cost are hours at each person's current wage, with no overtime premium and no wage history, so a raise re-prices past weeks. The POS's own labor figure, where your report carries one, is the one that matches payroll. Wages have to be on the roster before the other two appear.

No pay math

crewmuster sorts hours into regular, overtime, and double time for the rules you configure. It does not compute pay, run payroll, or file taxes. That stays with your payroll company and your accountant.

Sales are manager business

Crew never see them, at your store or any other, and that's enforced in the database, not hidden in the screen. Scheduled against actual is manager-only for the same reason.

It isn't a score

Scheduled against actual is not a rating and not a disciplinary tool. There's no ranking until you sort by a column, no per-person trend line, and no alerting off these figures. It records when somebody clocked in, never why.

Published shifts only

A draft isn't a commitment, and an unclaimed open shift has nobody to be late. A store with no punches at all doesn't see the section, because every shift would read as a missed clock-in.

Sales come before the percent

Labor percent and the sales views stay switched off until a store has recorded takings, and the toggle tells you why instead of showing you a blank. A forecast shows after one comparable weekday, marked as resting on a single week. It settles once there are two, which takes about two weeks.

Start with a typed-in number. Add the rest when you want.

Start a 30-day free trial. No card required, $29 a month for your first store, $19 for each one after. Sign up now and the founding rate is locked for the life of your account.