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.

The baseline rule: Contractor cost = retail minus 20-40%. Contractor quote to you = contractor cost plus 15-30% markup. The result: you should be paying roughly retail price or up to 10% below. If your quoted material price exceeds retail, the contractor markup is 50-100%+ above their actual cost.

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.

Example: Your quote lists a Kohler K-3810-0 toilet at $685. The same model retails at $498 on Build.com and $519 at Ferguson's consumer site. The contractor's wholesale cost is likely $350-$400. Their quoted price of $685 represents a 70-95% markup over cost. Industry standard would put that fixture at $400-$520 on your quote (15-30% above wholesale). You are overpaying by $165-$285 on a single fixture.

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.

Red flag: If any plumbing fixture on your quote is priced above the retail price you can find online in 30 seconds of searching, the markup is excessive. No legitimate reason exists for a contractor to charge you more than retail when they are buying at wholesale.

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.
How to verify: Find the tile product line and series name on your quote. Search that exact name at Floor & Decor or the manufacturer site. The retail price you find is 20-40% above what the contractor paid. If your quote shows a price above that retail number, the markup has compounded past the industry norm.

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.

Example: A 200-amp panel upgrade kit (panel, main breaker, and bus assembly) wholesales at $400-$600 depending on brand (Eaton, Square D, Siemens). If your quote shows $1,200 for the panel alone — separate from labor — that is a 100%+ markup on the material. A fair quoted price for the panel kit lands at $460-$780 (15-30% above wholesale).

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.

Red flag: Electrical quotes that bundle "materials" as a single lump sum with no itemization of panel, wire gauge/length, breakers, boxes, and connectors. These components have known, verifiable prices. A contractor who will not itemize them is hiding margin in the bundle.

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

Example: A quote lists "48 LF of base cabinet at $285/LF." You contact the cabinet supplier (listed on the spec sheet or identifiable from the door style) and find their wholesale catalog shows $165/LF for the same product line. The contractor's markup: ($285 − $165) / $165 = 73%. Industry standard markup of 15-30% would put the price at $190-$215/LF. The $285/LF price suggests either a premium product substitution you did not request, or excessive margin the contractor hopes you will not check.
What to do with this information: Do not accuse the contractor of overcharging. Instead, say: "I have been researching the material costs for this project. Can you walk me through the material pricing on lines 4, 7, and 12? I want to make sure the spec matches what we discussed." This gives them a chance to explain a product upgrade, a supplier minimum, or a legitimate cost you missed — or to adjust the price quietly.

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?

Check your quote Back to all guides