The owner of an appliance store in Almaty sees an Instagram ad for a grocery delivery app and messages you: "We want one like that. How much does it cost, and how do we track the ads afterwards?" It's too early to answer with a development quote. First you need to know whether his customer will open the app a second time, and for an appliance store the answer is very different from a grocery delivery service. The lesson is built on these two businesses: their numbers are made up, while the AppsFlyer, Apple and Google prices come from their own sites.

Mobile-first starts with the site
Mobile-first is the habit of thinking about the person holding a phone first, not a decision to commission an app. Google itself looks at sites through a smartphone: it uses the mobile version of pages for indexing and ranking (mobile-first indexing). If a product page takes ten seconds to load on a phone and the order button slides off the edge of the screen, an app won't fix that: people coming from search will still land on the site.
The appliance store gets about 150,000 visits a month, and the site is its main shop window. The first money is better spent there: a fast product page, clear delivery dates, checkout without forced registration.
Why would someone open the app a second time
An app pays for itself when people come back to it on their own, without another ad. The test is simple: finish the sentence "The customer opens the app to...".
- Grocery delivery: "...repeat last week's basket to the saved address in a minute and see where the courier is." People need groceries every week, so there is always a reason to come back.
- Appliance store: "...buy a washing machine." People buy one every few years, and there's no point keeping an app on the phone for that. Everything it can do is already on the site.
- A language lessons app, like the one on the right of the picture: "...continue the lesson from where I stopped." People open it every day, and the saved progress pulls them back.
If the sentence ends with "...buy the same things as on the site", the business doesn't need an app.
The second question is what the app will do better than the mobile site. The gap is smaller than the owner from the opening thinks. A saved address and order history work on a site with a customer account too. Sites can send notifications as well, but on the iPhone there's a catch: since iOS 16.4 only a web app that the person has added to the Home Screen can ask for push permission, and only in response to their action, such as tapping a button (WebKit on web push). Adding a site to the Home Screen is an extra step you have to ask the customer to take. An app is already on the screen and asks for permission directly. For grocery delivery, where "the courier is at your door" matters on every order, that's a reason to build an app. For the appliance store, it isn't.
Site, Kaspi, Telegram or app
In Kazakhstan there are two more routes between a site and an app: selling through the Kaspi.kz Shop or taking orders in Telegram. The options differ in what you pay for them and what you can see in reports afterwards.
| Option | What you pay | What analytics shows |
|---|---|---|
| Mobile site | Building and maintaining one site | The path from ad to order: GTM, GA4, Meta pixel |
| Kaspi.kz Shop | A commission on every sale, set per category | Kaspi's reports: revenue, product page visits, share of sales |
| Telegram bot or Mini App | Building a bot or a web page inside Telegram | A Mini App is measured like a site, the source goes in the link |
| iOS and Android app | Two versions, developer accounts, an MMP | Firebase and an MMP, installs counted by each platform's rules |
Kaspi. The commission depends on the product category and is charged only when a sale goes through: if the buyer cancels the order, it's returned (Kaspi.kz Shop terms). You don't need your own site with payments, because the buyer finds and pays for the product inside Kaspi. The flip side is that you only see that buyer through Kaspi's reports. Analytics in Kaspi Pay shows revenue, how many times your product pages were opened and your share of sales on a product page and in a category (what Analytics shows). These statistics carry no external ad sources, so Instagram or Google ads that lead to Kaspi are judged by the overall sales trend, not order by order. If a client sells both on the site and on Kaspi, put those ads in a separate campaign so their spend doesn't mix with the site's ads.
Telegram. A bot fits when orders already come in through chat. It can't message first: the person has to start the conversation (how bots work). But after the first order the bot can send delivery updates, which is the same reason to come back as a push in an app. A Mini App is a web page that Telegram opens inside itself, and it's built with JavaScript, like a site. The source goes in the link: a non-empty startapp parameter in a link like https://t.me/<bot>/<app>?startapp=<tag> reaches the Mini App in the start_param field (Mini Apps documentation). It works like a UTM tag, only with one value instead of five. The lesson on messenger marketing explains how to sell through chat.
App. The app stores take no cut of grocery orders. For goods consumed outside the app, Apple requires payment by card or Apple Pay rather than in-app purchase (guideline 3.1.3(e)), and Google Play explicitly forbids running groceries, clothing, housewares and electronics through its billing system (Google Play payments policy). The Apple Developer Program costs $99 a year, and registering in Google Play Console costs $25 once. The real money goes on people and on measurement.
What measuring an app costs
On a site, the marketer adds and edits tags in Google Tag Manager without touching the site's code. Both GTM and Google Analytics are free (about Tag Manager, about Google Analytics). Fix a tag, publish the container, and the event shows up in DebugView almost at once. With an app, you pay for measurement in both time and money.
A developer writes the event. first_purchase and purchase live in the code of two versions, iOS and Android, and every fix reaches people only with a new version of the app. The store reviews it first. Apple typically reviews at least half of submissions in under 24 hours and 90% in under 48 (App Review). On Google Play, review can take up to seven days or longer in exceptional cases (app review on Google Play). Then you wait for people to update, and old versions keep sending events the old way all that time. That's why after a release you compare the data version by version, as the lesson on SDK integration explains.
You need an MMP. If the ads run on Meta, TikTok, Google and Apple Ads, it's the MMP, not Firebase, that decides which network gets each install, as the lesson on mobile app analytics explains. If all the advertising goes through Google, you may not need an MMP at all: when Firebase is enough is explained in the article on AppsFlyer, Adjust and Firebase.
AppsFlyer's free Zero plan isn't meant for apps with paid campaigns. On the Growth plan the first 12,000 conversions in the first 12 months are free, and after that each one costs $0.07 (AppsFlyer pricing). AppsFlyer counts as a conversion an install, a re-engagement or a re-attribution driven by a campaign you measure, and doesn't count organic installs. The delivery service gets 10,000 installs from ads a month: the free package runs out in about five weeks, and after that the installs cost about $700 a month, before any campaigns to bring customers back. That covers conversions only: raw data and Data Locker are paid add-ons, and the reconciliation in the MMP lesson relies on raw data. MyTracker's basic plan is free, and it's worth a look if it works with your networks.
iOS doesn't show everything. If a person hasn't allowed tracking, their install from an ad will most likely end up as organic in the MMP, and it shows up under the campaign in Apple's aggregated report (SKAN). Install attribution on Android and iOS shows how this works. Tell the client before launch, not after they notice organic installs growing on the iPhone.
Will the app pay off: running the numbers for grocery delivery
In the base month from the lesson on MMPs in practice, the delivery service spent 5,000,000 ₸ on app ads and got 1,000 first orders, 5,000 ₸ each. The average order is 9,000 ₸. Say that after buying the groceries, packing and paying the courier, the service keeps 1,000 ₸ per order. Then a first order earns back only a fifth of the ad cost, and the whole of it is recovered on the same customer's fifth order. The service makes its money on repeat orders, and that's what it needs the app for.
Besides ads, the app has other costs:
| Item | Cost |
|---|---|
| Developers who ship the iOS and Android versions | 2,000,000 ₸ a month |
| AppsFlyer at 10,000 installs from ads a month | about $700 a month for conversions only, raw data and Data Locker cost extra |
| Apple Developer Program | $99 a year |
| Google Play Console registration | $25 once |
The biggest line here is people, not tools. To cover the developers alone, the app has to bring 2,000 orders a month at 1,000 ₸ each, and they have to be extra orders that wouldn't have happened without it. An order the customer used to place on the site and now places in the app adds no money: it has just moved.
The appliance store doesn't even need this calculation. Nobody orders another washing machine a week later, so there's nowhere for the extra orders that would pay the developers to come from.
Exercise: a decision for your own client
Take a business you work with, or one you plan to pitch an audit to, and put together one page for the owner:
Now a situation you will meet on an app project. The delivery service launched its app, and in the first months after launch, before the 5 million ₸ ad campaigns, it reached 3,000 orders a month. The owner writes in the report: "The app brings 3,000 orders a month at 1,000 ₸ each, that's 3,000,000 ₸, more than the developers cost." Over the same period, site orders fell by 2,000. What do you tell him?
Total orders grew by 1,000: 3,000 in the app minus the 2,000 that disappeared from the site. Those two thousand are most likely the same orders from the same people, just placed in the app. So there are at most 1,000 extra orders, which is 1,000,000 ₸ a month, half of what the developers cost. And even that thousand can't all be credited to the app: over those months the season could have added some of them.
Comparing people who installed the app with everyone else won't work either. If the regular customers are the ones who installed it, the difference shows their habits, not what the app did. A better comparison is cohorts: how many orders customers who arrived before and after the launch placed in their first three months, on the site and in the app together. The season affects that comparison too, so one quarter won't give you a conclusion. Write in the report: "The app has 3,000 orders a month, about 2,000 of which used to come through the site. There are at most 1,000 extra orders, and how many of them the app produced will show in six months of cohorts."
Video: site and mobile app
A short comparison of web apps and mobile apps.