How to Price Agency Services Without Underselling Yourself
A practical look at hourly, retainer, and project pricing for agencies, and how to decide which one fits a given client.
Ask five agency owners how they price a project and you'll get five different answers, and most of them will be right — for that agency, that client, and that kind of work. The mistake isn't picking the "wrong" model. It's using the same model for every client regardless of what the engagement actually looks like.
The three models, and what each one is actually for
Hourly is the right tool when the work itself is undefined. If a client comes to you with "we need help, not sure exactly what with yet," hourly protects you — you get paid for the hours the fuzziness costs you, instead of absorbing that cost into a fixed quote you guessed at. Its weakness is that it caps your upside: get faster and more efficient at a task, and your revenue on that task goes down, not up.
Project-based (fixed-fee) pricing works when the scope can actually be written down — a website rebuild, a rebrand, a defined campaign with a clear start and end. The client gets price certainty, and you get to profit from your own efficiency instead of being penalized for it. The catch is entirely in the word "defined" — a fixed-fee project with a vague scope document is just hourly work you're not getting paid hourly for.
Retainers fit an ongoing relationship where the value is availability and continuity, not a single deliverable — ongoing social management, fractional marketing support, an always-on design resource. You're pricing "we're here and ready," and the client is paying for predictable access to your team, not a specific output count.
Where scope creep actually shows up in each model
Scope creep doesn't hit every pricing model the same way, which is exactly why picking the right one for the situation matters more than picking the "best" one in the abstract.
- Hourly absorbs scope creep by design — more work is more hours, billed as they happen. The risk isn't budget blowout, it's the client's surprise at the final number if you're not communicating running totals along the way.
- Fixed-fee is where scope creep actually hurts, because every unbilled extra directly eats your margin. The fix isn't better pricing — it's a scope document specific enough that "is this in or out" has an obvious answer, and a clear, unapologetic path to a paid change order when the answer is "out." Agencies that dread having that conversation tend to be the ones who wrote a vague scope in the first place.
- Retainers handle creep the best, structurally — because the engagement is priced around a bucket of hours or a defined set of deliverables per month, not a fixed outcome. The risk here is quieter: retainer scope tends to expand gradually until the bucket is consistently over capacity, and nobody notices until the team is burned out. That's a monthly-review problem, not a contract problem.
A practical way to decide
Rather than a philosophy of pricing, a decision that holds up client to client:
- New client, undefined work, first engagement → hourly, or a capped project fee with a generous buffer. You don't yet know how this client behaves — how many rounds of feedback they'll want, how decisive their stakeholders are — and hourly (or a cap) protects you while you learn that.
- Defined, one-off deliverable with a clear finish line → fixed project fee, backed by a scope document specific enough to point back to.
- Ongoing relationship, recurring need, the client wants you "on call" → retainer, with an explicit monthly capacity so both sides know what "on call" actually includes.
- A long-standing client whose needs have outgrown the original agreement → it's fine, and often overdue, to renegotiate the model itself, not just the number. A client who started as a one-off project six months ago and is now a de facto retainer relationship should usually be priced like one.
Where pricing decisions actually get lost
The quieter failure mode isn't picking the wrong model — it's picking the right one and then losing track of it as the engagement evolves. A retainer's included hours creep past capacity for three months before anyone runs the math. A fixed-fee project absorbs "one more small thing" four times without a change order. This is less a pricing problem than a visibility problem: if hours, deliverables, and invoices for a client live in one place instead of scattered across a time tracker, a spreadsheet, and email threads, it's much easier to notice a retainer running hot or a fixed-fee project quietly bleeding margin before it's a real loss. See invoicing best practices for agencies for how to keep that connection tight once the pricing model is set.
Pricing is also a conversation that starts at kickoff, not after — see how to onboard a new client for where scope and cadence get set in the first place, and what an agency CRM actually does if the underlying issue is that you can't see this information clearly enough to price against it in the first place.
Next steps
See how Sarion brings this into practice: explore features, see the client portal, or check plans. Or just start from the homepage.

