FlowiseAI/Flowise · error · Error
Firecrawl: Crawl job failed
Error message
Firecrawl: Crawl job failed
What it means
Thrown by FireCrawlLoader.load() in crawl mode when crawlUrl returns a CrawlStatusResponse with `status: 'failed'`. This is the loader-level surfacing of [124]; it means FireCrawl started the crawl but the job ended in failure.
Source
Thrown at packages/components/nodes/documentloaders/FireCrawl/FireCrawl.ts:613
}
}))
} else if (this.mode === 'scrape') {
if (!this.url) {
throw new Error('Firecrawl: URL is required for scrape mode')
}
const response = await app.scrapeUrl(this.url, this.params)
if (!response.success) {
throw new Error(`Firecrawl: Failed to scrape URL. Error: ${response.error}`)
}
firecrawlDocs = [response.data as FirecrawlDocument]
} else if (this.mode === 'crawl') {
if (!this.url) {
throw new Error('Firecrawl: URL is required for crawl mode')
}
const response = await app.crawlUrl(this.url, this.params)
if ('status' in response) {
if (response.status === 'failed') {
throw new Error('Firecrawl: Crawl job failed')
}
firecrawlDocs = response.data || []
} else {
if (!response.success) {
throw new Error(`Firecrawl: Failed to scrape URL. Error: ${response.error}`)
}
firecrawlDocs = [response.data as FirecrawlDocument]
}
} else if (this.mode === 'extract') {
if (!this.url) {
throw new Error('Firecrawl: URL is required for extract mode')
}
this.params!.urls = [this.url]
const response = await app.extract(this.params as any as ExtractRequest)
if (!response.success) {
throw new Error(`Firecrawl: Failed to extract URL.`)
}
View on GitHub (pinned to abe4a8601a)
Solutions
- Retry once with a smaller limit/maxDepth.
- Switch the same URL to scrape mode to verify FireCrawl can fetch it.
- Check FireCrawl dashboard for the failed job's per-page errors.
- Confirm the URL is publicly reachable and not behind a login/WAF.
Example fix
// before
const response = await app.crawlUrl(this.url, this.params)
// after
const response = await app.crawlUrl(this.url, { ...this.params, limit: 10, maxDepth: 2 })
if ('status' in response && response.status === 'failed') {
// fallback: scrape just the seed page
const fallback = await app.scrapeUrl(this.url, this.params)
firecrawlDocs = fallback.success ? [fallback.data as FirecrawlDocument] : []
} Defensive patterns
Strategy: fallback
Validate before calling
try { new URL(url) } catch { throw new Error(`invalid url: ${url}`) } Type guard
function isCrawlStatusResponse(r: any): r is CrawlStatusResponse {
return r && typeof r === 'object' && 'status' in r
} Try / catch
try { return await loader.load() }
catch (e) {
if (/Crawl job failed/.test((e as Error).message)) {
const fb = new FireCrawlLoader({ ...params, mode: 'scrape' })
return await fb.load() // degrade to single-page scrape
}
throw e
} Prevention
- Start with a small limit/maxDepth to validate reachability.
- Keep a scrape-mode fallback for crawl failures.
- Check FireCrawl dashboard for per-page errors on the failed job.
When it happens
Trigger: crawlUrl returns an object with a `status` field equal to 'failed'. The loader checks `'status' in response` to distinguish status responses from immediate responses. Triggers when the crawl job reports terminal failure.
Common situations: Target site blocks FireCrawl; all pages returned errors; robots.txt disallow; FireCrawl incident; crawl budget exhausted; target down.
Related errors
- Crawl job failed
- Firecrawl: URL is required for crawl mode
- Crawl request failed: ${crawlResponse.error || 'Unknown erro
- Crawl failed: ${error.response.data.error}
- Crawl failed: ${error.message}
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/5910aae31146f476.
Report an issue: GitHub.