Back to blog
Publishedretainer vs hourly vs fixed price, freelance billing models, freelance pricing models

Retainer vs Fixed Price vs Hourly: How Freelancers Choose a Billing Model

Three clients. Three quotes. One wallet.

Client A wants a "quick" landing page — two pages, an about section, a contact form. You quote a flat $2,000.

Client B wants you to untangle a Django app that three other freelancers have already patched. You can't estimate that in your sleep, so you quote $85/hour.

Client C wants you "on call" for their marketing team — emails, small tweaks, the occasional Slack ping. A retainer feels right: $1,500/month for a defined chunk of their workload.

Same skills, same week, three billing models. And the model you pick quietly decides whether you end the year at $40/hour or $120/hour — because each one changes what you're selling, what risk you carry, and what the client expects from you.

Here's how to actually choose. Not a wishy-washy "it depends" — a decision guide with a comparison table, the scope creep trap that makes fixed price the most dangerous of the three, and a hybrid model that covers the gaps.

The three models, one sentence each

  • Hourly — you sell time. Every hour you work, you bill, at an agreed rate.
  • Fixed price — you sell an outcome. A defined set of deliverables for one price, no matter how many hours it takes.
  • Retainer — you sell availability. A block of hours or services each month, for work that never really ends.

The comparison table

HourlyFixed priceRetainer
Best forUnknowable scope: debugging, maintenance, consultingWell-defined deliverables: websites, logos, sprintsOngoing work: content, support, ops
Cash flowSteady but tied to effort; thin weeks hit hardBig check up front, then nothing until deliveryPredictable monthly income, no pitching
Main riskIncome capped by the hours you can sellScope creep quietly eats your marginClient treats it as unlimited support
Client perception"The meter is running" — can feel nickel-and-dimedPrice certainty, zero surpriseA partner — but easy to over-request from
What you must trackTime, religiouslyScope changes, religiouslyHours *and* scope, religiously

Hourly: the model that caps your income

Hourly feels safe because it's honest. The client pays for what you actually do, and you never swallow unbilled work the way fixed-price freelancers do. The problem is the ceiling.

Your income is hours × rate, and hours are capped. Bill a realistic 25 hours a week — the other 15 go to pitching, admin, and "quick calls" — and you're at roughly 1,300 billable hours a year. At $60/hour, that's $78,000 gross, before taxes, software, and the months when the pipeline is empty. To earn more, you either sell more hours (there aren't more) or raise the rate (there's a market limit). That's the entire ceiling, and no amount of hustle moves it.

Hourly genuinely makes sense when scope is unknowable:

  • Debugging code you've never seen. "Find out what's wrong" has no deliverable list, so a fixed quote is a guess.
  • Maintenance work, where the work *is* interruptions. You can't scope "whatever breaks this month."
  • Consulting, where the client wants flexibility and your judgment, not a finished artifact.

But hourly has its own quiet leak: the quick question that never gets tracked. Ten five-minute Slack messages a week is a billable hour that never lands on an invoice. And clients watching a meter run tend to resent it — which is why hourly relationships can feel more adversarial than fixed ones, even when everyone's getting a fair deal.

Fixed price: the best margin you'll ever quote — and the riskiest

Fixed price pays you for outcomes. The client isn't buying your 60 hours; they're buying a finished website. When it works, it's the best deal in freelancing: quote $2,000, finish in 30 hours, and your effective rate is $67/hour — nobody watching the clock, nobody auditing your time.

The catch is scope creep, and it isn't hypothetical. Take a $2,000, 5-page website:

  • "Can you also make a pricing page?" — 3 hours
  • "Could we do an animated logo instead of the static one?" — 2 hours
  • "Just one more revision round, to get it *perfect*" — 4 hours
  • "Can you show me how to use the CMS? A quick call?" — 4.5 hours

That's 13.5 hours of work that was never quoted. At $50/hour, it's $640 of margin you quietly donate — a 32% pay cut on the project, purely because the extras were never written down. (This is the exact scenario from What Is Scope Creep?, and it plays out thousands of times a week.)

The fix isn't refusing the work. It's hedging — five habits that turn fixed price from a gamble into an edge:

  1. Write the baseline before work starts. Deliverables, revision rounds, exclusions — in writing, before the first draft. The Scope Baseline Template takes ten minutes and converts "I thought that was included" into "let's check the baseline."
  2. State the add-on rate in the quote. "2 revision rounds included; round 3+ billed at $50/hour." You may never use it. You need it to exist.
  3. Log every add-on the moment it's requested. Thirty seconds, before you answer the message. Memory is the weakest link in scope management.
  4. Show the client the gap instead of arguing about it. A side-by-side of agreed vs added turns a memory argument into a math problem — and the client usually approves the extras without a fight.
  5. Bill extras as a change order, not an apology. A clean add-on invoice is a process, not a confrontation. That's exactly what ScopeGuard automates, and you can sanity-check the add-on math free in the Scope Creep Calculator.

Retainer: steady money, drifting scope

A retainer smooths the biggest pain in freelancing: income whiplash. $1,500 a month, twelve months a year, no pitching — that's $18,000 you can budget around before you write a single line of work.

The danger is the drift. A retainer client starts treating you like an employee without the employment contract. The "quick question" becomes a weekly 30-minute call. The "small tweak" becomes a new landing page. Before long you're doing 25 hours of work for the 10 hours they're paying for — which quietly turns your retainer into an hourly job with worse tracking and no invoice for the difference.

Healthy retainers run on explicit boundaries:

  • A defined hours bank. "10 hours per month," not "as needed."
  • A written in-scope list. "Email templates and social graphics: yes. New landing pages: no."
  • A rollover policy. "Unused hours expire at month end" — or roll one month. Pick one and write it down.
  • An overflow rate. Hours beyond the bank bill at your stated hourly rate, logged the same way you'd log a change order.
  • A quarterly review. The price goes up when the workload does. A retainer that never changes price is a discount that slowly widens.

How to choose: three questions

  1. Can you name the deliverables on day one? Yes → fixed price. No → hourly, or a fixed-price discovery phase before you quote the build.
  2. Does the client need price certainty? Yes → fixed price or retainer. Hourly makes budget-holders nervous and turns every week into a mini-negotiation.
  3. Does the work end, or does it keep going? Ends → fixed price. Keeps going → retainer.
Project typeRecommended model
Website or app redesign with a clear briefFixed price + change orders
Bug fixing on code you've never seenHourly
Monthly content, social, or email productionRetainer
Design sprint with a fixed outcomeFixed price
Ongoing dev ops / supportRetainer + hourly overflow

The hybrid playbook: fixed core, hourly changes

The best of all three isn't a fourth model — it's a combination:

  • Fixed price for the core. Quote the deliverables as a package. That's what you sell.
  • An agreed add-on rate for everything else. Put the number in the quote: $50/hour, or $80 per extra revision round. Published before the project starts.
  • Log extras as they land. The moment the client asks, log it — hours, cost, running total. No memory, no surprises.
  • Send one clean add-on invoice. Not a "hey, also…" message. A proper change-order invoice the client can see line by line.

This is the model ScopeGuard is built for: the baseline holds the fixed price, every add-on is logged in 30 seconds, the Creep Meter shows the running overrun percentage, and the client sees agreed-vs-added on a read-only link before any invoice arrives. The mechanics are documented in the docs, and if you want the full pricing picture it's on the pricing page.

The bottom line

  • Hourly pays you for effort and caps your income.
  • Fixed price pays you for outcomes and punishes invisible scope creep.
  • Retainer pays you for availability and drifts toward free labor without boundaries.

The model matters less than the system around it. Any of the three works if you write the baseline, log every change, and show the client the math as it happens — that discipline is worth more than the choice itself. Before you lock in your next billing model, check where your current projects actually stand with the free Scope Creep Calculator. Knowing your real overrun percentage is the first step to billing like you mean it.


*Related: What Is Scope Creep? · The Scope Baseline Template · The Creep Meter: The True Cost of Every Client Add-On · How to Invoice for Extra Work: A Freelancer's Guide to Change Orders*

Keep reading