How to Record Automated Browser Demos and Sequences Through Bot Detection
Many sites block headless browsers before a single frame renders. Here's how to record narrated video demos and run multi-step browser sequences through bot detection walls — without managing your own stealth infrastructure.
A lot of pages won't cooperate with headless browsers. You send a request, the site fingerprints the Chrome instance, decides it's automated, and returns a CAPTCHA wall or a blank white page. No error. Just silence.
If you are trying to record a product demo, run a multi-step browser sequence, or capture a page that lives behind bot detection — you know this problem. And if you have tried to solve it with a self-hosted Puppeteer stealth setup, you know how the maintenance cycle plays out: patch the stealth plugin, detection evolves, patch again.
This post covers how to record narrated video demos, run browser sequences, and capture content from bot-protected pages — without maintaining any of that yourself.
Why Headless Browsers Get Detected
Sites fingerprint browser sessions using several signals:
- Navigator properties —
navigator.webdriveristruein headless Chrome by default. Detection scripts check this first. - Chrome runtime fingerprint — Headless Chrome is missing plugins, reports suspicious GPU/renderer strings, and has a different
window.chromeshape than a real browser. - Timing and input patterns — Real users generate mouse events, window focus changes, and interaction timing. Headless sessions produce none of that.
- TLS fingerprinting — Some sites fingerprint the TLS handshake itself, not just the User-Agent.
Stealth mode spoofs most of these signals: it patches navigator.webdriver, fills in expected plugin lists, and rewrites the Chrome runtime to pass fingerprinting checks.
Recording a Narrated Video Demo Through Bot Detection
The primary use case: you want to record a video of a product or competitor site that blocks headless browsers. Add stealth: true to your video recording request and the session runs on an ephemeral browser with fingerprint spoofing enabled.
curl -X POST https://api.pagebolt.dev/v1/video \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"stealth": true,
"steps": [
{ "action": "navigate", "url": "https://bot-protected-site.com",
"note": "Landing page" },
{ "action": "click", "selector": "#get-started",
"note": "Start the onboarding flow" },
{ "action": "scroll", "y": 600,
"note": "Key features" }
],
"audioGuide": {
"enabled": true,
"voice": "nova",
"script": "Welcome. {{1}} Click Get Started to begin. {{2}} Here are the features."
},
"frame": { "enabled": true, "style": "macos" },
"pace": "slow",
"format": "mp4"
}' \
--output demo.mp4
The result is an MP4 with cursor effects, browser chrome, and AI voice narration synced to each step — recorded from a session that passes bot detection. This is useful for competitive research, stakeholder demos, and any workflow where the target page would otherwise block a standard headless browser.
Running a Multi-Step Sequence Through Bot Detection
For workflows that require interaction before capture — login flows, paginated content, form submissions — the /sequence endpoint with stealth: true runs each step in a spoofed browser session:
const res = await fetch('https://api.pagebolt.dev/v1/sequence', {
method: 'POST',
headers: {
'x-api-key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
stealth: true,
steps: [
{ action: 'navigate', url: 'https://bot-protected-site.com/login' },
{ action: 'fill', selector: '#email', value: 'user@example.com' },
{ action: 'fill', selector: '#password', value: 'secret' },
{ action: 'click', selector: '#login' },
{ action: 'navigate', url: 'https://bot-protected-site.com/dashboard' },
{ action: 'screenshot', fullPage: true },
],
}),
});
const { outputs } = await res.json();
// outputs[0].data — base64 screenshot of the authenticated dashboard
The sequence runs end-to-end in a single spoofed session: the login persists across steps, bot detection is bypassed at navigation, and each screenshot action captures the authenticated state.
Routing Through Your Own Proxy
Some sites block by IP range — datacenter blocks, cloud provider ASNs, or known scraper infrastructure. Combine stealth with proxy to route the entire session through your own infrastructure:
{
"stealth": true,
"proxy": "http://user:pass@your-proxy-host:8080",
"steps": [...]
}
The proxy parameter accepts http, https, socks4, and socks5. It applies to all navigation and resource loads within the session. Both stealth and proxy work across video recording, sequences, PDFs, and screenshots.
What Stealth Mode Won't Solve
- Interactive CAPTCHAs — stealth passes fingerprint checks; it does not solve puzzles that require human input
- IP-based blocks without a proxy — fingerprint spoofing alone won't help if the IP range is blocklisted; add
proxy - Sites requiring live auth — for pages behind login, use the sequence approach above rather than passing credentials directly
Try stealth mode free
100 requests/month on the free tier. Stealth and proxy available on all paid plans starting at $29/month — no Puppeteer infrastructure to manage.
Get API Key — Free