I never use GHL, and to be honest I have no interests in trying, from just looking at its crappy programming interface. I'd rather go back to Reef Angel and program with arduio instead.
But I don't like my Apex either. Reliability wise, most things still working in a year. But the Trident failed miserably. The Ca and Mg reading are getting way out of accuracy that that I'm only looking at the alkalinity result now. It's now set to only test 2 times a day to get 2 kh reading. Also the flow sensor stopped giving reading couple days ago, bought last black Friday. Haven't got chance to check what's wrong with it yet. I only have 4 modules, and two of them are having problem, within the first year. That don't really give me confidences of its reliability, especially given its premium over other controller like Reef Angel. I used Reef Angel for 4 year prior, had yet to get a hardware issue. But the main problem I have with Apex is its programming. It's super limited that you can't even program an I/O button to start the feeding mode. What people did is to duplicate the feeding mode function in outlet control instead, not calling the Apex's feeding mode. Then also there're not such thing as reusable code. If you have several outlets want to stop for the button feed mode, you will have to copy that over. Another one is the famous virtual outlet. The whole reason of it is because it can't support a simple logic AND statement in the code. So every time you want an AND, you need a virtual switch. Not to mention the lack of ability to simply silence an alert. Duplicating code and overly complicating implementation are the number one cause maintainability of software, and that's exactly the problem of Apex.
Just couple weeks ago melevsreef shared his story of disabling his skimmer float switch while forgetting to turn off the skimmer got it flooded his fish room with skimmate. He put that blame to him on forgetting, IMO that's a terrible mindset towards an automation system. The goal of automation is so that people don't have to remember every tiny detail of the system. The system design that shift the burden of correctness to the operator is an unreliable design, especially when the proper design solution is so obvious and common. Honestly GHL feels the same way as they don't even bother to invest in modernizing their UI from the 90s.
The way I see it, Apex is too lazy or incompetent to modernize their core control paradigm, or didn't understand the importance of minimizing dependencies of user correctness to reliability, or maybe even not putting reliability as top priority. That don't give me much confidence of their product in terms of reliability.