Appearance
Enhanced Mode (Anti-Bot)
Updated Feb 2026Enhanced 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
| Mode | Cost | Speed | Reliability | Use When |
|---|---|---|---|---|
basic | Standard (1 credit) | Fast | Good for most sites | Default websites, blogs, docs |
enhanced | +5 credits per request | Slower | High on protected sites | Anti-bot sites, paywalls, rate-limited APIs |
auto | Standard or +5 if retry needed | Varies | Highest overall | Unknown sites, mixed difficulty batches |
How auto Works
- Firecrawl attempts the request with a basic proxy
- If the request succeeds, you pay the standard rate
- If the request fails (403, CAPTCHA, empty content), Firecrawl automatically retries with an enhanced proxy
- 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 resultauto 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 Mode | Credits per Request | Notes |
|---|---|---|
basic | 1 (standard) | Fast, works for most sites |
enhanced | 1 + 5 = 6 total | Always uses enhanced infrastructure |
auto (basic succeeds) | 1 (standard) | No extra cost when basic works |
auto (enhanced fallback) | 1 + 5 = 6 total | Only charged when fallback triggers |
Cost Examples
| Scenario | Credits |
|---|---|
100 URLs with basic | 100 |
100 URLs with enhanced | 600 |
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)
Related Pages
- Proxies -- Geographic proxy targeting and country support
- Scrape -- All scrape parameters and formats
- Batch Scrape -- Bulk scraping with proxy options
- Pricing -- Full credit cost breakdown
- Troubleshooting -- Common issues and fixes
Next: Fast Scraping -->