I spent the better part of five years writing custom WordPress plugins to connect sites with CRMs like Keap, HubSpot and Ontraport. Every client wanted something slightly different. Every CRM had its quirks. I thought I was building reusable assets.

I was wrong.

The maintenance trap

Custom plugins break. WordPress updates from 5.9 to 6.0 broke a Keap integration I'd built because the REST API authentication changed. HubSpot deprecated a contacts endpoint I was using and gave thirty days notice. Ontraport changed their webhook signature format without updating their documentation.

Each time, I had to:

  • Pull up the plugin code I hadn't touched in months
  • Remember why I structured it that way
  • Test against the new CRM API version
  • Push updates to three or four client sites
  • Cross my fingers that nothing else broke

The worst part? Clients didn't budget for this. They paid for the initial build. Maintenance was on me, or I had to have awkward conversations about retainer fees.

What I do now

I use Make.com or Zapier as middleware between WordPress and the CRM. Sometimes n8n if the client wants self hosted infrastructure.

WordPress just sends a webhook with form data or user events. The automation platform handles the CRM connection, data mapping and error handling. If HubSpot changes an endpoint, I update one scenario in Make, not five different plugin installations.

For a recent GoHighLevel project, I had the WordPress site fire a webhook on WooCommerce purchase. Make caught it, checked if the email existed in GoHighLevel, updated the contact if it did or created a new one if it didn't, then added them to a specific pipeline stage. Took ninety minutes to build. No custom plugin code.

The client can see the automation flow in Make's visual builder. They can duplicate it or modify it without calling me. That's a win.

The trade off nobody talks about

This approach has a real cost. Make.com charges per operation. On the cheapest paid plan (about nine dollars per month), you get 10,000 operations. A single automation run might use three to five operations depending on complexity.

For high volume sites, that adds up. I had one client processing 800 form submissions daily. That's 2,400 to 4,000 operations per day if each form triggers an automation. We hit the operation limit in a week.

We moved them to the 40,000 operation plan at twenty nine dollars per month. Still cheaper than my retainer would've been, but it's a recurring cost they didn't expect.

Another limitation: debugging. When a custom plugin fails, I have logs and stack traces. When a Make scenario fails, I'm clicking through execution history in a web interface. It works, but it's slower than grep and tail.

When I still write custom code

Sometimes you need a plugin. If the integration requires WordPress to read data from the CRM and display it dynamically on the front end, middleware doesn't help. I built a custom plugin last year that pulled HubSpot deal stages and rendered them as a client portal dashboard. No way around it.

But for the standard use case of pushing WordPress data into a CRM, middleware wins. Less code. Fewer updates. Happier clients.

If you're still maintaining a pile of custom CRM plugins, try middleware for your next project. You might not go back.