{ "meta": { "instanceId": "workflow-2b131704", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:48.973973", "updatedAt": "2025-09-29T07:07:48.973984", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "nodes": [ { "id": "b58964ca-d7a9-435d-a7cc-b09cac5c0a30", "name": "When clicking \"Execute Workflow\"", "type": "n8n-nodes-base.manualTrigger", "position": [ 1000, 720 ], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow." }, { "id": "08dcd330-232d-48bf-b3fc-275513be9c62", "name": "Get all records with an image URL", "type": "n8n-nodes-base.airtable", "position": [ 1200, 720 ], "parameters": { "base": { "__rl": true, "mode": "list", "value": "app5TBVbHPs64w5lE", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "N8N Image Automation" }, "table": { "__rl": true, "mode": "list", "value": "tblTVTofgqfzqyIZk", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Frogs" }, "options": {}, "operation": "search", "filterByFormula": "=NOT({Image source URL} = '')" }, "typeVersion": 2, "notes": "This airtable node performs automated tasks as part of the workflow." }, { "id": "331b2a4f-2168-443e-9827-f4967587d643", "name": "Update attachment field with images", "type": "n8n-nodes-base.airtable", "position": [ 1400, 720 ], "parameters": { "base": { "__rl": true, "mode": "list", "value": "app5TBVbHPs64w5lE", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "N8N Image Automation" }, "table": { "__rl": true, "mode": "list", "value": "tblTVTofgqfzqyIZk", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Frogs" }, "columns": { "value": { "id": "={{ $json.id }}", "Image attachment": "={\n\"Attachment\": {\n\"url\": \"{{ $json[\"Image source URL\"] }}\"\n}\n}" }, "schema": [ { "id": "id", "type": "string", "display": true, "removed": false, "readOnly": true, "required": false, "displayName": "id", "defaultMatch": true }, { "id": "Image source URL", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "Image source URL", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Image attachment", "type": "object", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "Image attachment", "defaultMatch": false, "canBeUsedToMatch": true } ], "mappingMode": "defineBelow", "matchingColumns": [ "id" ] }, "options": {}, "operation": "update" }, "typeVersion": 2, "notes": "This airtable node performs automated tasks as part of the workflow." }, { "id": "d2be8b46-c845-4ebf-adfc-2ca2eee9ee46", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [ 460, 460 ], "parameters": { "width": 476, "height": 849, "content": "## Read me\nSuper simple workflow to upload image URLs as attachments in Airtable. [Here's the example Airtable database I used for this workflow.]({{ $env.WEBHOOK_URL }}\n\n1. Set up your Airtable database with one text field which contains image URLs, and an attachment field. \n![Source example]({{ $env.WEBHOOK_URL }}.png#full-width)\n\n2. In each Airtable node, add your Airtable credentials and connect to the base and table you want to modify.\n\n3. In the \"Get all records with an image URL\" node under \"Filter by Formula\", change the field name from \"Image Source URL\" to whatever your URL field name is.\n![Source example]({{ $env.WEBHOOK_URL }}.png)\n\n4. In the third node \"Update attachment field with images\", update the expression with the correct field name for the URL field. \n![Source example]({{ $env.WEBHOOK_URL }}.png)\n\n5. Click \"Execute Workflow\" and watch the magic happen!\n\n" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "error-5b81eb94", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [ 1000, 400 ], "parameters": { "message": "Workflow execution error", "options": {} } } ], "pinData": {}, "connections": {}, "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 3 different services: stickyNote, manualTrigger, airtable. It contains 4 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." }