April 9, 2026
Is my contractor quote fair? A 5-minute zip-code check for homeowners
You just got a quote for $14,800 to redo your bathroom. The contractor seems legit. You have no idea if $14,800 is reasonable, insulting, or a steal. And you don't want to waste two weeks collecting comparison quotes from people who may or may not show up.
Here's how to tell if the quote you already have is fair, in about five minutes.
What "fair" actually means
Contractors mark up materials and labor — that's the whole business model, and it isn't a scam. The question isn't whether you're being marked up (you are), it's how much. Industry data from HomeAdvisor and Angi suggests a healthy markup is 15-30% over raw costs. Above 30%, you're subsidizing someone else's yacht. Below 15%, your contractor is either very hungry or cutting corners.
The trouble is that quotes rarely expose the raw costs, so "30%" is invisible. You have to eyeball the line items against regional market rates instead.
The 4 line items that are almost always inflated
In our analysis of thousands of residential quotes, the same handful of line items get padded again and again:
- Demo and disposal. This is often charged at twice the local labor rate because customers don't know what it should cost. Fair: $40-60/hour of demo time plus actual dumpster fees.
- Permit fees. Permits should be a pass-through at cost. If your quote says "permit fees $800" and you live in a city where bathroom permits are $250, that's $550 of pure markup.
- Tile and fixture labor. Labor rates vary 50% by zip code. Tile install in SF is $25-35/sq ft; in the Midwest it's $12-18/sq ft. If your contractor is quoting SF rates in Ohio, that's a problem.
- "Contingency" or "unforeseen" line items. These should be 5-10% of the total, clearly labeled. If there's a $2,000 "contingency" on a $15,000 job, ask what specifically could go wrong that costs $2,000.
The 5-minute test
Take your quote and do this:
- Circle every dollar amount on a single line item.
- Google
"[line item] cost [your zip code] 2026"for each. - Any line that's more than 40% above the middle of the range you find, flag it.
- Add up the flagged lines. That's your negotiation opportunity.
If that total is less than 5% of the quote, your quote is probably fair and you can move forward. If it's 10-20%, you have a real conversation to have. If it's 25%+, you should get one more quote.
A pushback script that actually works
Most homeowners try to negotiate by saying something vague like "can you come down a little?" That's weak. Here's what works better:
"Hi [name], thanks for the quote — I want to move forward, but I need to line-item a few things first. Specifically, [line 1] looks about [X]% above what I'm seeing for [your zip code], and [line 2] seems to include a markup on the permit fees, which I'd expect to be passed through at cost. Can we talk through those two items? If we can get them closer to market, I'm ready to sign."
This works because it: (1) signals you're serious and ready to sign, (2) is specific enough that the contractor can't wave it off, (3) gives them a face-saving out ("oh yeah, let me check that line"), (4) anchors the conversation on a couple of items rather than demanding a blanket discount.
When to skip the 5-minute test
If the total quote is over $30,000, skip the self-check and get one more quote regardless. The stakes are too high to trust an eyeball. If it's under $3,000, the savings aren't worth the time — just pay it.
Want a 30-second version of this check?
We built MarkupAlert exactly to do the 5-minute test in 30 seconds. Paste your contractor quote and your zip code, and you get a line-by-line verdict, flagged items, and a pushback script personalized to your specific quote. One-time $9.99, no account, no subscription.
Ready for a verdict on your own situation?
MarkupAlert gives you a specific, dollar-amount analysis tailored to you in about 30 seconds. One-time $9.99, no account, no subscription.
Check This Quote — $9.99