{"nodes":[{"id":"trigger-2690b6f5","name":"Manual Trigger","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[100,100],"parameters":{}},{"name":"Send message","type":"n8n-nodes-base.mattermost","position":[910,260],"parameters":{"message":"=New information was added to your Google Sheet.\nID: {{$json[\"id\"]}}\nName: {{$json[\"name\"]}}\nEmail: {{$json[\"email\"]}}","attachments":[],"otherOptions":{}},"credentials":{"mattermostApi":"Mattermost Credentials"},"typeVersion":1,"id":"36772d01-6ba3-4599-898b-0fa8df6b42be","notes":"This mattermost node performs automated tasks as part of the workflow."},{"name":"Check if new data","type":"n8n-nodes-base.function","position":[710,260],"parameters":{"functionCode":"const new_items = [];\n// Get static data stored with the workflow\n\nconst data = this.getWorkflowStaticData(\"node\");\ndata.ids = data.ids || [];\nfor (let i = items.length - 1; i >= 0; i--) {\n\n// Check if data is already present\n  if (data.ids.includes(items[i].json.ID)) {\n    break;\n  } else {\n\n// if new data then add it to an array\n    new_items.push({\n      json: {\n        id: items[i].json.ID,\n        name: items[i].json.Name,\n        email: items[i].json.Email\n      },\n    });\n  }\n}\ndata.ids = items.map((item) => item.json.ID);\n\n// return new items\nreturn new_items;\n"},"typeVersion":1,"id":"529de974-e926-4b46-a56f-18eeaa1be74a","notes":"This function node performs automated tasks as part of the workflow."},{"name":"Read data","type":"n8n-nodes-base.googleSheets","position":[510,260],"parameters":{"options":{},"sheetId":"1PyC-U1lXSCbxVmHuwFbkKDF9e3PW_iUn8T-iAd_MYjQ","authentication":"{{ $credentials.oAuth2 }}"},"credentials":{"googleSheetsOAuth2Api":"google-sheets"},"typeVersion":1,"id":"d6dfc150-6e9a-4a4c-bec0-109bf08f2c16","notes":"This googleSheets node performs automated tasks as part of the workflow."},{"name":"Execute every 45 mins","type":"n8n-nodes-base.interval","position":[310,260],"parameters":{"unit":"minutes"},"typeVersion":1,"id":"92363aeb-2109-46d7-9161-6d535c042dbe","notes":"This interval node performs automated tasks as part of the workflow."},{"id":"error-0873dea7","name":"Error Handler","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1000,400],"parameters":{"message":"Workflow execution error","options":{}}}],"connections":{},"name":"Mattermost Workflow","description":"Automated workflow: Mattermost Workflow. This workflow processes data and performs automated tasks.","settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"meta":{"instanceId":"workflow-75876ad4","versionId":"1.0.0","createdAt":"2025-09-29T07:07:50.895308","updatedAt":"2025-09-29T07:07:50.895316","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"notes":"Excellent quality workflow: Mattermost Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}