| name | firecrawl-rate-limits |
| description | Implement Firecrawl rate limiting, backoff, and request queuing patterns.
Use when handling 429 errors, implementing retry logic,
or optimizing API request throughput for Firecrawl.
Trigger with phrases like "firecrawl rate limit", "firecrawl throttling",
"firecrawl 429", "firecrawl retry", "firecrawl backoff".
|
| allowed-tools | Read, Write, Edit |
| version | 1.11.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","firecrawl","api"] |
| compatibility | Designed for Claude Code, also compatible with Codex and OpenClaw |
Firecrawl Rate Limits
Overview
Firecrawl enforces rate limits per API key measured in requests per minute and concurrent connections. When exceeded, the API returns 429 Too Many Requests with a Retry-After header. This skill covers backoff strategies, request queuing, and proactive throttling.
Rate Limit Tiers
| Plan | Scrape RPM | Crawl Concurrency | Credits/Month |
|---|
| Free | 10 | 2 | 500 |
| Hobby | 20 | 3 | 3,000 |
| Standard | 50 | 5 | 50,000 |
| Growth | 100 | 10 | 500,000 |
| Scale | 500+ | 50+ | Custom |
Concurrent crawl jobs count against concurrency limits. If the queue is full, new jobs are rejected with 429.
Instructions
Step 1: Exponential Backoff with Jitter
import FirecrawlApp from "@mendable/firecrawl-js";
const firecrawl = new FirecrawlApp({
apiKey: process.env.FIRECRAWL_API_KEY!,
});
async function withBackoff<T>(
operation: () => Promise<T>,
config = { maxRetries: 5, baseDelayMs: 1000, maxDelayMs: 32000 }
): Promise<T> {
for (let attempt = 0; attempt <= config.maxRetries; attempt++) {
try {
();
} (: ) {
(attempt === config.) error;
status = error. || error.;
(status && status !== && status < ) error;
exponentialDelay = config. * .(, attempt);
jitter = .() * ;
delay = .(exponentialDelay + jitter, config.);
.();
( (r, delay));
}
}
();
}
result = (
firecrawl.(, { : [] })
);