Diagnose and fix FireCrawl common errors and exceptions.
Use when encountering FireCrawl errors, debugging failed requests,
or troubleshooting integration issues.
Trigger with phrases like "firecrawl error", "fix firecrawl",
"firecrawl not working", "debug firecrawl".
Quick-reference diagnostic guide for the most common Firecrawl API errors. Covers HTTP status codes, SDK exceptions, empty content, and crawl job failures with concrete fixes.
Prerequisites
Firecrawl SDK installed (@mendable/firecrawl-js)
FIRECRAWL_API_KEY environment variable set
Access to error logs or console output
Error Reference
401 Unauthorized — Invalid API Key
Error: Unauthorized. Invalid API key.
Cause: API key is missing, malformed, or revoked.
set -euo pipefail
# Verify key is set and starts with fc-
echo "Key prefix: ${FIRECRAWL_API_KEY:0:3}"
# Test directly
curl -s https://api.firecrawl.dev/v1/scrape \
-H "Authorization: Bearer $FIRECRAWL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com","formats":["markdown"]}' | jq .success
Cause: Start URL does not match includePaths pattern, or paths are too restrictive.
// Fix: ensure start URL matches include patterns
const crawl = await firecrawl.crawlUrl("https://example.com", {
includePaths: ["/docs/*", "/api/*"], // start URL must match too
limit: 50,
});
Crawl Stuck at "scraping" Status
const status = await firecrawl.checkCrawlStatus(jobId);
// status.status === "scraping" for >10 minutes
Cause: Large site, slow JS rendering, or Firecrawl queue backup.
// Fix: set timeout and fall back to individual scrapes
const TIMEOUT_MS = 600000; // 10 minutes
const deadline = Date.now() + TIMEOUT_MS;
while (Date.now() < deadline) {
const status = await firecrawl.checkCrawlStatus(jobId);
if (status.status === "completed") return status;
if (status.status === "failed") throw new Error(status.error);
await new Promise(r => setTimeout(r, 5000));
}
throw new Error("Crawl timed out — try reducing limit or using scrapeUrl");
MODULE_NOT_FOUND — Wrong Package Name
Error: Cannot find module '@firecrawl/sdk'
Cause: Using wrong npm package name.
set -euo pipefail
# The correct package is @mendable/firecrawl-js
npm install @mendable/firecrawl-js
Import:import FirecrawlApp from "@mendable/firecrawl-js"
Quick Diagnostic
set -euo pipefail
# 1. Check Firecrawl API health
curl -s https://api.firecrawl.dev/v1/scrape \
-H "Authorization: Bearer $FIRECRAWL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com","formats":["markdown"]}' | jq '{success, markdown_length: (.markdown | length)}'
# 2. Verify SDK version
npm list @mendable/firecrawl-js 2>/dev/null
# 3. Check env var
env | grep FIRECRAWL
Error Handling
Status
Meaning
Retryable
Action
200
Success
N/A
Process result
401
Bad API key
No
Check/rotate key
402
No credits
No
Upgrade or wait for reset
408
Timeout
Yes
Increase timeout, simplify request
429
Rate limited
Yes
Backoff, check Retry-After
500
Server error
Yes
Retry with backoff
503
Service down
Yes
Check status page, retry later
Examples
Comprehensive Error Handler
async function safeScrape(url: string) {
try {
return await firecrawl.scrapeUrl(url, { formats: ["markdown"] });
} catch (err: any) {
const status = err.statusCode;
if (status === 401) console.error("Invalid API key");
else if (status === 402) console.error("Credits exhausted");
else if (status === 429) console.error("Rate limited — retry later");
else console.error(`Firecrawl error ${status}:`, err.message);
return null;
}
}