We had been undercharging for three years. Not slightly — structurally. Our average contract was $840/month for a product that saved ops teams 15+ hours a week. Customers told us we were a bargain. That should have been a warning, not a compliment.
In March, we raised prices 40% on new customers and gave existing ones 90 days before the increase hit. Within six months, revenue doubled. We also lost 34% of our customer base.
Both numbers are true. Both matter. I’m writing this because most pricing advice treats these outcomes as either/or — raise prices and grow, or keep prices and retain. The reality for a bootstrapped B2B company is messier.
The setup: why we waited too long
RelayOps started at $299/month because I was afraid of saying no to early adopters. Every founder knows this trap. You discount for the logo, then for the next logo, then you wake up with 200 customers paying three different rates for the same product.
By year three, our net revenue retention was 108% — decent, but inflated by a handful of accounts that had grown into enterprise tiers while our core SMB base stayed flat. Support costs per customer were rising. We were profitable on paper and stretched in practice.
We ran cohort analysis for two months before pulling the trigger. Customers below $600/month had 2.3x the support ticket rate of those above $1,200. They also had the highest churn. We weren’t serving them well, and they weren’t paying enough for us to fix that.
What happened in the first 90 days
New sales slowed for six weeks. Not stopped — slowed. Prospects who would have signed at the old price ghosted. Our close rate dropped from 28% to 19%. I kept a spreadsheet of every lost deal and the reason. “Too expensive” appeared in 41% of them. “Need to check with finance” appeared in 22%. The rest were timing.
Existing customers reacted in three buckets:
- Upgraded or stayed quietly (54%) — mostly mid-market accounts who already saw the value.
- Renegotiated or downgraded (12%) — we offered annual prepay at the old rate for some; not all took it.
- Churned (34%) — concentrated in our smallest accounts, under 10 seats.
The math we should have run earlier
We modeled revenue impact but underweighted support and success costs. A customer paying $400/month who generates 8 tickets a month isn’t the same as one paying $1,400 who generates 2.
After the change, our gross margin per customer improved by 18 points. Support headcount stayed flat while revenue grew. That was the real win — not the headline ARR number.
The pre-pricing checklist we use now
- Segment customers by support cost, not just ARR
- Model churn at 20%, 30%, and 40% — can you still hire and invest?
- Give existing customers a clear timeline, not a surprise invoice
- Prepare sales with objection handling for the first 8 weeks
- Define which accounts you'll fight for vs. let go
What I’d do differently
I’d raise prices sooner and in smaller steps. A 40% jump is defensible when you’re clearly underpriced, but it creates a narrative — “they jacked up prices” — that’s hard to undo in customer minds.
I’d also productize the downgrade path. We scrambled to create a lite tier when churn spiked. It worked, but six months late.
Nine months out
We’re at 2.1x revenue with 66% of the original customer count. NRR is 112%. Sales cycle lengthened by about two weeks but average contract value is up 52%. The business is healthier. Some of the people who left were founders I liked personally, and that part doesn’t get easier.
Pricing isn’t a spreadsheet exercise. It’s a statement about who you’re for. We finally said we’re for ops teams who will pay for reliability — not for everyone with a credit card.