How I built a 30k daily users app completely monetized with ads
And with absolutely ZERO dollars as initial investment.
This is a story of about 3 years ago, I was using an app that kept having problems and all the alternatives where missing some features, so, in true developer fashion I said: “You know what? I can do this myself and I can do it better!”
Only problem I wanted to do it completely for free, like COMPLETELY for free, I didn’t even want to spend money on the domain (which to this day I stil don’t own).
So this is the story (with some very practical advice) of how I built the app that I still use to this day, how more than 30k people are using it everyday and how I monetized it throw ads.
Act 1: Building the app 💻
I knew what I wanted and I knew how to build it. So I just built it. Didn’t waste a lot of time on the best tech stack or the best design framework.
Tech stack: React Native (Expo)
Never regretted this decision, except for a very minor thing which I will talk later, and would suggest this to basically anyone.
Act 2: Monetization from day-one 💸
Since I wanted to build it completely for free I knew I had to monetize it from the beginning, so I added banner ads and some interstitials in the app.
Tech stack: AdMob
The choice was very simple, AdMob is the only ad-network that was natively supported by Expo and since I didn’t want to write a SINGLE line of native code I went with it. And besides that it is Google right? They should pay well… right?
Act 3: Building the backend 🌐
This is when the game got hard. Although most of the work of my app was done on the frontend, I still needed a backend to do some dirty work (no database yet, just a server to handle some logic). I could have used some fancy node.js thing hosted somewhere for dirt cheap, BUT NO! How am I going to serve the millions and millions of users that of course I will get from day one?
I needed something better, something that could scale automatically, but was still completely free for small volumes. This is when Bill Gates appeared to me in a vision (true story) and said: “Azure.” I felt like I was given the gift of sight for the first time.
Tech Stack: Azure Serverless Functions
Those beasts of functions are completely serverless (cause f**k servers), they don’t cost nothing until you have more than 3 millions (I think) invocations per month and they let me use a real programming language (C#). Perfect solution, final budget, still zero.
Act 4: The death of a dream 😭
This is it guys, this is where my perfect dream of building my dream app failed: App store and Play store submission fees. Google takes 25$ lifetime while Apple wants 99$ for the rest of your life. Yeah, sorry for lying, at the end of the day I had to pay those, but at least our story keeps on going!
Act 5: Massive launch 🚀
Just kidding. Of course nobody used it for weeks. Who did you think I was?
Act 6: Just keep building 🖥️
This is (not) marketing advice. I just kept building the app. Add more features, polish things app, improve the ugly UI that you think is pretty, add animations cause animations are awesome.
Act 7: The worst marketing advice you will ever hear 💸
Okay hear me out. This is (not) marketing advice, but I said to myself: “You know what? Marketing sucks, I would prefer continue building features and improving the app, isn’t there another way?”. This is when Larry Page appeared to me in a vision (I’m serious) and said: “Just give me the money.” And so I did. But wait, I can’t, because I wanted to do this completely for free I can’t spend money on ads.
This is when I remembered something else: I’m just built different. My car (which was actually my mother car) insurance was expiring, but you usually get 30 days of leeway before having to renew so this is what I did: delay the payment for the insurance as much as you can, roll that money into paid ads, acquire a lot of users, use the money you generate from those users to pay back the insurance, keep the users and then use the money generated by those users to pay the ads for the next month.
Act 8: We have a plan 💡
And it f*****g WORKED!
Well, to be honest it took 3 months to repay the insurance (did I forget to mention it was just 70 bucks?), but in the fourth month I had positive cash flow that I could reinvest into paid ads, and since I was spending ABSOLUTE ZERO on everything else that was all profit.
Act 9: Doing more of the same 🔁
Growth has never skyrocketed like crazy, probably because I was only doing paid advertising, but at some point Google and Apple started ranking my app pretty high in my category so I was also getting something like 1500 organic downloads, which was HUGE for me.
At this point I wanted to add push notifications to the app, so I needed a database to store the notification token, this is when Jeff Bezos, okay I’m kidding, I will stop, but not before I tell you that Elon Musk actually appeared to me in a vision, okay that’s enough. I’m sorry.
Tech Stack: Azure CosmosDB
Non-relational database that I’ve never used before, but learned in less than a day completely server-less (cause we know why) and you already know the best part: COMPLETELY FREE for low volume work, which is exactly what I needed.
The zero budget dream is still alive and strong.
Act 10: The final act 🎬
Why is this the end? Cause I wanted to finish it on a nice number and ten sounds like a nice one. Also this is going on a bit too long and I’m skipping over a lot.
The app kept growing and the the revenue from the ads finally started to amount to something, nothing crazy, but with 30k daily users, I made around 7k $/month.
After a while the traffic grew to the point where I started to pay for both the functions and the database, but this is more than good to me, because their cost is more than covered by the revenue generated by the app (it is now around 400 $/month).
To be honest I love this story, but it’s also true that not every product can be built like this, for instance the one I’m working on right now (LlamaFinancial) requires a bigger and better infrastructure from day one, but I still managed to find ways to spend as little as possible.
I have more than one cause I don’t know how to implement Firebase Analytics so I have two different ones and I can’t be bothered to change it.
And this is basically it. Not really the end of the story since so many things happened, so let me know if you want Part 2: The revenge of the Tech Stack and if you have any other specific question.