I Built a Chrome Extension to Clean My LinkedIn Feed — Here's How
A few months ago, I got fed up with my LinkedIn feed. It wasn't the connections or job posts—it was the noise. Promoted posts, suggested content, newsletter spam, polls from random accounts, reshares of reshares, and video-only posts that I couldn't even watch at work.
Instead of just complaining, I decided to build a solution.
Enter LinkClean, a Chrome extension that filters out exactly what you don't want to see. No corporate dashboards, no "freemium nightmare." Just click install, toggle what you want hidden, and get back to actual meaningful content.
The Problem
LinkedIn's algorithm rewards engagement, not relevance. The feed became a wasteland of:
- Promoted posts disguised as regular content
- "Suggested" recommendations from accounts you never followed
- Newsletter advertisements
- Polls asking nonsense questions
- Reshares of content you've already seen
- Videos with no captions (useless when you can't hear audio)
Every platform has ad settings, but they're buried, half-work, or serve LinkedIn's interests instead of yours. So I built what I wanted to use.
The Technical Approach
I could've used CSS selectors to hide elements, but LinkedIn's DOM is a mess of obfuscated class names that change constantly. Instead, I went with text-based detection.
Instead of looking for .something_12ab3, LinkClean looks for actual text patterns:
- Posts containing "Promoted" or "مروّج" (Arabic for promoted)
- Posts with "Suggested for you" in 7+ languages
- Elements with "Share your thoughts" or newsletter indicators
- Video-only posts with no description
This approach is more resilient. Even if LinkedIn reshuffles their DOM, text doesn't change.
Key Technical Decisions
1. Privacy-First Architecture
No backend. No tracking users' LinkedIn activity. No data collection beyond anonymized analytics (GA4 Measurement Protocol—no cookies). Everything runs locally in your browser.
2. Multilingual Support
LinkedIn is global. I built detection for 20+ languages:
- English, Spanish, French, German, Italian, Portuguese, Russian, Chinese, Japanese, Korean
- Arabic, Hebrew, Hindi, Bengali, Thai, Turkish, Polish, Dutch, Swedish, Norwegian, Danish
One user in São Paulo, one in Tokyo, one in Tel Aviv—all get the filters in their language.
3. Content Script + Service Worker
The extension uses a modern architecture:
- Content script runs on LinkedIn pages, detects unwanted posts in real-time, and hides them
- Service worker maintains a badge counter ("123 posts hidden today") and handles state
- Popup shows toggles for each filter type and live stats
4. Open Source from Day One
I open-sourced it on GitHub because:
- People trust what they can audit
- Community contributions make it better
- No pressure to monetize aggressively (though Pro features exist for power users)
From Idea to Chrome Web Store
Building an extension is faster than shipping web apps, but not by much:
- Setup — Used WXT, a modern framework that handles manifest generation for Chrome MV3
- Detection Logic — 300 lines of text pattern matching + language keyword maps
- UI — React + Tailwind for the popup (8 toggle filters + stats counter)
- Testing — Manual testing on real LinkedIn (no way around it)
- CWS Submission — Screenshots, privacy policy, terms. Took 3 days to review.
Total time: ~3 weeks from "I'm annoyed" to "available on the Chrome Web Store."
The Response
It's been live for a few weeks now. Early users are using it on 50+ LinkedIn sessions daily. Reviews so far:
- "Finally, LinkedIn is usable"
- "Saved me 20 minutes a day"
- "Why didn't LinkedIn build this?"
Some people never use the Pro features—they just want the core filters free. Others want to hide more things, customize deeper, or get weekly reports. That's the freemium model.
Technical Stack
- WXT — Framework for cross-browser extensions
- React + Tailwind — UI components (lightweight, ~50KB)
- Manifest V3 — Security-first extension standard
- GA4 Measurement Protocol — Privacy-respecting analytics
- LemonSqueezy — License management (no server complexity)
What I Learned
- Text patterns > CSS selectors — Platforms obfuscate class names, but text is stable
- Launch small, iterate fast — Don't wait for perfect
- Users will tell you what they want — Listen to reviews and feature requests
- Privacy is a feature — People actively want extensions that don't collect data
- Open source builds trust — Especially for browser extensions (which are scary to users)
Try It Out
If you're on LinkedIn regularly and sick of the noise:
- Install from Chrome Web Store
- GitHub repo — audit the code, contribute, or fork
- Landing page — full docs, privacy policy, FAQ
Feedback welcome. Feature requests too.
Have you built a tool to fix something that bothered you? Would love to hear about it in the comments.
Top comments (0)