A basic assumption I didn’t think I had to check

There are a few things I expect any CRM to be able to do.

One of them is exporting your own data.

I didn’t go into this migration thinking that would be an issue. I didn’t even think to question it. It felt like table stakes.

It wasn’t.

I spent two weeks migrating a client from Keap to ActiveCampaign, and what came up wasn’t just inconvenience or technical friction. It was a set of gaps that made me stop and think about how much risk we quietly accept in the tools we rely on every day.

Quick note before I go further. This isn’t an endorsement for ActiveCampaign. Every platform has trade-offs. That’s not the point.

The point is STANDARDS!

The problem wasn’t ‘it’s hard’, the problem was ‘it’s impossible’

Exporting data was painful. But pain wasn’t the real issue.

The real issue was that deals could not be exported at all.

Not partially.

Not awkwardly.

Not via some hidden report.

Not by users.

Not by Keap support.

I escalated it through support. They escalated it again. The answer stayed the same. There is no way for them to export one of their own core records from the database.

That’s not a workflow problem. That’s a boundary.

And it’s one most business owners don’t realise exists until they hit it.

If a system can’t give you your own data, that’s not a usability issue. It’s an ownership issue. It also raises some uncomfortable follow-on questions about backups, audits, recovery, and what actually happens if something goes wrong.


When “Export” becomes reconstruction

Tags were the next signal something was off.

Instead of readable tag names, exports returned numeric IDs. Multiple IDs in a single cell. On their own, they meant nothing.

That’s annoying but solvable.

So to understand what was connected to what, I ended up having to screenshot parts of the interface. Not because it was clever. Because after escalating through support, that was the only way to extract the information. Because remember - even their high-level support couldn’t provide an exported file.

Those screenshots were then turned into text using AI, merged with multiple exports, and stitched together with lookups just to produce a CSV that could be imported elsewhere.

This is the kind of work that never shows up in scope documents or pricing conversations, but absolutely shows up in delivery time and cognitive load.


Automation You Can’t See Is Hard to Trust

Automations within Keap’s Canvas added another layer of friction.

Automations essentially sit inside other automations. There was no clean top-level view. Following logic required jumping between screens and holding too much context in your head.

Nothing was technically “broken”. But visibility was poor.

That matters more than people think.

When you can’t see the full picture, you hesitate. When you hesitate, you move slower. And when you move slower, you start designing around the tool instead of around the business.


Following Advice, Then Getting Burned

One moment still stands out as the ‘we’re definitely getting off this system’ moment.

A Keap rep advised the client to run a re-engagement campaign. On its own, that’s reasonable advice.

The campaign ran. The account was then restricted for emailing older contacts.

There was no warning. No heads-up. No indication the send might trigger a problem.

That’s a bad experience, but more importantly, it’s a design issue.

Systems should support you. They shouldn’t punish you for doing what their own team suggested.


“Legacy Setup” Explains Some Things. Not All.

To be fair, some of this was tied to legacy setup. That’s fair. Systems evolve. Decisions get made years ago that no longer make sense.

But legacy only explains so much.

These weren’t edge cases. They were core objects and everyday workflows. And they surfaced at the worst possible time. During change.

That’s when systems should be most transparent, not least.


What Acceptable Actually Looks Like

The rebuild in ActiveCampaign wasn’t quick, but it’s now coherent, predictable, and easy for the client to understand.

The logic was straightforward to implement.

The client’s data is accessible and exportable.

And the system behaves predictably.

I wouldn’t call that best in class.

I’d call it the minimum standard.


How to Sanity-Check Your Own Systems

If you’re reading this and wondering whether your own CRM would pass this test, there’s an easy way to find out.

Try exporting:

  • Contacts
  • Deals
  • Tags
  • Activity History

Then look at what you get.

Is it complete? Is it readable? Could you re-import it somewhere else if you had to?

And keep a regular backup. Not because you’re planning to leave, but because relying on hope is not a data strategy.


The Real Cost Isn’t the Migration

If your CRM relies on workarounds just to function day-to-day, the cost isn’t only time or licence fees. It shows up as slower decisions. Second-guessing. And a quiet loss of confidence in your own systems.

Most businesses don’t stay with tools because they’re working brilliantly.

They stay because leaving feels hard.

That’s sunk cost. Not strategy.

I’m not interested in defending platforms. I’m interested in protecting clients from fragile systems.

Good systems make it easy to get your data, support how you actually work, and leave when you need to.

Anything less isn’t infrastructure.

It’s dependency.


Calm systems are the foundation under everything new visibility brings. Related reading: