The complete story of the acquisition of Cronly
I acquired a company and got rid of all its customers
Now, a few months later, Cronly has successfully been acquired again. I am still working on the project with the new owner.
I had been walking around with the idea of starting my own startup for a long time. In March 2020, I started working for a startup in the Netherlands. I built the original product and later built the team to continue working on it.
That is incredibly fun to do, but at the same time something itched. I was mainly working on realizing someone else’s dream, but not so much on my own.
If I really wanted to build something, there were two options: I come up with a good idea and work it out, or I buy something that has already been worked out and try to grow that.
The first plan seemed the most fun, but also the least likely. So I created an account on MicroAcquire and started looking around. MicroAcquire is a platform where people can sell their businesses. (And where others can then buy them, of course)
On December 28, I was walking through Rome with a good friend. I had been looking around MicroAcquire for a while, but now came across something that genuinely excited me: Cronly.
It was advertised by the developer as a platform to monitor your cron jobs. I know the problem well. When a cron job fails, you don’t know it. Cron jobs, by nature, have no built-in way to let you know that something has gone wrong. If it’s not running, it can’t let you know either.
Cronly was already a serious platform: it was well developed and was already being used by a good number of customers. 99% used Cronly for free, but a few companies had ongoing subscriptions. As a result, Cronly had about $80 in revenue. Not great, of course, but it did show something: there is a demand for the product and apparently the product is good enough to make money for it. In fact, there was no churn either.
And so I sent the developer a message. He was also from the Netherlands, so that was a first click. Furthermore, we were both working with the same techniques. That wasn’t surprising either: I had taken that into account before I contacted him, of course. I expressed a serious interest in an acquisition, and we agreed to meet the next day. He from the north of the Netherlands, I from the center of Rome.
So our first appointment was on December 29, just before the New Year. We discussed the product and he showed me what had already been set up. He had taken into account a possible sale well: almost all the services had been set up through separate accounts, making them easily transferable.
I concluded that Cronly was indeed in front of it as he had advertised: I could see that. In the ad, he had indicated an asking price for Cronly of $3,500. To close the deal immediately, I offered to make that €3,500. So that was an extra $250. This was all done on a business basis, so I still had to pay VAT on it: That was almost $800 more that I had to invest for the acquisition.
All this happened in that December 29 meeting, which was completed within an hour. We agreed on the sale price and conditions, and agreed to meet after the New Year, on January 5 to arrange the transfer. Of course I had to transfer the money before January 5. And I did. On January 1, 2022, I transferred just over $4,500 to the original owner. Cronly was now mine.
On January 5, we had a short meeting. I think we only talked for about half an hour. In the process, we transferred all accounts and the old owner explained to me how everything worked. With this information, I went to work.
The first thing I did, as any sane person would do, was share the news on Twitter.
I decided to focus entirely on marketing Cronly. After all, the product was already good. A first step in that was a ProductHunt launch. Cronly had never done that before.
I also had other plans. For example, I wanted to focus on setting up a blog, and produce a lot more guides for developers. The idea was that developers would mainly choose tools that they were familiar with or could easily work with. If I could lower that threshold, they would be more inclined to use Cronly.
I also briefly experimented with Google Ads and did cold emailing. Both actions gave me no results. I don’t know anything about either, so that could be a big factor in its failure. Not that it mattered.
The first problems
One of the first things I wanted to do was to improve the registration flow. When I took over, you would enter your email address and be sent a password in plaintext. There were good reasons to do that at the time, but it wasn’t the best solution for obvious reasons. Above all, it came across as amateurish, which I estimated the large (and therefore paying) customers in particular found a problem.
When I wanted to tackle it, I discovered that it was a lot more complicated than it should be. A change of this nature is pretty simple, it seemed to me. The practice, however, was a lot more unruly.
So I decided not to invest too much time in it, and hired a freelancer. A friendly kid from Tunisia who expertly solved it for me. He had no experience with Koseven, the PHP framework that Cronly was written in, but didn’t think that was a reason not to try. He also experienced some hiccups, but resolved everything and the change could live pretty quickly. I was very happy with it. Of course, it was indicative of the problems ahead.
The problem didn’t really emerge until March 19. I received an email from a paying customer who had been with Cronly for years. He suddenly couldn’t use the platform anymore. The dashboard was white and he couldn’t click through. At my request, he sent me a screenshot, but I could not reproduce it.
I did discover that his payment had not come through, and suspected that the problem lay there. However, due to the outdated state of the codebase, there was little I could do with it. I couldn’t even run the code locally.
Unable to fix the problem, I decided I had no choice.
I was forced to change the codebase
I had no serious choice. I couldn’t run the codebase locally, the framework that Cronly was written in didn’t even seriously exist anymore, customers were starting to suffer, and I couldn’t develop any more enhancements.
I decided to recreate Cronly in Laravel. Of course, I could read the code, so I could reasonably adopt the business logic. Together with a copy of the database I was able to find out exactly what was happening behind the scenes, which allowed me to recreate Cronly.
The process took about 3 months. It’s not my full-time job, so I it was my free evenings and weekends that I put into Cronly.
Despite having the existing code, along with the database structure, I decided to make some fairly significant changes. After all, there was a reason I had started over. Some things just weren’t set up right. For example, the extensibility of the integrations had been poorly considered, making it difficult to keep adding new integrations.
So I made the painful decision to change it so that I could not migrate the database. Customers would have to create a new account, which therefore also meant that I would lose the existing, paying customers.
Fortunately, that sounds more dramatic than it really is. It was still about $80 a month. Which, by the way, I also immediately lost to expenses like a VPS and SparkPost. Those expenses were already there when I took over Cronly. I hadn’t taken that into account, so there was no net profit left.
So what was left?
You may wonder what I had left. Cronly is not unique in the market: there are competitors who offer the same service, and they do it superbly. Think Cronitor, Healthchecks, Dead Man’s Snitch and more. Cronly is not a big player either: it is the smallest active player. So the name is not worth that much. And then I also started over with the product, so I had $0 revenue.
So what did I actually buy?
The reality is: not much. Fortunately, I didn’t pay much for it either. There is something else, though, that was definitely worth it to me: the motivation. After investing about $4,200, I naturally wanted it to work.
And where I normally wrap up side projects quickly to leave them behind, that was not the case this time. Despite losing motivation at times, I worked on it for months and actually succeeded.
Cronly version 2 is here
The new Cronly actually arrived on June 1, 2022. After some problems with going live, I launched it and informed the existing customers. Some of these customers switched immediately, quickly making up for the loss of revenue.
That means I can finally start doing what I wanted to do 6 months ago. Marketing.