firecrawl-common-errors
Provides quick diagnostics and fixes for FireCrawl API errors and failed crawl jobs.
Install
mkdir -p .claude/skills/firecrawl-common-errors && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/5371" && unzip -o skill.zip -d .claude/skills/firecrawl-common-errors && rm skill.zipInstalls to .claude/skills/firecrawl-common-errors
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Diagnose and fix Firecrawl common errors and API response codes.Key capabilities
- →Diagnose Firecrawl 401 Unauthorized errors
- →Fix Firecrawl 402 Payment Required errors
- →Implement exponential backoff for Firecrawl 429 errors
- →Troubleshoot empty content from JS-heavy sites
- →Resolve Firecrawl crawl job failures
How it works
It provides a diagnostic guide for common Firecrawl API errors, offering specific causes and fixes for HTTP status codes, SDK exceptions, and content retrieval issues.
Inputs & outputs
When to use firecrawl-common-errors
- →Debug FireCrawl 401 and 402 errors
- →Validate API keys
- →Troubleshoot crawl job failures
- →Fix empty content results
About this skill
Firecrawl Common Errors
Overview
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_KEYenvironment 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
Fix: Regenerate key at firecrawl.dev/app. Ensure it starts with fc-.
402 Payment Required — Credits Exhausted
Error: Payment required. You have exceeded your credit limit.
Cause: Monthly or plan credits are used up.
set -euo pipefail
# Check remaining credits
curl -s https://api.firecrawl.dev/v1/team/credits \
-H "Authorization: Bearer $FIRECRAWL_API_KEY" | jq .
Fix: Upgrade plan or wait for monthly credit reset. Failed requests do not consume credits.
429 Too Many Requests — Rate Limited
Error: Rate limit exceeded. Retry after X seconds.
Cause: Too many concurrent requests or requests per minute.
// Fix: implement exponential backoff
async function scrapeWithBackoff(url: string, retries = 3) {
for (let i = 0; i < retries; i++) {
try {
return await firecrawl.scrapeUrl(url, { formats: ["markdown"] });
} catch (err: any) {
if (err.statusCode !== 429 || i === retries - 1) throw err;
const delay = 1000 * Math.pow(2, i);
console.warn(`Rate limited, retrying in ${delay}ms...`);
await new Promise(r => setTimeout(r, delay));
}
}
}
Fix: Respect Retry-After header. Queue requests with p-queue.
Empty Markdown — JS Content Not Rendered
const result = await firecrawl.scrapeUrl("https://spa-app.com");
console.log(result.markdown); // "" or just nav text
Cause: Single-page app or JS-heavy site needs time to render.
// Fix: add waitFor and use actions for dynamic content
const result = await firecrawl.scrapeUrl("https://spa-app.com", {
formats: ["markdown"],
waitFor: 5000, // wait 5s for JS rendering
onlyMainContent: true,
});
Crawl Returns Zero Pages
const crawl = await firecrawl.crawlUrl("https://example.com/docs", {
includePaths: ["/api/*"],
});
// crawl.data is empty
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;
}
}
Resources
Next Steps
For comprehensive debugging, see firecrawl-debug-bundle.
Prerequisites
Limitations
- →Requires Firecrawl SDK
- →Requires API key to be set
- →Solutions are specific to Firecrawl API behavior
How it compares
This guide offers targeted solutions for Firecrawl-specific errors, unlike general API debugging methods.
Compared to similar skills
firecrawl-common-errors side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| firecrawl-common-errors (this skill) | 1 | 27d | Review | Beginner |
| chrome-devtools | 41 | 7mo | Review | Intermediate |
| webcmd-autofix | 0 | 1mo | Review | Advanced |
| godot | 1,044 | 5mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
chrome-devtools
mrgoonie
Browser automation, debugging, and performance analysis using Puppeteer CLI scripts. Use for automating browsers, taking screenshots, analyzing performance, monitoring network traffic, web scraping, form automation, and JavaScript debugging.
webcmd-autofix
agentrhq
Automatically fix broken Webcmd adapters when commands fail. Load this skill when a webcmd command fails; it guides you through collecting a trace artifact, patching the adapter, retrying, and safely reporting reproducible upstream defects. Works with any AI agent.
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
python-testing-patterns
wshobson
Implement comprehensive testing strategies with pytest, fixtures, mocking, and test-driven development. Use when writing Python tests, setting up test suites, or implementing testing best practices.
playwright-mcp
sfc-gh-dflippo
Browser testing, web scraping, and UI validation using Playwright MCP. Use this skill when you need to test Streamlit apps, validate web interfaces, test responsive design, check accessibility, or automate browser interactions through MCP tools.
dev-browser
SawyerHood
Browser automation with persistent page state. Use when users ask to navigate websites, fill forms, take screenshots, extract web data, test web apps, or automate browser workflows. Trigger phrases include "go to [url]", "click on", "fill out the form", "take a screenshot", "scrape", "automate", "test the website", "log into", or any browser interaction request.