About this recipe
Recipe Template
{
"meta": {
"instanceId": "f4f5d195bb2162a0972f737368404b18be694648d365d6c6771d7b4909d28167"
},
"nodes": [
{
"id": "b6cd232e-e82e-457b-9f03-c010b3eba148",
"name": "When clicking 'Test workflow'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-40,
0
],
"parameters": [],
"typeVersion": 1
},
{
"id": "2b734806-e3c0-4552-a491-54ca846ed3ac",
"name": "Extract from File",
"type": "n8n-nodes-base.extractFromFile",
"position": [
620,
0
],
"parameters": {
"options": [],
"operation": "binaryToPropery"
},
"typeVersion": 1
},
{
"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": "https:\/\/drive.google.com\/file\/d\/18Ac2xorxirIBm9FNFDDB5aVUSPBCCg1U\/view?usp=drivesdk",
"cachedResultName": "Invoice-798FE2FA-0004.pdf"
},
"options": [],
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "AUEpxwlqBJghNMtb",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"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": "https:\/\/generativelanguage.googleapis.com\/v1beta\/models\/gemini-2.0-flash-exp:generateContent",
"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": "predefinedCredentialType",
"nodeCredentialType": "googlePalmApi"
},
"credentials": {
"anthropicApi": {
"id": "eOt6Ois0jSizRFMJ",
"name": "Anthropic Mira Account"
},
"googlePalmApi": {
"id": "IQrjvfoUd5LUft3b",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 4.2
},
{
"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": "https:\/\/api.anthropic.com\/v1\/messages",
"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": "predefinedCredentialType",
"headerParameters": {
"parameters": [
{
"name": "anthropic-version",
"value": "2023-06-01"
},
{
"name": "content-type",
"value": "application\/json"
}
]
},
"nodeCredentialType": "anthropicApi"
},
"credentials": {
"anthropicApi": {
"id": "eOt6Ois0jSizRFMJ",
"name": "Anthropic Mira Account"
}
},
"typeVersion": 4.2
},
{
"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](https:\/\/console.anthropic.com\/settings\/keys) and\/or [Gemini API key](https:\/\/aistudio.google.com\/app\/apikey)\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
},
{
"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](https:\/\/ai.google.dev\/gemini-api\/docs\/structured-output?lang=rest)"
},
"typeVersion": 1
},
{
"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
},
{
"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](https:\/\/docs.anthropic.com\/en\/docs\/test-and-evaluate\/strengthen-guardrails\/increase-consistency#prefill-claudes-response)"
},
"typeVersion": 1
},
{
"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
},
{
"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
}
],
"pinData": [],
"connections": {
"Google Drive": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
}
]
]
},
"Define Prompt": {
"main": [
[
{
"node": "Google Drive",
"type": "main",
"index": 0
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "Call Claude 3.5 Sonnet with PDF Capabilities",
"type": "main",
"index": 0
},
{
"node": "Call Gemini 2.0 Flash with PDF Capabilities",
"type": "main",
"index": 0
}
]
]
},
"When clicking 'Test workflow'": {
"main": [
[
{
"node": "Define Prompt",
"type": "main",
"index": 0
}
]
]
}
}
}
How to Use an n8n Template
Create a New Workflow
Click "New Workflow" in your n8n dashboard to get started.
Copy & Paste Template
First, copy this template:
Click here to copy the JSON
.
Then, in n8n, click the three dots (···) → "Import from file" and paste the JSON code.
Customize the Nodes
Go through each node in the workflow to update inputs like spreadsheet IDs, email addresses, or message content. Adjust field mappings to match your data.
Grant Access
For nodes that connect to external apps (like Google Sheets or Slack), you'll need to grant access. Connect your accounts using OAuth or an API key and save the credentials in the node.
Test It
Run the workflow by clicking "Execute Node" for each step or "Run Once" for the whole thing. Check the right sidebar to inspect data and debug any errors (they'll show up in red).
Activate Workflow
Once everything works as expected, click the "Activate" toggle to turn your workflow on. You're all set!