An advanced stealth CTR (Click-Through Rate) Bot designed to simulate realistic human behavior for improving website click-through rates from Google search results, with enhanced anti-detection capabilities to avoid triggering CAPTCHAs.
- Ultra Stealth Technology: Implements advanced browser fingerprinting and anti-detection techniques
- WebGL/Canvas fingerprint protection
- TLS fingerprinting defenses
- Hardware profile randomization
- Real Chrome browser support
- Media capabilities fingerprinting correlation
- Performance timing vector correlation
- Audio processing fingerprint consistency
- Human-Like Behavior: Simulates natural typing, scrolling, mouse movements, and page interaction
- Keystroke timing analysis for realistic typing patterns
- Advanced mouse movement with attention points and natural hesitation
- Human-like exploration and scrolling behaviors
- Proxy Support: Works with both static and rotating proxies (format: IP:PORT:USER:PASSWORD)
- Multi-Instance Support: Run multiple parallel instances with unique fingerprints when using rotating proxies
- CAPTCHA Solving: Automatically solves Google reCAPTCHA challenges using 2captcha service
- Configurable: Customize dwell time, keywords, target URLs, and more
- Node.js 14+ (recommended: Node.js 16+)
- Google Chrome browser (strongly recommended over default Chromium)
- Proxies in the specified format: IP:PORT:USER:PASSWORD
- 2captcha API key for CAPTCHA solving (sign up at https://2captcha.com/)
# Clone the repository
git clone <repository-url>
cd CTR_BOT_ORIGINAL
# Install dependencies
npm install
# Setup configuration
cp .env.example .env
# Edit .env file with your settingsCreate a .env file in the project root (or copy from .env.example):
# API key for CAPTCHA solving service (2captcha, anticaptcha, etc.)
CAPTCHA_API_KEY=your_captcha_api_key_here
# Path to Chrome executable (strongly recommended over Chromium for anti-detection)
CHROME_PATH=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
# Browser mode (set to "true" to use headless mode, empty or "false" for headed)
USE_HEADLESS=false
See .env.example for additional configuration options.
node index.js --keyword "your search term" --target-url "example.com" --dwell-time 60 --proxy-type static --proxy-file ./proxies.txtnode index.js \
--keyword "how to make money fast" \
--target-url "nerdwallet.com" \
--dwell-time 30 \
--proxy-type rotating \
--proxy-file ./proxies.txt \
--instances 1 \
--ctr 0.2 \
--impression-dwell-min 25 \
--impression-dwell-max 40The CTR (Click-Through Rate) feature allows you to simulate more realistic search behavior by controlling the ratio of clicks vs. impressions:
--ctr 0.2means:- 20% of visits will click on your target URL
- 80% of visits will only view the search results (impression)
- Example: Out of 100 searches, 20 will click, 80 will just view
When using CTR < 1.0, you must specify impression dwell times:
--impression-dwell-minand--impression-dwell-max: How long to stay on search results when NOT clicking--dwell-time: How long to stay on target website when clicking
Example scenarios:
-
Click scenario (20% chance):
- Search for keyword
- Find target URL
- Click on target URL
- Stay on target site for specified dwell time (e.g., 30 seconds)
-
Impression scenario (80% chance):
- Search for keyword
- Find target URL
- Stay on search results page for random time between impression-dwell-min and max
- Exit without clicking
--keyword,-k: Target keyword to search for--target-url,-u: Base URL to look for in search results--dwell-time,-d: Time to stay on the target website (1-600 seconds)--proxy-type,-p: Proxy type: "static" or "rotating"--proxy-file,-f: Path to proxy list file (format: IP:PORT:USER:PASSWORD)--instances,-i: Number of parallel instances (non-scheduled mode) OR Total runs to execute over the duration (scheduled mode)--ctr <ratio>: Click-through rate (0.0 to 1.0, e.g., 0.2 for 20% clicks)--impression-dwell-min <seconds>: Minimum time to stay on search results if not clicking--impression-dwell-max <seconds>: Maximum time to stay on search results if not clicking--max-concurrency <number>: (Scheduled mode only) Maximum number of instances allowed to run concurrently. Required with--duration.
This bot can be configured to execute a specific total number of runs spread over a defined duration, with optional "rush hours" to increase the launch rate, while respecting a maximum concurrency limit.
--duration <value>: Total time window during which the runs should be initiated (e.g., "8h", "90m"). Enables scheduled mode.--instances <number>: Total number of runs to execute within the specified--duration.--max-concurrency <number>: (Required with --duration) Maximum number of instances allowed to run simultaneously. Prevents overloading the system.--rush-hour-start <HH:MM>: (Optional) Start time for rush hour (24h format, local time, e.g., "15:00").--rush-hour-end <HH:MM>: (Optional) End time for rush hour (24h format, local time, e.g., "18:00"). Handles overnight ranges. Required if--rush-hour-startis set.--rush-hour-multiplier <factor>: (Optional) Factor by which to increase the instance launch rate during rush hours (e.g., 2.0 means launching twice as frequently). Defaults to 2.0 if rush hour is active but this is omitted. Must be positive.
Run a total of 50 instances over 8 hours, allowing a maximum of 5 concurrent instances. Double the launch rate between 4 PM and 6 PM local time:
node index.js \
--keyword "best budget laptop" \
--target-url "techradar.com" \
--dwell-time 45 \
--proxy-type rotating \
--proxy-file ./proxies.txt \
--instances 50 \
--ctr 0.3 \
--impression-dwell-min 30 \
--impression-dwell-max 50 \
--duration "8h" \
--max-concurrency 5 \
--rush-hour-start "16:00" \
--rush-hour-end "18:00" \
--rush-hour-multiplier 2.0- Total Runs & Duration: The scheduler aims to launch the total number specified by
--instancesover the time specified by--duration. It calculates an average delay between launches based on these values. - Max Concurrency: The scheduler will never start a new instance if the number of currently running instances reaches the
--max-concurrencylimit. It waits for an active instance to finish before launching another, even if the calculated delay has passed. - Rush Hour (Rate-Based): During the specified time window (using the system's local time), the calculated delay between launches is divided by the
--rush-hour-multiplier. This increases the frequency of launches, potentially hitting the--max-concurrencylimit more often during these periods. - Completion: The process stops once the
--durationis reached or all--instanceshave been launched and completed, whichever comes first.
Create a text file with one proxy per line in the following format:
IP:PORT:USER:PASSWORD
Example:
192.168.0.1:8080:username:password
192.168.0.2:8081:username2:password2
- Using a high number of instances (>50) may cause system performance issues
- For optimal stealth, it's recommended to use high-quality residential or mobile proxies
- The bot will only search on Google.com (US) as specified in the requirements
- CAPTCHA solving requires a 2captcha API key - add to your .env file as CAPTCHA_API_KEY
- Each solved CAPTCHA will incur costs based on 2captcha's pricing (typically around $2-3 per 1000 solves)
This tool is provided for educational and research purposes only. Users are responsible for ensuring compliance with Google's Terms of Service and all applicable laws and regulations. Improper use may violate terms of service agreements.