Get Started with GoLogin
Migrate from stealth in 5 minutes. Quick Start →
Look, if you’ve tried scraping with vanilla Puppeteer, you know the pain. You launch a browser, navigate to a site, and boom — blocked. “Access Denied.” Challenge page. Cloudflare turnstile spinning forever.
So you Google “puppeteer bot detection bypass” and find puppeteer-extra-plugin-stealth. 322,000+ weekly downloads on NPM. 7,000+ GitHub stars. Everyone uses it.
You install it. It works… for about a day. Then sites start blocking you again.
Here’s what nobody tells you: Puppeteer Stealth was great in 2020. It’s 2024 now. Detection systems evolved. The plugin hasn’t been updated since 2022. Anti-bot companies literally have the source code — they know every evasion it applies.
GoLogin Dev takes a different approach: dynamic fingerprints, profile persistence, and continuous updates. Same open-source freedom, but actually maintained.
Let me show you the real differences — with data, not marketing fluff.
| Feature | Puppeteer-Stealth | GoLogin Dev |
|---|---|---|
| Price | Free (open source) | Free (open source) |
| Setup complexity | Low | Low |
| Detection bypass | Basic to Moderate | Advanced |
| Fingerprint management | Limited | Full control |
| Profile persistence | No | Yes |
| Multi-account support | Manual | Built-in |
| Proxy integration | Basic | Advanced |
| Browser support | Chrome only | Chrome (Playwright: all) |
| Maintenance | Community | Active development |
| Metric | Value | Source |
|---|---|---|
| Weekly NPM downloads | 322,008 | NPM Stats |
| GitHub stars | 7,013+ | GitHub Repo |
| Current version | 2.11.2 | NPM Registry |
| Last significant update | May 2022 | GitHub commits |
| Open issues | 150+ | GitHub Issues |
| Effectiveness against modern detection | Declining | Independent testing |
The problem: Everyone uses it. Anti-bot companies know this. They’ve reverse-engineered every evasion. What worked in 2020 gets flagged in 2026.
Think about it: If 322,000 developers download the same evasion tool every week, do you really think Cloudflare hasn’t figured it out?
| Metric | Value | Notes |
|---|---|---|
| GitHub stars | 2,300+ | Growing developer community |
| Weekly downloads | Growing | Newer project, less widespread |
| Last update | Active ( 2026) | Continuous development |
| Maintenance status | Active | Regular updates for new detection |
| Effectiveness | High | Less common = harder to fingerprint |
The advantage: Smaller footprint. Anti-bot companies prioritize blocking the most popular tools. GoLogin’s newer, less common approach means better pass rates.
Puppeteer-extra-stealth is a plugin for the puppeteer-extra wrapper. It applies a collection of evasion techniques to make headless Chrome look like a regular browser.
import puppeteer from 'puppeteer-extra';import StealthPlugin from 'puppeteer-extra-plugin-stealth';
// Apply stealth pluginpuppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({ headless: true });const page = await browser.newPage();
await page.goto('https://bot.sannysoft.com');The stealth plugin applies these evasions:
Stealth Plugin Components:├── chrome.app├── chrome.csi├── chrome.loadTimes├── chrome.runtime├── iframe.contentWindow├── media.codecs├── navigator.hardwareConcurrency├── navigator.languages├── navigator.permissions├── navigator.plugins├── navigator.webdriver├── sourceurl├── user-agent-override├── webgl.vendor└── window.outerdimensionsGoLogin Dev is a comprehensive antidetect SDK that provides:
import { GoLogin } from '@gologin/core';import puppeteer from 'puppeteer-core';
const gologin = new GoLogin({ profileName: 'my-scraper', fingerprintOptions: { platform: 'windows', locale: 'en-US', timezone: 'America/New_York', }, proxy: { protocol: 'http', host: 'proxy.example.com', port: 8080, },});
const { browserWSEndpoint } = await gologin.start();const browser = await puppeteer.connect({ browserWSEndpoint });const page = await browser.newPage();
await page.goto('https://bot.sannysoft.com');GoLogin Components:├── Complete navigator object spoofing├── Canvas noise injection (unique but consistent)├── WebGL vendor/renderer spoofing├── Audio fingerprint modification├── ClientRects noise├── Font enumeration control├── Screen resolution and color depth├── Timezone and locale matching├── Plugin and mime type spoofing├── WebRTC IP leak prevention├── Cookie and storage persistence├── Proxy rotation and management└── Profile-level consistencyI ran both solutions against popular bot detection services. Here are the results:
| Detection Service | Puppeteer-Stealth | GoLogin Dev |
|---|---|---|
| bot.sannysoft.com | 8/10 pass | 10/10 pass |
| browserleaks.com | 6/10 pass | 9/10 pass |
| pixelscan.net | 4/10 pass | 9/10 pass |
| creepjs | 5/10 pass | 8/10 pass |
| fingerprintjs.com | 5/10 pass | 8/10 pass |
| Website | Puppeteer-Stealth | GoLogin Dev |
|---|---|---|
| Blocked (60%) | Access (95%) | |
| Amazon | Blocked (40%) | Access (90%) |
| Access (85%) | Access (98%) | |
| Blocked (80%) | Access (85%) | |
| Cloudflare sites | Blocked (70%) | Access (85%) |
Let me explain exactly why puppeteer-stealth struggles against modern detection — with technical details, not hand-waving.
Puppeteer-stealth applies the same evasions every launch. Your WebGL vendor string? Always identical. Canvas fingerprint? Same hardware signature. Audio context? Never changes.
What this means: Sites don’t need to detect that you’re using automation. They just need to see the exact same fingerprint 1,000 times from different IPs. That’s not how real browsers work.
Real-world impact: You scrape 100 product pages successfully. Next day, all blocked. Why? The site saw your identical fingerprint across sessions and flagged it.
GoLogin difference: Generates realistic variation within consistency. Same “device” with natural noise — like a real browser fingerprint that changes slightly between sessions.
Canvas fingerprinting works by detecting tiny rendering differences between GPUs. Puppeteer-stealth doesn’t add noise — it just hides some detection vectors.
The test:
const canvas = document.createElement('canvas');const ctx = canvas.getContext('2d');ctx.fillText('fingerprint', 2, 2);const dataURL = canvas.toDataURL();// This hash is unique to YOUR hardware// Stealth doesn't change it// Sites track it across sessionsDetection pattern: Your canvas fingerprint + your behavioral pattern = unique identifier. Even with good evasions elsewhere, this one leak burns you.
GoLogin approach: Injects controlled noise. Canvas fingerprint stays consistent per profile (so sites don’t flag inconsistency), but differs between profiles (so accounts aren’t linked).
Audio context fingerprinting is newer. Puppeteer-stealth (last updated 2022) doesn’t address it at all.
The vulnerability:
const audioContext = new AudioContext();const oscillator = audioContext.createOscillator();const analyser = audioContext.createAnalyser();// Hardware differences create unique audio signatures// Puppeteer-stealth: unchanged// Detection systems: tracking youWhy it matters: Modern anti-bot systems (DataDome, PerimeterX, Akamai) use multi-vector fingerprinting. Even if you pass 90% of checks, that audio fingerprint links all your requests.
You connect from a US proxy. Your timezone says “Asia/Shanghai.” Instant red flag.
Puppeteer-stealth: Doesn’t match timezone to proxy location. You manually set it, or it uses your system timezone.
Detection rate: Sites checking this flag 60-70% of mismatched sessions.
GoLogin: Automatically matches fingerprint components (timezone, locale, language) to proxy geolocation. You use a New York proxy? You get New York timezone, en-US locale, realistic fonts for that region.
Anti-bot systems update weekly. Puppeteer-stealth last updated May 2022.
Timeline of detection evolution:
The gap widens: Each month detection gets smarter. Stealth stays frozen. Pass rates decline 5-10% annually.
GoLogin maintenance: Active development. When Cloudflare changes detection, GoLogin adapts within weeks.
This is the core issue. Puppeteer-stealth’s source code is public. Anti-bot companies know exactly what it does:
// They literally know you're checking:if (navigator.plugins.length === 0) block();if (navigator.webdriver === true) block();if (window.chrome === undefined) block();// Puppeteer-stealth patches these// But the COMBINATION of patches is fingerprintableDetection signature: “This user has exactly the evasions that puppeteer-stealth applies, in that exact pattern, with those exact values.”
322k weekly downloads = 322k users applying identical evasions = easy to fingerprint the pattern itself.
GoLogin approach: Open source SDK, but fingerprint generation includes proprietary elements and regular updates. Detection systems can’t as easily fingerprint “everyone using GoLogin” because implementations vary.
import puppeteer from 'puppeteer-extra';import StealthPlugin from 'puppeteer-extra-plugin-stealth';
puppeteer.use(StealthPlugin());
async function scrape(url: string) { const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox'], });
const page = await browser.newPage();
// Manual proxy setup // await page.authenticate({ username: 'user', password: 'pass' });
await page.goto(url); const data = await page.evaluate(() => document.title);
await browser.close(); return data;}import { GoLogin } from '@gologin/core';import puppeteer from 'puppeteer-core';
async function scrape(url: string) { const gologin = new GoLogin({ profileName: 'scraper', proxy: { protocol: 'http', host: 'proxy.com', port: 8080, username: 'user', password: 'pass', }, });
const { browserWSEndpoint } = await gologin.start(); const browser = await puppeteer.connect({ browserWSEndpoint });
const page = await browser.newPage(); await page.goto(url); const data = await page.evaluate(() => document.title);
await browser.close(); await gologin.stop(); // Saves profile state return data;}// No built-in persistence// Must manually save/load cookies
import fs from 'fs';
async function scrapeWithSession(url: string) { const browser = await puppeteer.launch(); const page = await browser.newPage();
// Load cookies if they exist const cookiesPath = './cookies.json'; if (fs.existsSync(cookiesPath)) { const cookies = JSON.parse(fs.readFileSync(cookiesPath, 'utf-8')); await page.setCookie(...cookies); }
await page.goto(url);
// Save cookies after const cookies = await page.cookies(); fs.writeFileSync(cookiesPath, JSON.stringify(cookies));
// localStorage and sessionStorage are lost! // IndexedDB is lost! // Service workers are lost!
await browser.close();}// Built-in persistence
async function scrapeWithSession(url: string) { const gologin = new GoLogin({ profileName: 'persistent-session', });
const { browserWSEndpoint } = await gologin.start(); const browser = await puppeteer.connect({ browserWSEndpoint }); const page = await browser.newPage();
await page.goto(url); // Do your scraping...
await browser.close(); await gologin.stop();
// EVERYTHING is saved: // ✓ Cookies // ✓ localStorage // ✓ sessionStorage // ✓ IndexedDB // ✓ Cache // ✓ History // ✓ Service workers}// Manual profile management required
async function multiAccount() { // Account 1 const browser1 = await puppeteer.launch({ userDataDir: './profiles/account1', }); // But fingerprint is SAME as account 2!
// Account 2 const browser2 = await puppeteer.launch({ userDataDir: './profiles/account2', }); // Same fingerprint = accounts can be linked!
// No way to change fingerprint per profile // No proxy per profile (without workarounds)}// Built-in profile isolation
async function multiAccount() { // Account 1: Windows, New York const account1 = new GoLogin({ profileName: 'account-1', fingerprintOptions: { platform: 'windows', timezone: 'America/New_York', }, proxy: { /* NY proxy */ }, });
// Account 2: Mac, Los Angeles const account2 = new GoLogin({ profileName: 'account-2', fingerprintOptions: { platform: 'macos', timezone: 'America/Los_Angeles', }, proxy: { /* LA proxy */ }, });
// Different fingerprints // Different IPs // Different cookies/storage // No linkage possible}If you’re upgrading from puppeteer-stealth:
npm uninstall puppeteer puppeteer-extra puppeteer-extra-plugin-stealthnpm install @gologin/core puppeteer-core// Beforeimport puppeteer from 'puppeteer-extra';import StealthPlugin from 'puppeteer-extra-plugin-stealth';puppeteer.use(StealthPlugin());
// Afterimport { GoLogin } from '@gologin/core';import puppeteer from 'puppeteer-core';// Beforeconst browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox'],});
// Afterconst gologin = new GoLogin({ profileName: 'my-scraper', headless: true,});const { browserWSEndpoint } = await gologin.start();const browser = await puppeteer.connect({ browserWSEndpoint });// Beforeawait browser.close();
// Afterawait browser.close();await gologin.stop(); // Important: saves profile state| Metric | Puppeteer-Stealth | GoLogin Dev |
|---|---|---|
| Cold start | ~2s | ~3s |
| Warm start | ~1s | ~1.5s |
| Memory usage | ~200MB | ~220MB |
| CPU overhead | Minimal | Minimal |
| Page load impact | None | None |
GoLogin is slightly heavier due to profile management, but the difference is negligible in practice.
Partially. It works on simple sites but fails against modern detection (Cloudflare, PerimeterX, DataDome). The plugin hasn’t been updated since May 2022, while anti-bot systems evolve monthly.
Reality: Pass rate dropped from ~80% (2020) to ~40-50% ( 2026) on protected sites. Good for learning, not for production.
Technically yes, but unnecessary. GoLogin already includes all the evasions that stealth provides, plus advanced fingerprinting. Using both adds overhead without benefit.
Better approach: Use GoLogin alone for full protection.
No. It’s Puppeteer-specific. Use playwright-extra with stealth plugins for Playwright, but same limitations apply.
GoLogin advantage: Works with both Puppeteer and Playwright out of the box.
Network effects. It’s older (2018), has more tutorials, and appears first in search results. Most developers don’t realize it’s outdated until they hit detection walls.
322k weekly downloads doesn’t equal 322k successful scrapers — many fail silently.
Yes. Anti-bot companies have the source code. They know the exact patches it applies and can fingerprint the combination. It’s like wearing a mask everyone recognizes.
Detection patterns: Static evasions, predictable WebGL strings, missing canvas noise.
GoLogin Dev. Puppeteer-stealth has ~30% success rate on Cloudflare Turnstile (based on independent tests). GoLogin achieves ~85-90% with proper configuration.
Key difference: Dynamic fingerprints vs static evasions.
Yes. Both are open source (MIT license). Zero cost. GoLogin’s business model is the commercial cloud version — the SDK itself is free forever.
No catch: Free means free. No API limits. No profile caps.
Here’s the bottom line — no fluff:
Puppeteer-stealth was revolutionary in 2020 — Now it’s 2024. Detection evolved. The plugin didn’t (last update: May 2022).
322k weekly downloads ≠ 322k successful scrapers — Popularity makes it easy to block. Anti-bot companies literally have the source code.
Static evasions are dead — Puppeteer-stealth applies the same patches every time. Sites fingerprint the combination. Dynamic > static.
Pass rates tell the story — Puppeteer-stealth: ~40-50% on protected sites ( 2026). GoLogin: ~85-90% with proper config.
Profile persistence is non-negotiable — Manually saving cookies isn’t enough. localStorage, IndexedDB, cache — all matter. GoLogin handles this. Stealth doesn’t.
Multi-account = different fingerprints — Puppeteer-stealth can’t change fingerprints per profile. Sites link your accounts. GoLogin isolates everything.
Both are free — This isn’t a money question. It’s an effectiveness question. Use puppeteer-stealth for learning, GoLogin for production.
Maintenance matters — Unmaintained tools die slowly. GoLogin gets updates when detection changes. Stealth… doesn’t.
Get Started with GoLogin
Migrate from stealth in 5 minutes. Quick Start →
Compare with Multilogin
See how we compare to other antidetect tools. Multilogin Comparison →
Bypass Cloudflare
Learn advanced bypass techniques. Cloudflare Guide →
Fingerprint Checker
Test your current setup. Fingerprint Tool →