There is a number on your contractor's quote — maybe it says "$685" next to a toilet, or "$285 per linear foot" for cabinets — and you have no idea if it is fair. The contractor knows his cost. The supplier knows the wholesale price. You are the only person at the table without the information, and that asymmetry is where excess markup lives.
Here is the math that resets the balance. Standard contractor markup on materials runs 15-30% above wholesale cost. Wholesale is already 20-40% below retail. So the price on your quote should land at roughly retail or slightly below. If you are paying more than you would walking into a showroom off the street, the markup has gone past standard and into opportunistic territory.
Plumbing fixtures: look up the exact model number
Plumbing fixtures are your easiest win because model numbers are specific and retail pricing is published everywhere. Thirty seconds on Ferguson, Build.com, or the manufacturer's site gives you the retail price. The contractor's wholesale cost sits 20-30% below that number.
One fixture is annoying. Five fixtures is a pattern. Multiply that across a bathroom remodel — toilet, vanity, faucet, showerhead, mixing valve — and the overage on fixtures alone can reach $800-$1,500.
Tile: check Floor & Decor, Daltile, and MSI Surfaces
Tile pricing swings wildly by material, but the wholesale-to-retail spread stays consistent. Find the specific SKU or product line on your quote and search it at Floor & Decor, Daltile, or MSI Surfaces. Here is what contractors actually pay:
- Porcelain tile — $2-$8 per square foot wholesale. Your quoted price should be $2.30-$10.40/sq ft.
- Natural stone (marble, travertine, slate) — $5-$20 per square foot wholesale. Your quoted price should be $5.75-$26/sq ft.
- Glass mosaic — $10-$30 per square foot wholesale. Your quoted price should be $11.50-$39/sq ft.
Electrical: panels, wire, and breakers
Electrical materials are among the most stable wholesale categories because the product lines are standardized. An Eaton panel is an Eaton panel. Rexel, Graybar, and CED supply houses publish some pricing, and wire, panels, and breakers follow predictable cost curves — which makes overcharges on these items particularly easy to spot.
The same principle applies down the line. Romex wire (NM-B 12/2, the standard for 20A residential circuits) wholesales around $0.35-$0.55 per foot in bulk. A 250-foot roll at Home Depot retails for about $130 ($0.52/ft). If your quote shows wire at $1.10/ft, someone is doubling or tripling the actual cost and hoping you do not notice.
Lumber and building materials: the most transparent category
Lumber is the hardest place for a contractor to hide markup, because retail pricing is visible to anyone with a browser. 84 Lumber, ProBuild (now US LBM), and Home Depot Pro Desk pricing is available online or by phone. Framing lumber, plywood, and dimensional stock have publicly visible prices that update weekly.
Contractor discounts on lumber typically run just 10-20% below retail — smaller than the 20-40% discount on plumbing or electrical. That means the acceptable markup window is tighter. You should be paying within 5% of retail lumber pricing. Anything above that and you are subsidizing margin on the one material category that should carry the least of it.
A real-world markup calculation
The 30-minute price check
You do not need to verify every line item. Focus on the three or four most expensive material lines — they typically account for 60-70% of total material cost. Five minutes per item searching the model number, SKU, or product name. If three out of four land within 10% of retail, the quote is fair. If two or more sit 40%+ above retail, you have a markup problem worth addressing before you sign.
The goal is not to nickel-and-dime a contractor out of a reasonable profit. It is to know the difference between a 25% markup you expected and a 90% markup you did not — and to have the specific numbers that let you ask the right questions before the contract is signed.
Ready to check the pricing on your quote?