Rendex
Use Case

Capture Bot-Protected Sites — Cloudflare, DataDome, Akamai

Rendex rotates a realistic browser user-agent stack for sites behind anti-bot systems and flags the capture when an interstitial is detected — so your pipeline never silently stores a block page as a screenshot.

The Problem

Generic screenshot APIs get caught by modern anti-bot systems. You either get a block page stored as a 'screenshot,' a challenge interstitial, or a 403 you have to parse yourself. Worse, most services silently save the block page and mark the job successful — so the bad capture quietly lands in your pipeline.

The Solution

Rendex uses a realistic desktop-browser user-agent profile by default and includes first-party bot-block detection. When the rendered page matches a known challenge interstitial (Cloudflare Turnstile, DataDome, Akamai Bot Manager, PerimeterX), the response flags it honestly via response header — so you can retry, route, or log instead of storing a broken screenshot. For protected sites that need a geo-routed IP, pair with the Pro/Enterprise geo-targeted proxy.

See it in action

A 'checking your browser' bot-challenge interstitial on the left, and the fully-rendered page Rendex returns using real Chrome with a realistic identity on the right.

Get Started in Minutes

bot-protected.sh
curl -G "https://api.rendex.dev/v1/screenshot" \
  -H "X-API-Key: $RENDEX_KEY" \
  --data-urlencode "url=https://protected-site.example" \
  --data-urlencode "waitUntil=networkidle2" \
  --output capture.png

# Inspect response headers:
#   x-rendex-blocked: true          (bot-block detected)
#   x-rendex-block-reason: cloudflare
#   x-rendex-load-time-ms: 4213
bot_protected.py
from rendex import Rendex

rendex = Rendex("YOUR_API_KEY")

result = rendex.screenshot(
    url="https://protected-site.example",
    wait_until="networkidle2",
    best_attempt=True,
)

# Bot-block status is reported via response headers
# (x-rendex-blocked / x-rendex-block-reason), not the result object.
open("capture.png", "wb").write(result.image)
print(f"Captured in {result.metadata.load_time_ms}ms ({result.metadata.bytes_size} bytes)")

100 free API calls/month — no credit card required. Get your API key and start building.

Built for This Use Case

Stealth User-Agent Stack

Realistic Chrome desktop fingerprint by default. Sites see a normal browser, not a headless render.

Honest Bot-Block Detection

When Cloudflare, DataDome, Akamai, or similar interstitials are detected, the response flags it — you never silently store a block page.

Geo-Routed Capture (Pro+)

Pair with geo-targeted rendering from 50+ countries on Pro and Enterprise to defeat region-based IP filtering.

Best-Attempt Mode

Even when a page is partially blocked, Rendex returns the best capture it could get along with honest metadata instead of a silent failure.

Start Free, Scale as You Grow

100 calls/month free. Starter at $69/mo for 10K calls (or $58/mo billed annually — 2 months free). Pro at $179/mo for 100K calls.

Frequently Asked Questions

Related Resources