Proof
    Impress Blinds — cost per enquiry down 62.63%, $23.6 to $8.82SLS Solicitors — cost per enquiry down 58.48%, $84.64 to $35.14FixCare Property — cost per enquiry down 56.36%, $35.24 to $15.38Rubbish Removal WA — cost per enquiry down 53.18%, $71.02 to $33.25Floral Cakery — cost per enquiry down 49.82%, $13.83 to $6.94ILLUMINATE Laser Emporium — cost per enquiry down 48.54%, $138.65 to $71.35Aussie Plumbing — cost per enquiry down 41.96%, $117.75 to $68.34Sydney Fence Painting — cost per enquiry down 33.68%, $136.62 to $90.61Alliance Plumbing — cost per enquiry down 29.6%, $81.26 to $57.21Gridless Build Solutions — cost per enquiry down 29.16%, $78.16 to $55.37FacilityWorx — cost per enquiry down 23.62%, $157.13 to $120.01Cornerstone Roofing — cost per enquiry down 20.47%, $41.71 to $33.17A council finance platform — 194 of 194 requirements metA council finance build — 14 weeks to UAT, −34% 10-yr costA cultural institution — $634K of $750K kept workingA council platform — $470,106 built vs $503,262 SaaSA federal agency — n=5,000 prevalence survey at ±1.4%A civic mural — 36 concepts for a 71m × 9m wallA regional shire — 32-page visitor guide, 3 weeks earlyA shire council — one platform retiring 8 of 9 vendorsA pressure washing business — 138 jobs at A$20.43 eachA pressure washing business — 21.20% conversion rateA carpet cleaner — 53 jobs in 15 days at A$24.92 eachA roofing company — 68 quote requests in 35 daysA CCTV installer — 39 qualified leads in 15 daysA fence painter — 36 jobs in 24 days, quotes by day 3A maintenance business — live in 8 weeks, 3 stacks gone41 numbered clauses, published in full5.0 across every Google review$120M+ in media under management250+ active engagements across five countries

    App install tracking Three systems. One install. No agreement.

    The store console, the advertising platform and your own database will each report a different number for the same week. We work out which one the business should run on, and instrument what happens after the download.

    Events defined in your language before anything is coded · Reported from your own systems, not only from the app · Reconciled monthly against your own records, with the gap written down

    Inside the reporting

    Seven ways the
    install count misleads.

    Only one of these is a mistake anybody made. The rest are how the platforms are built, which means the answer is never to fix the number — it is to know what the number is, and to hold a better one beside it.

    • Three systems count the same install and none of them agrees

      The store console, the advertising platform and your own database will each report a different number for the same week. They are not broken. They are counting different things, over different windows, with different rules about what a person is.

      • The store counts downloads against an account, across every device that account owns
      • The advertising platform counts what it believes it caused
      • Your own system only knows about people who opened the app and signed in
    • The install was treated as the result

      An install is the cheapest number in the whole chain to move and the least connected to revenue. Optimising toward it reliably buys downloads from people who will never open the app a second time.

      • A download is not a registration
      • A registration is not a first job, a first order or a first session that mattered
      • The number that decides whether this was worth building is the week-two open
    • Nothing after the install was ever instrumented

      The events that matter live inside the app, and an event that was not written into the build cannot be added to last month. This is the failure that cannot be repaired retrospectively, only repeated.

      • No event for the step where people actually leave
      • No value attached to the actions that make money
      • So every report stops at the download
    • The iOS permission prompt was treated as a formality

      On iOS, the identifier used to tie an ad to an install is gated behind a prompt the person can decline once and effectively forever. Where that prompt is asked badly, a large share of your audience becomes unmeasurable at the device level, permanently.

      • Asked on first launch, before there was any reason to agree
      • No explanation of what the person gets in return
      • The people who declined do not appear as a gap, they simply are not there
    • Apple's privacy framework reports on its own terms, not yours

      When device-level measurement is unavailable, iOS reports through SKAdNetwork instead: delayed, aggregated, and deliberately coarse. Below a volume threshold it will not tell you anything at all, and it will not tell you that it is withholding.

      • Reports arrive on a delay measured in days, not minutes
      • There is a very small budget of information per install, which has to be designed
      • Low-volume activity returns nothing, which reads exactly like zero results
    • The chain breaks at the store front door

      A person taps an ad on the web, lands on a store listing, then installs. That store page is not yours and carries nothing forward, so unless the handover is deliberately built, everything you knew about that person is lost at the door.

      • The campaign that caused the install is not in the app when it opens
      • The specific product or page they were looking at is gone
      • They land on a generic home screen and have to start again
    • Consent was solved on the website and forgotten in the app

      The app is a separate surface with its own permissions, its own identifiers and its own disclosure obligations — and both stores publish what you collect on your own listing. A consent position that only exists in a web banner is not a position.

      • Every data type you collect is declared publicly on your listing
      • Tools embedded in the app collect on your behalf and count as yours
      • What a person agreed to has to travel with the events, not sit beside them
    The one idea

    Pick the ledger you run on.

    Everybody who has run an app has had this argument. It ends when somebody decides which system is the source of truth and writes down why the others differ. Here is the comparison that decision is made on.

    • What it counts as one install

      A download against an account, which may be a second device for a person you already had.

      A first open by a person, tied to the account they end up using.

    • Where the number comes from

      Apple's App Store Connect and Google's Play Console, each on its own definitions.

      Your own database, which is the only ledger that also knows what happened next.

    • How far back it looks

      A window set by the platform, which differs by platform and changes without your input.

      A window you choose, applied the same way every month so periods are comparable.

    • What it says about revenue

      Nothing, unless money changes hands through the store's own payment system.

      The actual value of what that person did, once they did it.

    • How quickly it settles

      Advertising figures move for days as delayed and modelled reports arrive.

      It settles when the event happened, and it does not revise itself afterwards.

    • What it is genuinely good for

      Direction and scale — which platform, which market, roughly how much.

      Deciding anything. It is the number the business runs on.

    So why keep the other two at all?

    Because they answer questions your own database cannot. The store consoles are the only place that sees people who looked at your listing and did not install, which is the top of the whole funnel. The advertising platforms are the only place that connects an install back to something you paid for.

    What they cannot do is tell you whether the person was worth having. That answer only exists in your own system, which is why it is the ledger the business runs on and the other two are read as inputs. When a report quotes one figure and hides the disagreement, it is usually because the disagreement is the story.

    Three real accounts

    Pink Flamingo · 41-day period

    A$20.43

    Cost per job booked

    138 jobs — a figure that only means anything once the count is complete

    Cleanetic Perth · 15-day period

    53

    Jobs booked

    A$24.92 each, on a brand-new account with no history to learn from

    NexData NSW · 15-day period

    39

    Qualified leads

    Commercial and residential reported as separate outcomes

    These are web lead-generation accounts, dated in each case study, and they are here because they show the discipline this page describes: outcomes counted rather than assumed, and checked back against the business they came from. They are not app installs. SoudCoh has no published App Store or Google Play engagement, and no install, cost-per-install or retention figure appears anywhere on this site.

    Eleven things happen on an app measurement build. Here they are, in order.

    Only two of them are about installs. The rest are about what happens afterwards, which is where the money and the difficulty both live.

    1. Agree what an install is worth before measuring one

      The first session is spent writing down the three or four things a person can do in your app that are worth money. Everything else in the build points at that list, and without it every later decision is an argument about opinion.

      • What the app is for, in the business's own words
      • The one action that means it worked
      • What that action is worth, roughly, in dollars
    2. Map the three ledgers you already have

      Before anything is added we read what the store consoles, the advertising accounts and your own database currently say, for the same period, side by side. The size of the disagreement is the finding.

      • What each system reports for the same week
      • Which definitions differ, and by how much
      • Which of the three you are currently making decisions on
    3. Instrument the post-install events

      Registration, first meaningful action, second-session open, purchase or booking, and the step where people leave. These go into the app itself, agreed in plain English before anything is coded, because an event you did not add cannot be backfilled.

      • Named for what a person did, not for the screen it happened on
      • The same names on iOS and Android, so the two can be compared
      • Written down in a document you keep
    4. Send the events from your own system

      The app tells your server what happened, and your server is what reports onward. It survives a blocked network call, it can attach a real value from your own records, and it means your own database stays the source of truth rather than a copy of somebody else's.

      • One place the events are defined, not one per platform
      • Values attached from your records, not estimated
      • Consent carried with the event rather than assumed
    5. Ask for the iOS permission at a moment that earns a yes

      Not on first launch. The prompt is shown once it is obvious what the person gets, with a plain-English screen before it explaining why. This is a design decision with a measurement consequence, and it is worth more than any tooling choice on this page.

      • Never the first thing a person sees
      • A sentence in their language before the system prompt appears
      • The share who agree is reported, so the gap is visible instead of invisible
    6. Design what the privacy framework is allowed to tell you

      iOS gives you a very small budget of information per install through its aggregated reporting, and you have to decide in advance which few outcomes it spends that budget on. Chosen carelessly it reports something true and useless.

      • Pick the outcomes that matter, not the ones that are easy
      • Accept the delay, and stop reading the first two days as final
      • Expect nothing at all below the volume threshold, and plan around it
    7. Carry the context through the store door

      Links are built so that a person who taps an ad about one thing opens the app on that thing, even though the store sat between the two. It is the difference between a first session that continues a thought and one that starts from nothing.

      • The specific page or product survives the install
      • Existing users open the app directly instead of visiting the listing
      • Tested on both platforms, on real devices, before launch
    8. Reconcile against your own records every month

      Once a month the reported figures are checked against what actually happened in your business, and the difference is written down. Reconciliation is what turns a dashboard into a number you can spend against.

      • Reported outcomes against real ones, for the same period
      • The gap named and explained, not smoothed away
      • Signed off by someone on your side, not only ours
    9. Report one number, and show its working

      A single agreed figure for what the app produced, with the three ledgers underneath it and a plain sentence explaining where they differ and why. Anyone in the business should be able to read it without a glossary.

      • One headline number everyone has agreed to
      • The disagreement shown, not hidden
      • Written for the person who has to make the decision
    10. Keep the declarations true as the app changes

      Every release can change what the app collects, and the declarations published on your store listings have to keep pace. This is reviewed as part of the release, not once a year when somebody remembers.

      • Any new tool inside the app collects on your behalf
      • The published data list checked against reality each release
      • Account deletion still reachable from inside the app
    Audit to the first reconciliation

    A month before anyone should believe a number.

    1. Week one

      Read the three ledgers

      Store consoles, advertising accounts and your own database compared over the same period, with the disagreement quantified. You keep that document whether or not you go further with us.

    2. Week one

      Agree the event list

      The three or four actions that mean the app worked, named in your language, with a rough value against each. Signed off before anything is coded, because this is the decision every later one depends on.

    3. Weeks two to three

      Instrument and connect

      Events added to the app, the server-side path built, the permission prompt designed with the screen that precedes it, and the link handling built so context survives the store.

    4. Before launch

      Test it as a person, on a phone

      Every path walked on real iOS and Android devices, including the ones where somebody declines a prompt or has no connection. A second person checks the build before anything is switched on.

    5. First month

      Let it settle, then reconcile

      The aggregated reports arrive late by design, so the first fortnight is read as incomplete rather than as a result. At the end of the month the figures are checked against your own records and the gap is written down.

    6. Ongoing

      One number, monthly, with its working

      A single agreed figure and the three ledgers underneath it. When they disagree, the report says so and says why, rather than quietly picking the flattering one.

    Your reported numbers will probably move once this is done, and not always upward. Counting properly usually finds fewer installs than the advertising platform claimed and more value behind the ones that were real — and we would rather say that here than let the first report imply we improved something.

    SoudCoh Compound™

    Work you cannot see from a screen needs a record you can open.

    Compound is how our team works on any engagement — six stages every change passes through. Measurement inside an app leans hardest on these two, because none of it is visible from the outside.

    • Countersign

      Nothing reaches a live account with one name on it.

      Measurement changes are checked by a second person before they run. On a phone that check is worth more than it is on a website: an event named wrongly ships inside a release, and a release lives on people's devices until they choose to update it.

    • Ledger

      Every executed change becomes a record you can open.

      What was instrumented, when, and what it changed in the reporting — kept in a dated record rather than in somebody's memory. Six months later, when a number moves, the first question is always what else moved, and this is the only way to answer it.

    FAQ

    App measurement, answered.

    Why the numbers disagree, what the iOS prompt really costs you, whether Android is easier, what to do about an app that is already live, and who owns the setup afterwards.

    The first call is free and there is no deck.

    Book a free strategy call

    Because they are counting different things. The store console counts downloads against an account, which can include a second device belonging to somebody you already had. The advertising platform counts installs it believes it caused, over a window it sets, and revises that figure for days afterwards as delayed and modelled reports arrive. Your own database only knows about people who opened the app and identified themselves. All three can be correct at once. The work is not to make them agree — they will not — but to decide which one the business runs on, and to write down the size and the reason of the gap between them.

    It is Apple's aggregated way of telling an advertiser that an install happened without telling anyone which person it was. Three properties make it feel like a downgrade. It is delayed, so the first days of any period read as far worse than reality. It carries a very small budget of information per install, so you have to decide in advance which few outcomes it will report on. And it withholds detail entirely below a volume threshold, which looks identical to zero results. None of that is a fault to be fixed; it is a constraint to be designed around, which mostly means choosing the outcomes it reports carefully and reading short windows as incomplete.

    It gates the identifier that lets an ad platform tie an install back to a specific device. Where somebody declines, device-level attribution for that person is gone and reporting falls back to Apple's aggregated framework. The prompt can only be shown meaningfully once, which makes when and how you ask it one of the highest-value design decisions in the whole project. Asked on first launch, before a person has any reason to agree, it is usually declined. Asked once the benefit is obvious, with a plain-English screen explaining why, it does considerably better — and either way we report the share who agree, so the gap is visible rather than silently absent.

    Today it is more generous, and it is moving in the same direction. Google Play passes a referral signal through the install that makes the link between an ad and a download more reliable than the iOS equivalent, and the identifier situation is less restrictive. It is also changing: Android's own privacy programme is replacing device identifiers with aggregated and on-device alternatives on a published timetable. Anything built on the assumption that Android will stay as it is now has a maintenance bill attached to it, which is one reason the events that matter belong in your own system rather than in a platform's.

    Because it is the easiest number in the chain to move and the least connected to money. Downloads can always be bought more cheaply by reaching people less likely to open the app twice, so a report that stops at the install rewards exactly the wrong outcome. The figures that decide whether the app was worth building sit after it: registration, the first meaningful action, and the second-session open about a week later. Those live in your own database, they have to be instrumented while the app is being built, and they are what a measurement engagement should be pointed at from the first meeting.

    Yes, with one honest caveat: it starts from the day it ships, not the day you wish you had asked. Events are added in code, so they go out in a release, and a release only reaches people who choose to update — which means two versions of your app are reporting differently for weeks. History cannot be backfilled at all. That is precisely why we push measurement into the build rather than treating it as a launch task, and why an existing app usually gets a short instrumentation release before anything else is judged.

    It is a link that opens a specific place inside the app rather than its home screen. It matters here because the store sits between your advertising and your app and carries nothing forward: without deliberate handling, a person who tapped an ad about one thing opens the app on a blank general screen and has to find it again. Deferred deep linking is the version that survives an install, so somebody who did not have the app when they tapped still arrives in the right place after installing. It is the single cheapest improvement to a first session that most apps have never made.

    Sometimes, and less often than the sales pages suggest. A dedicated attribution product earns its cost when you are spending across several platforms at once and need one consistent view, or when deferred deep linking and the aggregated-reporting configuration would otherwise be built by hand twice. If you are on one or two platforms and your own database already knows who did what, the honest answer is often that the store consoles plus your own reporting are enough, and we would rather tell you that than add a licence you did not need.

    Expect the first fortnight to be misleading and to be read that way. Aggregated reports arrive on a delay by design, delayed figures continue to revise, and a period that ends before the delay expires is always understated. The first month is where the instrumentation is proven and the first reconciliation against your own records happens; from the second month the reporting is stable enough to make decisions on. Anybody quoting a confident cost per install in week one is quoting a number that is still moving.

    You do, and yes. The accounts are yours, the event definitions are written into a document you keep, and the server-side path runs in your own systems rather than in ours. This is the same ownership posture our platform work carries — source-code escrow from sprint one, a written data exit with a notice period and an agreed format. If you replace us, the thing you are replacing is our attention, not your access to your own data.

    Both stores publish what your app collects on your own listing, and that declaration includes whatever a third-party tool inside the app collects on your behalf. So the honest scope of this work includes keeping that list true as the app changes, carrying a person's consent with the events rather than beside them, and making account deletion reachable from inside the app, which both stores expect. A consent position that only exists in a website banner does not cover the app, and we will not build as though it does.

    Not a published store app, no, and we would rather write that here than let a case study imply otherwise. SoudCoh has no App Store or Google Play listing of its own, so there is no install figure, no cost per install and no retention curve on this site. What we can show is the same discipline applied to web accounts, in depth and with the figures dated: counted outcomes rather than form loads, reconciled monthly against the client's own records, and reported as one number with its working shown. If a released app is the reference you need before you commit, that is a fair requirement and you should hold us to it.

    Measurement is never the only thing that needs fixing.

    Most engagements that start here end up touching two or three of the following. If you are not sure which order to do them in, that is exactly what the first call is for.

    Further reading

    The same argument, made for a website rather than an app: how to tell whether your enquiries are being counted at all. And for the conversation that follows the first reconciled report, what a monthly report should actually contain.

    Measure the disagreement

    Send us a recent period and we will put the store console, the advertising platform and your own records side by side, and tell you how far apart they are and why. Yours to keep either way.

    No pitch deck. No upsell. A real conversation and a number you can check.