Your bids
Won can be 1/0, won/lost, yes/no, accepted/declined. Leave out bids still pending. Markup means (quote − cost) ÷ cost. With a cost on every row the curve is about markup and works across job sizes; without it the tool uses raw prices and is only as good as your jobs are similar. Rows are read in the order given (oldest first) so the back-test can score your most recent bids. At least 30 bids with 8 wins and 8 losses, at four or more different markups.
Upload or paste your bids, then click Analyse.
Result
Win chance by markup
What a price change would do
Around your usual quote, from the fitted curve. Rows marked "outside" are beyond the markups you have quoted: read them as a guess, not a result.
| Change | Quote | Win chance | Expected profit per bid |
|---|
By job type
| Job type | Bids | Won | Your usual markup | Best markup | 80% range | Profit gain per bid |
|---|
Back-test
How it is calculated
Model: P(win) = 1 ÷ (1 + e^−(a + b × x)), where x is ln(quote ÷ cost) when every bid has a cost, else ln(quote). Fitted by Newton-Raphson on the log-likelihood with a tiny ridge so perfectly separated data cannot push the slope to infinity; the 95% interval uses the inverse Hessian. Best quote: expected profit per bid is (quote − cost) × P(win), searched on a fine grid only between the lowest and highest markup in your data. The 80% ranges and the chance the best quote beats your usual one come from 300 seeded bootstrap resamples (wins and losses resampled separately), so a result is reproducible. Back-test: the first 75% of rows fit the model, the last 25% are scored by log-loss against simply assuming your overall win rate.
Not modelled: who you bid against, how quickly you replied, your reputation, job type, repeat customers, scope changes after the win, or the cost of preparing each bid. Quotes are not random, so this is correlation, not an experiment. Unverified: checked against simulated bids with known curves in unit tests, not against a published dataset or a commercial tool.
Common questions
What is a bid win rate?
It is the share of your quotes that customers accept. If you quote 50 jobs and win 20, your win rate is 40%. The useful question is how that rate changes with price: a 10% higher quote usually wins less often, and this tool measures how much less from your own history.
How do I find the best price to quote?
Expected profit per bid is your profit if you win multiplied by the chance you win. A higher quote earns more when it wins but wins less often, so there is a sweet spot. This tool fits your win chance as a function of your markup with a logistic curve and finds the markup where expected profit is highest, searching only inside the markups you have actually quoted.
Why does it ask for my cost on each job?
Because a $3,000 job and a $30,000 job are not comparable by price alone. Dividing each quote by your cost gives the markup, which is what a customer is really weighing against other bids. With costs the curve is about markup and works across job sizes. Without them it uses raw prices and warns you when your jobs vary a lot in size.
How many bids do I need?
At least 30 bids with a result, at least 8 wins and 8 losses, and quotes that vary: four or more distinct markup levels with a typical spread of about 3% or more. If you always quote the same markup, nothing in your history can say what would happen at another, so the tool refuses instead of guessing. More is better: 100 bids give a much tighter answer than 30.
Why might the result be wrong?
Quotes are not random. If you bid higher on easy repeat customers and lower on competitive tenders, the curve mixes job type with price and can even slope the wrong way; the tool flags that. It also cannot see who you bid against, how fast you answered, or your reputation. Treat the answer as a hypothesis for a small, reversible change in your markup, not a number to bet the business on.
What counts as a win?
Whatever you choose: accepted, awarded, booked or signed. Use 1 or 0, or words such as won, lost, yes, no, accepted, declined. Bids still pending should be left out, and quotes that got no reply are best counted as lost only if you would not expect one any more.
Is my bid history uploaded anywhere?
No. The file is read and analysed in this browser tab. Nothing is sent to a server, there are no accounts or cookies, and the tool never stores your bids. It works offline once the page has loaded.