How to Price a Fixed-Fee Project Using Real Data Instead of a Feeling
Fixed-fee projects fail when you quote from instinct and track nothing. Here is how to build a number you can actually defend.
Fixed-fee pricing feels clean. One number, one deliverable, done.
It is also where freelancers lose the most money, because the number usually comes from instinct, not information.
You think about a similar project you did before. You guess it took around this long. You round to a number that feels competitive. You send the proposal.
Then the project takes 40 percent longer than you expected and you absorb the difference because the price is already agreed.
This is not a pricing philosophy problem. It is a data problem.
What You Need Before You Price
You need hours data from past projects that are actually similar to the one you are quoting.
Not a general sense of how long things take. Specific logged hours, broken down by task type, from projects with a similar scope.
If you have been tracking time by task category, you can pull this. If you have not, you are quoting from memory, which is unreliable and gets worse the busier you are.
Time-Trak stores your completed project data. Pull the reports for two or three comparable projects. Look at total hours and how they broke down across phases.
Build the Estimate Phase by Phase
Do not estimate the whole project at once. Estimate each phase separately.
For a typical client project, that might look like: discovery and briefing, strategy or planning, production, revisions, delivery and handoff.
For each phase, look at what that phase cost you in hours on past projects. Apply a buffer to each phase rather than a single buffer at the end. Problems tend to cluster in specific phases, not spread evenly.
When you add the phases up, you have an hourly estimate grounded in actual performance.
Translating Hours to a Fixed Fee
Multiply your total estimated hours by your rate. That is your floor.
Your fixed-fee quote should sit above your floor, not at it. The premium accounts for the risk you are absorbing by agreeing to a fixed price. You are taking on the downside if the project runs long. That has a value.
How much above the floor depends on how well-scoped the project is. A tight brief with clear deliverables and a decisive client warrants a smaller premium. A vague brief with a committee approval process warrants a larger one.
What to Do When the Estimate Feels Too High
Do not round down because the number makes you uncomfortable.
If your honest estimate is $6,200 and you quote $4,800 to stay competitive, you have already made a decision to undervalue your work before the client has said a word.
Instead, look at the scope. Is there something you can remove to bring the price down to a number that still covers your actual cost? Can you reduce revision rounds, limit the discovery phase, or deliver in phases with separate fees?
That conversation is better than absorbing the gap silently.
The Revision Clause Is Part of the Price
Fixed-fee projects blow up most often on revisions.
Your time logs from past projects will tell you how many revision hours you actually spent versus what you scoped. If revisions consistently run long, your scope language is the problem and your price is paying for it.
Define what a revision round includes before you send the proposal. Log revision time separately during the project. When the next quote comes around, you will have real data on what revisions cost you.
The Habit That Changes Everything
After every fixed-fee project closes, compare your estimated hours to your actual hours by phase.
One project gives you a data point. Ten projects give you reliable patterns. Those patterns are what separate freelancers who quote confidently from freelancers who cross their fingers and hope the invoice clears.
Your past projects are your pricing research. Use them.
Track your time, bill every minute.
Time-Trak is a native Mac and Windows time tracker with a floating timer, automatic screenshots, and one-click invoicing.
Free during beta.
Download Time-Trak →macOS + Windows · Floating widget · Auto screenshots