📜 ⬆️ ⬇️

With the help of LAMP, I created a SaaS service bringing $ 3,700 a month. My history

In this article, I would like to share my experience in creating a SaaS service based on the LAMP stack, Postio, and bringing the service to the state when it started to bring $ 3,700 monthly (almost 7,000 before the ruble collapsed). Immediately I must say that this story has nothing to do with investors, with the gold rush of Silicon Valley and with some ultra-modern technology. Just a simple story from an independent developer about creating a profitable SaaS-service that anyone can make. This web service was made for the domestic market of Russia, so I translated everything into English and into dollars for convenience (please note that this is a translation of my article, which was originally written for an English-speaking audience). But, on the other hand, this experience is quite universal and can be applied everywhere. In essence, this is an instruction for creating projects of this kind.

Three years ago I decided to take up SMM, and the easiest way to do it seemed to be to launch my own group in a niche and try to develop it. Facebook was already quite competitive at the time, so I launched my test group based on VKontakte. I chose a very popular niche, because all I wanted was to learn, not to dominate the market.

Probably, I have to digress a little and say that VK.com has had and still has a thriving “ecosystem” of such groups that brings profit to their owners. This is a kind of market that Facebook has been covering for a long time. And this bazaar is an excellent environment for learning and experimentation.

image

Group example on VK.com
')
Let's go back to my group. The first thing that I noticed in terms of functioning was the constant search for content to be placed on the site. Content is, in most cases, some kind of image and text, and groups, basically, copied content from their competitors. The latter, in turn, copied it from somewhere else. Usually this “more” was the content of authors who were difficult to track down and identify. Sometimes it was obvious plagiarism.

In any case, I never particularly liked manual labor and decided to make a small tool to help myself extract content from my competitors' posts (who did the same with other sources) and publish them in my group on a regular basis. VK.com has a well-made API, so everything was extremely light. I went through a lot of posts and made a small interface that helped me move around posts and remove inappropriate, for example, posts with links, with obscene expressions and with a very small number of likes. I also got rid of posts that were clearly stolen from some easily identifiable source.

image

A tool for sorting and processing posts for my group

I ended up working with my sorting and publishing tool, getting my own base of high-quality posts relevant to my niche. Thanks to this base, I could not literally spend a minute of time on content and focus on marketing, which was my main task.

Although I tried not to attract attention, one of my competitors noticed an unusually stable and large presence of high quality posts in my group and asked me about it. I talked about the system, and I was offered about $ 200 for it.

I refused this offer and made a counter - to pay me monthly. The competitor agreed.

That was the beginning.

Choosing a stack and framework


I'm an extremely happy developer, because of all the web development tools, I know only LAMP, jQuery and Codeigniter. But I know this stack very well and I can create systems in record time. Therefore, the choice here was obvious.

Another great advantage of this stack is its simplicity and popularity. This means that when I have to give up the development of someone else (and this time usually comes faster than we expect), it will be easy and simple.

By the way, you won’t believe how many web developers are afraid to start their projects, because they think that their skills are not high enough. This, of course, is complete nonsense, and I know of cases when people created products that bring in $ 15,000 a month, six months after I first met PHP.

There is another caste - confident that in order to make a good service, they definitely need to master a good programming language, and not this terrible PHP. Leave the last statement on their conscience.

Creating a program with the minimum necessary functionality (MVP)


My newly created tool had nothing that should have a mature web service, except the most basic functionality. But he had one big advantage - he was already tested in action, so I could invest heavily in its infrastructure, because it is clear that Vk.com was not the only social network that I thought my support.

In addition, from my previous startup, I knew that I needed an advanced statistics and registration system for extremely fast tracking and correction of errors of all kinds. I understood that there will be a lot of mistakes, because when your project is largely dependent on other services, their mistakes become yours.



I have prepared a short list of the functions of my program with the minimum necessary functionality (MVP). It turned out to be quite long, as I decided to include some material in it, which I usually do not keep in MVP (for example, automated payments and all additional interfaces). Here is what I needed and what I had in the end:

Payment service. Since the startup was designed to work in the Russian market, I chose one of the most popular corresponding gateways - Robokassa. It was possible to turn to Stripe, but they did not work in Russia at that moment (and still do not work), and messing around with the creation of a company somewhere in Delaware did not make much sense from the standpoint of finances and hassle.

image

Fees Robokassa

The Robokassa Commissions were not very suitable, and by now I have already switched to Yandex.Kassa; but then for a start they were acceptable.

Content matching niche. I decided to start only with the three most popular niches, namely: business and motivation, general male-oriented content, general female-oriented content. To do this, I created an explosive mixture of publicly available content, some presumably copyrighted content from unknown authors, and also posts from groups that gave me their permission in exchange for placing watermarks of their logos. That was enough for a start.

Publishing control system. The VK.com network was the first and probably the largest (remember that only the Russian market is considered) social network for which I had to provide support. However, I understood that in the future, it was also necessary to support Facebook, Twitter and Classmates, so I had to add some kind of offshoot for them. In the end, I just made a single function that called the API methods of the ascending social network for each group ready for maintenance, and added its call to CRON. CRON triggered every 15 minutes.

An element of this function is shown here:
<? function process() { $groups = $this->Group_model->getReadyToPublish(); foreach ($groups as $group) { switch ($group->type) { case 'vk': $result = $this->Pub->vk(); break; case 'ok': $result = $this->Pub->ok(); break; case 'tw': $result = $this->Pub->tw(); break; case 'fb': $result = $this->Pub->vk(); break; } switch ($result->error){ case 1: // process error break; case 2: //process error break; ... case 0: // charge user and move to next group break; } } } ?> 

Yes, of course, all this is very unfinished and looks unprofessional. Perhaps I should have used some existing queuing solution, but, as I always write, I do not consider myself a developer and know very little about modern solutions. I program everything myself from the very beginning, because it can be done quickly, and I can immediately respond to user feedback. In the future, I am happy to transfer this work to someone smarter than me.


Comprehensive statistics and logging. In my previous projects, everything usually went awry precisely because of the lack of data for analyzing trends and errors. This time I did not want to make the same mistake and decided to collect as much data as possible from the very beginning.

image

Monthly statistics after one and a half years of work; strings represent the days of the month.

In fact, when it comes to statistics and registration, they are difficult to overestimate. To make the right decisions, you need to have a lot of data for each individual part of your service. This is especially important for pricing.

Billing Some of the social networks (yes, I look at you, VK.com and OK.com) were very unreliable, so I decided not to use the subscription model and refused it in favor of charging users on the basis of each post. Thus, I could not worry if I could not deliver the content to my clients due to problems with social networking failures.

When everything was set up and ready for me, it’s time to think about how I will get the first clients and what we will actually do with the service.

Launch


At that time, I had a very limited budget, and spending it on paid advertising would be just insane. So I had to find ways to get users for free.

The task was as follows: I needed to find a way to contact the owners of the groups and not to be blocked as spam. Therefore, direct mailing did not pass.

However, I noticed that the groups had a very interesting feature: anyone could suggest a post to the group that the owner can post after reading. This feature has already been seriously abused, but if done well and correctly, it could still work.

I took a few groups in the niches for which Postio (as I called this service) had content, and started offering them posts, like what is shown in the screenshot below.

image

One of the advertising posts (only as an example)

Since I myself was the owner of the group, I knew pretty well how to prepare a post that the moderator would like.

The result was impressive: almost 70% of the owners to whom I offered posts were registered with Postio. Almost 60% of those who registered, replenished their balance in the system. Some of them even found me on social networks and thanked for the service. This part was the most satisfactory to me.

In addition to this reception with a post offer, I also published a post in my own group and invited group owners to subscribe to Postio. I knew that many of them read each other’s groups to track trends, posts and the overall situation. This gave me some more subscribing and paying clients.

At the end of the month, the statistics were as follows:

image

Recharge and income are in US dollars

It was good, but I still haven't figured out how much to charge my clients. It's time to figure it out.

Pricing


I had no idea how much the users were willing to pay for such a service, so I just set the price of 1 cent for one post. However, as I wrote several times in my previous articles, this approach to pricing at random is very expensive. Even the slightest mistake (whether it is undervalued or overpriced) can cost a fortune in the long run.

Therefore, I decided to use my usual approach and find out the price that will bring the most revenue. I randomly assigned a price from a predetermined set for each user and tracked all actions related to that price.

This is how it looked in the code:

image


Using the incTestValue method, scattered across all critical parts of the code, I could collect the required metrics for a specific price.

Soon I received the following statistics:

image


Remember that the original currency was not the US dollar, so the service payment column does not look exactly smooth. In rubles, everything was more beautiful.

This split test revealed some interesting points:

  1. The price of one cent has the most published posts.
  2. The price of two cents was the most profitable.
  3. At this stage it was useless to test prices in excess of two cents per post.
  4. People who received a price of two cents replenished their balance twice as often. This could mean that they were satisfied with the first attempt to use this service and made additional replenishment.

In any case, two cents for the post turned out to be the most profitable price at this stage, so I settled on it. But this does not mean that it will always be so. Probably, as Postio develops, users will be willing to pay more, but this will be subject to further testing.

Now that we have our price based on data, let's expand our offer a bit.

Features of the program, expanding opportunities


In addition to increasing the number of niches and social networks supported by my service, there was more that I could do. Some clients asked me to make a tool for processing images that they inserted into their posts. It was about rounding corners, adding some effects and placing watermarks. It was a great opportunity for additional sales.

I made a simple interface that allowed users to set their own characteristics for images. Each effect had its own separate price, which was added to the basic price of the post. Here's what it looked like:

image


Now I would say that this is rather rude, and it was stupid to charge users for every sneeze, but we were all young, right?

The algorithm that implemented these effects was relatively simple. It was just a function with a lot of arguments and some program inside, based on ImageMagick.

image


I added an extra column to the statistics table, showing what effects users applied and how often they did it. This feature gained momentum pretty quickly.

image

On the left - an example of statistics, and on the right - the dynamics of change

In addition, I added a lot of other features, such as pauses, loading user posts and supporting multiple accounts, but this is not so interesting, so let's skip a few chapters and see what I did with the traffic.

Traffic expansion


I had a very limited budget (about $ 500), so the direct purchase of traffic did not pass. However, I naturally noticed the growing search traffic to the main page, which even had keywords related to my niche, but not directly related to it.

image


After a quick analysis of the traffic volume with these keywords, I decided to invest the entire budget in two directions: writing articles for the most popular search queries and buying advertising posts from bloggers in my niche.

I made a list of keywords that my users most often asked on search engines, and hired a copywriter to prepare articles based on them. These were expressions like “how to make a Vkontakte group”, “how to make a menu in the Vkontakte group”, etc.

After the articles were published in the Postio reference section, I agreed on special prices with the most promising bloggers in my niche, and they made several posts about my service.

All these actions raised search traffic:

image


By the way - the main part of this traffic fell on one article on how to make a menu in the Vk.com group. This led me to create another SaaS menu creation service, Menumake . I described the process of creating it in another article (translated version here ). Look at her, there are some rather interesting moments too.

In conclusion, I introduced an affiliate program. It was quite simple: users had their own unique link, which they used to invite other users and get 10% of affiliate fees for their expenses. It seems to be nothing special, but this source not only gave 15% of all registrations, but also provided Postio with several high-quality backlinks from various sources. And this, of course, only to the benefit of a site ranking in search engines.

It took 14 months to reach a monthly profit of $ 3,700 (then it was another $ 7,000), and the only major loss was a significant depreciation of the currency with which this service worked.

How to work with API systems that are constantly falling


Postio control has never been an easy walk. Probably, you can imagine that customers don’t want to listen to excuses from the category “Forgive that you were left without posts - our social network fell”. Such cases want to have as little as possible.

When creating any systems, I apply the anti-friability rule formulated by Nassim Taleb - the system should become more reliable with every failure or error. Or, in the Nietzsche version: “Everything that does not kill us makes us stronger.” In Postio, this is very simple - you need to carefully monitor any errors and fluctuations of the social networks API and write handlers and insurers for each case.

For example, the main function of publishing in Postio is the one that runs through all groups every 15 minutes and finds those that need posts — for the entire time the service has been running it has increased every 20. It is due to the need to process an incredible amount of failures and errors 4- x social networks. Yes, it’s time to structure and write a separate module for working with exceptions, but I don’t have enough time for that.

The rule of anti-frailty is very simple, its entire secret lies in two boring words - methodical and systematic. Competitors Postio (peace be upon them) this just was not enough.

Conclusion


Getting SaaS service to profitability has never been easy, and it is impossible to explain every aspect of this process in a small article like this. However, almost any developer can make such a service. No partner, investor or even a great idea is required. Just start doing something, and you will inevitably run into a task that needs to be solved. There is no perfection in the world, and this is good news.

I hope this story turned out to be of some help to you, and, as usual, I am open to any questions here or on my Twitter account . If you speak English, then pay attention to my blog on Medium - I share there stories and information about creating startups, without a venture and a smoothie.

Thanks for reading!

Note of the author of the original article: I reviewed and added to this translation, therefore, for all the errors and omissions to scold me, not the translator.

Source: https://habr.com/ru/post/321978/


All Articles