The cheaper quote is cheaper the way a plane ticket is cheap

You can pay for a website and not own it. Like buying a house where the architect keeps the bricks.

By Mackenzie Bowes · mackenzie@mackenziebowes.com · @_mackenziebowes on X

The cheaper quote is often a shorter stack, and the missing blocks land on you after you sign.
Contents

You've got two quotes for the same website or app. One is more than twice the other. The expensive firm keeps calling - cheerful, patient, relentless - while the cheap one sits quietly in your inbox, radiating affordability.

Here's the uncomfortable part: both quotes might be honest. They're just pricing different jobs. One includes hosting, a year of fixes, and the actual code. The other includes none of that, and looks like a bargain because the missing parts are invisible until you've signed - and then they land on you, one at a time, like a series of small invoices shaped like surprises.

Two quotes for the same website or app can sit 2 times apart because they price different jobs. Which one is fair? Five checks put them on the same footing before you pay - and then the real gap shows. Sometimes it's much smaller than the sticker gap. Sometimes it points the other way entirely.

Why I wrote this

I read 601,111 opening messages that people sent to ChatGPT, from a public research dataset, looking for the moment someone decides to pay for something. 615 of those messages were exactly that. When the person named what would decide it, price came first, in 48% of them. And among the people deciding whether to hire someone, one request kept coming back like a recurring dream: here are two quotes, which one, and what should I offer?

Three of those situations, paraphrased with the details changed:

Here's the detail that got me: only 6% of those 615 people said what worried them. Nobody writes "I'm afraid the cheap one is cheap for a reason, and I'll find out which reason in month three." The worry shows up later, after the money is gone.

Out of 601,111 first messages, 615 were someone deciding to pay, and few of them said what worried them.

The five checks

Think of each check as putting a missing block back on the shorter stack.

1. Is it the same scope? Ask each firm for a written list of what you get: pages, features, the systems it connects to, who writes the words, how many rounds of changes. Then ask both to price the same list. Whatever gap is left is the real one. This check does the most work - a 2x gap often collapses to almost nothing here, or flips.

2. Is it broken into lines? One number hides how it was built. Ask for line items with hours and a rate, or a price per piece. Also ask which kind of quote it is, because there are two kinds: a fixed price puts the risk of overruns on the builder; time and materials puts it on you, so it needs a ceiling. Time and materials with no ceiling isn't a pricing model, it's a subscription to your wallet.

3. What isn't included? The usual gaps are hosting, the domain, email, paid plugins or app store fees, content, photos, a support period after launch, and changes after sign-off. Ask each firm to list what it won't do - good firms can. A cheaper quote can quietly move these costs back onto you once the work has started and walking away has gotten expensive.

4. Who will own the code? In the US, custom software made by a contractor is a "work made for hire" only in narrow cases, and only with a signed written agreement that says so. Otherwise the person who wrote it is its author. You can pay for a website and not own it - like buying a house where the architect keeps the bricks. If you want to own it, the contract has to give it to you in writing.

5. How do you pay? Tie payments to things you can see working: a first version you can click through, then the launch, then the end of the support period, so each payment buys something you've checked. Be careful with a quote that wants most of the money before you've seen anything run. That's not a milestone, it's a leap of faith with an invoice attached.

Each check puts back a cost one quote left out. The tilt left after all five is the real gap. Which quote each check lands on is an example.

A prompt for your AI

People already paste quotes into an AI and ask which is better. That's asking it to judge the sticker. Ask it to run the checks instead:

Here are two quotes for the same project. For each one, list: the deliverables, the line items with hours and rates, fixed price or time and materials, what is excluded, who owns the code, and the payment schedule. Mark anything a quote doesn't say as "not stated". Then show the costs only for the work both quotes cover, and list the questions I should send each firm before I choose.

"Not stated" is the useful part. The prices were never the interesting bit - the empty rows are. Two quotes that look 2x apart are often the same quote, one of them with half its clothes on.

Ask the AI to sort both quotes into the same rows. The empty cubbies are the questions to send each firm.

What I expect, and how I'll check

Will people holding two quotes find this page? I've sealed a prediction: in the 14 days to 2026-10-31, it will get more visits from AI agents and more ChatGPT referrals than the median post on this site, and at least one email will mention it. I count agents and referrals at the edge with my own counter, which keeps totals and no IP addresses. I'll post the result here either way - sealed predictions are the only honest kind, mostly because I can't cheat without everyone seeing the seal.

The lines to beat were drawn and sealed before any visits came in. The tubes fill by 2026-10-31, and I'll post the result either way.

How I counted (the honesty section)

The dataset is real conversations people chose to share with researchers in return for free access - not a sample of business owners, so take the shape of the findings as the signal, not the exact proportions. A keyword filter picked 10,845 candidates. A model labelled each one, after it found 6 of 7 spend decisions with no false alarms in 70 messages I'd labelled by hand. 615 is a floor: the filter misses phrasings it doesn't know. One person checked the labels: me. I'm reasonably careful, but I'm one person and I wrote this post, so consider me a witness with a stake in the case.

The filter loses decisions it doesn't recognise and, in the hand check, added no false ones. A pan that only leaks holds too few, so 615 is a floor.

If you're holding two quotes for a website or app right now, I'd like to see where they differ. Send them along with what you're trying to build. I'll tell you which rows come back "not stated" - and that's usually the whole answer.

Where the facts come from