The Chrome Web Store dashboard shows you weekly users, installs, and uninstalls — most of which are misleading in specific, documentable ways. What it doesn't show you at all is the single number every growth team should care about: the percentage of people who land on your listing and click Install. That's your listing conversion rate, and it's the leverage point that decides whether ten thousand impressions become ten installs or two thousand. This guide is the benchmarks, the levers that actually move it, and how to measure the rest of the funnel — install → activation → retained user — without losing data at the Web Store handoff.
What "Chrome Web Store conversion rate" actually means
There are three numbers people call "conversion rate" for an extension, and they measure very different things:
- Listing CVR — installs ÷ listing impressions (people who saw your card on the store). This is the one Web Store growth posts usually mean. Google doesn't expose impressions directly; you infer it from search-result rank and category placement, or from your own traffic.
- Visit CVR — installs ÷ page views of the listing. Closer to what you can measure: every visit to your CWS listing URL is one denominator unit. Higher than listing CVR because someone clicked the card already.
- Click-through install rate — installs ÷ clicks on your own "Install on Chrome" button on your landing page. The number you fully control. Usually the highest of the three (warm traffic).
Pick which one you mean before you compare to a benchmark. Mixing them is how teams convince themselves they have a 25% conversion rate when they actually have 3%.
The full funnel: impression → retained user
Conversion rate isn't a single number; it's a chain. The honest extension funnel has five stages, and the conversion you report should specify which stages it spans:
- Listing impression — your card appears in front of a human (search result, category page, recommendation).
- Listing view — they click into the listing page.
- Install — they click Add to Chrome.
- First-use — they actually use the extension at least once (the "activation" gate).
- Retained — they're still using it after a week / 30 days.
Most listing-CVR conversations stop at step 3. That's a mistake: a 12% install rate with 30% D7 retention is a far better extension than a 25% install rate with 5% D7 retention, because the second extension is converting curious clickers into uninstalls. Your moneymaker number is impression → retained, and you need both halves of the funnel measured to compute it.
Realistic benchmarks (and where most extensions sit)
Treat these as orientation, not targets. Category, listing category placement, and audience temperature all shift the numbers heavily:
- Listing view → install: 6–14% is typical for a focused utility with good screenshots; 15–25% is the top decile; below 5% usually means the listing has a clarity or trust problem rather than a product problem.
- Landing page → install (warm traffic): 25–50% if the page is built for the extension; below 20% usually means too much friction (multiple CTAs, scroll required to find the install button, unclear value prop).
- Install → first use (D0 activation): 50–75% when the extension does something obviously useful on install; 25–50% when the user needs to navigate somewhere or configure something first; below 20% means most users installed and didn't see the value before the next tab switch.
- D7 retention: 25–40% for a useful utility; 50%+ for a daily-driver category (translator, blocker, dark-mode). See the DAU/MAU guide for the wider picture.
- D30 retention: 15–25% is healthy; 40%+ is excellent.
Compounding through the funnel: an extension with 10% listing CVR, 50% activation, 30% D7 retention converts 10% × 50% × 30% = 1.5% of listing visitors into a week-old user. That number — "listing view to D7 retained" — is the one that most predicts how fast you compound install base.
The four levers that actually move CVR
1. The first screenshot
On the listing page, one screenshot is shown above the fold and the rest require a horizontal scroll. That one image single-handedly accounts for most of the CVR variation between listings in the same category. Two rules that consistently move the number:
- Show the outcome, not the UI. A translator's best first screenshot is the translated text inline on a familiar page, not the popup's settings panel. A clipper's best first screenshot is the resulting clip list, not the highlight selection.
- Include a six-word benefit caption. The listing description is collapsed; the screenshot caption is not. "Translate any page in two clicks" on the screenshot itself is the highest-leverage copy real estate you have.
2. The promotional tile (small / large / marquee)
These show up on the category page and in search results, before users ever land on the listing. A weak promo tile means your listing-view denominator is smaller than it could be. Common mistakes: extension name in tiny text, generic gradient background, abstract icon. Reliable wins: large readable name, one outcome verb, dark-on-light or light-on-dark for contrast, avoid clip-art metaphors.
3. Permission anxiety
"Read and change all your data on all websites" is the scariest sentence in the install dialog and it kills CVR more than any other single factor. Three mitigations:
- Use
activeTab+ host_permissions on demand wherever possible. The install-time permission string changes from "all your data" to a much milder variant. - Address it in the description. The second paragraph of your listing description is read by anyone who's nervous. A short, plain "we use this to do X and never send Y" halves the bounce rate at the install dialog.
- Link your privacy practices. The Web Store shows your stated data handling — fill it in honestly, link a real privacy policy. See privacy-first analytics for the broader argument.
4. Social proof — visible above the fold
Rating and review count appear by your extension name in the listing header. Below ~4.3 stars or below ~50 reviews, CVR flattens fast — users assume the extension is unproven and bounce. Two slow-but-real moves: prompt for ratings only after a clear success state (translation succeeded, ad blocked, clip saved), and ask only once per user. The activation event from the DAU/MAU guide is the right gate for the prompt — the expected response rates per timing pattern and the full review-prompt code are in how to get more Chrome extension users.
How to measure each stage (including the gap)
The Web Store dashboard gives you weekly installs and weekly active users. It doesn't give you listing impressions, listing views, or what happened after install. You have to instrument the rest yourself, and stitch across the gap.
The gap is the problem: when a user clicks the Web Store install button, you lose all session context. There's no cookie, no referrer, no UTM survival. The trick is the same as for install attribution — a handoff via a server-generated attribution ID that lives in both your landing-page session and the extension's first event.
Stage 1–2: Impression → listing view
Listing impressions aren't reported by Google — and what moves them is the Chrome Web Store SEO signals (title keyword match, install velocity, review recency). Your best proxies for measuring volume, in order of usefulness:
- Search Console for your landing page — if your landing page ranks for the same queries as your CWS listing, the Search Console impression count is a rough ceiling for combined impressions.
- Direct UTM-tagged landing-page → CWS link — at least the slice driven by your own site is fully measurable.
Stage 3: Listing view → install
Web Store dashboard gives you weekly installs. To get listing views, you tag your landing-page link to the CWS with a query parameter (Web Store strips it but you read it before redirect) and count clicks. That gives you a clean view-to-install on the traffic you drive yourself. The organic CWS traffic stays opaque — Google's data, not yours.
// On your landing page: capture and redirect, so you log
// the "intended install" before handing off to the Web Store.
function onInstallClick() {
const sourceId = crypto.randomUUID();
// Persist on your side BEFORE redirect.
fetch('/api/install-intent', {
method: 'POST',
keepalive: true, // survive the navigation
body: JSON.stringify({
source_id: sourceId,
utm_source: getUtm('utm_source'),
utm_campaign: getUtm('utm_campaign'),
referrer: document.referrer ? new URL(document.referrer).origin : null,
}),
});
// Then redirect to the Web Store listing. Strip params from the URL
// since the Web Store ignores them anyway.
const cwsUrl = 'https://chromewebstore.google.com/detail/<your-id>';
// Pass the source_id through the post-install handoff. See the
// attribution post for the full pattern.
document.cookie = 'cx_src=' + sourceId + '; max-age=1800; path=/; SameSite=Lax';
window.location.href = cwsUrl;
}Stage 4: Install → first use (activation)
Send ext.installed from chrome.runtime.onInstalled and your activation event (translation.run, clip.saved, etc.) from the actual feature use. Activation rate is unique users firing the activation event ÷ unique users firing ext.installed within their first 24 hours.
-- Install → activation rate, last 30 days of installs
WITH installs AS (
SELECT anonymous_id, MIN(timestamp) AS installed_at
FROM events
WHERE project_id = $1
AND event_name = 'ext.installed'
AND timestamp >= now() - interval '30 days'
GROUP BY 1
),
first_use AS (
SELECT i.anonymous_id, MIN(e.timestamp) AS used_at
FROM installs i
JOIN events e
ON e.project_id = $1
AND e.anonymous_id = i.anonymous_id
AND e.event_name IN ('translation.run', 'clip.saved') -- activation set
AND e.timestamp BETWEEN i.installed_at AND i.installed_at + interval '24 hours'
GROUP BY 1
)
SELECT
COUNT(*) FILTER (WHERE f.used_at IS NOT NULL) * 100.0 / COUNT(*) AS activation_pct,
COUNT(*) AS total_installs
FROM installs i
LEFT JOIN first_use f USING (anonymous_id);Stage 5: Retention
Cohort by install week and count unique active users from each cohort in each subsequent week. Crxlytics builds these by default; the SQL is in the DAU/MAU guide.
A/B testing a Web Store listing without an A/B tool
The Web Store doesn't give you A/B testing. You can fake a sequential test honestly if you do three things:
- Hold install velocity constant during baseline. Don't change the listing at the same time as launching a campaign — you won't know which change moved CVR.
- Take a 14-day baseline, change one element (screenshot 1, name, short description), wait another 14 days, and compare. Weekly cycles in install rate are real (Mondays are bigger than Saturdays for productivity tools), so anything shorter than two full weeks is noise.
- Watch the full funnel, not just installs. A screenshot change that lifts installs but tanks activation can look like a win for two weeks and a loss for two months. Compare cohorts on the activation-and-D7 numbers from the previous section, not just headline installs.
For changes on your own landing page (button placement, headline, social proof) you can run real A/B tests; the click-through-install-rate from the landing page is fully instrumentable on your side, no Web Store involvement.
The forgotten half: install → activation drop-off
Most CVR-optimization posts stop at "more installs". That's the wrong half of the funnel to spend most of your time on, because for many extensions the bigger loss is between install and activation. Two patterns we see consistently:
- The forgotten install. The user installs, the post-install tab gets buried under twelve other tabs, they never see the onboarding, they uninstall a week later without ever using the extension. Fix: open the onboarding tab from
chrome.runtime.onInstalledwithactive: true, and put the first action in the first 30 seconds of the experience. - The configure-to-use trap. The user has to enable, choose a language, paste an API key, or grant a host permission before anything happens. Each step doubles drop-off. Pick a default that works for 80% of users and let them configure later — and A/B test the step count, because every team gets this one wrong on the first try.
If you don't know which of these is hurting you, the diagnostic is the install → activation funnel from §5. If your activation rate is below 40%, most of your install CVR work has worse ROI than spending the next sprint on the first 60 seconds after install.
FAQ
What's a "good" Chrome Web Store conversion rate?
For listing view → install, 6–14% is typical, 15%+ is great. For landing-page → install on warm traffic, 25–50% is typical, 50%+ is great. Don't compare across categories without adjusting; daily-driver tools naturally convert higher than niche utilities.
Why doesn't the Chrome Web Store report listing impressions?
Google does not expose them, and Search Console only covers results from Google Search itself, not from Web Store internal search or category browsing. The practical floor on impressions is your weekly install count divided by an assumed listing CVR — a useful sanity check, not a real metric.
Do reviews really matter, or is it just rating?
Both, and review count matters more than people assume below ~50 reviews. Users read the most recent few; one fresh 1-star with a real complaint hurts more than ten 5-stars without text. Reply to reviews — even short replies — because future readers see them.
Should I run paid ads to the Web Store listing?
Only with the UTM-via-landing-page handoff above. Sending paid traffic straight to the Web Store burns your attribution and wastes the budget you'll need to learn what worked. Send paid traffic to your own page, log the click, then redirect to the CWS — same conversion intent, full measurability.
How long should a Web Store listing experiment run?
Minimum two full weekly cycles (14 days) for a sequential test. If your install volume is below ~200/week, you'll need longer to separate signal from noise — closer to 28 days per variant. Resist the temptation to call a 7-day test.
What changes typically lift CVR the most?
In rough order of impact for most extensions: first screenshot with an outcome + caption, promotional tile, addressing the permission warning, then rating/review count. The icon usually matters less than people fear, and the long description matters less than the first 200 characters.
How do I see install rate per acquisition source?
Use the install-intent + post-install handoff pattern from install attribution to carry the source ID into the first event the extension fires. Then group by source and compute install → activation → D7 retention per source. That gives you a real LTV-by-channel picture without ever knowing who the user is.