Two Quotes for a Website or App: How to Tell Which Is Fair
When two quotes for the same software are far apart, they may be pricing different jobs. Five checks put them on the same footing before you pay, plus a prompt to hand your AI with both quotes.
Two quotes stand as stacks of blocks. Quote B has four blocks: the site, hosting, a year of fixes and the code. Quote A has one block, with three faint red slots above it marked not stated, so it is as tall as B once the gaps are shown. The three missing blocks fall off and land at the feet of the person choosing, labelled lands on you.
Contents
Two quotes for the same website or app can sit 2 times apart because they price different jobs: one includes hosting, a year of fixes and the code, and the other includes none of that and looks cheaper. Which one is fair? Five checks put them on the same footing before you pay, and then the real gap shows.
Why I wrote this
I read 601,111 opening messages that people sent to ChatGPT, from a public research dataset [1], looking for the moment someone decides to pay for something. 615 of the messages were that kind of decision. When a person named what would decide it, price came first, in 48% of them. Among the people deciding whether to hire someone, the same request kept coming back: here are two quotes, which one, and what should I offer? [2]
Below are three of those situations, paraphrased with the details changed:
- A shop owner has two quotes to build a business site. One is more than twice the other, and the pricier firm keeps calling for a decision.
- A founder asks what it should cost to have a developer build a website for a small business, before asking anyone.
- An operator weighs a vendor's fee against what they can spend, and wants to know what to counter with.
Few said what worried them: only 6% of the 615 did. The worry shows up later, after the money is gone.
A grey stream labelled 601,111 first messages pours into a gold pan and fills it. The pan rocks, and the grey washes over its rims and away, leaving a heap of 615 small dark nuggets, labelled 615 were a decision to pay. A few dozen of the nuggets turn red, labelled 6% said what worried them.
The five checks
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.
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. A fixed price puts the risk of overruns on the builder. Time and materials puts it on you, so it needs a ceiling.
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, because a cheaper quote can move these costs back onto you once the work has started and you can no longer walk away easily.
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 [3]. Otherwise the person who wrote it is its author. 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, such as a first version you can click through, then the launch, then the end of the support period, so that each payment buys something you have checked. Be careful with a quote that wants most of the money before you've seen anything run.
A balance scale holds two quotes as stacks of blocks. Quote A starts with one block and quote B with four, so B's side sits low and A looks cheaper. Five red blocks, numbered for the five checks, drop in one at a time: three land on A and two on B. The beam swings, goes level after check 4, and ends tipped slightly toward B, labelled the real gap.
A prompt for your AI
People already paste quotes into an AI and ask which is better. Ask it to do 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. Usually the gaps are what you need to ask about, not the prices.
Two quote sheets drop their lines into a sorting rack with one column per quote and a row for each thing to compare: deliverables, line items, fixed or hourly, excluded, who owns the code, payments. Three cubbies stay empty and turn red, labelled not stated. Each empty cubby sends a red card into an envelope: two to ask firm A, one to ask firm B.
What I expect, and how I'll check
Will people who are holding two quotes find this page? I've sealed a prediction for it. 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.
Three empty glass tubes stand in a row, labelled agent visits, ChatGPT referrals and emails. A green line drops onto each: median post on the first two, at least 1 on emails. A card goes into an envelope and a green seal presses it shut, pinning the three lines in place. Under the envelope, 14 empty dots count the days to 2026-10-31. The tubes stay empty, because the results are not in yet.
How I counted
The dataset is real conversations people chose to share with researchers in return for free access, not a sample of business owners. 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 had labelled by hand [2]. 615 is a floor: the filter misses phrasings it doesn't know. One person checked the labels: me.
On the left, 70 messages pour into a small pan with holes, 7 of them real decisions to pay. When it is shaken, all 63 others wash away and one of the 7 slips through a hole, labelled hand check of 70: 6 of 7 found, none false. On the right, the real run pours into a big pan with the same holes. 615 stay in the pan, labelled 615 is a floor, and some slip through and land in red heaps beneath it, labelled missed, not counted.
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.
Sources
- WildChat-4.8M, Allen Institute for AI. Real conversations with ChatGPT, released for research under ODC-BY. Read 2026-10-17: 952,127 English first messages, 601,111 unique. huggingface.co/datasets/allenai/WildChat-4.8M
- The study design follows OpenAI's own classification of ChatGPT use, which has a "Purchasable Products" category (Chatterji et al., "How People Use ChatGPT", NBER Working Paper 34255, 2025). The filter, labels and hand-checked sets are my own, run 2026-10-17 for about $2. www.nber.org/papers/w34255
- U.S. Copyright Office, Circular 30, "Works Made for Hire": a commissioned work is made for hire only if it falls in one of nine categories and a signed written agreement says so. www.copyright.gov/circs/circ30.pdf