While job hunting and doing outreach, I kept running into the same problem:
A lot of LinkedIn posts and profiles already have email addresses in plain sight, but finding them is slow and repetitive. You scroll, click βsee moreβ, copy one email, scroll againβ¦ repeat.
I tried a few tools that claimed to solve this, but most of them had at least one of these issues:
- They sent data to external servers
- Required accounts or logins
- Over-automated things in a way that felt risky
- Or clearly wouldnβt pass Chrome Web Store review
So I decided to build a small tool myself.
Thatβs how ReachIn was born.
π Repo: https://github.com/yagnesh97/reach-in
What ReachIn Is (and What It Isnβt)
ReachIn is a Chrome extension that helps collect publicly visible email addresses from LinkedIn search result pages.
What it does
- Works only when you explicitly click a button
- Scrolls through LinkedIn search results
- Expands visible content
- Extracts email addresses already shown on the page
- Stores everything locally in your browser
- Lets you copy results or view past collections
What it does not do
- No background scraping
- No credential access
- No analytics or tracking
- No servers
- No remote APIs
- No automation running on its own
Privacy From Day One
Chrome reviewers care far more about intent and data handling than fancy features.
So I set a few non-negotiable rules early:
- Everything runs locally
- No network requests
- User action triggers everything
- The behavior must be easy to explain in plain English
Under the Hood (High Level)
ReachIn is a plain Manifest V3 Chrome extension. No frameworks, no build step.
Structure looks like this:
βββ assets/
β βββ css/
β β βββ popup.css
β βββ js/
β β βββ background.js
β β βββ content.js
β β βββ popup.js
β βββ icons/
β β βββ icon-16.png
β β βββ icon-32.png
β β βββ icon-48.png
β β βββ icon-128.png
β
βββ popup.html
βββ manifest.json
β
βββ README.md
βββ PRIVACY.md
βββ LICENSE
βββ .gitignore
The flow is simple:
- The popup controls everything
- The content script runs only on
linkedin.com - Scripts are injected only after user action
- Data is stored with
chrome.storage.local
Content Script
The content script does three things:
- Scrolls the page
- Clicks βsee moreβ where needed
- Extracts emails from visible text and
mailto:links
Thatβs it.
- No DOM mutation beyond expanding content.
- No hidden scraping.
- No background execution.
This was critical for staying within Chrome Web Store policies.
Whatβs Next
Iβm keeping the roadmap intentionally conservative:
- Minor UX improvements
- Performance tweaks
- Optional export formats
If youβre curious, feel free to check out the repo:
π https://github.com/yagnesh97/reach-in
Happy building.
Top comments (0)