ASO.dev — My Journey of Making Another Product for Apple
Everyone has their own life path and choice of products. For me, it seems like I have a fetish for creating products for Apple and using their APIs… For four years now, I’ve been making a player for Apple Music, and on November 20, 2022, my wife and I came up with and started working on ASO.dev.
When I say “we” in the article, I mean “we,” not that I am some hot shot speaking in plural about myself.
So, let’s go through everything in order, or however it turns out :D
Since September 2022, we’ve significantly rewritten the player, adding Spotify support and wanting to attract more users to the project.
Developing an indie project without marketing funds and, indeed, without any money is very hard, so all traffic for meows.app comes from the App Store — the app gets ~25,000 new organic installations per month (purely from search, with room to grow).
Yearly Changes (need to increase the “conversion rate”)
The app is available in 39 localizations (all in the App Store), at that time still using translations and tables from Google done manually.
This became a problem, which led us to create ASO.dev. When you need to translate “What’s New” into many languages, you just end up writing “Bug fixes and improvements”, limiting your ASO to just a few countries.
So, what is this ASO, darn it?! ASO stands for AppStore Search Optimization (it took me less than half a year to explain this to you).
Simply put, it’s about attracting users from app store searches (App Store, Google Play, and others).
Generally, ASO is quite complex and expensive, with service rates typically starting at $100 per month. There are cheaper options, but they offer almost no features; at best, you can make half the changes due to tariff limitations.
A bit of ASO theory: people take an app and compile a list of keywords for it (there are many tools for this) — it’s long, complicated, and expensive.
ASO specialists are very hardworking :D They manually create keyword lists for 10 countries in Word!
A nightmare for me…
Many either don’t do localization at all or leave it out of their ASO strategy.
I wasn’t ready to spend a lot of money on professionals, so I decided to spend six months (of course, the deadline was missed) to write my solution — better, simpler, and working differently — as I see it!
My account activity on pet projects
Yulia’s account activity on aso.dev
When you plan to publish a new app in the App Store, you need to submit it for review as early as possible, because things won’t go as planned, and you’ll spend weeks fixing or explaining things to the Apple Review team.
It was hard for me to submit an unfinished version for review, but I knew it was a necessary evil! (Version submitted on April 24, 2023)
Surprisingly, the macOS version was reviewed very quickly and without problems. With the iOS version of aso.dev, we got stuck on privacy settings — we indicated more than we collect and struggled to understand what the team wanted and what needed fixing. Then, they asked us five times to explain how the app works, its business model, and even to record a 15-minute video of the app in action (plus a bunch of bug fixes in the process).
Then came the “unpleasant situation” — we were sent to the App Review Board because we use the Connect API and can change user app data. Since May 12, we were waiting for a review, and after 6 calls, checks, and approvals from the Apple Legal Team (lawyers) and Apple App Review Board (a council that meets once a week to decide the fate of apps), we got approval on “June 8, 2023”! 🚀🎉
How did I decide to make my program? I had several main goals for the first version (I was either very ambitious or foolish):
Creating 39 localizations as quickly as possible, preferably with one button
Translating “What’s New” into all languages with one button
All keywords for the app without manual searching and filling in word lists for 59 countries (there’s room to grow, but we already have a basis)
Automatic keyword recommendations (from the server, so users don’t have to search and think about how to improve their keywords)
An interactive cross-localization table with metadata and validation
Work without word count limitations (goodbye to all ASO program rate charts)
Minimize trips to AppStore Connect
Let’s go through why all this is necessary and what we achieved.
With every release, you need to fill in “What’s New” in all languages or translate any other field if something has changed. Small startups or indie developers can’t hire a translator or don’t want to waste time translating app info through some online translator, copying and pasting for 39 languages. Even inserting ready-made translations into the AppStore is not easy (but we can!).
The more localizations, the more opportunities for app optimization and more users.
— (Google Translate, DeepL or Chat GPT) — fun…
Translate a maximum of 30 characters — 43 fewer than 30…
ASO services usually work well for 10–20 countries and aren’t designed for multiple countries simultaneously — I tried to solve this with a new approach for display and user-friendliness. Our database now has over 300,000 search words and is constantly growing — we make 17 million queries a day, and the database for 3 months is about 1 TB.
Perhaps it’s not the largest database, but it’s relevant, derived from iTunes and Apple Search Ads suggestions and searches!
For example, the meows.app player can be found by more than 4,500 keywords (RU)!
We automatically generate keyword recommendations and display them in the metadata editor, considering word popularity, category tops, and saved word lists, continuously improving the algorithm.
Cross-localization validation, in my opinion, is the coolest feature — for the US, you can fill in 10 countries, but keyword overlap between countries is undesirable. We show all duplicates, non-recommended words, and, of course, recommendations!
Keywords Tables and graphs for all keywords found for the app. You can view all or filter by keyword list. There are different tabs — by country, date, and word. There are sorts, filters (including complex ones), and column hiding.
For obtaining relevant words from competitor apps, especially relevant for new apps. Apps from this list will be used to get keyword recommendations in the “Competitors” tab in the editor.
A list of keywords, their ranking (blue), popularity (red), and suggestions. And all without any limit on quantity.
- Top (Free)
Top apps by category, device type, and payment type, and recently we rolled out the top by keyword.
Keywords for any app, by app link/id or from the tops, competitor app list
The ability to quickly grant access to the project, with the possibility of precise settings for each section, without giving rights in Apple (needed by large companies for testing)
- Switching iTunes Country (Free)
Switcher — the ability to switch the App Store on iOS and macOS to view apps, search, and ratings from another region directly in the App Store
- Selecting a Build and Publishing
The ability to quickly, including from a phone, select a build and send it for review
- Translations and History with DeepL and OpenAi (Chat GPT) Keys
We added several translation services and their sorting when working with them, as DeepL cannot translate all languages. The user’s key is used, stored and used only from the client (cheaper and safer), but Apple decided during a quick check — that we violate rule 3.1.1 and stopped our entire version release process for another two weeks — we removed this feature for the time of the appeal, now everything works, we waited almost two months for a decision…
After we were allowed to publish using DeepL and OpenAl keys, the app was removed from the store in China because AI services are banned there, we turned off everything related to OpenAI by store region, wrote an appeal — waiting for the ban to be lifted in China.
Transferring the app from one developer account to another took another 2 weeks. We were stuck on the fact that after deleting all beta testers — Apple still saw them for some time when requesting a transfer
To solve problems with “hanging” on Apple checks, we make dmg builds and surprise — Windows!.dmg was done quite quickly. But solving the problem of why it runs for me but not for clients took a decent amount of time — beginner macOS developers or those who have encountered distributing builds for the first time — Google “notarize”.
We use Flutter — so making a working Windows version took about two days. It took another four days to set up automatic assembly, as everything worked locally, but it crashed on CI\CD under Runner. Later I learned that our installer is identified as a potential virus. To solve the problem — you need to buy a Code Signing Certificate, which must be issued only in certain certified centers (from ~$200). And the one I need — costs $450 per year…
Why do I need an expensive certificate? — I saved a lot of money and collect Windows in Azure, so I need a “cloud” (HMS) certificate. Here you might say — “Where the heck is the saving?! — it’s expensive” and you’d be right, but I already received $5k on Azure through Microsoft’s program for startups...
But HMS in cloud cost ~3k in month(have spent)… — thanks that was free money from Microsoft. I’m working without code signing certificate — I send .exe to https://www.microsoft.com/en-us/wdsi/filesubmission
Microsoft for Startups
The application is very easy and fast.
We’ve already received:
- $2,500 on OpenAI (GPT)
- $5,000 on Azure
- 15,000 pounds to cover fees in Stripe!
- 1000$ for LinkedIn ads
That’s why our payments in.dmg and Windows are made through Stripe. Integrating Stripe and Windows took a lot of time, as it was all new to me, but I’m happy we completed these tasks!
Gitlab CI\CD, Kubernetes + Rancher,.Net core for the back end, Flutter for the client, Astro.build for the website, RabbitMQ for queues, MongoDB — for small and complex data, ClickHouse for storing keyword positions.
MacOS and iOS are already in the App Store,.dmg and Windows versions are already on the site,
Android — we can make.
Web — it’s impossible to make it fully functional due to security limitations (we don’t want to bypass CORS for working with Connect API, because we don’t transmit any private information through our server, especially keys), not sure if we will make a reduced version — write your comments about this.
I plan several separate, purely technical articles
- subscription editor (in progress)
- screenshot editor (in progress) — moving — deleting — adding screenshots
- screenshot editing — creating the screenshots themselves, frames and localization
- in-app events editor
- app dashboard, reports, tips
And many other ideas
We started the project in Bali, wrote most of it in Thailand, released the first version from Kazakhstan, and finished and launched marketing from Georgia, and now we work from Serbia.
Launch time ~10 months 🤦♂️