A wingback chair eats seven and a half yards of fabric. A tufted chesterfield sofa can swallow twenty-two. Somewhere between "how much fabric do I order" and "what do I charge for this job," most reupholstery shops lose money without ever noticing — because the thing that's hardest to price accurately isn't the fabric. It's the labor, and the bookkeeping time nobody bills for.
Reupholstery is one of the last true craft trades: strip the old fabric and padding down to the frame, repair or rebuild what's underneath, cut and sew new fabric to fit a shape that was never quite square to begin with, and reassemble it so the seams disappear. Every piece is a little different, which is exactly why so many shops price by gut feel instead of by the numbers — and why so many profitable-looking shops are quietly break-even or worse.
Why Per-Yard Pricing Alone Doesn't Work
Fabric is the easy part to price. Upholstery-weight fabric runs roughly $30–$60 a yard for mid-range options, $15–$30 for basic polyester and cotton blends, and $100–$200+ for premium chintz, mohair, or silk. Yardage itself is fairly predictable once you know the piece:
- A chair with an exposed wood frame and a single seat cushion: about 2–6 yards
- A club chair with seat and back cushions plus rolled arms: around 12 yards
- A wingback chair: 7–8 yards, more if it's tufted
- A standard sofa: 15–22 yards depending on cushion count and tufting
Multiply yardage by fabric cost, add batting, foam, webbing, and thread, and you've got a materials number. The mistake is stopping there and treating labor as an afterthought — a flat "$400 for a chair, $800 for a sofa" number pulled from memory rather than from what the job actually took.
Labor rates in the trade run $50–$120 an hour depending on region and specialization, and reputable shops price flat-rate jobs by estimating average time for teardown, patterning, sewing, and reassembly — not by guessing. If you don't know your own average bench hours per piece type, you're setting prices with someone else's data, and someone else's shop doesn't have your rent, your compressor maintenance, or your slowest tufting job from last month eating into this month's margin.
Bench-Time Costing: Track Hours Per Piece, Not Just Per Job
The fix is bench-time costing: logging actual hours spent on each stage of each job, by piece type, until you have real averages instead of guesses.
A simple system works fine — a clipboard by the workbench, a shared spreadsheet, or time-tracking built into your job management software. What matters is capturing four stages separately, because they behave differently:
- Teardown — stripping old fabric, tacks, and padding. Fairly predictable per piece type once you've done a few.
- Frame repair — the wildcard. A "simple recover" that turns into a broken frame joint or replaced webbing can add hours you never quoted for.
- Patterning and cutting — highly variable with pattern-matched fabrics, stripes, and large-repeat florals, which can also inflate your yardage estimate beyond the standard chart.
- Sewing and reassembly — usually your most consistent stage, and the best one to benchmark against.
After 15–20 jobs of a given piece type, you'll have a real average bench-hours number — and it will almost always be higher than what you were mentally budgeting. That gap is where profit quietly leaks out.
The Overhead Trap: Why "Materials Plus Labor" Still Underprices Jobs
Even shops that track bench time carefully often stop one step short: they price materials plus labor and forget overhead. Rent, insurance, equipment depreciation on your sewing machines and steamers, and the hours you spend on quotes, supplier calls, and — yes — bookkeeping don't show up on any single job's fabric receipt, but they have to be paid for by some job's price.
A common trap for skilled-trade businesses generally: labor costs get underestimated by 20–30% because the fully burdened rate — wages plus payroll taxes, workers' comp, and benefits — never gets calculated, only the hourly wage. A separate, equally common trap is flat-percentage overhead allocation: dividing total annual overhead by total revenue and applying that percentage evenly to every job. A quick chair recover and a six-week antique sofa restoration don't consume the same share of your shop's fixed costs, so a flat percentage makes small fast jobs look unprofitable and large slow jobs look more profitable than they really are.
The practical fix scales down easily for a one- or two-person shop:
- Calculate your fully burdened hourly labor cost (wage + taxes + insurance + benefits), not just the wage
- Add a per-job overhead allocation weighted by bench hours, not a flat percentage of revenue
- Price fabric and materials at replacement cost, not what you happened to pay on a remnant sale
- Build in a margin on top of true cost — not on top of materials alone
Why Most Shops Undercharge for the Bookkeeping Time Itself
Here's the part that rarely gets said out loud: the time you spend reconciling receipts, tracking which yard of fabric went to which customer, and figuring out what a job actually cost after the fact is real labor. It just doesn't get billed to anyone, so it disappears into "overhead" — if it gets counted at all.
Shops that skip proper job costing tend to lose money in predictable ways: underpriced work from poor costing alone can run 5–10% of revenue, and the lost billable time spent chasing paperwork instead of working the bench adds up fast. None of that shows up as a single bad decision — it shows up as a shop that works constantly and never quite gets ahead.
The businesses that avoid this aren't necessarily using expensive software. They're the ones who record each job's fabric cost, hours by stage, and final price in one place, consistently, so that at the end of the month they can actually see which piece types are profitable and which ones they should stop taking on — or start pricing differently.
Deposits, Customer-Supplied Fabric, and Why Cash Flow Lies to You
Most reupholstery shops take a deposit — often 50% — before ordering fabric and starting teardown, which makes sense given how much cash gets tied up in materials on a single sofa. But that deposit isn't revenue yet. It's a liability: money you're holding against work you haven't finished. If it lands in your operating account and gets spent like income, you can end up cash-flush in a slow month and cash-poor in a busy one, simply because deposits from jobs you haven't started are covering the cost of jobs you're mid-way through.
Customer-supplied material (COM) complicates this further. When a client hands you their own fabric — inherited yardage, a bolt they found online, a remnant from a decorator — you're not billing for materials on that job, only labor. If your invoicing template defaults to a materials-plus-labor structure, it's easy to under-bill a COM job by forgetting to adjust the price upward on the labor side to compensate, since fabric with no margin markup can no longer help cover overhead the way a shop-supplied job does. Track COM jobs separately in your books, even if only with a tag or a note, so you can see whether they're actually as profitable as jobs where you supply materials.
Don't Let Remnant Fabric Become Invisible Inventory
Yardage estimates are conservative on purpose — most guides build in extra for pattern matching, and shops often round up rather than run short mid-job. That leftover fabric has real value, but it rarely gets tracked as inventory. It sits on a shelf, unlabeled, until either a future customer gets a discount for using it or it becomes shop scrap that quietly cost real money.
A simple fix: log leftover yardage by fabric name, width, and quantity at the end of each job, the same way you'd log a bench-hours number. Even a rough running list turns "we probably have some of that in the back" into an actual asset you can offer a customer doing a small ottoman or bench cushion — recovering margin on fabric you already paid for instead of ordering more.
Keep Your Job Costs as Clear as Your Cut Lines
If you're tracking bench hours on a clipboard and materials receipts in a shoebox, the two rarely meet up long enough to tell you which jobs are actually making money. Beancount.io offers plain-text accounting that keeps every job's fabric cost, labor hours, and overhead allocation in one version-controlled ledger — transparent, auditable, and easy to query when you want to know your real average cost per wingback chair. Get started for free and see why craft-trade owners are moving off spreadsheets and shoeboxes alike.