{"record":{"id":"f3f7543810103473","repo":"FlowiseAI/Flowise","slug":"extract-job-failed","errorCode":null,"errorMessage":"Extract job failed","messagePattern":"Extract job failed","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/components/nodes/documentloaders/FireCrawl/FireCrawl.ts","lineNumber":518,"sourceCode":"            }\n        }\n        throw new Error('Failed to monitor job status')\n    }\n\n    private async monitorExtractStatus(jobId: string, headers: AxiosRequestHeaders, checkInterval: number): Promise<ExtractStatusResponse> {\n        let isJobCompleted = false\n        while (!isJobCompleted) {\n            const statusResponse: AxiosResponse = await this.getRequest(this.apiUrl + `/v1/extract/${jobId}`, headers)\n            if (statusResponse.status === 200) {\n                const statusData = statusResponse.data as ExtractStatusResponse\n                switch (statusData.status) {\n                    case 'completed':\n                        isJobCompleted = true\n                        return statusData\n                    case 'processing':\n                    case 'failed':\n                        if (statusData.status === 'failed') {\n                            throw new Error('Extract job failed')\n                        }\n                        await new Promise((resolve) => setTimeout(resolve, Math.max(checkInterval, 2) * 1000))\n                        break\n                    default:\n                        throw new Error(`Unknown extract status: ${statusData.status}`)\n                }\n            } else {\n                this.handleError(statusResponse, 'check extract status')\n            }\n        }\n        throw new Error('Failed to monitor extract status')\n    }\n\n    private handleError(response: AxiosResponse, action: string): void {\n        if ([402, 408, 409, 500].includes(response.status)) {\n            const errorMessage: string = response.data.error || 'Unknown error occurred'\n            throw new Error(`Failed to ${action}. Status code: ${response.status}. Error: ${errorMessage}`)\n        } else {","sourceCodeStart":500,"sourceCodeEnd":536,"githubUrl":"https://github.com/FlowiseAI/Flowise/blob/abe4a8601a058047b350c260676826e21dd14101/packages/components/nodes/documentloaders/FireCrawl/FireCrawl.ts#L500-L536","documentation":"Thrown by monitorExtractStatus when the /v1/extract/<id> polling response reports `status: 'failed'`. Indicates FireCrawl could not complete the extract job (LLM extraction failed, schema incompatible, or upstream site issue).","triggerScenarios":"statusData.status === 'failed' on a 200 response from extract-status. Causes: invalid JSON schema, prompt rejected by the extraction model, target URL blocked, plan credits exhausted mid-job.","commonSituations":"Schema fields not matching page content; overly long extractionPrompt; target site requires JS that extraction backend cannot render; 402 mid-extraction.","solutions":["Simplify the schema to a few primitive fields and retry.","Shorten or rewrite extractionPrompt; avoid ambiguous keys.","Confirm the URL is publicly reachable from FireCrawl's region.","Check FireCrawl dashboard for the failed extract job's error."],"exampleFix":"// before\nconst response = await app.extract({ urls: [url], prompt, schema: complexZod })\n\n// after\nconst response = await app.extract({\n  urls: [url],\n  prompt,\n  schema: { type: 'object', properties: { title: { type: 'string' } }, required: ['title'] }\n})","handlingStrategy":"fallback","validationCode":"if (!request.urls?.length) throw new Error('extract requires urls')\nif (request.schema && typeof request.schema === 'object' && !request.schema.type) {\n  throw new Error('schema must be a JSON-schema object')\n}","typeGuard":"function isExtractFailed(s: unknown): boolean {\n  return typeof s === 'object' && s !== null && (s as any).status === 'failed'\n}","tryCatchPattern":"try { return await app.extract(req) }\ncatch (e) {\n  if (/Extract job failed/.test((e as Error).message)) {\n    return await app.extract({ ...req, schema: minimalSchema }) // retry simpler\n  }\n  throw e\n}","preventionTips":["Start with a minimal schema and expand after a successful run.","Keep extractionPrompt short and unambiguous.","Confirm target URL is publicly fetchable."],"tags":["firecrawl","extract","polling","job-failed"],"backgroundTag":null,"analyzedSha":"abe4a8601a058047b350c260676826e21dd14101","analyzedAt":"2026-08-12T16:04:40.823Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}