FlowiseAI/Flowise · error · Error

Crawl failed: ${error.response.data.error}

Error message

Crawl failed: ${error.response.data.error}

What it means

Axios-shaped error during crawlUrl carried an error.response.data.error field, which is surfaced directly. This typically maps to a 402 (payment required), 408, 409, 500 (from handleError), or any response where FireCrawl returned a JSON body with an error string. The status code itself is not included in the message.

Source

Thrown at packages/components/nodes/documentloaders/FireCrawl/FireCrawl.ts:311

            }
            const response: AxiosResponse = await this.postRequest(this.apiUrl + '/v1/crawl', parameters, headers)
            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
        }

View on GitHub (pinned to abe4a8601a)

Solutions

  1. Map the error string: 'payment' / 'credits' -> upgrade or wait for reset; 'authentication' / 'unauthorized' -> rotate API key; 'conflict' -> retry with a fresh idempotencyKey.
  2. Check https://status.firecrawl.dev for active incidents on 500-class errors.
  3. Log error.response.status alongside this message at the call site for diagnosis.
Defensive patterns

Strategy: try-catch

Validate before calling

async function assertFirecrawlReachable(apiUrl = 'https://api.firecrawl.dev'): Promise<void> {
  try {
    const res = await fetch(apiUrl, { method: 'HEAD' })
    if (res.status >= 500) throw new Error(`FireCrawl unhealthy (status ${res.status})`)
  } catch (e) {
    throw new Error(`FireCrawl unreachable at ${apiUrl}: ${(e as Error).message}`)
  }
}
// await assertFirecrawlReachable(apiUrl) before app.crawlUrl(...)

Try / catch

try {
  await app.crawlUrl(url, params)
} catch (error) {
  const msg = error instanceof Error ? error.message : String(error)
  if (/Crawl failed:/.test(msg)) {
    if (/payment|credit|quota|402/i.test(msg)) throw new Error('FireCrawl out of credits - upgrade plan')
    if (/auth|unauthorized|401|403/i.test(msg)) throw new Error('FireCrawl API key invalid - rotate it')
    if (/conflict|409/i.test(msg)) {
      // idempotency collision - retry with a fresh key
      return app.crawlUrl(url, params, true, 2, crypto.randomUUID())
    }
  }
  throw error
}

Prevention

When it happens

Trigger: Out-of-credits response (402); concurrent crawl conflict (409); FireCrawl server error (500); 401/403 with a JSON error body from an invalid API key.

Common situations: Free plan exhausted; revoked API key; FireCrawl-side incident; idempotencyKey collision causing 409.

Related errors


AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12). Data as JSON: /api/errors/5cc3bc3c21b3766c. Report an issue: GitHub.