Workflow: Manualtrigger Workflow
Integrations: extractFromFile, filter, googleDrive, googleSheets, if, manualTrigger, noOp, set, splitInBatches, stickyNote, stopAndError

{"nodes": [{"id": "ee3cd6ff-40ba-40d4-bbbf-90244da4a272", "name": "When clicking \u2018Test workflow\u2019", "type": "n8n-nodes-base.manualTrigger", "position": [0, -155], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow."}, {"id": "68584aab-c5f3-450a-a1e3-cddc8d64082d", "name": "Extract from File", "type": "n8n-nodes-base.extractFromFile", "position": [1100, -280], "parameters": {"options": {}, "operation": "fromJson"}, "typeVersion": 1, "notes": "This extractFromFile node performs automated tasks as part of the workflow."}, {"id": "e23a67a1-44df-4b83-a80a-9383f4432c7d", "name": "If is archived is false", "type": "n8n-nodes-base.if", "position": [1540, -280], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "e051d2f2-7c22-4864-bbe7-4832cc54acaa", "operator": {"type": "boolean", "operation": "false", "singleValue": true}, "leftValue": "={{ $json.data.isArchived }}", "rightValue": ""}]}}, "typeVersion": 2.2, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "313764d0-f115-46d3-a2e3-1fde647f7d85", "name": "OpenAI Chat Model", "type": "n8n-nodes-base.noOp", "position": [1848, -60], "parameters": {"model": {"__rl": true, "mode": "list", "value": "gpt-4o-mini"}, "options": {}}, "credentials": {"openAiApi": {"id": "1IOLtYX7aTspCAN8", "name": "OpenAI Pollup"}}, "typeVersion": 1.2, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "81fcc7a0-955d-4930-b203-8e98d57e3c4c", "name": "If extension is json", "type": "n8n-nodes-base.filter", "position": [660, -280], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "7b80be39-b5cc-4f96-8529-75559aaece38", "operator": {"name": "filter.operator.equals", "type": "string", "operation": "equals"}, "leftValue": "={{ $json.name.split('.').pop(); }}", "rightValue": "=json"}]}}, "typeVersion": 2.2, "notes": "This filter node performs automated tasks as part of the workflow."}, {"id": "1c8c81ea-d0ae-4925-ae4b-05482c1b5fa2", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [-340, -380], "parameters": {"color": 4, "width": 260, "height": 440, "content": "## How to export your Google keep notes \n* Google has a dedicated service for exporting your google data, called [Google Takeout]({{ $env.WEBHOOK_URL }} you'll have to login  it. \n* Click on \"Deselect all\" then select only Google Keep and click on \"Next\". \n- Select the destination (use \"Send download link via mail\" as you'll have to uncompress a zip file before to send it again to Google Drive)\n- Upload to Google Drive all json files from your uncompresed file, to specific directory and you are ready to start!\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "31eb6398-cca0-4ed1-910a-470fa49c9727", "name": "Search in \"Keep\" folder", "type": "n8n-nodes-base.googleDrive", "position": [220, -155], "parameters": {"limit": 2, "filter": {"folderId": {"__rl": true, "mode": "list", "value": "1BggjRVCqyDnECK_mB2M-PYareptQv99P", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Keep"}, "whatToSearch": "files"}, "options": {}, "resource": "fileFolder"}, "credentials": {"googleDriveOAuth2Api": {"id": "veQ5hnnOES56fTcI", "name": "Google Drive account good"}}, "typeVersion": 3, "notes": "This googleDrive node performs automated tasks as part of the workflow."}, {"id": "653d04b2-4020-4254-a8f5-53e15228adb7", "name": "Loop every 10 items", "type": "n8n-nodes-base.splitInBatches", "position": [440, -155], "parameters": {"options": {}, "batchSize": 10}, "typeVersion": 3, "notes": "This splitInBatches node performs automated tasks as part of the workflow."}, {"id": "c1171bd7-5e2d-49e6-a52b-6e9282cb093d", "name": "Download the files", "type": "n8n-nodes-base.googleDrive", "position": [880, -280], "parameters": {"fileId": {"__rl": true, "mode": "id", "value": "={{ $json.id }}"}, "options": {}, "operation": "download"}, "credentials": {"googleDriveOAuth2Api": {"id": "veQ5hnnOES56fTcI", "name": "Google Drive account good"}}, "typeVersion": 3, "notes": "This googleDrive node performs automated tasks as part of the workflow."}, {"id": "4d9caff3-2ac8-40fc-91a4-1b395e693141", "name": "Put some AI treatment here if you need it", "type": "n8n-nodes-base.noOp", "notes": "Yu can use this AI Agent to process a number or anything you need from your notes", "position": [1760, -280], "parameters": {"text": "=Extract the amount in euros of the input. output just the amount and nothing else. \nHere is the input:{{ $json.data.textContent }}", "options": {}, "promptType": "define"}, "typeVersion": 1.8}, {"id": "d97c4e02-4b1a-479f-8492-e601c553ac57", "name": "Set the fields for export", "type": "n8n-nodes-base.set", "position": [2136, -280], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "d05409ea-b739-47bd-9c07-0dea40b83de1", "name": "textContent", "type": "string", "value": "={{ $('If is archived is false').item.json.data.textContent }}"}, {"id": "acbe202e-de95-4a47-a90b-78556fec4650", "name": "Edited", "type": "string", "value": "={{ new Date($('If is archived is false').item.json.data.userEditedTimestampUsec / 1000).toLocaleString() }}"}, {"id": "13f00e53-75fd-4db5-9a22-b5e329c72b47", "name": "Created", "type": "string", "value": "={{ new Date($('If is archived is false').item.json.data.createdTimestampUsec / 1000).toLocaleString() }}"}, {"id": "7e58e874-5238-4fb6-8b00-ea947c59ec4b", "name": "isArchived", "type": "boolean", "value": "={{ $('If is archived is false').item.json.data.isArchived }}"}, {"id": "721f31d8-4944-4a63-878e-71816eee755c", "name": "Amount", "type": "string", "value": "={{ $json.output }}"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "0f8d9b1f-f5de-477f-ad50-eeb89bcf8dc7", "name": "Add to google sheet", "type": "n8n-nodes-base.googleSheets", "position": [2356, -155], "parameters": {"columns": {"value": {}, "schema": [{"id": "textContent", "type": "string", "display": true, "removed": false, "required": false, "displayName": "textContent", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Edited", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Edited", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Created", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Created", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "isArchived", "type": "string", "display": true, "removed": false, "required": false, "displayName": "isArchived", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "autoMapInputData", "matchingColumns": [], "attemptToConvertTypes": false, "convertFieldsToString": false}, "options": {}, "operation": "appendOrUpdate", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "1rjgyHw6XU4NTRCx4eXuQ0AIXhY3mWqxg1NiAhrSnuzE", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "googl keep export (10/05/25)"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "gdLmm513ROUyH6oU", "name": "Google Sheets account"}}, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow."}, {"id": "31141cf2-94d6-45ad-8632-18001a6d4d36", "name": "Filter", "type": "n8n-nodes-base.if", "position": [1320, -280], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "or", "conditions": [{"id": "11bacf5f-6675-4681-b205-5e5293eaae02", "operator": {"type": "string", "operation": "contains"}, "leftValue": "={{ $json.data.textContentHtml }}", "rightValue": "d\u00e9pens\u00e9"}, {"id": "c40da1df-559c-4278-bde1-cdb8e65c8428", "operator": {"type": "string", "operation": "contains"}, "leftValue": "={{ $json.data.textContentHtml }}", "rightValue": "depense"}]}}, "typeVersion": 2.2, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "c4c941f5-6579-4f4f-9916-cdd496498760", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [2300, -360], "parameters": {"color": 5, "height": 360, "content": "## Create an empty google sheet file\n\nThat will get your entries from the notes "}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "3ab60239-85cf-4c84-94d3-659fdfef4316", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [140, -300], "parameters": {"color": 5, "height": 360, "content": "## Set the directory Where you put the files"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "49546099-e072-4183-a14e-fff80928920d", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [1240, -480], "parameters": {"color": 5, "height": 360, "content": "## Filter the files\n\nIf you need the content to contain a word, or after a certain date.\n\nIf you don't need to filter it, just remove the node"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "195923a2-faf9-40c3-95c0-08fdc078e291", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [1720, -500], "parameters": {"color": 5, "width": 320, "height": 560, "content": "## Process each file with AI\n\nIf you need the extract some information from the contextq, you can do it here. If you don't need it, just delete the node"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "07b3570a-72cf-480b-b3b8-fb461b57822d", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [-340, 80], "parameters": {"color": 4, "width": 380, "height": 300, "content": "## Setup\n* Export your Google Keep notes (see \"how to export your Google Keep notes\")\n\n- Connect Google Drive, OpenAI, and Google Sheets in n8n.\n\n- Set the correct folder path for your notes in the \u201cSearch in \u2018Keep\u2019 folder\u201d node.\n\n- Point the Google Sheet node to your spreadsheet"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "48e1cff2-2748-4d15-91b4-d5ee2f5d9581", "name": "Sticky Note6", "type": "n8n-nodes-base.stickyNote", "position": [-340, -500], "parameters": {"width": 720, "height": 100, "content": "## Contact me\n### If you need some help with this workflow: Write to me: [thomas@pollup.net](mailto:thomas@pollup.net)\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "error-ae18bf5e", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "connections": {"68584aab-c5f3-450a-a1e3-cddc8d64082d": {"main": [[{"node": "error-handler-68584aab-c5f3-450a-a1e3-cddc8d64082d-d2155808", "type": "main", "index": 0}]]}, "313764d0-f115-46d3-a2e3-1fde647f7d85": {"main": [[{"node": "error-handler-313764d0-f115-46d3-a2e3-1fde647f7d85-9f5d885e", "type": "main", "index": 0}]]}, "31eb6398-cca0-4ed1-910a-470fa49c9727": {"main": [[{"node": "error-handler-31eb6398-cca0-4ed1-910a-470fa49c9727-9d346670", "type": "main", "index": 0}]]}, "c1171bd7-5e2d-49e6-a52b-6e9282cb093d": {"main": [[{"node": "error-handler-c1171bd7-5e2d-49e6-a52b-6e9282cb093d-a0c5b20d", "type": "main", "index": 0}]]}, "0f8d9b1f-f5de-477f-ad50-eeb89bcf8dc7": {"main": [[{"node": "error-handler-0f8d9b1f-f5de-477f-ad50-eeb89bcf8dc7-6ecd47db", "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 12 different services: filter, stickyNote, splitInBatches, agent, googleDrive. It contains 24 nodes and follows best practices for error handling and security.", "meta": {"instanceId": "workflow-baa83a45", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:44.843568", "updatedAt": "2025-09-29T07:07:44.843595", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "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."}