Timesheets came in three ways: paper, text, and an app most workers ignored. Every Friday, someone spent six hours reconciling them by hand, applying client bill rates and worker pay rates from a table that lived mostly in the owner's head, then producing invoices that were wrong roughly one week in five.
The problem
The firm placed workers across thirty commercial accounts: office buildings, light industrial, and a block of janitorial contracts. Each client had a negotiated bill rate per worker classification; each worker had a classification that set their pay rate. Both tables changed frequently and lived in the owner's head as much as anywhere else.
Timesheets arrived three ways: paper from on-site supervisors, texts from workers who had not downloaded the app, and syncs from workers who had. Every Friday, the coordinator pulled all three, normalized the hours, checked for no-shows and schedule mismatches, applied the rate tables, and produced client invoices and a payroll file for upload. The process took six hours and produced errors in roughly one week out of five, usually caught at invoicing and occasionally at payroll.
What we built
A weekly reconciliation tool that ingests all three timesheet sources, normalizes hours to a single ledger, and applies the rate table automatically. The tool flags every exception: hours that do not match the scheduled shift, a worker classification with no client rate on file, hours over a threshold that may indicate an entry error.
Client bill rates and worker pay rates live in an editable table the owner controls. Change a rate, set an effective date, and every future reconciliation run picks it up. Historical runs are unchanged.
At the end of each run, the coordinator gets a flagged exception queue and two output files: an invoice pack formatted per each client's requirements, and a payroll upload file in the format their processor takes.
What the coordinator sees
On clean weeks: a summary showing total hours, total invoiced, total payroll, and a count of zero exceptions. One click to approve and export.
On problem weeks: the same summary, plus a numbered exception list with the specific mismatch, the source record, and a fix input. Correct the exception, re-run, export.
What changed
The six-hour Friday reconciliation became a forty-five-minute exception review. Invoice errors dropped to zero in the first ninety days. The owner stopped being a required step on payroll Fridays. They own the rate table and review the weekly summary, but the path no longer runs through them.
