How to Measure Add to Home Screen Conversions and Track PWA Installs (2026)
To measure Add to Home Screen conversions properly, you need more than a count of install prompts. A PWA install happens in the browser, sometimes outside your own UI, and on iOS it fires no event at all. This guide shows how to track PWA installs on Android and iOS, which signals to trust, and how to connect installs back to the campaigns that drove them.
What counts as an Add to Home Screen conversion
"Install" covers several different moments, and mixing them is the most common reason PWA install numbers look wrong. Define each step of the funnel separately:
|
Funnel step |
What it means |
How you observe it |
|---|---|---|
|
Eligible |
The browser considers the app installable |
|
|
Prompt shown |
Your UI or the browser showed the install dialog |
Your own event when you call |
|
Prompt accepted |
The user tapped Install in the dialog |
|
|
Installed |
The app was added to the device |
|
|
First standalone launch |
The user opened the app from the home screen |
|
|
Active installed user |
The user keeps returning through the installed app |
Repeat standalone sessions |
The conversion that matters for most campaigns is not "prompt accepted" but installed followed by real use. A home screen icon that is never opened adds nothing.
If you need a refresher on how the prompt itself works on each platform, start with our guide to the Add to Home Screen prompt.
How to track PWA installs on Android (Chromium browsers)
Chrome, Edge, Samsung Internet and other Chromium browsers expose three useful signals.
1. Eligibility. Listen for beforeinstallprompt, store the event, and log that the visitor was eligible. This gives you the denominator for your install rate.
let deferredPrompt;
window.addEventListener('beforeinstallprompt', (e) => {
e.preventDefault();
deferredPrompt = e;
track('pwa_install_eligible');
});2. Prompt outcome. When the user clicks your install button, call prompt() and read userChoice.
installButton.addEventListener('click', async () => {
track('pwa_install_prompt_shown');
deferredPrompt.prompt();
const { outcome } = await deferredPrompt.userChoice;
track('pwa_install_prompt_' + outcome); // accepted or dismissed
deferredPrompt = null;
});3. Installation. Listen for appinstalled. It also fires when the user installs from the browser menu rather than your button, so use it as the install count rather than "prompt accepted".
window.addEventListener('appinstalled', () => {
track('pwa_installed');
});How to track PWA installs on iOS
Safari on iOS has no beforeinstallprompt and no appinstalled. Users add the app through the Share menu, and your page is not told. That leaves two practical approaches:
- Count first standalone launches. When the app opens from the home screen, it runs in standalone mode. Check it on load and record the first one per device.
const isStandalone =
window.matchMedia('(display-mode: standalone)').matches ||
window.navigator.standalone === true; // iOS Safari
if (isStandalone && !localStorage.getItem('pwa_first_launch')) {
localStorage.setItem('pwa_first_launch', Date.now());
track('pwa_first_standalone_launch');
}- Tag launches through the manifest. Give
start_urlin the web app manifest a parameter such as?source=homescreen, so every home screen launch is identifiable in analytics, not just the first.
On iOS, "installed" therefore means "opened from the home screen at least once". Installs that are never opened are invisible. Report iOS on that definition rather than mixing it with Android's appinstalled count.
Also check that the manifest is valid, because an app that does not meet installability requirements never becomes eligible on Chromium. Our PWA manifest requirements guide lists the fields browsers check.
Sending install events to GA4 as key events
Any analytics tool works, but with GA4 the setup is short:
- Send the funnel events with
gtag('event', 'pwa_installed', {...})or through Google Tag Manager, using consistent names across platforms. - Mark
pwa_installed(Android) andpwa_first_standalone_launch(all platforms) as key events in GA4, so they can be reported and, where you choose, imported into Google Ads as conversions. - Add a custom dimension for display mode (
browservsstandalone) and send it with every page view. This lets you compare engagement and purchases between installed users and browser users, which is usually the most persuasive number for the PWA business case.
Connecting installs to the campaign that drove them
An install event is only useful for optimisation if you know which ad, campaign or link produced it.
- Capture first-touch parameters on landing. Save UTM parameters and click IDs (such as
gclid,fbclidorttclid) in first-party storage when the visitor lands, and attach them to the install events you send later. - Know where storage is shared. On Android, an installed PWA generally uses the same origin storage as the browser, so values saved before installation are available after it. On iOS, a Home Screen web app does not share Safari's cookies and storage, so values saved in Safari before installation are not visible inside the installed app.
- Use a server-side identity where you can. If the user signs up or logs in before installing, attach attribution to the account on your server. This survives storage boundaries and lets you send conversions server-to-server to ad platforms.
- Count each install once.
appinstalledcan coincide with an accepted prompt, and first-launch logic can repeat if storage is cleared. Deduplicate on your side with a device or user identifier before reporting conversions to an ad platform.
Benchmarks and reading the numbers
Install rates vary widely by audience, traffic source and how the prompt is presented, so external benchmarks are of little use. Track your own funnel over time instead:
- Eligible → prompt shown: tells you whether your install UI is actually reaching people.
- Prompt shown → installed: reflects the value proposition and timing of your prompt.
- Installed → first launch → 7-day return: shows whether installs turn into usage.
When you change the install UI or the moment you ask, compare these ratios before and after rather than total installs, which also move with traffic. Our PWA landing page guide covers how the page structure around the install step affects these rates.
FAQ
Can I detect a PWA install on iOS?
Not directly. Safari on iOS does not fire beforeinstallprompt or appinstalled. The reliable signal is the first launch in standalone mode, so iOS installs are measured as "opened from the home screen at least once".
Should I count "prompt accepted" or "appinstalled" as the conversion?
Use appinstalled on Chromium browsers. It also captures installs started from the browser menu and confirms the installation, while "accepted" only records the choice in your dialog.
How do I know if a session comes from the installed app?
Check window.matchMedia('(display-mode: standalone)').matches on load (and navigator.standalone on iOS Safari), or add a source parameter to start_url in the manifest. Send the result as a custom dimension with every page view.
Can install events be used as conversions in Google Ads or Meta?
Yes, as web conversion events. Send them through the platform's tag or server-side API, deduplicate them, and pass the original click ID where possible so the conversion is credited to the right campaign.
The short version
To measure Add to Home Screen conversions, separate eligibility, prompt, install and first launch. On Android, count appinstalled; on iOS, count the first standalone launch. Tag launches through the manifest, capture campaign parameters at landing, attach them server-side when you can, and judge success on installed users who keep coming back. ROIBest works with teams running PWA campaigns on this kind of install funnel.


