Definition
beforeinstallprompt userChoice
userChoice is a property on the deferred beforeinstallprompt event, resolving to an object like { outcome: "accepted" | "dismissed", platform: "web" }, available after calling deferredEvent.prompt(). It is the only reliable, synchronous-feeling signal for whether a user actually accepted or dismissed your custom install prompt in that specific interaction.
Typical usage: deferredEvent.prompt(); const { outcome } = await deferredEvent.userChoice; if (outcome === "accepted") { /* log conversion */ } else { /* maybe suppress the CTA for a while */ }.
The captured event object is single-use — after userChoice resolves, calling prompt() again on the same event instance throws, so a site wanting to prompt again later must wait for a fresh beforeinstallprompt event on a future page load.
outcome: "dismissed" covers both the user explicitly clicking "Cancel" and simply closing the dialog without choosing, so it cannot distinguish an active rejection from an ignored prompt — some teams track dismiss frequency to decide when to stop showing their own install CTA rather than trying to interpret dismissal intent further.
userChoice measures the outcome of your own custom install button, not installs completed via the browser's own address-bar icon or menu — appinstalled is the complementary signal that catches those paths too.