1
2 Comments

How I Built a LinkedIn Lead Capture Tool That Solved My Own Problem

Hi Indie Hackers,

I built LeadzTrak because I was frustrated with my own workflow.

Every day, I'd find prospects on LinkedIn, manually copy their name, title, company, and profile URL into a spreadsheet. Then I'd lose track of who I'd contacted, when to follow up, and what we discussed.

The spreadsheet always won. And I knew other salespeople and recruiters had the same problem.

So I built a Chrome extension that adds a panel inside LinkedIn. Open a profile, click Extract — it saves. Group leads, set follow-up reminders, draft messages — all without leaving the page.

What I learned:

  • Building a LinkedIn integration is harder than it looks (their DOM changes constantly)
  • The hardest part wasn't the code — it was keeping the panel in sync with LinkedIn's SPA navigation
  • Selling to salespeople means they need to see ROI in under 60 seconds
  • My first users came from Reddit, not paid ads

Stack: TypeScript, Supabase, Stripe, Chrome Extensions API

Happy to answer questions about Chrome extension development, LinkedIn DOM scraping, or selling to sales teams.

on June 20, 2026
  1. 1

    The LinkedIn SPA sync pain is so real. Their DOM changes like weekly and half the selectors break without warning. What did you end up using MutationObserver, or polling on URL changes?

    One thing I'm curious about: beyond capture, are you doing any enrichment? The manual copy-paste problem is real but the bigger gap for most salespeople is knowing who to reach out to next and what to say. Capturing is step one: the real leverage is having the tool tell you "this person fits your ICP because X, Y, Z."

    Also curious how you're handling LinkedIn's rate limiting on profile views. That's the wall most extensions hit eventually.

    1. 1

      Great questions. A few thoughts:

      On SPA sync: We use both, mutation observers for in-page changes and URL-based triggers for route transitions. The key was keeping a single source of truth for the current profile context so the panel stays in sync regardless of how LinkedIn navigates.

      On enrichment: Completely agree, capture is table stakes. We do AI enrichment on extracted profiles (company info, role classification, seniority, intent signals). We surface a relevance score based on ICP fit so users know who to prioritize. The "what to say" part is handled through message templates linked to the profile context, so you're drafting based on what you just extracted, not a generic template.

      On rate limits: Definitely the wall. We batch operations, throttle intelligently, and avoid patterns that trigger LinkedIn's bot detection. The extension is designed for human-speed workflows, not bulk scraping, which keeps it sustainable.

      The real value isn't just capturing data, it's having a system that tells you what to do next with that data.

Trending on Indie Hackers
Priorities for launching a SaaS solo, with no budget User Avatar 107 comments Three Days Before Launch, I Let My Own Tool Tear Me Apart User Avatar 37 comments I thought I was building a news visualization tool. Users thought it was a catch-up tool. User Avatar 34 comments I Rejected a $15K Acquisition Offer for My Multi-Agent IDE — Here's the Full Breakdown User Avatar 28 comments I built a desktop client for Cloudflare R2 / S3. Just got $10k in Cloudflare credits. $0 marketing so far — here's where I actually am. User Avatar 13 comments 5 Books, Make Smarter User Avatar 8 comments