The "Trojan Horse" Chrome Extension Engine
Turn a free browser tool into a lead-gen machine that captures emails while solving tiny daily annoyances.
The Play: Build a dead-simple Chrome extension that solves one micro-problem for your target user—like a "one-click LinkedIn email finder" or "instant meeting summarizer." Give it away free. Use it to capture emails and subtly surface your main SaaS platform inside the extension interface.
Why This Works:
Chrome extensions live in the browser—the place where your users spend 6+ hours daily. By solving a specific pain point for free, you create habitual usage. Every interaction is a touchpoint. The extension isn't your product; it's your distribution channel. The email capture happens naturally (users expect accounts for synced features), and your upsell surfaces contextually when users hit limitations.
The Implementation Stack:
Category | Tool | Notes |
|---|---|---|
Extension Framework | Plasmo | Free, React-based, hot reload |
Email Capture | Supabase Auth | Free tier: 50K MAUs |
Analytics | PostHog | Free tier: 1M events/month |
CRM Sync | Pipedrive API | Push leads automatically |
Upsell UI | React Modal | In-extension upgrade prompts |
Step 1: Plasmo (The Framework)
Plasmo handles all Chrome extension boilerplate. Initialize with:
pnpm create plasmo --with-tailwindcss
cd my-extension && pnpm dev
Your extension hot-reloads during development. No webpack config nightmares.
Step 2: Supabase (Email Capture)
Add Google OAuth for frictionless signup:
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY)
const signIn = async () => {
const { data, error } = await supabase.auth.signInWithOAuth({
provider: 'google',
options: { redirectTo: chrome.identity.getRedirectURL() }
})
}
Step 3: PostHog (Usage Analytics)
Track which features users love (and where they bounce):
posthog.capture('feature_used', {
feature: 'email_finder',
linkedin_url: url,
user_tier: 'free'
})
Step 4: The Upsell Trigger
When users hit the free limit, show a contextual modal:
if (dailySearches >= 5) {
showModal({
title: "You're on fire today 🔥",
body: "Upgrade to Pro for unlimited searches + CRM sync",
cta: "See Plans",
link: "https://yourapp.com/pricing?ref=extension"
})
}
Step 5: CRM Sync
Push captured leads to Pipedrive automatically:
await fetch('https://api.pipedrive.com/v1/persons', {
method: 'POST',
headers: { 'Authorization': `Bearer ${PIPEDRIVE_TOKEN}` },
body: JSON.stringify({
name: user.name,
email: user.email,
label: 'extension_signup'
})
})
The Result:
CAC: $0 (organic installs via Chrome Web Store)
Email capture rate: 35-50% of active users
Upsell conversion: 3-7% (contextual > cold)
You're not building a side project—you're building a lead pipeline that lives where your users already work.
