FlowiseAI/Flowise · error · Error
Crawl failed: ${error.message}
Error message
Crawl failed: ${error.message} What it means
Fallback branch in crawlUrl's catch: the error had no error.response.data.error, so only error.message survives. Covers pure transport errors (ECONNRESET, ETIMEDOUT, ENOTFOUND), the 'Crawl request failed' throw from [117], the 'Too many redirects' or SSRF deny-list throws from secureAxiosRequest, and the non-200 handleError throws when response.data had no error field.
Source
Thrown at packages/components/nodes/documentloaders/FireCrawl/FireCrawl.ts:313
if (response.status === 200) {
const crawlResponse = response.data as CrawlResponse
if (!crawlResponse.success) {
throw new Error(`Crawl request failed: ${crawlResponse.error || 'Unknown error'}`)
}
if (waitUntilDone) {
return this.monitorJobStatus(crawlResponse.id, headers, pollInterval)
} else {
return crawlResponse
}
} else {
this.handleError(response, 'start crawl job')
}
} catch (error: any) {
if (error.response?.data?.error) {
throw new Error(`Crawl failed: ${error.response.data.error}`)
}
throw new Error(`Crawl failed: ${error.message}`)
}
return { success: false, id: '', url: '' }
}
async extract(
request: ExtractRequest,
waitUntilDone: boolean = true,
pollInterval: number = 2
): Promise<ExtractResponse | ExtractStatusResponse> {
const headers = this.prepareHeaders()
// Create a clean payload with only valid parameters
const validParams: any = {
urls: request.urls
}
// Add optional parameters if they exist and are not emptyView on GitHub (pinned to abe4a8601a)
Solutions
- Read the message: 'Too many redirects' or a URL-validation message points at the SSRF guard; ETIMEDOUT/ECONNRESET points at transport; 'Crawl request failed' points at [117].
- Confirm outbound HTTPS to api.firecrawl.dev works from the host (curl -v).
- If using a self-hosted apiUrl on internal infrastructure, ensure the URL is allowed by resolveAndValidate or is publicly resolvable.
- For transient transport errors, retry with backoff.
Example fix
// before
} catch (error: any) {
if (error.response?.data?.error) {
throw new Error(`Crawl failed: ${error.response.data.error}`)
}
throw new Error(`Crawl failed: ${error.message}`)
}
// after - preserve cause for diagnosis
} catch (error: any) {
const detail = error.response?.data?.error ?? error.message
throw new Error(`Crawl failed: ${detail}`, { cause: error })
} Defensive patterns
Strategy: retry
Validate before calling
import { resolve as dnsResolve } from 'dns/promises'
async function assertFirecrawlDns(hostname = 'api.firecrawl.dev'): Promise<void> {
try { await dnsResolve(hostname) }
catch { throw new Error(`DNS lookup failed for ${hostname} - cannot reach FireCrawl`) }
}
// await assertFirecrawlDns(new URL(apiUrl).hostname) before crawlUrl Try / catch
async function crawlWithRetry(app: FirecrawlApp, url: string, params: any, attempts = 3) {
for (let i = 0; i < attempts; i++) {
try {
return await app.crawlUrl(url, params)
} catch (error) {
const msg = error instanceof Error ? error.message : String(error)
if (/ETIMEDOUT|ECONNRESET|ENOTFOUND|EAI_AGAIN/.test(msg) && i < attempts - 1) {
await new Promise((r) => setTimeout(r, 2 ** i * 500))
continue
}
throw error
}
}
throw new Error('unreachable')
} Prevention
- Confirm outbound HTTPS to api.firecrawl.dev works from the host (curl -v).
- For self-hosted apiUrl on internal hosts, ensure the SSRF guard (resolveAndValidate) allows the IP.
- Retry transient transport errors with exponential backoff; do not retry SSRF/redirect errors.
When it happens
Trigger: Network cannot reach api.firecrawl.dev; TLS handshake failed; too many redirects; URL/IP blocked by the SSRF guard in secureAxiosRequest; handleError threw 'Unexpected error ... Status code: <n>' for a status not in [402,408,409,500].
Common situations: DNS outage; corporate firewall blocking outbound HTTPS; self-hosted FireCrawl apiUrl pointing at an internal IP that the SSRF guard blocks; intermittent 502/503 from a load balancer (not in handleError's list).
Related errors
- Crawl failed: ${error.response.data.error}
- Failed to post ${url}: ${error}
- ${error.message}
- Crawl request failed: ${crawlResponse.error || 'Unknown erro
- Crawl job failed
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/846c5f12ce22c1aa.
Report an issue: GitHub.