Skip to content

Enhanced Mode (Anti-Bot)

Updated Feb 2026

Enhanced mode provides specialized proxy infrastructure for scraping complex websites with anti-bot protection. When standard proxies fail, enhanced mode uses advanced techniques to ensure reliable data extraction.

Overview

Firecrawl routes all requests through proxies by default. Enhanced mode activates specialized proxy infrastructure designed to bypass sophisticated anti-bot systems, CAPTCHAs, and rate limiters that block standard proxies.

Proxy Options

ModeCostSpeedReliabilityUse When
basicStandard (1 credit)FastGood for most sitesDefault websites, blogs, docs
enhanced+5 credits per requestSlowerHigh on protected sitesAnti-bot sites, paywalls, rate-limited APIs
autoStandard or +5 if retry neededVariesHighest overallUnknown sites, mixed difficulty batches

How auto Works

  1. Firecrawl attempts the request with a basic proxy
  2. If the request succeeds, you pay the standard rate
  3. If the request fails (403, CAPTCHA, empty content), Firecrawl automatically retries with an enhanced proxy
  4. You only pay the +5 credit premium when the enhanced retry is actually needed

Configuration

Python

python
from firecrawl import Firecrawl

firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

# Basic proxy (default)
result = firecrawl.scrape("https://easy-site.com", formats=["markdown"])

# Enhanced proxy for protected sites
result = firecrawl.scrape(
    "https://protected-site.com",
    formats=["markdown"],
    proxy="enhanced"
)

# Auto — tries basic, falls back to enhanced
result = firecrawl.scrape(
    "https://unknown-site.com",
    formats=["markdown"],
    proxy="auto"
)

Node.js

javascript
import Firecrawl from '@mendable/firecrawl-js';

const firecrawl = new Firecrawl({ apiKey: "fc-YOUR-API-KEY" });

// Basic proxy
const doc = await firecrawl.scrape("https://easy-site.com", {
  formats: ["markdown"]
});

// Enhanced proxy
const doc = await firecrawl.scrape("https://protected-site.com", {
  formats: ["markdown"],
  proxy: "enhanced"
});

// Auto mode
const doc = await firecrawl.scrape("https://unknown-site.com", {
  formats: ["markdown"],
  proxy: "auto"
});

cURL

bash
# Enhanced proxy
curl -X POST https://api.firecrawl.dev/v2/scrape \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer fc-YOUR-API-KEY' \
  -d '{
    "url": "https://protected-site.com",
    "formats": ["markdown"],
    "proxy": "enhanced"
  }'

# Auto mode
curl -X POST https://api.firecrawl.dev/v2/scrape \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer fc-YOUR-API-KEY' \
  -d '{
    "url": "https://unknown-site.com",
    "formats": ["markdown"],
    "proxy": "auto"
  }'

Using with Batch Scrape

Apply enhanced mode to batch operations:

python
results = firecrawl.batch_scrape(
    [
        "https://protected-site.com/page-1",
        "https://protected-site.com/page-2",
        "https://protected-site.com/page-3",
    ],
    formats=["markdown"],
    proxy="auto"  # Auto is recommended for batches
)

Using with Crawl

Apply to recursive crawls:

python
results = firecrawl.crawl(
    "https://protected-site.com",
    limit=50,
    scrape_options={
        "formats": ["markdown"],
        "proxy": "enhanced"
    }
)

Retry Strategy

For cost optimization, implement client-side retry logic instead of always using enhanced mode:

python
def scrape_with_retry(firecrawl, url, formats=["markdown"]):
    """Try basic first, fall back to enhanced on specific status codes."""
    result = firecrawl.scrape(url, formats=formats, proxy="basic")

    # Check if we got blocked
    status_code = result.get('metadata', {}).get('statusCode', 200)
    if status_code in [401, 403, 500] or not result.get('markdown'):
        # Retry with enhanced proxy
        result = firecrawl.scrape(url, formats=formats, proxy="enhanced")

    return result

auto vs Manual Retry

The auto proxy mode does this retry logic server-side. Use manual retry when you want more control over which status codes trigger the fallback, or when you need to log/alert on blocked requests.

When to Use Each Mode

Use basic When:

  • Scraping documentation sites, blogs, news articles
  • Target site has no anti-bot protection
  • Speed is the priority
  • Budget is tight

Use enhanced When:

  • Target site actively blocks scrapers
  • You see 403/CAPTCHA responses with basic proxy
  • Scraping e-commerce sites with aggressive bot detection
  • Target requires residential IP addresses

Use auto When:

  • You are not sure if the site is protected
  • Processing a mixed list of URLs (some protected, some not)
  • Want the best balance of cost and reliability
  • Running batch scrapes across diverse domains

Cost

Proxy ModeCredits per RequestNotes
basic1 (standard)Fast, works for most sites
enhanced1 + 5 = 6 totalAlways uses enhanced infrastructure
auto (basic succeeds)1 (standard)No extra cost when basic works
auto (enhanced fallback)1 + 5 = 6 totalOnly charged when fallback triggers

Cost Examples

ScenarioCredits
100 URLs with basic100
100 URLs with enhanced600
100 URLs with auto (80% basic success)100 + (20 x 5) = 200
100 URLs with auto + JSON extraction(80 x 5) + (20 x 10) = 600

Limitations

  • Cloud only -- enhanced proxy infrastructure is not available in self-hosted deployments
  • Slower than basic proxy due to additional routing and stealth techniques
  • Not foolproof -- some sites may still block requests despite enhanced mode
  • Geographic limits -- enhanced proxies only available in US and Australia (see Proxies)

Next: Fast Scraping -->