Skip to content

Exploit-Inject/RED-EYE-LEAD-HUNTER

Repository files navigation

RED EYE Banner

πŸ‘οΈ RED EYE LEAD HUNTER

A high-performance, dark-themed Chrome Extension for automated lead extraction from Google Maps.

Manifest V3 React 18 Vite 5 Tailwind CSS TypeScript


πŸ“– Overview

RED EYE is a sophisticated lead generation tool designed for outreach specialists, marketing agencies, and sales professionals. It automates the tedious process of harvesting business contact information from Google Maps, transforming raw search results into structured, actionable CSV data.

Unlike generic scrapers, RED EYE is built with a "Deep Scrape" engine that navigates into individual business profiles to extract elusive data points like emails and social media links, all while maintaining a polite, human-like interaction pattern.


✨ Key Features

  • πŸš€ Automated Extraction: Smart auto-scrolling with randomized delays (1.2s – 2.6s) to mimic human behavior.
  • 🧠 Deep Scrape Engine: Programmatically interacts with side panels to harvest emails, social links (IG/FB), and WhatsApp numbers.
  • πŸ“ž Smart WhatsApp Fallback: Intelligently constructs wa.me links from localized phone numbers when direct links are missing.
  • 🧹 Zero-Noise Data: Automatic deduplication based on unique Name + Address pairs.
  • πŸ“₯ One-Click Export: Downloads UTF‑8 BOM encoded CSVs, ensuring perfect compatibility with Microsoft Excel.
  • 🎯 Advanced Filtering: Instantly isolate businesses without websites β€” a goldmine for web design and SEO agencies.
  • 🎨 Premium UI/UX: Features a draggable, dark-themed cyberpunk interface injected directly into the Google Maps DOM.

πŸ› οΈ Technical Stack

Browser Extension

  • Engine: Vanilla JavaScript (ES6+)
  • Standard: Chrome Manifest V3
  • State Management: chrome.storage.local for persistence across sessions.
  • Messaging: Asynchronous message passing between Content Scripts and Background Service Workers.

Landing Page & Dashboard

  • Framework: React 18 with TypeScript
  • Bundler: Vite 5
  • Styling: Tailwind CSS & shadcn/ui
  • Icons: Lucide React

🧠 Technical Challenges & Solutions

1. Handling Dynamic DOM Virtualization

Challenge: Google Maps uses aggressive DOM virtualization, meaning elements are destroyed and recreated as you scroll. Solution: Implemented a robust MutationObserver and custom polling logic to ensure the scraper consistently finds data even when the browser recycles DOM nodes.

2. Rate Limiting & Bot Detection

Challenge: Scraping too fast triggers CAPTCHAs or temporary blocks. Solution: Developed a randomized delay algorithm and localized interaction points to simulate natural human scrolling and clicking patterns.

3. Data Normalization

Challenge: Business details vary wildly in format (e.g., phone numbers, addresses). Solution: Used regular expressions and string parsing logic to clean and standardize fields like Country, City, and WhatsApp links for reliable outreach use.


πŸ“ Project Structure

RED-EYE-LEAD-HUNTER
β”œβ”€β”€ πŸ“ extension
β”‚   β”œβ”€β”€ πŸ“ icons
β”‚   β”‚   └── πŸ–ΌοΈ icon.png
β”‚   β”œβ”€β”€ πŸ“„ background.js
β”‚   β”œβ”€β”€ πŸ“„ content.js
β”‚   β”œβ”€β”€ βš™οΈ manifest.json
β”‚   β”œβ”€β”€ 🌐 popup.html
β”‚   β”œβ”€β”€ πŸ“„ popup.js
β”‚   └── 🎨 styles.css
β”œβ”€β”€ πŸ“ public
β”‚   β”œβ”€β”€ πŸ–ΌοΈ banner.png
β”‚   β”œβ”€β”€ πŸ–ΌοΈ favicon.png
β”‚   β”œβ”€β”€ πŸ“¦ red-eye.zip
β”‚   β”œβ”€β”€ πŸ–ΌοΈ placeholder.svg
β”‚   └── πŸ“„ robots.txt
β”œβ”€β”€ πŸ“ src
β”‚   β”œβ”€β”€ πŸ“ assets
β”‚   β”‚   └── πŸ–ΌοΈ red-eye-logo.png
β”‚   β”œβ”€β”€ πŸ“ components
β”‚   β”‚   β”œβ”€β”€ πŸ“ ui
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ accordion.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ alert-dialog.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ alert.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ aspect-ratio.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ avatar.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ badge.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ breadcrumb.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ button.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ calendar.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ card.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ carousel.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ chart.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ checkbox.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ collapsible.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ command.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ context-menu.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ dialog.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ drawer.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ dropdown-menu.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ form.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ hover-card.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ input-otp.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ input.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ label.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ menubar.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ navigation-menu.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ pagination.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ popover.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ progress.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ radio-group.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ resizable.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ scroll-area.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ select.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ separator.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ sheet.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ sidebar.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ skeleton.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ slider.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ sonner.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ switch.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ table.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ tabs.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ textarea.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ toast.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ toaster.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ toggle-group.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ toggle.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ tooltip.tsx
β”‚   β”‚   β”‚   └── πŸ“„ use-toast.ts
β”‚   β”‚   └── πŸ“„ NavLink.tsx
β”‚   β”œβ”€β”€ πŸ“ hooks
β”‚   β”‚   β”œβ”€β”€ πŸ“„ use-mobile.tsx
β”‚   β”‚   └── πŸ“„ use-toast.ts
β”‚   β”œβ”€β”€ πŸ“ lib
β”‚   β”‚   └── πŸ“„ utils.ts
β”‚   β”œβ”€β”€ πŸ“ pages
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Index.tsx
β”‚   β”‚   └── πŸ“„ NotFound.tsx
β”‚   β”œβ”€β”€ πŸ“ test
β”‚   β”‚   β”œβ”€β”€ πŸ“„ example.test.ts
β”‚   β”‚   └── πŸ“„ setup.ts
β”‚   β”œβ”€β”€ 🎨 App.css
β”‚   β”œβ”€β”€ πŸ“„ App.tsx
β”‚   β”œβ”€β”€ 🎨 index.css
β”‚   β”œβ”€β”€ πŸ“„ main.tsx
β”‚   └── πŸ“„ vite-env.d.ts
β”œβ”€β”€ βš™οΈ .gitignore
β”œβ”€β”€ πŸ“ HOST.md
β”œβ”€β”€ πŸ“ README.md
β”œβ”€β”€ πŸ“ RUN.md
β”œβ”€β”€ πŸ“„ bun.lockb
β”œβ”€β”€ βš™οΈ components.json
β”œβ”€β”€ πŸ“„ eslint.config.js
β”œβ”€β”€ 🌐 index.html
β”œβ”€β”€ βš™οΈ package-lock.json
β”œβ”€β”€ βš™οΈ package.json
β”œβ”€β”€ πŸ“„ postcss.config.js
β”œβ”€β”€ πŸ“„ tailwind.config.ts
β”œβ”€β”€ βš™οΈ tsconfig.app.json
β”œβ”€β”€ βš™οΈ tsconfig.json
β”œβ”€β”€ βš™οΈ tsconfig.node.json
β”œβ”€β”€ πŸ“„ vite.config.ts
└── πŸ“„ vitest.config.ts

πŸš€ Installation (Developer Mode)

  1. Download the latest red-eye.zip from the landing page.
  2. Extract the archive to a local folder.
  3. Navigate to chrome://extensions in your browser.
  4. Enable "Developer mode" in the top-right corner.
  5. Click "Load unpacked" and select the extension/ folder or the extracted directory.

πŸ§‘β€πŸ’» Usage

  1. Visit Google Maps.
  2. Search for a niche (e.g., "Web Design in New York").
  3. The RED EYE panel will appear on the right.
  4. Toggle Deep Scrape for full contact harvesting.
  5. Press Start and watch your lead list grow in real-time.
  6. Click Export CSV when you're ready to start your campaign.

πŸ‘¨β€πŸ’» Meet the Developer

MD SAMIUR RAHMAN TANIM
Developed by Vibe Coding for Time Save using Lovable

GitHub LinkedIn YouTube Facebook Instagram


βš–οΈ Disclaimer & License

This tool is for educational and research purposes. Users are responsible for complying with Google's Terms of Service and local privacy laws (GDPR/CCPA).

License: MIT

About

A high-performance, dark-themed Chrome Extension for automated lead extraction from Google Maps.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors