I learned about revenue concentration risk the hard way. Here’s my story and the Beancount solution I built afterward.
The Crisis I Didn’t See Coming
My bookkeeping practice served 12 clients. Everything felt stable:
- 2 largest clients: ,500/month each = ,000 total
- Other 10 clients: ~00/month average = ,000 total
- Total monthly revenue: 0,000
The math: My top 2 clients = 50% of my revenue.
But I didn’t think about it as “concentration risk.” I thought: “Great! Two stable clients for 2+ years.”
Then Disaster Struck
Month 1: Client A (SaaS startup) ran out of funding. Shut down operations. Gave me 30 days notice.
Month 2: Client B got acquired. New parent company has in-house bookkeeping. Gave me 60 days notice.
Within 90 days: Lost 50% of revenue (0k → k monthly)
Suddenly I couldn’t cover: rent, software subscriptions, healthcare, living expenses.
I scrambled to find new clients, but quality clients take 3-6 months to close.
I had to dip into savings, cut personal expenses, panic.
The Realization: I Should’ve Seen This Coming
Revenue concentration risk was invisible until it became a crisis.
If I’d been tracking this metric, I would’ve known I was vulnerable and started diversifying earlier.
The Beancount Solution I Built
I now track revenue concentration with these queries:
1. Revenue by client as % of total:
SELECT
tag AS client,
SUM(amount) AS revenue,
SUM(amount) / (SELECT SUM(amount) FROM Income) * 100 AS pct
WHERE account = 'Income:Services'
AND tag ~ '@client:.*'
GROUP BY tag
ORDER BY revenue DESC
2. Alert thresholds:
Yellow flag: Any client >25% of revenue (moderate risk)
Red flag: Any client >33% of revenue (high risk)
3. Survival metrics:
- If top client leaves, how many months can I survive on savings?
4. Scenario modeling:
- Baseline: Current revenue continues
- Optimistic: Grow 15%
- Pessimistic: Lose top client (-30% revenue)
- Disaster: Lose top 2 clients (-50% revenue)
5. Recovery planning:
- Need X new clients at monthly to replace concentrated revenue
The Lesson
Concentration risk was invisible until it hit. Now I actively monitor and proactively diversify.
My new target: 15 clients × ,000 average instead of 5 clients × ,500
More work to manage 15 relationships, but much less vulnerable to sudden loss.
Questions for the Community
-
How do you balance serving great clients with diversification needs?
-
What’s an acceptable concentration threshold? (I’m using 25% now)
-
How do you track this in Beancount? (Tags? Metadata? Queries?)
For those running consulting, bookkeeping, or service businesses: How do you think about client concentration risk?