We were big fans of HighLevel.
Seriously. We recommended it to clients. We built entire onboarding systems inside it. We white-labeled it. We had sub-accounts for days. We were the agency that HighLevel was designed for.
Then one Tuesday morning, I sat down, opened HighLevel, and thought: I genuinely hate this platform.
Not a fleeting frustration. Not a “this feature is annoying” moment. A deep, settled realization that we’d been making excuses for this thing for over a year.
So we left. And we’re not going back.
The Honeymoon
Let me rewind. Because HighLevel doesn’t start bad. It starts great.
The pitch is intoxicating. One platform. CRM, email marketing, SMS, funnels, website builder, reputation management, calendars, pipelines, automations, invoicing. All in one place. White-label it, slap your brand on it, and resell it to your clients.
For an agency, that sounds like a dream. No more stitching together 9 different SaaS tools. No more explaining to clients why they need separate logins for email, CRM, and scheduling. One login. One bill. One platform.
We jumped in hard. Migrated clients. Built workflows. Trained the team. Went all-in.
For about three months, it felt like we’d found the answer.
Then the cracks started showing.
The First Red Flag: Everything Is Almost Good Enough
HighLevel doesn’t do anything terribly. That’s actually the problem.
The email builder? It works. But it’s not Mailchimp. It’s not even close to what you can do with custom HTML through something like Resend. The templates feel dated. The drag-and-drop editor fights you on basic layout things. You spend 30 minutes trying to get padding right when you could have written the HTML in 10.
The website builder? It exists. But it’s not Webflow. It’s not WordPress. It’s not even Carrd. It’s a funnel builder that pretends to be a website builder. Try building anything with real navigation, dynamic content, or custom interactions. You can’t.
The CRM? It tracks contacts and deals. But the pipeline views are rigid. Custom fields are clunky. Reporting is surface-level. You find yourself exporting to spreadsheets to get actual insights.
The calendar and scheduling? Fine for basic booking. But the moment you need complex availability rules, team scheduling, or integration with external calendars beyond Google and Outlook, you’re stuck.
Every single feature is a 6 out of 10. And when your entire business runs on a platform where everything is a 6, you end up with a business that operates at a 6.
We didn’t notice at first because the convenience of “all in one place” masked the mediocrity of each individual piece.
The Automation Trap
This is where it really fell apart for us.
HighLevel’s automation builder is the crown jewel of the platform. It’s what they demo. It’s what gets agencies excited. “Look, you can build an entire follow-up sequence with SMS, email, voicemail drops, and wait steps!”
And you can. You really can.
But here’s what they don’t show in the demo:
Debugging is a nightmare. When an automation breaks (and they break), you’re staring at a visual flowchart trying to figure out which branch fired, which condition failed, and why a contact got stuck in a wait step for three weeks. There are no real logs. No error messages. Just a flowchart and a prayer.
The logic is primitive. If-then. Wait. Branch. That’s about it. You can’t call external APIs mid-workflow without Zapier or a webhook hack. You can’t run custom logic. You can’t make a workflow that actually thinks about context before firing.
Scale kills it. We had a client with about 8,000 contacts in various automation sequences. The platform slowed to a crawl. Emails were delayed. SMS messages fired out of order. We opened support tickets and got “we’re working on it” for weeks.
The default templates are aggressive. HighLevel’s built-in automation templates are designed for a very specific type of marketing: high-pressure, high-volume, instant follow-up. Lead comes in, immediately hit them with a text, a call, an email, and a voicemail drop. All within minutes.
That’s not marketing. That’s carpet bombing.
We spent more time rewriting HighLevel’s default logic than building our own from scratch would have taken.
The Agency Model Problem
Here’s something nobody talks about: HighLevel’s business model creates incentives that don’t align with yours.
HighLevel is built for agencies to white-label and resell. That means the platform has to look impressive in a sales demo. It has to have a long feature list. It has to check every box on a prospect’s wishlist.
But “checks every box” and “does everything well” are very different things.
The platform is optimized for breadth, not depth. Every quarter there’s a new feature announcement. AI this, integration that. But the existing features? The ones you’re already using and struggling with? They stay at that stubborn 6 out of 10.
And the white-label model means you’re selling your clients a platform you don’t fully control. When HighLevel has downtime (and they do), your clients think your platform is down. When HighLevel changes something, your clients experience the change. When HighLevel’s support is slow, your clients are waiting too.
We were essentially building our reputation on someone else’s infrastructure. And that someone else had different priorities than we did.
The Migration That Should Have Been Easy
About 14 months in, we decided to move a major client off HighLevel and onto our custom stack. Should be straightforward, right? Export contacts, move the data, rebuild the workflows.
Wrong.
Data export is painful. You can export contacts, sure. But custom field mappings, workflow histories, conversation threads, pipeline stages with notes? You’re doing that manually or writing scripts to scrape it. HighLevel doesn’t make it easy to leave.
You don’t own your workflows. All those automations you built? They live inside HighLevel. There’s no “export my workflow logic” button. You’re screenshotting flowcharts and rebuilding from memory.
Client communication history is trapped. Every SMS, email, and call logged in HighLevel? Getting that out in a usable format is a project in itself.
We budgeted two days for the migration. It took two weeks. That’s when I realized how deep the lock-in actually was.
Every month we’d stayed on HighLevel made leaving harder. That’s not a feature. That’s a trap.
The Moment We Actually Left
The final straw was small. Almost embarrassing.
A client’s automation sent a promotional SMS to a contact who had explicitly asked to be removed from marketing messages. The opt-out had been logged in HighLevel. The automation should have respected it. It didn’t.
The contact was annoyed. The client was embarrassed. We were furious.
When we dug into it, we found the issue: the opt-out was recorded in one part of the system, but the automation was checking a different field. A data sync lag between HighLevel’s own internal systems meant the automation fired before the opt-out propagated.
It wasn’t a catastrophic failure. Nobody got sued. But it was the perfect encapsulation of everything wrong with the platform: features that look connected but aren’t actually talking to each other behind the scenes.
I called the team that afternoon. “We’re done. Start moving everything.”
What We Use Now
We didn’t replace HighLevel with another all-in-one platform. We replaced the philosophy entirely.
Instead of one platform doing everything at a 6, we use best-in-class tools for each job and connect them ourselves:
- CRM & Data: Supabase. We own our data. Full stop. Custom schemas, real queries, actual reporting.
- Email: Resend. Clean API, great deliverability, we write the HTML ourselves. Our emails look exactly how we want them to look.
- Analytics: PostHog. Real behavioral tracking. Not just “contact opened email” but “contact spent 4 minutes on pricing, came back twice, then viewed the comparison page.”
- Automations: Custom logic with AI filtering. Instead of dumb triggers, our system evaluates context before acting. More on this in another post.
- Websites: Astro (this site is built with it), Webflow for clients who need visual editing, or custom builds depending on the project.
- Scheduling: Cal.com. Open source, flexible, integrates with everything.
- SMS: Twilio. Battle-tested. Reliable. Actual deliverability controls.
Is it more complex to set up? Absolutely. But here’s the thing: the complexity lives in the initial build, not in daily operations. Once it’s built, it runs better, faster, and more reliably than HighLevel ever did.
And when something breaks, we can actually fix it. Because we own every piece.
The Cost Argument
“But Aaron, HighLevel is $97/month for unlimited everything. Your stack costs way more.”
Let’s actually do this math.
HighLevel at $97/month sounds cheap. Until you factor in:
- Time spent fighting the platform’s limitations
- Zapier or Make subscriptions to fill the gaps HighLevel can’t handle
- Third-party tools you end up needing anyway (better email, better analytics, better websites)
- The opportunity cost of delivering 6-out-of-10 work to your clients
- Migration costs when you eventually leave (and you will)
Our custom stack costs more in raw subscription fees. But the time savings, the quality improvement, and the fact that we never have to migrate again? The math isn’t even close.
The cheapest tool is the one that actually does what you need.
Who Should Still Use HighLevel
I’m not here to trash HighLevel for everyone. It genuinely works for a specific use case:
Solo operators or small agencies serving local businesses (dentists, plumbers, realtors) who just need basic CRM, appointment booking, and simple follow-up sequences. If your clients don’t need sophisticated automation and you don’t have dev resources to build custom, HighLevel is fine.
Brand new agencies who need something functional today and plan to evolve their stack later. Better to start with HighLevel than to build nothing while planning the perfect system.
Agencies who resell the platform as a product. If your business model is literally “sell HighLevel as a white-labeled SaaS,” then obviously, keep using it.
At our peak, we had multiple sub-accounts running across our agency. We’ve since migrated nearly all of our clients off the platform. A handful wanted to keep it - so they signed up for their own accounts and took it over directly. And honestly? They’re exactly the type of user HighLevel is built for. Small operations, simple needs, no custom dev. It works for them. It just stopped working for us.
For everyone else? You’re going to outgrow it. The question is whether you’ll realize that in 6 months or 2 years and how painful the migration will be when you do.
The Lesson
The real lesson isn’t “HighLevel is bad.” It’s that all-in-one platforms make a promise they can’t keep.
The promise is: give us everything and we’ll handle it all. Stop worrying about your tech stack. Just use us.
The reality is: you trade flexibility, quality, and ownership for convenience. And the convenience has an expiration date.
We learned the hard way that owning your tools, your data, and your workflows isn’t just a nice-to-have. It’s the only way to build something that scales without hitting someone else’s ceiling.
HighLevel was a relationship we stayed in too long because leaving felt harder than staying. Sound familiar?
Sometimes the best thing you can do for your business is break up with the platform that’s holding you back.
Currently running a custom stack that does more, costs less to maintain, and never sends an SMS to someone who opted out. Worth every hour of the migration.