๐Ÿงฉ 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 ยป

All your OpenCodes belong to us

Article URL: https://johncodes.com/archive/2026/01-18-all-your-opencodes/ Comments URL: https://news.ycombinator.com/item?id=46674424 Points: 11 Comments: 0...

Simple GIS on Potato

Article URL: https://github.com/blue-monads/potato-apps/tree/master/cimple-gis Comments URL: https://news.ycombinator.com/item?id=46672701 Points: 7 Comments: 1...