A ten-foot channel letter sign looks like a straightforward job on paper: some aluminum, a roll of vinyl, a few hours on the CNC router, and an install crew with a bucket truck. But ask any sign shop owner which jobs actually made money last quarter, and most will admit they're guessing. The invoice cleared, the customer paid, and the bank balance went up — yet somehow the shop still can't afford to hire a second installer.
The gap between "we got paid" and "we made a profit" is job costing, and it's the one bookkeeping habit that separates sign shops that grow from shops that just stay busy.
Why "Simple" Signs Quietly Lose Money
Sign work feels like manufacturing, but it's priced like a service, and that mismatch is where profit disappears. A shop might nail the material cost on a job — they know exactly what a sheet of ACM or a roll of 3M vinyl costs — and still lose money because they undercounted the labor.
Design and proofing time, weeding and application, CNC setup and changeover, and installation travel all get treated as part of "just making the sign" instead of being logged as billable hours. When none of that gets tracked, the shop is pricing based on material cost plus a gut-feel markup, not on what the job actually took to produce.
The fix isn't more effort — it's tracking the same information shops already generate (a work order, a time clock, a materials pull) and routing it into a job cost report instead of letting it evaporate into a general "shop expenses" bucket.
The Four Buckets Every Sign Job Needs
Job costing means assigning every dollar spent — and every hour worked — to the specific project it belongs to, not to a broad "materials" or "labor" expense account that mixes every job together. For a sign shop, that breaks into four categories per job:
1. Direct materials. Aluminum, ACM, vinyl, LED modules, transformers, mounting hardware, and paint — priced at what the shop actually paid, not a rounded estimate. Materials markup in the sign trade varies a lot by category: vinyl commonly carries a markup around 10x cost because the material itself is cheap relative to the design, printing, and application labor wrapped around it, while aluminum or ACM often runs closer to 3–4x cost because the raw material cost is a bigger share of the job. Applying a flat markup percentage across every material category is a common way shops underprice metal-heavy jobs and overprice vinyl-only jobs relative to what the market will actually bear.
2. Direct labor. Every hour a specific job touches — design and production art, sheeting, printing, laminating, plotter cutting, CNC routing, assembly, and installation — should be logged against that job's work order, not lumped into a weekly payroll total. Separating labor into these discrete activities is what lets a shop see, after the fact, whether an install ran long because the site had bad conditions or because the estimate was wrong from the start.
3. Labor burden. This is the cost most shops leave out, and it's the one that quietly wrecks margins. Labor burden covers payroll taxes, workers' comp, health insurance, and other benefits layered on top of an employee's hourly wage — commonly estimated at roughly 15% or more added to base pay, though it can run meaningfully higher once workers' comp for install crews (a genuinely dangerous job category, involving ladders, bucket trucks, and electrical hookups) is factored in. If a shop quotes labor at a $25/hour wage but the fully loaded cost to the business is closer to $30–35/hour, every labor-heavy job is underpriced by that gap, and a shop can be profitable on paper while losing money on every real invoice.
4. Overhead. Rent, utilities, insurance, equipment leases, and software all have to land somewhere. The cleanest approach is to convert monthly overhead into an hourly shop rate — total monthly overhead divided by total available production hours — and apply that rate to every job based on the hours it actually consumes. Skipping this step means overhead gets paid for out of whatever margin is left over instead of being priced into every job upfront.
A Simple Pricing Formula That Actually Holds Together
Once those four buckets are tracked, pricing stops being a guess. A workable version looks like this:
(Materials + Labor + Labor Burden + Overhead) × Profit Margin = Customer Price
A few practical notes on applying it:
- Add a small buffer — some shops use roughly 5–10% — on top of raw material cost to cover the screws, silicone, transformers, and hardware that are easy to forget when quoting off a spec sheet.
- Price labor at the fully burdened rate, not the wage rate, so burden isn't accidentally absorbed into "profit" that never shows up in the bank account.
- Apply the overhead rate per job hour, not as an afterthought subtracted from year-end profit.
- Set the margin last, as a deliberate percentage on top of true cost — not as whatever's left after a round-number quote.
Shop labor rates vary widely by region and specialty, but many shops price in the $60–$70/hour range for shop time once burden and overhead are built in — a useful sanity check if your current quotes are landing well below that after backing out materials.
Where the Money Actually Leaks
A few patterns show up again and again in sign shop job costing:
- Design revisions that never get billed. A customer asks for "one small change" three separate times, and each round eats 30–45 minutes of design time that never makes it onto an invoice or a change order.
- Install trips that run long. A quote assumes a two-hour install; permitting delays, bad substrate, or a bucket truck that has to reposition twice turn it into four hours — and if labor isn't tracked by job, that overrun never gets flagged for the next similar quote.
- Rework and waste. A misprint, a color match that's off, or a panel that gets damaged in transit gets absorbed as "the cost of doing business" instead of being tagged to the job and tracked as a category worth reducing over time.
- Underpriced small jobs. A single vinyl decal or a quick banner reprint often takes nearly as much setup time as a bigger job, but gets priced like a five-minute task because nobody's tracking the setup and changeover time separately.
None of these show up as an obvious loss in the moment. They show up, cumulatively, as a shop that's busy year-round but never seems to build cash reserves.
Turning Job Costs Into Better Bids
The real payoff of tracking costs by job isn't the historical report — it's what it does to the next bid. Once a shop has actual cost data on, say, ten channel-letter installs, it can see the real average labor hours per linear foot, the real material waste rate, and the real install time variance by site type. That turns future quotes from an educated guess into a number backed by the shop's own history.
It also makes it obvious, fast, which job types are worth chasing and which ones are quietly subsidized by the rest of the business. A shop that discovers its illuminated channel letters carry a healthy margin but its vehicle wraps consistently run over on install time can adjust pricing or scheduling before that pattern eats into a full year's profit.
Keep Your Job Costs as Clear as Your Sign Designs
Every job a sign shop runs generates the data needed to price the next one better — materials pulled, hours logged, install time tracked. The only question is whether that data ends up organized by job or lost in a general ledger that can't tell a profitable install from a money-losing one. Beancount.io offers plain-text accounting that keeps every material cost, labor hour, and overhead allocation transparent and auditable, so a shop can see exactly which jobs pay the bills. Get started for free and start pricing from real numbers instead of gut feel.