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.

Trends over 4 to 26 weeks

Hours, labor cost, sales, and labor percent by day, week, and month. Broken out by day of week, by crew member, and rolled up across every store on one account. Labor percent comes from each period's own totals rather than an average of daily percentages, which would weight a quiet Monday the same as a Saturday.

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.

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.

Labor cost is an estimate

It's the wages on your roster against scheduled hours. It isn't payroll output, and it won't match your payroll company to the cent. Wages have to be on the roster before the figure appears at all.

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 needs two comparable weekdays behind it, 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. Founding rate for the first 25 accounts, locked for the life of your account.