{"workflow":{"id":13207,"name":"Route measurement data from a webhook to Google Sheets, email, or custom JS","views":6,"recentViews":0,"totalViews":6,"createdAt":"2026-02-04T06:22:47.416Z","description":"## Description\n\nThis workflow helps developers and automation teams **route measurement data from a webhook to multiple destinations** using n8n.\n\nIt is designed for **measurement engines, 3D scanning systems, QA tools, and API-based platforms** that send structured JSON data and need a fast, flexible way to store, display, or process it without building a custom backend.\n\nThe workflow starts with a **Webhook Trigger** that receives incoming measurement data and validates the payload. A processing step normalizes the fields into a clean, consistent format so the data can be reused across different outputs. A routing node then allows users to choose how they want to handle the data.\n\nYou can **append measurements to Google Sheets** for reporting, **display them as a formatted HTML page** for quick viewing, **export them as a CSV and send them by email**, or **run custom JavaScript logic** to forward the data to APIs, cloud storage, or other n8n workflows.\n\nClear sticky notes inside the workflow guide users through setup, credential configuration, and customization, making this template **beginner-friendly and production-ready**.\n\n## How it works\n\n1. A **Webhook Trigger** receives measurement data as a JSON payload.  \n2. The workflow validates and normalizes the data structure.  \n3. A **Switch node** routes the data to the selected output path.  \n4. The data is sent to Google Sheets, an HTML response, a CSV email, or a custom JavaScript step.  \n\n## How to set up\n\n- Import and activate the workflow in n8n.  \n- Copy the **Webhook URL** from the Webhook Trigger node.  \n- Open the **3D Measure Up Web Application**:  \n  https://3dmeasureup.ai/  \n- Log in and navigate to **Settings → Webhooks**.  \n- Paste the webhook URL into the **Webhook URL** field and click **Save**.  \n- Connect Google Sheets and email credentials if needed.  \n- Use the configuration fields and sticky notes inside the workflow to select and customize your output path.  \n\nSetup usually takes **5–10 minutes**.\n\n## Requirements\n\n- n8n (cloud or self-hosted)  \n- A webhook URL generated by this workflow  \n- **3D Measure Up** can send measurement data as JSON to the webhook URL  \n- Google account (optional, for Google Sheets output)  \n- Email credentials (optional, for CSV email delivery)  \n\n## How to update the Webhook URL in 3D Measure Up\n\n1. Open the **3D Measure Up Web Application**:  \n   https://3dmeasureup.ai/  \n2. Log in to your account.  \n3. Navigate to **Settings → Webhooks**.  \n4. Copy the **Webhook Trigger URL** from this n8n workflow.  \n5. Paste the URL into the **Webhook URL** field in 3D Measure Up.  \n6. Click **Save** to apply the configuration.  \n\nOnce saved, the webhook becomes active immediately.  \nFrom now on, whenever new measurements are generated, the data will be sent automatically to your n8n workflow.\n\n## How to customize the workflow\n\n- Adjust the **processing node** to match your measurement schema.  \n- Enable or disable outputs using the **Switch node**.  \n- Edit the HTML template for branding or layout.  \n- Add API calls or storage logic inside the **JavaScript node**.  \n","workflow":{"id":"yZVlVAsth8DT105o","meta":{"instanceId":"8fb45b43f8eb23deb0ab4199cef72e14672a393bf7e379bd9a177b7cf8eaaff7"},"name":"Route measurement data from Webhook to Google Sheets, Email or JS & 700+ apps","tags":[],"nodes":[{"id":"7e946a2d-1c05-4b22-8b30-27f97dc0d031","name":"Note - Webhook Entry Point","type":"n8n-nodes-base.stickyNote","position":[-5584,-1184],"parameters":{"color":7,"width":400,"height":520,"content":"## Webhook Entry Point\n\nReceives POST requests with measurement data at:\n`/measurement-data`\n\n**Expected payload:**\n- measurementId (required)\n- timestamp (required)\n- values (required)\n- deviceId, operator, partNumber (optional)"},"typeVersion":1},{"id":"b8839aba-b527-4537-8198-ff6f49383c0d","name":"Note - Validation & Error Handling","type":"n8n-nodes-base.stickyNote","position":[-4304,-784],"parameters":{"color":7,"width":368,"height":680,"content":"##  Validation & Error Handling\n\n**Checks for required fields:**\n- measurementId\n- timestamp\n- values\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**If validation fails:**\n- Returns 400 error response\n- Stops workflow execution"},"typeVersion":1},{"id":"1fea9530-e0fa-48f7-b827-0297ff0171bf","name":"Note - Data Processing","type":"n8n-nodes-base.stickyNote","position":[-4304,-1440],"parameters":{"color":7,"width":560,"height":456,"content":"## Data Processing\n\n**Parse and Normalize:**\nExtracts and structures measurement data including dimensions (x, y, z), tolerance, status, and metadata.\n\n**Success Response:**\nReturns 200 OK with confirmation message and measurementId."},"typeVersion":1},{"id":"004df3a4-4635-4530-90fa-f5b1ee424a2d","name":"Note - Output Routing","type":"n8n-nodes-base.stickyNote","position":[-3600,-1440],"parameters":{"color":7,"width":692,"height":528,"content":"## Output Routing\n\nRoutes data based on `outputMode` configuration:\n\n- **sheets** → Google Sheets\n- **html** → HTML Page\n- **csv** → CSV Email\n- **custom** → Custom JavaScript\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Set outputMode in Workflow Configuration node."},"typeVersion":1},{"id":"073288bb-6bf7-40b3-8b5a-c991b5c7c7b3","name":"Note - Google Sheets Output","type":"n8n-nodes-base.stickyNote","position":[-2544,-2128],"parameters":{"color":7,"width":488,"height":432,"content":"## Google Sheets Output\n\nAppends/updates measurement data to Google Sheets.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n⚠️ **Setup Required:**\n- Configure Google Sheets credentials\n- Set googleSheetId in Workflow Configuration\n- Sheet name: \"Measurements\""},"typeVersion":1},{"id":"5ef56d94-a716-4231-b184-f370ce1f014c","name":"Note - HTML Output","type":"n8n-nodes-base.stickyNote","position":[-2544,-1616],"parameters":{"color":7,"width":568,"height":376,"content":"## 📄 HTML Report Output\n\nGenerates formatted HTML table with measurement data and returns as web page.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Useful for viewing data directly in browser."},"typeVersion":1},{"id":"2775c854-bd24-4bf7-b89f-82a27c7aeb78","name":"Note - CSV Email Output","type":"n8n-nodes-base.stickyNote","position":[-2544,-1168],"parameters":{"color":7,"width":536,"height":448,"content":"## CSV Email Output\n\nConverts data to CSV file and sends via email.\n\n⚠️ **Setup Required:**\n- Configure SMTP credentials\n- Set emailRecipient in Workflow Configuration\n- Customize emailSubject if needed"},"typeVersion":1},{"id":"8ebdc446-9fc6-47ef-ad49-4f4242953872","name":"Note - Custom JavaScript","type":"n8n-nodes-base.stickyNote","position":[-2544,-672],"parameters":{"color":7,"width":440,"height":500,"content":"## Custom JavaScript Logic\n\nExtensible code node with examples for:\n- External API calls\n- S3/cloud storage uploads\n- Triggering other workflows\n- Custom calculations\n- Data transformations\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Modify the code to fit your needs!"},"typeVersion":1},{"id":"7784bbae-1604-4945-a230-0a15e4175aa1","name":"Note - Configuration","type":"n8n-nodes-base.stickyNote","position":[-5088,-1184],"parameters":{"color":7,"width":416,"height":520,"content":"## Workflow Configuration\n\n**Key Settings:**\n- outputMode: 'sheets' | 'html' | 'csv' | 'custom'\n- googleSheetId: Your Google Sheet ID\n- emailRecipient: Email address for CSV\n- emailSubject: Email subject line\n\nModify these values to customize behavior."},"typeVersion":1},{"id":"3334eff6-e5a6-4915-b95a-02258e507822","name":"Validate Required Fields1","type":"n8n-nodes-base.if","position":[-4560,-864],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"id-1","operator":{"type":"string","operation":"exists"},"leftValue":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.measurementId }}"},{"id":"id-2","operator":{"type":"string","operation":"exists"},"leftValue":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.timestamp }}"},{"id":"id-3","operator":{"type":"string","operation":"exists"},"leftValue":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.values }}"}]}},"typeVersion":2.3},{"id":"39ecbe50-5067-4092-a6ed-023ab45ca147","name":"Parse and Normalize Data1","type":"n8n-nodes-base.set","position":[-4240,-1184],"parameters":{"options":{},"assignments":{"assignments":[{"id":"id-1","name":"measurementId","type":"string","value":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.measurementId }}"},{"id":"id-2","name":"timestamp","type":"string","value":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.timestamp }}"},{"id":"id-3","name":"deviceId","type":"string","value":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.deviceId || 'unknown' }}"},{"id":"id-4","name":"operator","type":"string","value":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.operator || 'N/A' }}"},{"id":"id-5","name":"partNumber","type":"string","value":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.partNumber || 'N/A' }}"},{"id":"id-6","name":"dimension_x","type":"number","value":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.values.x || 0 }}"},{"id":"id-7","name":"dimension_y","type":"number","value":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.values.y || 0 }}"},{"id":"id-8","name":"dimension_z","type":"number","value":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.values.z || 0 }}"},{"id":"id-9","name":"tolerance","type":"number","value":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.values.tolerance || 0 }}"},{"id":"id-10","name":"status","type":"string","value":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.status || 'received' }}"},{"id":"id-11","name":"notes","type":"string","value":"={{ $('Webhook Trigger - Receive Measurement Data').item.json.body.notes || '' }}"}]}},"typeVersion":3.4},{"id":"435a73e2-f90a-429d-984c-9db449e664c0","name":"Send Success Response1","type":"n8n-nodes-base.respondToWebhook","position":[-3968,-1184],"parameters":{"options":{"responseCode":200},"respondWith":"json","responseBody":"={\n  \"success\": true,\n  \"message\": \"Measurement data received successfully\",\n  \"measurementId\": \"{{ $json.measurementId }}\"\n}","enableResponseOutput":true},"typeVersion":1.5},{"id":"77cd0f46-66e8-4175-b2e1-10814a2d48cc","name":"Route to Output Options1","type":"n8n-nodes-base.switch","position":[-3168,-1232],"parameters":{"rules":{"values":[{"outputKey":"Google Sheets","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $('Workflow Configuration').item.json.outputMode }}","rightValue":"sheets"}]},"renameOutput":true},{"outputKey":"HTML Page","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $('Workflow Configuration').item.json.outputMode }}","rightValue":"html"}]},"renameOutput":true},{"outputKey":"CSV Email","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $('Workflow Configuration').item.json.outputMode }}","rightValue":"csv"}]},"renameOutput":true},{"outputKey":"Custom Code","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $('Workflow Configuration').item.json.outputMode }}","rightValue":"custom"}]},"renameOutput":true}]},"options":{}},"typeVersion":3.4},{"id":"31c7fa4e-fd95-467c-b6c6-b0280052be2c","name":"Save to Google Sheets1","type":"n8n-nodes-base.googleSheets","position":[-2480,-2000],"parameters":{"columns":{"value":{"notes":"={{ $json.notes }}","status":"={{ $json.status }}","deviceId":"={{ $json.deviceId }}","operator":"={{ $json.operator }}","timestamp":"={{ $json.timestamp }}","tolerance":"={{ $json.tolerance }}","partNumber":"={{ $json.partNumber }}","dimension_x":"={{ $json.dimension_x }}","dimension_y":"={{ $json.dimension_y }}","dimension_z":"={{ $json.dimension_z }}","measurementId":"={{ $json.measurementId }}"},"schema":[{"id":"measurementId","required":false,"displayName":"measurementId","defaultMatch":false,"canBeUsedToMatch":true},{"id":"timestamp","required":false,"displayName":"timestamp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"deviceId","required":false,"displayName":"deviceId","defaultMatch":false,"canBeUsedToMatch":true},{"id":"operator","required":false,"displayName":"operator","defaultMatch":false,"canBeUsedToMatch":true},{"id":"partNumber","required":false,"displayName":"partNumber","defaultMatch":false,"canBeUsedToMatch":true},{"id":"dimension_x","required":false,"displayName":"dimension_x","defaultMatch":false,"canBeUsedToMatch":true},{"id":"dimension_y","required":false,"displayName":"dimension_y","defaultMatch":false,"canBeUsedToMatch":true},{"id":"dimension_z","required":false,"displayName":"dimension_z","defaultMatch":false,"canBeUsedToMatch":true},{"id":"tolerance","required":false,"displayName":"tolerance","defaultMatch":false,"canBeUsedToMatch":true},{"id":"status","required":false,"displayName":"status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"notes","required":false,"displayName":"notes","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["measurementId"]},"options":{"useAppend":true},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"name","value":"Measurements"},"documentId":{"__rl":true,"mode":"id","value":"={{ $('Workflow Configuration').item.json.googleSheetId }}"}},"typeVersion":4.7},{"id":"40847a27-4468-43c1-b603-670ba2590cc9","name":"Generate HTML Table1","type":"n8n-nodes-base.html","position":[-2464,-1488],"parameters":{"html":"<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\" />\n  <title>Measurement Data Report</title>\n</head>\n<body>\n  <div class=\"container\">\n    <h1>Measurement Data Report</h1>\n    <table>\n      <thead>\n        <tr>\n          <th>Field</th>\n          <th>Value</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr>\n          <td>Measurement ID</td>\n          <td>{{ $json.measurementId }}</td>\n        </tr>\n        <tr>\n          <td>Timestamp</td>\n          <td>{{ $json.timestamp }}</td>\n        </tr>\n        <tr>\n          <td>Device ID</td>\n          <td>{{ $json.deviceId }}</td>\n        </tr>\n        <tr>\n          <td>Operator</td>\n          <td>{{ $json.operator }}</td>\n        </tr>\n        <tr>\n          <td>Part Number</td>\n          <td>{{ $json.partNumber }}</td>\n        </tr>\n        <tr>\n          <td>Dimension X</td>\n          <td>{{ $json.dimension_x }}</td>\n        </tr>\n        <tr>\n          <td>Dimension Y</td>\n          <td>{{ $json.dimension_y }}</td>\n        </tr>\n        <tr>\n          <td>Dimension Z</td>\n          <td>{{ $json.dimension_z }}</td>\n        </tr>\n        <tr>\n          <td>Tolerance</td>\n          <td>{{ $json.tolerance }}</td>\n        </tr>\n        <tr>\n          <td>Status</td>\n          <td>{{ $json.status }}</td>\n        </tr>\n        <tr>\n          <td>Notes</td>\n          <td>{{ $json.notes }}</td>\n        </tr>\n      </tbody>\n    </table>\n  </div>\n</body>\n</html>\n\n<style>\n.container {\n  background-color: #f5f5f5;\n  padding: 20px;\n  font-family: Arial, sans-serif;\n}\n\nh1 {\n  color: #333;\n  text-align: center;\n  margin-bottom: 20px;\n}\n\ntable {\n  width: 100%;\n  border-collapse: collapse;\n  background-color: #ffffff;\n  box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\nth {\n  background-color: #4CAF50;\n  color: white;\n  padding: 12px;\n  text-align: left;\n  font-weight: bold;\n}\n\ntd {\n  padding: 10px;\n  border-bottom: 1px solid #ddd;\n}\n\ntr:hover {\n  background-color: #f1f1f1;\n}\n</style>"},"typeVersion":1.2},{"id":"6ebcade9-e215-4656-9fcd-360e1b5515c5","name":"Return HTML Page1","type":"n8n-nodes-base.respondToWebhook","position":[-2176,-1488],"parameters":{"options":{"responseCode":200,"responseHeaders":{"entries":[{"name":"Content-Type","value":"text/html"}]}},"respondWith":"text","responseBody":"={{ $json.html }}"},"typeVersion":1.5},{"id":"feaa7db6-7908-4fb3-8628-30db47511c5e","name":"Convert to CSV File1","type":"n8n-nodes-base.convertToFile","position":[-2464,-896],"parameters":{"options":{"fileName":"={{ 'measurement-data-' + $now.format('yyyy-MM-dd-HHmmss') + '.csv' }}"}},"typeVersion":1.1},{"id":"a0608b0e-34fd-4da6-a8b5-1dbc04421679","name":"Send Email with CSV1","type":"n8n-nodes-base.emailSend","position":[-2240,-896],"webhookId":"12cfc575-e1a5-436a-8565-3d81c799bd39","parameters":{"text":"={{ 'Please find attached the measurement data export from ' + $('Parse and Normalize Data1').item.json.timestamp }}","options":{"attachments":"data"},"subject":"={{ $('Workflow Configuration').item.json.emailSubject }}","toEmail":"={{ $('Workflow Configuration').item.json.emailRecipient }}","fromEmail":"user@example.com","emailFormat":"text"},"typeVersion":2.1},{"id":"44d39600-25f1-4359-914b-a3cf358da708","name":"Custom JavaScript Logic1","type":"n8n-nodes-base.code","position":[-2448,-416],"parameters":{"jsCode":"// ============================================\n// CUSTOM JAVASCRIPT LOGIC FOR MEASUREMENT DATA\n// ============================================\n// This code demonstrates various ways to process measurement data:\n// 1. Access and transform the incoming data\n// 2. Send data to external APIs\n// 3. Store files in S3 (or other cloud storage)\n// 4. Trigger other n8n workflows\n// 5. Perform custom calculations and filtering\n\n// ============================================\n// 1. ACCESS INCOMING MEASUREMENT DATA\n// ============================================\n// Get all items from the previous node\nconst items = $input.all();\n\n// Access the first item's data\nconst firstItem = items[0].json;\nconsole.log('First measurement:', firstItem);\n\n// Example: Access specific fields from the measurement data\n// Assuming structure: { timestamp, sensorId, temperature, humidity, pressure }\nconst measurements = items.map(item => ({\n  timestamp: item.json.timestamp,\n  sensorId: item.json.sensorId,\n  temperature: item.json.temperature,\n  humidity: item.json.humidity,\n  pressure: item.json.pressure\n}));\n\nconsole.log('Processed measurements:', measurements);\n\n// ============================================\n// 2. SEND DATA TO EXTERNAL API\n// ============================================\n// Example: Send measurement data to a custom API endpoint\nconst apiResults = [];\n\nfor (const measurement of measurements) {\n  try {\n    // Make HTTP request to external API\n    const response = await $http.request({\n      method: 'POST',\n      url: 'https://api.example.com/measurements',\n      headers: {\n        'Content-Type': 'application/json',\n        'Authorization': 'Bearer YOUR_TOKEN_HERE'\n      },\n      body: {\n        sensor_id: measurement.sensorId,\n        timestamp: measurement.timestamp,\n        readings: {\n          temperature: measurement.temperature,\n          humidity: measurement.humidity,\n          pressure: measurement.pressure\n        }\n      }\n    });\n    \n    apiResults.push({\n      success: true,\n      sensorId: measurement.sensorId,\n      apiResponse: response\n    });\n  } catch (error) {\n    console.error('API Error:', error);\n    apiResults.push({\n      success: false,\n      sensorId: measurement.sensorId,\n      error: error.message\n    });\n  }\n}\n\n// ============================================\n// 3. STORE DATA IN AWS S3 (OR OTHER STORAGE)\n// ============================================\n// Example: Prepare data for S3 upload\nconst csvData = measurements.map(m => \n  `${m.timestamp},${m.sensorId},${m.temperature},${m.humidity},${m.pressure}`\n).join('\\n');\n\nconst csvWithHeader = 'Timestamp,Sensor ID,Temperature,Humidity,Pressure\\n' + csvData;\n\n// Create a filename with current date\nconst filename = `measurements_${new Date().toISOString().split('T')[0]}.csv`;\n\n// Note: To actually upload to S3, you would use the AWS S3 node or make an API call\n// This example shows how to prepare the data\nconst s3Payload = {\n  bucket: 'your-bucket-name',\n  key: `measurements/${filename}`,\n  content: csvWithHeader,\n  contentType: 'text/csv'\n};\n\nconsole.log('S3 upload payload prepared:', s3Payload);\n\n// ============================================\n// 4. TRIGGER ANOTHER N8N WORKFLOW\n// ============================================\n// Example: Trigger another workflow via webhook\nconst workflowTriggerResults = [];\n\n// Only trigger if temperature exceeds threshold\nconst highTempMeasurements = measurements.filter(m => m.temperature > 30);\n\nif (highTempMeasurements.length > 0) {\n  try {\n    const triggerResponse = await $http.request({\n      method: 'POST',\n      url: 'https://avikadam.app.n8n.cloud/webhook/alert-workflow',\n      headers: {\n        'Content-Type': 'application/json'\n      },\n      body: {\n        alertType: 'HIGH_TEMPERATURE',\n        measurements: highTempMeasurements,\n        triggeredAt: new Date().toISOString()\n      }\n    });\n    \n    workflowTriggerResults.push({\n      triggered: true,\n      count: highTempMeasurements.length,\n      response: triggerResponse\n    });\n  } catch (error) {\n    console.error('Workflow trigger error:', error);\n    workflowTriggerResults.push({\n      triggered: false,\n      error: error.message\n    });\n  }\n}\n\n// ============================================\n// 5. CUSTOM CALCULATIONS AND FILTERING\n// ============================================\n// Calculate statistics\nconst temperatures = measurements.map(m => m.temperature);\nconst avgTemp = temperatures.reduce((a, b) => a + b, 0) / temperatures.length;\nconst maxTemp = Math.max(...temperatures);\nconst minTemp = Math.min(...temperatures);\n\nconst statistics = {\n  totalMeasurements: measurements.length,\n  averageTemperature: avgTemp.toFixed(2),\n  maxTemperature: maxTemp,\n  minTemperature: minTemp,\n  highTempAlerts: highTempMeasurements.length,\n  processedAt: new Date().toISOString()\n};\n\nconsole.log('Statistics:', statistics);\n\n// ============================================\n// 6. RETURN PROCESSED DATA\n// ============================================\n// Return all processed data as output\nreturn [\n  {\n    json: {\n      summary: statistics,\n      measurements: measurements,\n      apiResults: apiResults,\n      s3Upload: s3Payload,\n      workflowTriggers: workflowTriggerResults,\n      processedCount: measurements.length\n    }\n  }\n];\n\n// ============================================\n// ADDITIONAL EXAMPLES\n// ============================================\n\n// Example: Group measurements by sensor ID\n// const groupedBySensor = measurements.reduce((acc, m) => {\n//   if (!acc[m.sensorId]) acc[m.sensorId] = [];\n//   acc[m.sensorId].push(m);\n//   return acc;\n// }, {});\n\n// Example: Filter measurements by date range\n// const today = new Date().toISOString().split('T')[0];\n// const todayMeasurements = measurements.filter(m => \n//   m.timestamp.startsWith(today)\n// );\n\n// Example: Transform data for specific database format\n// const dbRecords = measurements.map(m => ({\n//   id: `${m.sensorId}_${m.timestamp}`,\n//   sensor_id: m.sensorId,\n//   measured_at: new Date(m.timestamp),\n//   temp_celsius: m.temperature,\n//   humidity_percent: m.humidity,\n//   pressure_hpa: m.pressure,\n//   created_at: new Date()\n// }));"},"typeVersion":2},{"id":"18cbe32b-9067-4114-b059-f87d4f08dc40","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-6576,-1392],"parameters":{"color":"#66651A","width":896,"height":928,"content":"# Measurement Data Routing Workflow\n\nThis workflow receives measurement data via webhook and routes it to multiple output destinations based on configuration.\n\n## How it works:\n1. **Webhook receives** POST requests with measurement data (ID, timestamp, dimensions, tolerance, metadata)\n2. **Validation** ensures required fields are present; returns error if missing\n3. **Data normalization** extracts and structures all measurement fields with defaults for optional values\n4. **Success response** confirms receipt immediately (200 OK)\n5. **Routing** directs data to one of four outputs based on the outputMode setting:\n   - **sheets**: Appends to Google Sheets for tracking and analysis\n   - **html**: Returns formatted HTML table for browser viewing\n   - **csv**: Emails CSV file attachment to specified recipient\n   - **custom**: Runs JavaScript code for API calls, cloud storage, or custom logic\n\n## Setup steps:\n1. **Configure output mode**: Edit \"Workflow Configuration\" node and set outputMode to your preferred destination\n2. **Google Sheets** (if using sheets mode): Add Google Sheets credentials and update googleSheetId with your sheet ID\n3. **Email** (if using csv mode): Add SMTP credentials and set emailRecipient to the destination address\n4. **Custom code** (if using custom mode): Modify the JavaScript node with your integration logic\n5. **Test**: Send a POST request to the webhook URL with sample measurement data\n\n\n\n## How to get the Webhook URL:\n- **Double click** on the 1st node **Webhook Trigger - Receive Measurement Data**\n- You can see Test / Production URL section at the top in drop down ⌄ Webhook URLs\n**Ex.** Webhook URL format: https://{your-cloud-name}.app.n8n.cloud/webhook/measurement-data\n\n\n## How to take measurements:\n- Import and activate the workflow in n8n.  \n- Copy the **Webhook URL** from the Webhook Trigger node.  \n- Open the **3D Measure Up Web Application**:   https://3dmeasureup.ai/  \n- Log in and navigate to **Settings → Webhooks**.  \n- Paste the webhook URL into the **Webhook URL** field and click **Save**. \n\n### Now, whenever you take a measurement with 3D Measure Up, it will be available in your n8n workflow"},"typeVersion":1},{"id":"acafb3fd-947c-4782-966e-ee185bffd5e9","name":"Webhook Trigger - Receive Measurement Data","type":"n8n-nodes-base.webhook","position":[-5488,-864],"webhookId":"9ce99cc4-237e-43af-b927-832abfb918a2","parameters":{"path":"measurement-data","options":{},"httpMethod":"POST","responseMode":"lastNode"},"typeVersion":2.1,"alwaysOutputData":false},{"id":"fe53a33d-c1ad-4bd3-a4b9-a90a7111882e","name":"Send Error Response","type":"n8n-nodes-base.respondToWebhook","position":[-4192,-368],"parameters":{"options":{"responseCode":400},"respondWith":"json","responseBody":"{\n  \"success\": false,\n  \"error\": \"Missing required fields: measurementId, timestamp, values\"\n}"},"typeVersion":1.5},{"id":"4aa05768-a3a3-460f-b5ea-d203bcd8af01","name":"Error - Invalid Payload","type":"n8n-nodes-base.stopAndError","position":[-4192,-576],"parameters":{"errorMessage":"Invalid payload: Missing required fields (measurementId, timestamp, values)"},"typeVersion":1},{"id":"1930f36c-1b48-4938-8f5e-fe4547023825","name":"Workflow Configuration","type":"n8n-nodes-base.set","position":[-4976,-864],"parameters":{"options":{},"assignments":{"assignments":[{"id":"id-1","name":"outputMode","type":"string","value":"sheets"},{"id":"id-2","name":"googleSheetId","type":"string","value":"YOUR_SHEET_ID_HERE - Please replace with your actual Google Sheet ID"},{"id":"id-3","name":"emailRecipient","type":"string","value":"user@example.com"},{"id":"id-4","name":"emailSubject","type":"string","value":"Measurement Data Export"}]},"includeOtherFields":true},"typeVersion":3.4}],"active":false,"pinData":{},"settings":{"binaryMode":"separate","availableInMCP":false,"executionOrder":"v1"},"versionId":"69b60df7-a90e-44a3-b804-908bc6ec5e1c","connections":{"Convert to CSV File1":{"main":[[{"node":"Send Email with CSV1","type":"main","index":0}]]},"Generate HTML Table1":{"main":[[{"node":"Return HTML Page1","type":"main","index":0}]]},"Send Success Response1":{"main":[[{"node":"Route to Output Options1","type":"main","index":0}]]},"Workflow Configuration":{"main":[[{"node":"Validate Required Fields1","type":"main","index":0}]]},"Route to Output Options1":{"main":[[{"node":"Save to Google Sheets1","type":"main","index":0}],[{"node":"Generate HTML Table1","type":"main","index":0}],[{"node":"Convert to CSV File1","type":"main","index":0}],[{"node":"Custom JavaScript Logic1","type":"main","index":0}]]},"Parse and Normalize Data1":{"main":[[{"node":"Send Success Response1","type":"main","index":0}]]},"Validate Required Fields1":{"main":[[{"node":"Parse and Normalize Data1","type":"main","index":0}],[{"node":"Error - Invalid Payload","type":"main","index":0},{"node":"Send Error Response","type":"main","index":0}]]},"Webhook Trigger - Receive Measurement Data":{"main":[[{"node":"Workflow Configuration","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":24,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":2},"n8n-nodes-base.code":{"count":1},"n8n-nodes-base.html":{"count":1},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.emailSend":{"count":1},"n8n-nodes-base.stickyNote":{"count":10},"n8n-nodes-base.googleSheets":{"count":1},"n8n-nodes-base.stopAndError":{"count":1},"n8n-nodes-base.convertToFile":{"count":1},"n8n-nodes-base.respondToWebhook":{"count":3}}},"status":"published","readyToDemo":null,"user":{"name":"3D Measure Up","username":"prototechsolutions","bio":"","verified":false,"links":[],"avatar":"https://gravatar.com/avatar/ad9a5037de842d63f94f8e642b26bb635df5e49929fb55e43351f243bffeea73?r=pg&d=retro&size=200"},"nodes":[{"id":11,"icon":"fa:envelope","name":"n8n-nodes-base.emailSend","codex":{"data":{"alias":["SMTP","email","human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sendemail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/sendemail/"}]},"categories":["Communication","HITL","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Send Email","color":"#00bb88"},"iconData":{"icon":"envelope","type":"icon"},"displayName":"Send Email","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":9,"name":"Core Nodes"},{"id":28,"name":"HITL"}]},{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":528,"icon":"fa:exclamation-triangle","name":"n8n-nodes-base.stopAndError","codex":{"data":{"alias":["Throw error","Error","Exception"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.stopanderror/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"input\"]","defaults":{"name":"Stop and Error","color":"#ff0000"},"iconData":{"icon":"exclamation-triangle","type":"icon"},"displayName":"Stop and Error","typeVersion":1,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":842,"icon":"file:html.svg","name":"n8n-nodes-base.html","codex":{"data":{"alias":["extract","template","table"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.html/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"HTML"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTguNjQwNjIgMEgxMC40Mzc1VjEuNzgxMjVIMTIuMDkzN1YwSDEzLjg5MDZWNS4zOTA2MkgxMi4wOTM3VjMuNTkzNzVIMTAuNDUzMVY1LjM5MDYySDguNjQwNjJNMTYuMjY1NiAxLjc5Njg3SDE0LjY3OTdWMEgxOS42NTYyVjEuNzk2ODdIMTguMDYyNVY1LjM5MDYySDE2LjI2NTZNMjAuNDQ1MyAwSDIyLjMyODFMMjMuNDg0NCAxLjg5ODQ0TDI0LjY0MDYgMEgyNi41MjM0VjUuMzkwNjJIMjQuNzI2NlYyLjcxODc1TDIzLjQ2ODcgNC42NTYyNUwyMi4yMTA5IDIuNzE4NzVWNS4zOTA2MkgyMC40NDUzTTI3LjQxNDEgMEgyOS4yMTA5VjMuNjA5MzdIMzEuNzU3OFY1LjM5MDYySDI3LjQxNDEiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik04LjU3ODEyIDM2Ljc5NjlMNiA3Ljg1OTM4SDM0LjM0MzdMMzEuNzY1NiAzNi43ODEyTDIwLjE0ODQgNDAiIGZpbGw9IiNFNDREMjYiLz4KPHBhdGggZD0iTTIwLjE3MTkgMzcuNTM5MVYxMC4yMzQ0SDMxLjc1NzhMMjkuNTQ2OSAzNC45MjE5IiBmaWxsPSIjRjE2NTI5Ii8+CjxwYXRoIGQ9Ik0xMS4yNjU2IDEzLjc3MzRIMjAuMTcxOVYxNy4zMjAzSDE1LjE1NjJMMTUuNDg0NCAyMC45NTMxSDIwLjE3MTlWMjQuNDkyMkgxMi4yMzQ0TTEyLjM5MDYgMjYuMjczNEgxNS45NTMxTDE2LjIwMzEgMjkuMTA5NEwyMC4xNzE5IDMwLjE3MTlWMzMuODc1TDEyLjg5MDYgMzEuODQzNyIgZmlsbD0iI0VCRUJFQiIvPgo8cGF0aCBkPSJNMjkuMDQ2OSAxMy43NzM0SDIwLjE1NjJWMTcuMzIwM0gyOC43MTg3TTI4LjM5ODQgMjAuOTUzMUgyMC4xNTYyVjI0LjVIMjQuNTMxMkwyNC4xMTcyIDI5LjEwOTRMMjAuMTU2MiAzMC4xNzE5VjMzLjg1OTRMMjcuNDIxOSAzMS44NDM3IiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K"},"displayName":"HTML","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1234,"icon":"file:convertToFile.svg","name":"n8n-nodes-base.convertToFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","encode","encoding","Move Binary Data","Binary","File","JSON","HTML","ICS","iCal","RTF","64","Base64"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.converttofile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Convert to File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjc2MTkgMkMxMy4yNDM3IDIgMTIuODIzNiAyLjQyMDA5IDEyLjgyMzYgMi45MzgzMVYxNS4yNTI2QzEzLjMxOTkgMTUuNDY0MyAxMy43ODUxIDE1Ljc3MiAxNC4xOTEgMTYuMTc1N0wyMS4yMjgzIDIzLjE3MzlDMjIuMDU0OCAyMy45OTU4IDIyLjUxOTUgMjUuMTEzMiAyMi41MTk1IDI2LjI3ODhDMjIuNTE5NSAyNy40NDQzIDIyLjA1NDggMjguNTYxOCAyMS4yMjgzIDI5LjM4MzdMMTQuMTkxIDM2LjM4MTlDMTMuNzg1IDM2Ljc4NTYgMTMuMzE5OSAzNy4wOTMyIDEyLjgyMzYgMzcuMzA1VjM3LjM1MjdDMTIuODIzNiAzNy44NzA5IDEzLjI0MzcgMzguMjkxIDEzLjc2MTkgMzguMjkxSDM5LjA2MTdDMzkuNTc5OSAzOC4yOTEgNDAgMzcuODcwOSA0MCAzNy4zNTI3TDQwIDE1Ljc5NEgyNy4xNDQzQzI2LjYyNjEgMTUuNzk0IDI2LjIwNiAxNS4zNzM5IDI2LjIwNiAxNC44NTU3VjJIMTMuNzYxOVoiIGZpbGw9IiMzQTQyRTkiLz4KPHBhdGggZD0iTTI4Ljg2NDUgMkMyOC43NzgxIDIgMjguNzA4MSAyLjA3MDAyIDI4LjcwODEgMi4xNTYzOVYxMi44MjI3QzI4LjcwODEgMTMuMDgxOCAyOC45MTgyIDEzLjI5MTkgMjkuMTc3MyAxMy4yOTE5SDM5Ljg0MzZDMzkuOTMgMTMuMjkxOSA0MCAxMy4yMjE5IDQwIDEzLjEzNTVMNDAgMTIuNjI2M0M0MCAxMi4zNzc4IDM5LjkwMTQgMTIuMTM5NSAzOS43MjYgMTEuOTYzNkwzMC4wNjEgMi4yNzU2MUMyOS44ODUgMi4wOTkxNiAyOS42NDYgMiAyOS4zOTY3IDJIMjguODY0NVoiIGZpbGw9IiMzQTQyRTkiLz4KPHBhdGggZD0iTTkuNzcyNjggMzQuNjAwM0M5LjA0MTg2IDMzLjg2NTQgOS4wNDUxNyAzMi42NzcyIDkuNzgwMDcgMzEuOTQ2NEwxMy42MzE1IDI4LjExNjNMMC45MzgzMTEgMjguMTE2M0MwLjQyMDA5NiAyOC4xMTYzIC0yLjI2NTE5ZS0wOCAyNy42OTYyIDAgMjcuMTc4TDguMjAyOTdlLTA4IDI1LjMwMTRDMS4wNDY4MmUtMDcgMjQuNzgzMiAwLjQyMDA5NSAyNC4zNjMxIDAuOTM4MzExIDI0LjM2MzFIMTMuNTUyOUw5Ljc4MDA3IDIwLjYxMTJDOS4wNDUxNyAxOS44ODA0IDkuMDQxODYgMTguNjkyMiA5Ljc3MjY4IDE3Ljk1NzNDMTAuNTAzNSAxNy4yMjI0IDExLjY5MTcgMTcuMjE5MSAxMi40MjY2IDE3Ljk0OTlMMTkuNDYzOSAyNC45NDgxQzE5LjgxODEgMjUuMzAwNCAyMC4wMTczIDI1Ljc3OTMgMjAuMDE3MyAyNi4yNzg4QzIwLjAxNzMgMjYuNzc4MyAxOS44MTgxIDI3LjI1NzIgMTkuNDYzOSAyNy42MDk1TDEyLjQyNjYgMzQuNjA3N0MxMS42OTE3IDM1LjMzODUgMTAuNTAzNSAzNS4zMzUyIDkuNzcyNjggMzQuNjAwM1oiIGZpbGw9IiMzQTQyRTkiLz4KPC9zdmc+Cg=="},"displayName":"Convert to File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":35,"name":"Document Extraction"}],"image":[]}}