Track Profit by Customer in a Print Shop

Why your busiest customer isn't your most profitable one
At quarter-end, an owner pulls the sales report and sees the same name at the top it always is — the account that calls in a new PO every other week, keeps a press busy, and shows up first on every "top customers" list anyone runs. Then the estimator pulls actual job costs against what those jobs were quoted at, and the picture flips: that account is running thin, some jobs barely clearing cost after makeready waste and a rush surcharge that should've been charged but wasn't. Meanwhile a smaller account — four orders a quarter, never urgent, always a clean die-cut roll label on a substrate the shop knows cold — is quietly the best margin in the building.
Nobody caught it because nobody was tracking profit by customer. They were tracking sales by customer, which counts revenue, not what's left after plates, makeready, waste and labor. A print shop can hit its top-line number every month and still be feeding its healthiest margin into its busiest, worst-priced account. This piece walks through how to build the rollup that would have caught it — by customer, by press, and by job type — and what to do with it once it exists.
Job margin without a customer rollup hides the pattern
Most shops that cost jobs at all cost them one job at a time. A job closes, someone checks quoted cost against actual, and it either matches or it doesn't. That's useful, but it's a data point, not a pattern. A single underpriced rush job tells you that job was underpriced. It doesn't tell you that the same customer's jobs run light 15 times out of the last 20, because nobody rolled those 20 jobs up under one name.
The roll-up is the difference between noticing a bad job and noticing a bad customer relationship. Estimated-vs-actual job costing run job by job catches the individual miss. Run the same data grouped by customer over a quarter, and it catches the trend — this account's jobs are consistently quoted tighter than they should be, or consistently absorb more press downtime, or consistently get a plate reused past its economic life because "the customer's been with us forever." None of that shows up until the jobs are grouped by who they belong to, not just totaled by month.
How to track profit by customer, not just by job
The mechanics aren't complicated — the reason most shops don't do it is that the data lives in scattered places (a quoting spreadsheet, a scheduling whiteboard, a bookkeeper's job cost tab) that were never built to be grouped by customer in the first place. To track profit by customer print shop teams need three things sitting next to each other for every closed job: the quoted price, the actual cost (materials, press time at the shop's loaded hourly rate, labor, waste), and the customer name as a clean, consistent field — not "ACME" on one job and "Acme Corp" on the next.
With those three fields, the rollup is simple arithmetic. For each customer: sum quoted revenue across their closed jobs, sum actual cost across the same jobs, and the difference is realized margin — in dollars and as a percentage. Do that for every customer and sort by margin percentage, not by revenue. That single sort is usually where the surprise shows up.
Worked example, illustrative only: say Customer A generated 40 jobs in a quarter with combined actual margin of 18%, and Customer B generated 12 jobs at 34% margin. Customer A is nearly four times the job volume, but Customer B's jobs return almost double the margin rate — meaning on a smaller number of orders, Customer B may be contributing close to the same or more absolute profit dollars once press time isn't tied up chasing Customer A's tighter jobs. That's the kind of relationship a revenue-only report never surfaces.
A customer that runs high volume at thin margin isn't automatically bad business — but a shop that doesn't know it's thin can't decide whether it's worth keeping on those terms.
Slicing profit by press and job type
Customer alone is one axis. The rollup gets more useful when it's cut a second way: by press and by job type. A converter running both flexo and a digital press — LEP, UV inkjet, or both — often finds that the same customer looks different depending on which machine ran their work. Short-run reorders that land on a digital press may carry a healthier margin than the long-run flexo jobs from the same account, or the reverse, depending on how plate cost amortizes across the run length that customer typically orders.
This is where tracking quotes by press technology earns its keep. If a shop's estimating tool can tag every quote with which press class it was priced against — flexo, LEP click-charge, UV inkjet ink-coverage, or a subscription-allocation model — then the customer rollup can be sliced a level deeper: not just "is this customer profitable" but "is this customer profitable on the press we're actually running their work on." A customer might be a strong flexo account and a weak digital one, and a shop that only sees the blended number never finds that out.
Job type is worth the same treatment. Pouch labels, wine and spirits work, food and beverage runs with tighter tolerance, private-label reorders — each carries a different waste profile and makeready burden. Rolling margin up by job type alongside customer often explains why two similarly sized accounts land at very different profitability: it's not the customer, it's the mix of work that customer sends.
What the pattern usually shows
Once a shop runs this rollup for a full quarter, a few patterns tend to repeat across converters of very different sizes. Rush and reorder-heavy accounts often carry hidden cost that never gets billed — a rush surcharge that was quoted once and then quietly waived on every reorder after. Long-standing accounts sometimes run on a price list nobody has revisited since the job was first quoted, while material and labor cost have moved. And accounts that feel high-maintenance on the shop floor — frequent small changes, extra proofs, tight color tolerance — frequently turn out to be low-maintenance on the P&L once the actual cost of that extra handling is priced in, or the reverse: what looked like easy, low-touch work turns out to be barely breaking even because it was quoted years ago at a rate that no longer reflects the shop's real cost.
None of this is visible from a sales report. It only shows up once actual job cost is tied to a customer name and looked at in aggregate, which is exactly why margin erosion tends to happen slowly and invisibly — a few points at a time, on the accounts nobody is watching closely because they're not the ones causing visible problems.
Turning the report into a pricing decision
A customer profit rollup is only useful if it changes a decision. Once the pattern is visible, there are really three moves available: reprice the underperforming work at the next renewal or reorder, tighten terms around what triggers a rush charge or a reproof, or — for a genuinely thin account that isn't strategic — decide deliberately to keep less of that work on the schedule and protect press time for the accounts that carry real margin. It's also worth checking the rollup against quote-to-order conversion rate by customer: an account that converts quotes at a high rate but at thin margin may simply be quoted too low relative to what it will actually bear.
Any of those moves starts from the same place: a correctly built hourly rate feeding accurate actual cost, and job data that's clean enough to group by customer without a manual cleanup pass first. If that data currently lives across a spreadsheet, a scheduling whiteboard, and a bookkeeper's separate job-cost tab, the Label Converter Job Costing Workbook is built to bring estimated and actual cost into one place, by job, so a customer rollup like the one above is a sort and a pivot away rather than a week of reconciliation.
Get the next guide in your inbox
Flexo estimating guides and digital press cost breakdowns, when we publish them.