🧩 I Built a Privacy-First Chrome Extension to Collect Public Emails from LinkedIn

Published: (January 17, 2026 at 06:37 AM EST)
2 min read
Source: Dev.to

Source: Dev.to

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
  • Clearly wouldn’t pass Chrome Web Store review

So I decided to build a small tool myself. That’s how ReachIn was born.

πŸ‘‰ Repo:

What ReachIn Is (and What It Isn’t)

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.

I set a few non‑negotiable rules early:

  • Everything runs locally
  • No network requests
  • User action triggers everything
  • The behavior is 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.

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:

πŸ‘‰

Happy building.

Back to Blog

Related posts

Read more Β»