{"nodes":[{"id":"b73fed9b-d56c-4175-a310-8c09ed51acd2","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[80,60],"parameters":{"width":464,"height":303,"content":"## Testing \n\nTesting can be done with CURL or similar.\n\nFor File posting using Form Data\ncurl -X POST \"{{ $env.WEBHOOK_URL }}\" \\\n     -H \"Content-Type: text/csv\" \\\n     --data-binary @path/to/your/file.csv\n\n\nThis can also be tested using the Test workflow"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"6ed4b2cc-444f-44e2-ab91-34337acd7a9b","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1680,580],"parameters":{"color":4,"width":396,"height":256,"content":"## Response\nWhere possible we will be returning a binary object.\n```\nIf there is an error\n```\n{\n  \"status\": \"error\",\n  \"data\": \"error message to display\"\n}\n```"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"4eff962e-e636-4704-835a-672ccd705e16","name":"Extract From File","type":"n8n-nodes-base.extractFromFile","onError":"continueErrorOutput","position":[680,80],"parameters":{"options":{},"binaryPropertyName":"data0"},"typeVersion":1,"notes":"This extractFromFile node performs automated tasks as part of the workflow."},{"id":"ccc66f1e-e000-4048-a492-b80fbf8c8fce","name":"Error Response","type":"n8n-nodes-base.respondToWebhook","onError":"continueErrorOutput","position":[1900,900],"parameters":{"options":{"responseCode":500},"respondWith":"json","responseBody":"{\n  \"status\": \"error\",\n  \"data\": \"There was a problem converting your CSV. Please refresh the page and try again.\"\n}"},"typeVersion":1,"notes":"This respondToWebhook node performs automated tasks as part of the workflow."},{"id":"a7d34aba-6ded-4cc8-8866-7d4aa6ae3255","name":"Success Response","type":"n8n-nodes-base.respondToWebhook","onError":"continueErrorOutput","position":[1920,220],"parameters":{"options":{"responseCode":200},"respondWith":"json","responseBody":"={\n  \"status\": \"OK\",\n  \"data\": {{ JSON.stringify($json.jsondata) }}\n}"},"typeVersion":1,"notes":"This respondToWebhook node performs automated tasks as part of the workflow."},{"id":"3484b148-4ba5-4b54-9401-44010ac31178","name":"Change Field","type":"n8n-nodes-base.set","onError":"continueErrorOutput","position":[680,320],"parameters":{"options":{},"assignments":{"assignments":[{"id":"b2e3bec3-221e-4f1d-b439-f75174f68ed1","name":"csv","type":"string","value":"={{ $json.body }}"}]}},"typeVersion":3.3,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"f35635fe-8943-486b-b5fa-4f566dd8f938","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[60,40],"parameters":{"color":7,"width":2298,"height":1027,"content":""},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"cede2fad-f0ee-4082-a403-81f6d8eb188e","name":"Switch","type":"n8n-nodes-base.switch","position":[340,400],"parameters":{"rules":{"values":[{"outputKey":"YOUR_CREDENTIAL_HERE","conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"object","operation":"notEmpty","singleValue":true},"leftValue":"={{ $binary }}","rightValue":""}]},"renameOutput":true},{"outputKey":"YOUR_CREDENTIAL_HERE","conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"8930ce1a-a4cc-4094-b08f-a23a13dec40c","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.headers['content-type'] }}","rightValue":"text/plain"}]},"renameOutput":true},{"outputKey":"YOUR_CREDENTIAL_HERE","conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"e3108952-daa2-425c-8c70-7d2ce0949e0c","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.headers['content-type'] }}","rightValue":"=application/json"}]},"renameOutput":true}]},"options":{"fallbackOutput":"extra"}},"typeVersion":3,"notes":"This switch node performs automated tasks as part of the workflow."},{"id":"a2d92aeb-25eb-4d3c-82ad-16d2124099a8","name":"Send to Error Channel","type":"n8n-nodes-base.slack","position":[2380,880],"webhookId":"d8e1201d-cbcc-4153-a164-51d7b3e17c84","parameters":{"text":":interrobang: Error in XML to JSON tool","select":"channel","blocksUi":"={\n\t\"blocks\": [\n{\n\t\t\t\"type\": \"section\",\n\t\t\t\"text\": {\n\t\t\t\t\"type\": \"mrkdwn\",\n\t\t\t\t\"text\": \":interrobang: Error in CSV to JSON tool\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"section\",\n\t\t\t\"text\": {\n\t\t\t\t\"type\": \"mrkdwn\",\n\t\t\t\t\"text\": \"*Time:*\\n{{ $now.format('dd/MM/yyyy HH:mm:ss') }}\\n*Execution ID:*\\n{{ $execution.id }}\\n\"\n\t\t\t},\n\t\t\t\"accessory\": {\n\t\t\t\t\"type\": \"button\",\n\t\t\t\t\"text\": {\n\t\t\t\t\t\"type\": \"plain_text\",\n\t\t\t\t\t\"text\": \"Go to Error\",\n\t\t\t\t\t\"emoji\": true\n\t\t\t\t},\n\t\t\t\t\"value\": \"error\",\n\t\t\t\t\"url\": \"[insert URL here]{{ $workflow.id }}/executions/{{ $execution.id }}\",\n\t\t\t\t\"action_id\": \"button-action\",\n\t\t\t\t\"style\": \"primary\"\n\t\t\t}\n\t\t}\n\t]\n}","channelId":{"__rl":true,"mode":"id","value":"C0832GBAEN4"},"messageType":"block","otherOptions":{},"authentication":"{{ $credentials.oAuth2 }}"},"typeVersion":2.1,"notes":"This slack node performs automated tasks as part of the workflow."},{"id":"b21c88d1-6f21-4ada-95ef-8ea91463e7ad","name":"Convert Raw Text To CSV","type":"n8n-nodes-base.code","onError":"continueRegularOutput","position":[940,300],"parameters":{"jsCode":"const csvData = $input.all()[0]?.json?.csv;\n\n// Use a regex to split on either ',' or ';'\nconst lines = csvData.split(\"\\n\");\nconst headers = lines[0].split(/,|;/);\n\nconst jsonData = lines.slice(1).map((line) => {\n  // Split on ',' or ';' for each line\n  const data = line.split(/,|;/);\n  let obj = {};\n  headers.forEach((header, i) => {\n    obj[header] = data[i];\n  });\n  return obj;\n});\n\nif (jsonData.length === 0) {\n  throw new Error(\"No data to process\");\n}\n\nreturn jsonData;\n"},"typeVersion":2,"alwaysOutputData":true,"notes":"This code node performs automated tasks as part of the workflow."},{"id":"a9803789-0397-4f5f-9cd2-cb630f983efc","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[2380,40],"parameters":{"color":7,"width":700,"height":600,"content":"## Sample of Raw CSV Data Send\nUse the HTTP request node below to see how to send the Raw CSV data into this workflow. Don't forget to include the \\n's "},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"8fb97224-706b-41de-a7ab-cbe2191436e9","name":"Check if Value","type":"n8n-nodes-base.if","position":[1180,300],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"d8d4cfda-f384-4154-8ad2-c3eabcb8c7ce","operator":{"type":"string","operation":"notExists","singleValue":true},"leftValue":"={{ $json.error }}","rightValue":""}]}},"typeVersion":2.2,"notes":"This if node performs automated tasks as part of the workflow."},{"id":"4484f424-429b-449f-85c2-dd6a135972a0","name":"Send Raw CSV","type":"n8n-nodes-base.httpRequest","position":[2480,200],"parameters":{"url":"{{ $env.BASE_URL }}","body":"album, year, US_peak_chart_post\nThe White Stripes, 1999, -\nDe Stijl, 2000, -\nWhite Blood Cells, 2001, 61\nElephant, 2003, 6\nGet Behind Me Satan, 2005, 3\nIcky Thump, 2007, 2\nUnder Great White Northern Lights, 2010, 11\nLive in Mississippi, 2011, -\nLive at the Gold Dollar, 2012, -\nNine Miles from the White City, 2013, -\n","method":"POST","options":{"response":{"response":{"responseFormat":"file"}}},"sendBody":true,"contentType":"raw","rawContentType":"text/plain"},"typeVersion":4.2,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"70a46bce-32da-4868-a960-3ee1cefbed1f","name":"POST","type":"n8n-nodes-base.webhook","position":[140,420],"webhookId":"add125c9-1591-4e1c-b68c-8032b99b6010","parameters":{"path":"tool/csv-to-json","options":{"binaryPropertyName":"data"},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":1.1,"notes":"This webhook node performs automated tasks as part of the workflow."},{"id":"116cfc2c-6e5f-4367-8c80-e1341e7d196a","name":"Aggregate","type":"n8n-nodes-base.aggregate","position":[1580,220],"parameters":{"options":{},"aggregate":"aggregateAllItemData","destinationFieldName":"jsondata"},"typeVersion":1,"notes":"This aggregate node performs automated tasks as part of the workflow."},{"id":"967dc555-2599-4fb0-b3e1-00164bae4120","name":"Aggregate1","type":"n8n-nodes-base.aggregate","position":[1580,360],"parameters":{"options":{},"aggregate":"aggregateAllItemData","destinationFieldName":"jsondata"},"typeVersion":1,"notes":"This aggregate node performs automated tasks as part of the workflow."},{"id":"51c77def-cdf7-41da-bfd1-e585f0553672","name":"Success Response2","type":"n8n-nodes-base.respondToWebhook","onError":"continueErrorOutput","position":[1900,400],"parameters":{"options":{"responseCode":200},"respondWith":"json","responseBody":"={{ JSON.stringify($json.jsondata) }}"},"typeVersion":1,"notes":"This respondToWebhook node performs automated tasks as part of the workflow."}],"connections":{"Error Response":{"main":[[],[],[],[],[],[],[],[],[]]},"Success Response":{"main":[[],[],[],[],[],[],[],[],[]]},"Send Raw CSV":{"main":[[],[],[],[],[],[],[],[],[]]},"POST":{"main":[[],[],[],[],[],[],[],[],[]]},"Success Response2":{"main":[[],[],[],[],[],[],[],[],[]]},"Extract From File":{"main":[[]]},"Send to Error Channel":{"main":[[]]}},"name":"Stickynote 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: Stickynote Workflow. This workflow integrates 12 different services: webhook, stickyNote, httpRequest, code, switch. It contains 29 nodes and follows best practices for error handling and security.","meta":{"instanceId":"workflow-d937bd35","versionId":"1.0.0","createdAt":"2025-09-29T07:07:42.734953","updatedAt":"2025-09-29T07:07:42.735004","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"notes":"Excellent quality workflow: Stickynote Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}