OPEN SOURCE

Lead Extraction Engine: Open-Source Chrome Extension That Turns Directories Into Lead Lists

OCT 13, 2026·8 MIN READ

Lead Extraction Engine: An Open-Source Chrome Extension That Turns Any Business Directory Into a Lead List

TL;DR: The Lead Extraction Engine is an open-source Chrome extension (Manifest V3, v1.0.0) that extracts B2B and B2C leads — business names, phones, addresses, websites, ratings — from Google Maps, LinkedIn, Justdial, Yelp, Zillow, and around 20 directory sites total, plus a generic extractor that works on any directory-style page. Extracted leads are stored locally in IndexedDB and export to CSV or JSON. The free tier works fully offline with 50 leads, no account, no server; paid plans validate license keys server-side against your own backend. We read the source to verify: 20 platform-specific extractor classes, real DOM parsers, a working popup UI, and a license server with fail-closed activation. It's working code at v1.0.0, packaged and ready for Chrome Web Store submission.

The problem: lead data is expensive, stale, or manual

Every agency, freelancer, and sales team needs the same thing: a list of real businesses with real contact details. The options are bad. Buying lead lists means paying for data that's often months out of date. Manual copy-paste from Google Maps or Justdial is honest work but brutally slow — a hundred leads is a full day. And the cloud-based scraping tools in between ask you to hand your prospecting pipeline to a third-party server and pay a monthly subscription for the privilege.

The Lead Extraction Engine takes the opposite approach: the extraction happens in your browser, the data stays on your machine, and the tool itself is open source. You see exactly what it collects, because you can read every line of the parser.

What it actually is

The repo (github.com/Shivay00001/lead-extraction-engine) is a Chrome extension built on Manifest V3. The src/ folder is the extension — no build step, no dependencies, pure JavaScript. Load it unpacked and it runs.

Coverage is broad: dedicated extractors exist for Google Maps, Bing Maps, Apple Maps, LinkedIn, Facebook, Instagram, Twitter, YouTube, Justdial, IndiaMART, Sulekha, Naukri, Indeed, Apna, Yellow Pages, Yelp, Zillow, Google Search — around 20 platform-specific classes — plus a generic extractor in injector.js that detects business-directory patterns on any page and pulls contact info anyway. That's the answer to the obvious objection ("what about site X?"): if it looks like a directory, the generic path handles it.

How it works: the extraction pipeline

The manifest (src/manifest.json) declares the minimum permission set the authors could get away with: storage, scripting, activeTab, notifications — with unlimitedStorage deliberately removed. Host permissions are <all_urls>, which the README justifies honestly: the generic extractor's core feature is reading contact info on arbitrary directory pages, and narrow host permissions would break it. The privacy policy states exactly what is collected — business name, phone, address, website, rating; public listing data only — and the code ships with no remote code, no eval, no external scripts.

The flow:

  1. Platform detection. content/injector.js runs on every page, detects which platform you're on, and dispatches to the right extractor class (or the universal one).
  2. DOM parsing. Each extractor is a class that knows its site's structure. The LinkedIn extractor, which we read in full, parses search-result cards via selectors like .entity-result__title-text, pulls name, title, location, and profile URL, handles Sales Navigator layouts and company pages separately, and dedupes every lead with a content hash (btoa of name+title+URL, truncated to 32 chars) so scrolling the same results twice never double-counts. Extracted cards get visually highlighted on the page.
  3. Message routing and validation. background/service-worker.js receives SAVE_LEADS messages, validates lead records, and orchestrates the pipeline.
  4. Local storage. common/db.js persists everything to IndexedDB — no cloud, no account. common/intelligence.js provides phone and email parsing utilities (emails are read from visible mailto: links and text only).
  5. Export. The popup UI (an ES module, popup.js) drives the session: auto-detect the platform, hit Start Extraction (it auto-scrolls the page and keeps extracting), Stop Extraction when done, then export to CSV or JSON, or clear all leads for a fresh run. A sample_leads_output.csv in the repo shows the exact export format.

The generic extractor: the cleverest 10% of the codebase

The platform-specific extractors are straightforward DOM parsers, but injector.js's universal extractor is what makes the tool resilient. It runs on every page, looks for directory-style patterns — repeated cards containing names alongside phone-like strings, addresses, or mailto: links — and extracts them without site-specific knowledge. That means a regional directory the authors never heard of still yields leads. The trade-off is precision: generic extraction can pick up noise (a phone number in a footer, a name in a nav menu), which is why the popup shows what was captured before export and why the dedup hashing matters. For prospecting workflows, recall-first with human review at export time is the right default — a false positive you delete costs seconds; a missed listing costs a lead.

The business model, in code

This is not just a tool — it's a sellable product skeleton, and the licensing design is the most carefully thought-through part:

PlanLeadsHow it activates
Free50Nothing needed — works fully offline, no account, no server
Starter500License key validated server-side
Pro2,000License key validated server-side
Agency10,000License key validated server-side

background/license-manager.js enforces plan limits, and paid keys are validated server-side against the operator's own backend (backend/server.js, an Express app with GET /health and POST /validate behind an X-API-Key header). Two design decisions worth noting: the extension never grants paid plans from built-in keys, and activation fails closed — if no license server is configured, paid activation simply doesn't work, while the free tier keeps working. The server refuses to start without LEE_API_KEY set, and .env.example ships with dummy values only. All runtime secrets live in chrome.storage.local; the README's secret scan in the smoke test enforces that nothing is hardcoded.

Who this is for

Three profiles get the most from this tool. Agencies and freelancers doing outbound for clients: build a 500-lead list for a niche (say, dental clinics in Austin or restaurants in Manchester) in an afternoon instead of a week, then export CSV straight into the outreach pipeline. Founders validating a market: size a vertical by extracting every listing in a category and geography before writing a line of pitch. Developers: the extractor-per-platform pattern is a clean template for any browser-automation task — the class interface (detect, parse, dedupe, message) is easy to extend to a new site in under an hour.

What it won't do: replace verified data providers for high-stakes outreach. Extracted phones and emails are what the listings show; the README is explicit that email verification is not implemented. Treat output as a prospecting starting list, verify before you send, and respect each platform's rate limits and terms — aggressive auto-scrolling on LinkedIn is the fastest way to get an account flagged, extension or not.

How to run it

  1. Clone the repo: git clone https://github.com/Shivay00001/lead-extraction-engine.git
  2. Open chrome://extensions/, enable Developer mode, click Load unpacked, select the src/ folder.
  3. Pin the extension, visit a supported directory (Google Maps, Justdial, LinkedIn, …), open the popup, and hit Start Extraction.
  4. Export via CSV or JSON when done.

Developers: npm test runs the smoke test (JS syntax + manifest validation + hardcoded-secret scan), and npm run package builds dist/lead-extraction-engine-v1.0.0.zip from src/ only — that's the Chrome Web Store artifact. PRIVACY_POLICY.md and the permission justifications are written and ready for the listing submission.

Selling paid keys: copy .env.example to .env, set LEE_API_KEY and your LEE_LICENSE_KEYS map ({"KEY":{"plan":"STARTER","limit":500,"expires":"2026-12-31"}}), then npm install && npm start. In the popup's Advanced panel, point the extension at your license server URL and API key.

The honest legal framing

The README states its boundaries plainly, and they're worth repeating: public listing data only — no login bypass, no CAPTCHA bypass. Users are responsible for complying with each site's Terms of Service. Email handling is conservative: addresses are read from visible mailto:/text, the built-in email guessing is heuristic, and email verification is not implemented. This is the right posture for a tool in this category — it automates what a human could legally read, and says so.

Honest status and roadmap

AspectStatus
Extension (Manifest V3)Working — v1.0.0, ~20 extractors, local storage, CSV/JSON export
Free tier (50 leads, offline)Working — no account or server needed
License backendWorking — Express, server-side validation, fail-closed
Chrome Web StoreNot submitted — packaging script and privacy policy are ready; submission is the next step
Email verificationNot implemented — stated as a roadmap item, not a hidden gap

The honest read: this is a complete v1.0.0 product — real parsers, real storage, real licensing, real packaging — sitting one Web Store submission away from users. The remaining work is distribution and maintenance (directory sites change their DOM regularly; extractors need upkeep), plus the stated roadmap: email verification and more platforms.

Frequently asked questions

Is the Lead Extraction Engine free?
Yes — the free tier extracts 50 leads with no account and no server; it works fully offline. Paid plans (500 to 10,000 leads) use license keys validated against your own backend.

Where does my lead data go?
Nowhere. Leads are stored locally in your browser's IndexedDB and exported to CSV/JSON by you. There is no cloud sync and no third-party server involved in extraction.

Which sites does it support?
Around 20 dedicated extractors including Google Maps, LinkedIn, Justdial, IndiaMART, Yelp, Zillow, Facebook, and Instagram — plus a generic extractor that handles any business-directory-style page.

Is scraping business directories legal?
The tool reads only publicly visible listing data and bypasses nothing (no logins, no CAPTCHAs). Compliance with each site's Terms of Service is the user's responsibility — the README says this explicitly.

The bottom line

The Lead Extraction Engine is that rare thing in the lead-gen tool space: open source, local-first, and honest about its boundaries. The code is public at github.com/Shivay00001/lead-extraction-engine — load src/ unpacked and run an extraction on a directory you use. If you're an agency drowning in manual prospecting, this is worth an hour of your time. If you sell lead data, the licensing backend is a product skeleton waiting for a pricing page.

Want lead generation automated for your business? VisionQuantech builds custom lead pipelines, scrapers, and AI outreach systems for agencies and SMBs — with working demos before you pay anything. Contact: [email protected]

References & further reading

  1. github.com/Shivay00001/lead-extraction-engine

Cite this article: Shivam Kumar (2026). Lead Extraction Engine: Open-Source Chrome Extension That Turns Directories Into Lead Lists. VisionQuantech. https://visionquantech.com/blog/showcase-lead-extraction-engine.html

Want this for your business?

VisionQuantech builds AI receptionists, chatbots & automation for clinics, home services, real estate & more.

Book a Free Demo
SHARE𝕏in⧉
Chat with us Email us