Extension intelligence · installation to release
See every installation. Know what every release changes.
Start with a pinned rate, a permission decline or a release anomaly. Open the exact population, inspect a real installation, then follow its activity down to the source event.
SDK 0.6 · MV3-ready · Remote modules · Chrome / Firefox / Edge / Safari
Events stream over SSE when the public demo is active
The gap
Store dashboards stop before the product work starts.
The store can tell you a rough audience number. It cannot tell you which release hurt retention, which browser keeps users, or what people say when they uninstall.
One SDK, one install base, broken down across Chrome, Edge, Firefox and Safari.
The product
Follow the full extension lifecycle.
Sample data — the public demo is warming up.
Micro → macro
Every metric opens the people behind it
Start with the signal. Open its exact population, inspect a real installation, then follow milestones and source events without rebuilding the query.
Retention
Find the versions and markets that keep users
Read retention curves, version adoption, update paths and country breakdowns in one place. When a release changes behavior, the dashboard should make it obvious.
Churn
Turn uninstalls into product feedback
When someone uninstalls, a feedback page opens in their language and asks why — seven reasons, one optional comment. Pair that with observed churn and heartbeat silence.
Integration
Wired in one call.
Initialize the SDK once and it tracks lifecycle, active usage, toolbar state, permissions, context menus, shortcuts, omnibox, and notification engagement when those browser APIs are present. Add explicit product events only where they matter. Adoption, Engagement, and Reliability remain remotely adjustable as coherent groups.
import { initExtensionReport } from "@extension-report/js";
// initialize lifecycle and automatic extension signals
const sdk = initExtensionReport({ projectPublicKey: "pk_er_..." });
// optional: track specific UI or configuration moments
await sdk.popup.opened();
await sdk.trackCustomEvent("settings_saved");SDK permissions are lightweight: "storage", "alarms", and your extension.report host permission. Feature permissions stay tied to the features your extension already uses.
Need server-side exports? Owner Stats API is available on plans with API access.
Pricing
Start with evidence. Scale with usage.
No trial clock and no invitation. Every plan uses the same owner-first telemetry pipeline; paid plans add capacity, history, and automation.
Prices exclude applicable taxes. You can change or cancel a paid plan from your workspace once billing is enabled.
Questions
Asked, answered.
Will this get my extension rejected from the store?
The SDK collects a random installation ID and coarse context (browser, OS, version) — no cookies, no browsing history, no personal data. Country is derived from the IP at ingestion and the IP isn't stored. You disclose the telemetry in your privacy policy like any analytics, and you stay well inside Chrome Web Store and AMO data policies.
How accurate is uninstall tracking?
Honest answer: it's best-effort, like everything built on setUninstallURL — some uninstall pages never open. That's why the dashboard pairs observed uninstalls with churn estimated from heartbeat silence, so the trend is reliable even when individual events are missed.
How do I learn why users uninstall?
The moment an uninstall happens, the browser opens your feedback page — localized in six languages — asking one question: why? Seven reasons, one optional comment. Reasons and quotes land on your report next to the churn numbers. No store dashboard does this.
Does it survive MV3 service workers going to sleep?
Yes — it was designed for that. Events queue persistently in storage.local, ship in batches with retry and exponential backoff, and heartbeats piggyback on alarms or the next wake. A worker being killed mid-flight loses nothing.
Which browsers are supported?
Chromium (Chrome, Edge, Brave, Arc…), Firefox, and Safari WebExtensions. One dashboard, one install base, broken down by browser, version and country.
What happens if my extension suddenly takes off?
Remote config is fetched by the SDK, so you can reduce Adoption, Engagement, or Reliability as coherent groups, roll changes out progressively, target compatible clients, cap noisy traffic, or stop telemetry entirely — without waiting for another store review.