Workflow: Manualtrigger Workflow
Integrations: extractFromFile, googleDrive, httpRequest, manualTrigger, set, stickyNote

{"meta": {"instanceId": "workflow-d478cd98", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:44.598073", "updatedAt": "2025-09-29T07:07:44.598114", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "nodes": [{"id": "b6cd232e-e82e-457b-9f03-c010b3eba148", "name": "When clicking 'Test workflow'", "type": "n8n-nodes-base.manualTrigger", "position": [-40, 0], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow."}, {"id": "2b734806-e3c0-4552-a491-54ca846ed3ac", "name": "Extract from File", "type": "n8n-nodes-base.extractFromFile", "position": [620, 0], "parameters": {"options": {}, "operation": "binaryToPropery"}, "typeVersion": 1, "notes": "This extractFromFile node performs automated tasks as part of the workflow."}, {"id": "2c199499-cc4f-405c-8560-765500b7acba", "name": "Google Drive", "type": "n8n-nodes-base.googleDrive", "position": [420, 0], "parameters": {"fileId": {"__rl": true, "mode": "list", "value": "18Ac2xorxirIBm9FNFDDB5aVUSPBCCg1U", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Invoice-798FE2FA-0004.pdf"}, "options": {}, "operation": "download"}, "credentials": {"googleDriveOAuth2Api": {"id": "AUEpxwlqBJghNMtb", "name": "Google Drive account"}}, "typeVersion": 3, "notes": "This googleDrive node performs automated tasks as part of the workflow."}, {"id": "e3031c0c-f059-4f30-9684-10014a277d55", "name": "Call Gemini 2.0 Flash with PDF Capabilities", "type": "n8n-nodes-base.httpRequest", "position": [880, 220], "parameters": {"url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "jsonBody": "={\n  \"contents\": [\n    {\n      \"parts\": [\n        {\n          \"inline_data\": {\n            \"mime_type\": \"application/pdf\",\n            \"data\": \"{{ $json.data }}\"\n          }\n        },\n        {\n          \"text\": \"{{ $('Define Prompt').item.json.prompt }}\"\n        }\n      ]\n    }\n  ]\n}", "sendBody": true, "specifyBody": "json", "authentication": "{{ $credentials.predefinedCredentialType }}", "nodeCredentialType": "YOUR_CREDENTIAL_HERE"}, "credentials": {"anthropicApi": {"id": "eOt6Ois0jSizRFMJ", "name": "Anthropic Mira Account"}, "googlePalmApi": {"id": "IQrjvfoUd5LUft3b", "name": "Google Gemini(PaLM) Api account"}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "135df716-32a1-47e8-9ed8-30c830b803d6", "name": "Call Claude 3.5 Sonnet with PDF Capabilities", "type": "n8n-nodes-base.httpRequest", "position": [880, -140], "parameters": {"url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "jsonBody": "={\n  \"model\": \"claude-3-5-sonnet-20241022\",\n    \"max_tokens\": 1024,\n    \"messages\": [{\n        \"role\": \"user\",\n        \"content\": [{\n            \"type\": \"document\",\n            \"source\": {\n                \"type\": \"base64\",\n                \"media_type\": \"application/pdf\",\n                \"data\": \"{{$json.data}}\"\n            }\n        },\n        {\n            \"type\": \"text\",\n            \"text\": \"{{ $('Define Prompt').item.json.prompt }}\"\n        }]\n    }]\n}", "sendBody": true, "sendHeaders": true, "specifyBody": "json", "authentication": "{{ $credentials.predefinedCredentialType }}", "headerParameters": {"parameters": [{"name": "anthropic-version", "value": "2023-06-01"}, {"name": "content-type", "value": "application/json"}]}, "nodeCredentialType": "YOUR_CREDENTIAL_HERE"}, "credentials": {"anthropicApi": {"id": "eOt6Ois0jSizRFMJ", "name": "Anthropic Mira Account"}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "5b8994d1-4bfd-4776-84ac-b3141aca6378", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [-700, -280], "parameters": {"color": 7, "width": 601, "height": 585, "content": "## Workflow: Extract data from PDF with Claude 3.5 Sonnet or Gemini 2.0 Flash\n\n**Overview**\n- This workflow helps you compare Claude 3.5 Sonnet and Gemini 2.0 Flash when extracting data from a PDF\n- This workflow extracts and processes the data within a PDF in **one single step**, **instead of calling an OCR and then an LLM\u201d**\n\n\n**How it works**\n- The initial 2 steps download the PDF and convert it to base64.\n- This base64 string is then sent to both Claude 3.5 Sonnet and Gemini 2.0 Flash to extract information.\n- This workflow is made to let you compare results, latency, and cost (in their dedicated dashboard).\n\n\n**How to use it**\n- Set up your Google Drive if not already done\n- Select a document on your Google Drive\n- Modify the prompt in \"Define Prompt\" to extract the information you need and transform it as wanted.\n- Get a [Claude API key]({{ $env.WEBHOOK_URL }} and/or [Gemini API key]({{ $env.API_BASE_URL }}\n- Note that you can deactivate one of the 2 API calls if you don't want to try both\n- Test the Workflow\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "616241a9-6199-406b-88dc-0afc7d974250", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [820, 60], "parameters": {"color": 5, "width": 320, "height": 360, "content": "You can output the result as JSON by adding the following:\n```\n\"generationConfig\": {\n    \"responseMimeType\": \"application/json\"\n```\nor even use a structured output.\n[Check the documentation]({{ $env.API_BASE_URL }}"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "bbac8d3d-d68f-4aa2-a41a-b06f7de2317b", "name": "Define Prompt", "type": "n8n-nodes-base.set", "position": [180, 0], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "dba23ef5-95df-496a-8e24-c7c1544533d2", "name": "prompt", "type": "string", "value": "Extract the VAT numbers for each country"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "3c2e7265-76e5-4911-a950-7e6b0c89ec5a", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [820, -200], "parameters": {"color": 5, "width": 320, "height": 240, "content": "You can force Claude to output JSON with [Prefill response format]({{ $env.WEBHOOK_URL }}"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "f2b46305-5200-486e-ad4d-ecc0d2a14314", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [380, -120], "parameters": {"color": 5, "width": 380, "height": 280, "content": "These 2 steps first download the PDF file, and then convert it to base64.\nThis is required by both APIs to process the file."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "e5dff70f-b55a-4c23-9025-765a7cf19c4a", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [120, -120], "parameters": {"color": 5, "width": 220, "height": 280, "content": "This prompt is used in both Gemini\u2019s and Claude\u2019s calls to define what information should be extracted and processed."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}], "pinData": {}, "connections": {"e3031c0c-f059-4f30-9684-10014a277d55": {"main": [[{"node": "error-handler-e3031c0c-f059-4f30-9684-10014a277d55", "type": "main", "index": 0}], [{"node": "error-handler-e3031c0c-f059-4f30-9684-10014a277d55-4d665479", "type": "main", "index": 0}], [{"node": "error-handler-e3031c0c-f059-4f30-9684-10014a277d55-0ee0f4ba", "type": "main", "index": 0}], [{"node": "error-handler-e3031c0c-f059-4f30-9684-10014a277d55-921a6cd2", "type": "main", "index": 0}], [{"node": "error-handler-e3031c0c-f059-4f30-9684-10014a277d55-4f76fe5f", "type": "main", "index": 0}], [{"node": "error-handler-e3031c0c-f059-4f30-9684-10014a277d55-d000335c", "type": "main", "index": 0}], [{"node": "error-handler-e3031c0c-f059-4f30-9684-10014a277d55-9ac72ad4", "type": "main", "index": 0}], [{"node": "error-handler-e3031c0c-f059-4f30-9684-10014a277d55-7a9a134d", "type": "main", "index": 0}], [{"node": "error-handler-e3031c0c-f059-4f30-9684-10014a277d55-f5c83670", "type": "main", "index": 0}]]}, "135df716-32a1-47e8-9ed8-30c830b803d6": {"main": [[{"node": "error-handler-135df716-32a1-47e8-9ed8-30c830b803d6", "type": "main", "index": 0}], [{"node": "error-handler-135df716-32a1-47e8-9ed8-30c830b803d6-090d57d2", "type": "main", "index": 0}], [{"node": "error-handler-135df716-32a1-47e8-9ed8-30c830b803d6-8ec65d98", "type": "main", "index": 0}], [{"node": "error-handler-135df716-32a1-47e8-9ed8-30c830b803d6-f74d7d73", "type": "main", "index": 0}], [{"node": "error-handler-135df716-32a1-47e8-9ed8-30c830b803d6-d5577db1", "type": "main", "index": 0}], [{"node": "error-handler-135df716-32a1-47e8-9ed8-30c830b803d6-980adeac", "type": "main", "index": 0}], [{"node": "error-handler-135df716-32a1-47e8-9ed8-30c830b803d6-d80b95a0", "type": "main", "index": 0}], [{"node": "error-handler-135df716-32a1-47e8-9ed8-30c830b803d6-5e2e3ba7", "type": "main", "index": 0}], [{"node": "error-handler-135df716-32a1-47e8-9ed8-30c830b803d6-a3032fff", "type": "main", "index": 0}]]}, "2b734806-e3c0-4552-a491-54ca846ed3ac": {"main": [[{"node": "error-handler-2b734806-e3c0-4552-a491-54ca846ed3ac-8f27cb8b", "type": "main", "index": 0}]]}, "2c199499-cc4f-405c-8560-765500b7acba": {"main": [[{"node": "error-handler-2c199499-cc4f-405c-8560-765500b7acba-41e9c08a", "type": "main", "index": 0}]]}}, "name": "Manualtrigger Workflow", "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "description": "Automated workflow: Manualtrigger Workflow. This workflow integrates 7 different services: stickyNote, httpRequest, googleDrive, set, stopAndError. It contains 17 nodes and follows best practices for error handling and security.", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "notes": "Excellent quality workflow: Manualtrigger Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}