
How to Monetize a Free Chrome Extension With 101,347 Users
My 2015 extension has 101,347 users and has never earned a cent. Why you can't monetize a free Chrome extension with a Pro version, and what I did instead.
Rejection notices, build logs and the things that broke: what I learned shipping browser extensions, SaaS and games as a solo developer.
9 posts, latest

My 2015 extension has 101,347 users and has never earned a cent. Why you can't monetize a free Chrome extension with a Pro version, and what I did instead.

Chrome Web Store rejected my extensions seven times in nine months. Every notice, the exact code and copy they flagged, and what I changed to pass.

Next.js static export i18n breaks the usual rewrite trick for a prefix-free default locale. Here is the route-group layout I run on two live sites.

A Chrome extension MAIN world content script can patch the page's own fetch. Here is why mine saw nothing on the first screen, and where the fix went.

chrome.browsingData excludeOrigins only applies to cookies, cache and storage. Why keeping a whitelist of logins takes several remove() calls, not one.

A Gmail extension without the Gmail API: read whole threads from the print view, unread counts from the Atom feed, and skip restricted scopes entirely.

A working MV3 offscreen document pipeline for tab recording: where the stream ID has to come from, why audio needs replaying, and the Retina resolution trap.

Shipping optional_host_permissions instead of a broad host_permissions block, with the user-gesture rule that breaks the request and how to structure around it.

A Chrome extension PDF export built on jsPDF can fail review for remote hosted code. Here is the browser-print approach I use instead, plus DOCX and XLSX.