Business · Agency Management
When (and How) to Fire a Client: An Agency Playbook
Most agencies tolerate a bad client relationship for months longer than they should because nobody has a framework for the decision. Here's how to recognize when a client is no longer worth keeping, and how to end the relationship without burning your reputation.
Anurag Verma
5 min read
Sponsored
Every agency owner has kept a client too long. The invoice pays, eventually, so it never quite crosses the line into an obvious problem. The team complains, but quietly, so it never quite becomes a fire drill. Then six months later you do the math on what that account actually cost in senior time, morale, and the better client you didn’t have capacity for, and the number is worse than you expected.
Firing a client is a decision most agencies make too late, if they make it deliberately at all. Here’s a framework for making it earlier and executing it cleanly.
The math that tells you it’s time
“This client is difficult” is a feeling. The decision to end a relationship should rest on something closer to a number.
Effective hourly rate on the account. Take total hours actually spent, including the unbilled scope creep, the extra revision rounds, and the internal meetings the account generates, and divide it into what you actually collected. A client at your standard rate on paper can easily be running at half that once every off-the-books hour is counted. If you’re not tracking this per account, start; it’s usually the single clearest signal.
Payment behavior over time, not one late invoice. One slow payment is a cash flow hiccup. A pattern of invoices that only get paid after a second or third follow-up is a client telling you where you rank in their priorities, and it rarely improves without a structural change like moving to upfront billing or shorter payment terms.
Who asks to come off the account. If the same one or two team members keep finding reasons to avoid a project, or your best people specifically request reassignment, that’s a more honest signal than anything in the contract. Teams tolerate hard technical work. They don’t tolerate being treated badly for long, and the ones with options will act on it before you notice a pattern in the invoices.
Whether the same problem repeats at every stage. A client who pushed hard on one estimate isn’t a red flag. A client who pushes hard on every estimate, disputes every invoice, and reopens every “final” decision is showing you the shape of the relationship, not having an off week.
Give it one real conversation first
Before ending anything, have a direct conversation naming the specific pattern, not a vague “things haven’t been working.” Concrete beats general: “the last three invoices were paid 40+ days late against 15-day terms” lands differently than “we’ve had some payment issues.” Bring the numbers.
This step matters for two reasons. Some relationships genuinely improve once the client understands the pattern is being tracked and named, not just felt. And for the ones that don’t improve, you now have a documented, specific conversation to point to if the client disputes the exit later, which protects you against the accusation that you ended things arbitrarily.
Skip this step and you lose both outcomes: agencies that jump straight to termination lose salvageable accounts they never gave a fair chance to fix, and they lose the clean documentation trail that makes a harder exit defensible.
How to actually end it
Once the decision is made, execute it as a business process, not an emotional exit.
Put it in writing, separate from the reason. Send a formal notice referencing the relevant contract terms (notice period, termination clauses), without re-litigating every grievance in the same email. State the effective end date and the handoff plan. Save the “here’s why this didn’t work” conversation, if you have one at all, for a call, not a paper trail that could surface somewhere unintended.
Give real notice, proportional to the relationship, not the least you can contractually get away with. Thirty to sixty days is standard for an underperforming-but-not-breaching client, enough time to hand off documentation and transition support without leaving them stranded mid-project. A client who’s actually breached the contract, through non-payment or abusive conduct toward your team, warrants shorter notice; check what your support and SLA terms actually specify before deciding.
Hand off cleanly even if the relationship soured. Deliver documentation, credentials, and a status summary as though you were handing to a colleague, not settling a score. This costs you almost nothing and it’s the single biggest factor in whether a former client badmouths you afterward. A clean handoff from an agency that “wasn’t the right fit” reads very differently in a reference call than a messy one from an agency that “burned us.”
Don’t announce it publicly, even when you’re right. The temptation to vent about a nightmare client on social media or in a case study is real and almost always a mistake. Prospective clients read that behavior as a risk signal about how you’d talk about them someday, not vindication for how hard the relationship was.
What this frees up
The reason this decision matters isn’t just avoiding a bad client, it’s what a freed-up seat lets you do instead. Every retained account with a 0.4x effective rate is capacity you can’t spend on a client at your real rate, and agencies chronically underestimate how much a genuinely bad account is costing them in opportunity, not just invoices. If you’re running retainer or SLA pricing across multiple accounts, this is worth checking quarterly: rank clients by effective hourly rate and payment reliability, and treat the bottom of that list as a decision to make, not a fact of agency life to tolerate.
The agencies that grow predictably aren’t the ones who never have a bad client. They’re the ones with a clear enough framework that a bad client gets identified in month three instead of month fourteen, and ended cleanly enough that the exit doesn’t cost them the next referral.
Frequently asked questions
- How do I know if a client is actually worth firing, not just difficult right now?
- Look at the pattern across the full engagement, not one bad sprint. A client who pushed back hard on one estimate but pays on time and respects scope decisions is a normal client having a normal disagreement. A client who does this on every project phase, invoice, and scope conversation is showing you the relationship, not a bad week.
- What's the actual cost of keeping a bad client?
- Beyond unpaid or late invoices, the real cost is usually team attrition (your best people ask off the account first), unbilled scope creep that erodes your effective hourly rate, and the opportunity cost of the capacity a better client could have used instead. Agencies that track effective hourly rate per account, not just per project, usually find their worst clients cost more than their invoices show.
- Should I give a difficult client a warning before ending the relationship?
- Yes, in almost every case. One structured conversation, naming the specific pattern and what needs to change, gives you either a genuinely improved relationship or a clean, documented reason for the exit that protects you if the client disputes it later. Skipping straight to termination without that conversation is how salvageable accounts get lost unnecessarily.
- How much notice should I give when ending a client relationship?
- Enough to hand off cleanly without leaving them stranded, typically 30 to 60 days depending on your contract terms and the complexity of what you're handing back. Shorter notice is defensible if the client has breached the contract (non-payment, abusive conduct); longer notice is the professional standard for an underperforming-but-not-breaching relationship.
Sponsored
More from this category
More from Business
R.01 IBM and OpenAI's Enterprise Deal: What It Means Beyond the Press Release
Arc.dev Alternatives in 2026: When a Curated Marketplace Is and Isn't the Answer
Braintrust Alternatives in 2026: What the No-Fee Model Actually Costs You
Sponsored
Discussion
Join the conversation.
Comments are powered by GitHub Discussions. Sign in with your GitHub account to leave a comment.
Sponsored