Walk into any countertop shop on a Friday afternoon and you'll see the same thing: a yard full of slabs worth six figures, a CNC bridge saw running at $40 an hour in machine burden, and an owner who can quote a kitchen in his sleep but couldn't tell you which jobs actually made money last month. The trade has a productivity problem hiding inside a bookkeeping problem.
Stone fabrication is a deceptively complex business to account for. Every slab is a unique inventory unit with its own veining, defects, and yield profile. Every kitchen is a job with template-to-finished waste that can swing margin by ten points. Every CNC cycle burns diamond tooling and consumes water and electricity that someone has to allocate. And every job carries a callback risk on seams and chips that doesn't show up until months later.
This guide walks through the bookkeeping decisions that separate the shops that grow profitably from the ones that grow themselves out of business.
Why Generic Contractor Accounting Doesn't Work for Stone Shops
Most countertop fabricators start out using off-the-shelf small business accounting like it's a remodeling contractor. They book material as a single line item, throw labor into one bucket, and call gross margin "revenue minus COGS." It works at $500,000 of revenue. It collapses at $2 million.
The reason: stone has three characteristics that break commodity construction accounting.
Slabs are not fungible. A bundle of four "Calacatta Gold" slabs from the same block in Carrara are not interchangeable inventory the way 2x4s or sheets of plywood are. Vein direction, defects, and book-match pairs change which jobs the slab can serve. Your inventory system has to track at the slab level, not the SKU level.
Yield is highly variable. Two identical-looking kitchens can consume 1.2 slabs or 1.8 slabs depending on template geometry, vein match requirements, and how the layout person nests the pieces. Standard cost-per-square-foot math hides this variation completely.
Capital equipment dominates the cost stack. A bridge saw, CNC router, edge polisher, and dust collection system can easily total $500,000 to $1,200,000. That equipment burden has to land on jobs, or your job margins are fiction.
If you skip these three issues, your P&L will show a healthy gross margin while your bank account quietly drains into slab inventory and finance payments.
Slab Inventory: Tracking by Bundle Number, Not SKU
The starting point is treating each slab as a distinct inventory unit with its own cost basis and yield expectation.
When a container of slabs arrives from your distributor, the invoice usually shows a bundle number (often a six-digit code matching the block from which the slabs were cut), the number of slabs, dimensions per slab, and total square footage. The cost line might say "Bundle 482194, 7 slabs Calacatta Gold 3cm, 425 sqft, $6,800 + $340 freight."
Don't book this as "$7,140 inventory." Instead:
- Create a slab-level inventory record for each of the seven slabs. Assign a tag number (most shops use a sequential internal number plus the bundle ID).
- Allocate the landed cost across the seven slabs by square footage. If one slab is 65 sqft and another is 58 sqft, they have different cost bases.
- Include freight, brokerage, duty, and crating as part of landed cost — not as a separate freight expense.
- Track location in the yard (rack number, A-frame slot) so layout can pull the right slab without re-handling the bundle.
This work feels heavy until the first time you discover that a 2-year-old slab nobody could find has been sitting upright in rack 14 the whole time. Industry surveys consistently show that shops without slab-level tracking carry 12% to 25% more inventory than shops that do — capital tied up in stone that should have been sold or reworked years ago.
Software like Moraware Systemize, Slabsmith, or ActionFlow does this natively. If you're using QuickBooks, you can approximate it with serialized inventory items, but the audit trail will hurt.
The Slab Reserve You Probably Need
Every yard accumulates a tail of damaged, oddly-cut, or out-of-fashion slabs that won't sell at original cost. Pretending they're worth their landed price overstates inventory and overstates your shop's actual borrowing base.
A simple monthly process: any slab that has been in the yard 12 months gets reviewed. A slab in the yard for 18 months gets a 25% mark-down reserve. A slab past 24 months gets 50%. A slab past 36 months gets written down to liquidation value (often $5 to $10 per square foot for remnants).
This reserve hits cost of goods sold, but it gives you a true picture of inventory turn — and protects you from being surprised when your distributor changes the popular colors next year.
Template Loss and Yield: The Hidden Margin Killer
The square footage on the customer invoice is the finished installed area. The square footage you have to take out of inventory is the template area plus waste. The difference between those two numbers is the yield, and it varies wildly.
A simple-rectangular island kitchen with no vein match might run a 78% yield (you used 78% of the slab area to produce the finished tops). A complex L-shaped kitchen with bookmatch backsplashes and a curved waterfall edge might run 52%. If your bookkeeping treats all jobs the same, you'll miss the fact that complex jobs at standard pricing are losing money on materials alone.
The right way to record this:
- On the job ticket, capture template square footage (planned consumption), actual slab consumption (slabs pulled and used), and finished square footage (what gets billed).
- Compute yield = finished sqft / actual slab sqft consumed.
- Compare yield to the bid yield assumption. A persistent 8-point negative variance on bookmatch jobs means your bid pricing is wrong, not just that one job went poorly.
Industry benchmarks from 2026 fabricator surveys put quartz waste typically at 12% to 18% — shops using nesting optimization software (which lays pieces against actual slab images) can bring that down to 8% to 12%. The difference between those two ranges is roughly the difference between healthy net profit and breakeven for a mid-size shop.
Builder-Channel Versus Retail-Channel Revenue: Two Different Businesses
Most fabricators sell into two distinct channels with completely different economics, and the P&L should reflect that.
Retail / direct-to-consumer jobs come through a showroom, designer referral, or online quote. The customer pays a 50% deposit, picks slabs from the yard, signs off on the template, and pays the balance at installation. Gross margins on retail can run 45% to 60% on the stone-plus-fabrication line. Sales cycle is 4 to 12 weeks.
Builder / home-builder channel jobs come through a national builder, multifamily GC, or kitchen-and-bath distributor. The fabricator wins a price-per-square-foot contract for an entire community or building, often locked for 6 to 18 months. Payment terms are net-30, sometimes net-60, with retainage. Gross margins on builder work often run 18% to 28%. Volume is steady and predictable.
These need to be separate revenue accounts. Not just "retail" and "builder" as classes — separate income statement lines. The reason is that builders pay slowly with retainage, which means your DSO (days sales outstanding) on builder work might be 55 days while retail is 12 days. If you blend them and watch only blended DSO, you'll miss a builder payment falling behind by 20 days because the retail mix is "averaging it up."
The same logic applies to COGS allocation. Builder jobs tend to use mid-tier quartz with thin profiles; retail jobs lean toward expensive natural stone with mitered edges. Allocating actual material and labor cost by channel is the only way to know whether you should be courting more builder volume or running away from it.
ASC 606 and Percentage-of-Completion: When Stone Counts as Long-Term
A typical kitchen takes three to six weeks from contract to install. Under ASC 606, fabricators of customer-specific stone tops have an interesting fact pattern: the goods being produced have no alternative use to the fabricator (a cut and polished granite top template for a specific kitchen is worthless to anyone else), and the fabricator typically has an enforceable right to payment for work to date. That combination triggers over-time revenue recognition under ASC 606-10-25-27(c).
In plain English: a fabricator with proper contract language should be recognizing revenue as the job progresses, not at install. For most shops doing residential kitchens this distinction is small — projects close within a single accounting period. But for shops doing larger commercial millwork-style jobs or multi-month builder contracts, percentage-of-completion accounting can shift revenue meaningfully across quarter ends.
Customer design deposits and progress payments are held as contract liabilities (not revenue) until the corresponding performance milestone is satisfied. A $4,000 deposit on a $10,000 kitchen is a liability the day it hits the bank account. It becomes revenue as you template, fabricate, and install.
Two practical implications:
- Don't book deposit revenue at deposit. It's not your money yet. It's owed back if the contract cancels.
- Track milestone completion on each open job so your liability balance at month-end is defensible. Most modern shop management software supports milestone billing — use it.
CNC and Equipment Burden: The Number That Makes Job Costing Honest
Here's where most shops go wrong. They look at the bridge saw and CNC as "overhead" and bury the cost in operating expense. Then they bid jobs at material cost plus labor at a $35/hour shop rate. They wonder why margins are thin.
The correct approach is a machine-hour burden rate that absorbs equipment, consumables, utilities, and the operator cost into each cycle.
For a typical 5-axis CNC running $250,000 capital with five-year MACRS depreciation, diamond tooling consumption around $25 per hour, water and electricity another $6 per hour, maintenance reserve at $4 per hour, and operator labor at $35 per hour with payroll burden, you land at roughly $95 to $115 per machine-hour. A bridge saw runs lower — typically $55 to $75.
When a kitchen takes 1.8 hours on the bridge saw and 2.4 hours on the CNC, that's roughly $130 + $250 = $380 in equipment burden allocated to the job. Add material at landed cost. Add finishing labor at a separate rate. Now you have a job cost that resembles reality.
Without this, you'll discover at year-end that the "$80 per square foot" you charge for a Calacatta job covers material and labor but eats your equipment depreciation and finance payments. The shop runs, the lights stay on, and net income limps in at 3%.
Section 179 and Bonus Depreciation Decisions
A $250,000 CNC purchase in 2026 can be expensed under Section 179 up to the annual limit, with the remainder eligible for bonus depreciation at the current phase-down percentage. For a profitable shop, fully expensing a major equipment purchase in year one can be a six-figure tax move.
That said, taking Section 179 doesn't change the economic cost of the equipment — it just changes when you take the tax deduction. Your management accounting should still spread the equipment cost over its useful life through the machine-hour burden rate. Otherwise, the year you buy the CNC looks profitable but every subsequent year looks weak as you compare against an artificially deflated year-one cost basis.
This is one of the most common bookkeeping mistakes in capital-heavy small businesses: confusing tax depreciation with management cost allocation.
Diamond Tooling: A Real Consumable, Not an Office Supply
A core diamond bit lasts 60 to 120 holes. A profile wheel lasts 80 to 150 linear feet. A drum wheel lasts a few months of light use. A typical shop running 18 to 25 kitchens per week burns $1,500 to $4,500 in tooling per month.
Treat this as cost of goods sold, not operating expense. Even better, capture it as a cycle-based consumption rate: Y per bridge-saw cut, $Z per linear foot of mitered edge. Build that rate into your machine-hour burden.
The shops that win on margin track tooling life religiously. They know that a worn drum wheel cuts slower (eating machine hours), produces a worse polish (driving callbacks), and burns more water and electricity. The savings from running tooling 30% longer than you should are almost always negative.
Callback and Warranty Reserves
Seams crack. Chip repairs come back. A seam that looked tight at installation can open over a season as cabinets settle and the home goes through humidity cycles. The fabricator's lifetime workmanship warranty on the install creates a real future liability.
Industry data suggests callbacks run 1.5% to 4% of revenue across the industry, weighted toward complex natural stone (which has a higher callback rate than engineered quartz). A defensible warranty reserve looks like:
- 2% of completed installed revenue accrued monthly to a "Warranty Reserve" liability account.
- Actual callback costs (labor, replacement material, fuel, fabrication time) hit the reserve as they occur.
- Quarterly review of the reserve balance against trailing callbacks — adjust the accrual rate if you're persistently over- or under-reserving.
This is one of those entries that feels academic when business is good and indispensable when a bad batch of resin in a quartz slab triggers a wave of returns. The reserve smooths the income statement and tells you what your true gross margin is, net of warranty cost.
Per-Square-Foot KPIs That Actually Matter
Once you have honest revenue allocation, honest material cost, and a real equipment burden in your cost stack, you can compute the KPIs that strategic buyers and lenders care about:
- Throughput per linear foot of fabrication day: total invoiced linear feet finished divided by available shop hours. Tracks productivity independent of mix.
- Revenue per machine-hour (separately for bridge saw and CNC). Good shops hit $300 to $450 per CNC hour. Below $250 and you have a pricing or yield problem.
- Labor recovery: gross profit divided by direct labor cost. Healthy is 2.5x to 3.5x. Below 2.0x and you're either underbilling or overstaffed.
- Slab yield by channel: builder versus retail, natural versus engineered, edge profile complexity tier.
- DSO by channel: retail should sit under 15 days; builder will hit 45-60. A retail DSO that creeps above 25 means deposits or installs aren't being collected on the day they're due.
Most shop owners track one of these. The ones who track all five tend to be the ones acquirers are calling.
Reconciling Estimating Software With the General Ledger
Moraware Systemize, ActionFlow, Slabware, and similar systems run as the operational source of truth for jobs, quotes, slab inventory, and scheduling. The general ledger sits in QuickBooks, Sage, or a similar accounting package.
Two reconciliation points break monthly close in nearly every shop:
- Slab inventory at month-end. Does the slab count and dollar value in Moraware tie to the inventory asset on the balance sheet? If the system shows $342,000 and the GL shows $298,000, something is off. Common culprits: bundles received in the GL but not added to inventory in Moraware, slabs marked sold in Moraware but not invoiced, or write-downs taken in one system and not the other.
- Open job WIP and deposits. Does the deposit liability in the GL match the sum of unearned deposits across all open jobs in Moraware? If not, either jobs closed without proper revenue recognition or deposits got recorded as revenue too early.
A monthly reconciliation worksheet — even a simple spreadsheet that pulls a Moraware inventory report and a GL inventory balance and explains the variance — turns a quarterly fire drill into a five-minute process.
Keep Your Shop's Financial Records as Sharp as Your Tooling
Stone fabrication is unforgiving of sloppy bookkeeping. A capital-heavy business with single-unit inventory and long job cycles needs honest cost allocation, defensible inventory valuation, and a real warranty reserve — or the P&L lies to you for years and the bank balance breaks the news.
Beancount.io offers plain-text, version-controlled accounting that fits the way a shop owner actually thinks about a business: every slab, every job, every machine hour transparent and queryable. No black boxes, no vendor lock-in, no waiting for your bookkeeper to send a Friday report. Start for free and see why operators in capital-intensive trades are switching to plain-text accounting.