{
  "id": "DrWPJJfAGhghjLvK",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Shopify Daily Order Reporting: AI Summaries & Multichannel Alerts",
  "tags": [],
  "nodes": [
    {
      "id": "5612730a-f93d-4f8c-81e2-ce39b7a7084d",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1968,
        3040
      ],
      "parameters": {
        "color": 6,
        "width": 262,
        "height": 96,
        "content": "\u26a0\ufe0f **ACTION REQUIRED**\nOpen Slack node and select your Slack channel from the dropdown before activating the workflow."
      },
      "typeVersion": 1
    },
    {
      "id": "5ef652b6-67c0-4254-bf08-ddc304de4470",
      "name": "Zone 5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        416,
        3008
      ],
      "parameters": {
        "color": 7,
        "width": 498,
        "height": 360,
        "content": "## 5. \ud83d\udea8 Global Error Handling\nCatches any workflow failures.\n\n**Action:**\n- Sends error trace to Slack for quick debugging."
      },
      "typeVersion": 1
    },
    {
      "id": "9e0705e6-8a79-46bf-9dc4-6fc345e065b6",
      "name": "Zone 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1600,
        2496
      ],
      "parameters": {
        "color": 2,
        "width": 766,
        "height": 708,
        "content": "## 4. \ud83d\udce4 Alerts & Pipeline Success\nDistributes the report to the team.\n\n**Actions:**\n- Sends email summary via Gmail.\n- Sends Slack notification.\n- Notifies if 0 orders found."
      },
      "typeVersion": 1
    },
    {
      "id": "04cfe3a1-f51b-4fe9-b555-c127921f84ba",
      "name": "Zone 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        944,
        2496
      ],
      "parameters": {
        "color": 5,
        "width": 630,
        "height": 628,
        "content": "## 3. \ud83e\udde0 AI Summary & Logging\nCreates report and stores historical data.\n\n**Logs:**\n- Adds daily metrics to Google Sheets.\n\n**AI Summary:**\n- Prompts Gemini to format a professional operations summary."
      },
      "typeVersion": 1
    },
    {
      "id": "e45bb44d-4d18-4f32-adc2-2fe0ccf2d74e",
      "name": "Zone 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        448,
        2496
      ],
      "parameters": {
        "color": 4,
        "width": 464,
        "height": 484,
        "content": "## 2. \ud83d\udce5 Ingestion & Logic\nRetrieves Shopify data and calculates totals.\n\n**Fetches:**\n- All orders from the current day\n\n**Calculates:**\n- Total orders, revenue, average order value\n- Categorizes: paid, shipped, refunded, cancelled, pending"
      },
      "typeVersion": 1
    },
    {
      "id": "1dc08a66-2105-4ce8-a35d-01683b8449e7",
      "name": "Zone 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        48,
        2496
      ],
      "parameters": {
        "color": 6,
        "width": 366,
        "height": 484,
        "content": "## 1. \u2699\ufe0f Trigger & Config\nSets schedule and recipient email.\n\n**Scheduled Flow**\n- Schedule Trigger: Auto-runs at 23:30 daily.\n- Config: Sets the `recipientMail` and `googleSheetUrl`."
      },
      "typeVersion": 1
    },
    {
      "id": "c0fa097b-36a1-4623-9daf-94d794d93dd7",
      "name": "Sticky Note - Google Sheets Setup",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        992,
        3040
      ],
      "parameters": {
        "color": 5,
        "width": 496,
        "height": 356,
        "content": "\ud83d\udccb **GOOGLE SHEET SETUP**\n\n**Create Your Sheet:**\n1. Go to sheets.google.com/create\n2. Create a blank Google Sheet\n\n**Add Headers to Row 1 (CASE-SENSITIVE):**\nDate | Total Orders | New Orders | Shipped | Refunded | Cancelled | Revenue | Avg Value | Fulfillment % | Timestamp\n\n**Copy & Paste URL:**\n1. Copy your sheet URL (format: docs.google.com/spreadsheets/d/[SHEET_ID]/edit)\n2. Open Configuration node\n3. Paste into googleSheetUrl field\n\n**That's it!** Your daily reports will auto-log here."
      },
      "typeVersion": 1
    },
    {
      "id": "ccc5e7a2-3c12-4ed9-9502-23d3542b9422",
      "name": "Sticky Note - Configure Node",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        2928
      ],
      "parameters": {
        "color": 6,
        "width": 316,
        "height": 372,
        "content": "\u2699\ufe0f **CONFIGURE BEFORE RUNNING**\n\nOpen \"Set Config\" node and fill in:\n1. **recipientMail** \u2192 Target email for the daily summary report.\n2. **googleSheetUrl** \u2192 Google sheet url for log orders.\n\n**Other Node Configs:**\n- Update `Log to Google Sheets` with your specific Document ID.\n- Update Slack nodes with your preferred channel/webhook IDs.\n\n\u26a0\ufe0f Ensure Shopify, Google, Slack, and Gemini credentials are connected!"
      },
      "typeVersion": 1
    },
    {
      "id": "99716150-fc54-4f3a-9e06-1a356e6ce627",
      "name": "Template Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -672,
        2496
      ],
      "parameters": {
        "width": 680,
        "height": 1030,
        "content": "## \ud83d\udecd\ufe0f Shopify Daily Order Reporting: AI Summaries & Multichannel Alerts\n\n### Who it's for\nE-commerce store owners and managers who want a hands-off daily brief on store performance.\n\n### What it does\nAutomatically fetches your daily Shopify orders, calculates key metrics (revenue, average order value, fulfillment rate), uses AI (Gemini) to write a clean summary, logs everything to Google Sheets, and sends the report to your inbox and Slack team channel.\n\n### How it works\n1. **Trigger** \u2014 Runs daily at 23:59 (in your timezone).\n2. **Fetch** \u2014 Grabs all orders from Shopify for the current day.\n3. **Calculate** \u2014 Sorts orders and computes metrics.\n4. **AI Summary** \u2014 Gemini translates numbers into readable text. (If 0 orders: Slack gets a \"no updates\" ping only, no email sent.)\n5. **Deliver** \u2014 Logs to Google Sheets, emails the summary, and posts to Slack.\n\n### How to set up\n1. **Authenticate** \u2014 Connect Shopify, Google Sheets, Gmail, Slack, and Gemini.\n2. **Configure** \u2014 Open Configuration node, enter your email and Sheet URL.\n3. **Create Sheet** \u2014 Add headers (Date, Total Orders, New Orders, Shipped, Refunded, Cancelled, Revenue, Avg Value, Fulfillment %, Timestamp).\n4. **Select Channels** \u2014 Pick Slack channels for reports and errors.\n5. **Set Timezone** \u2014 Workflow Settings (gear icon) \u2192 Timezone dropdown.\n6. **Activate** \u2014 Toggle ON in the top menu.\n\n### Requirements\n- **n8n Version:** 2.18+\n- **Shopify:** Store with active API credentials.\n- **Credentials:** Shopify API, Google Sheets OAuth2, Slack API, Gmail OAuth2, Google Gemini API.\n\n### How to customize\n- **Only paid orders?** Edit Calculate Order Metrics node to filter `financial_status = \"paid\"`.\n- **Change AI tone?** Open Generate AI Summary node and tell Gemini your preferred style.\n- **More recipients?** Duplicate the Gmail node or use a team distribution list.\n\n### \ud83d\udce6 Version Info\n- **Shopify API:** v1"
      },
      "typeVersion": 1
    },
    {
      "id": "769ccc8d-96c6-4a3e-bdc8-21a2c9c88031",
      "name": "Daily Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        96,
        2752
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 23,
              "triggerAtMinute": 59
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "523f7ae8-53e0-4530-bfbd-a7f15ee5af96",
      "name": "Set Config (Email & Sheet URL)",
      "type": "n8n-nodes-base.set",
      "position": [
        288,
        2752
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "9ce76006-650b-4fed-af55-dfea9fff4886",
              "name": "recipientMail",
              "type": "string",
              "value": "PASTE_RECIPIENT_MAIL_HERE"
            },
            {
              "id": "57cd600d-6be2-4b2b-a916-54760c972b98",
              "name": "googleSheetUrl",
              "type": "string",
              "value": "PASTE_GOOGLE_SHEET_URL_HERE"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "70f707e1-418f-4222-988d-dac80750db7a",
      "name": "Fetch Today's Updated Orders",
      "type": "n8n-nodes-base.shopify",
      "onError": "continueRegularOutput",
      "position": [
        544,
        2752
      ],
      "parameters": {
        "limit": 1000,
        "options": {
          "status": "any",
          "updatedAtMax": "={{ $now.endOf(\"day\").toFormat(\"yyyy-MM-dd'T'HH:mm:ss\") }}",
          "updatedAtMin": "={{ $now.startOf(\"day\").toFormat(\"yyyy-MM-dd'T'HH:mm:ss\") }}",
          "financialStatus": "any",
          "fulfillmentStatus": "any"
        },
        "operation": "getAll",
        "authentication": "oAuth2"
      },
      "credentials": {
        "shopifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e964211b-e862-412f-bb8c-7b7f680b87bd",
      "name": "Calculate & Categorize Metrics",
      "type": "n8n-nodes-base.code",
      "position": [
        752,
        2752
      ],
      "parameters": {
        "jsCode": "let orders;\ntry {\n  orders = $input.all().map(item => item.json);\n\n  if (orders.length === 0) {\n    return [{\n      json: {\n        summary_data: {\n          status: \"no_orders\",\n          message: \"No orders were updated today.\",\n          timestamp: new Date().toISOString(),\n          metrics:{\n            total_orders: 0\n          }\n        }\n      }\n    }];\n  }\n\n  const todayStart = $now.startOf('day').toJSDate();\n\n  const summary = {\n    new_orders: [],\n    shipped: [],\n    returned_refunded: [],\n    cancelled: [],\n    other_pending: [],\n    metrics: {\n      total_orders: orders.length,\n      new_orders_count: 0,\n      updated_orders_count: 0,\n      total_revenue: 0,\n      new_orders_revenue: 0,\n      average_order_value: 0,\n      fulfillment_rate: 0,\n      cancellation_rate: 0,\n      refund_rate: 0\n    },\n    timestamp: new Date().toISOString(),\n    date: $now.toFormat('yyyy-MM-dd') \n  };\n\n  orders.forEach(order => {\n    if (!order.id || !order.order_number) {\n      console.log('Invalid order found:', order);\n      return {};\n    }\n\n    const isNewOrder = new Date(order.created_at) >= todayStart;\n\n    const details = {\n      order_number: order.order_number,\n      order_id: order.id,\n      total_price: parseFloat(order.current_total_price || 0),\n      currency: order.currency || 'USD',\n      created_at: order.created_at,\n      updated_at: order.updated_at,\n      customer_email: order.customer?.email || 'N/A',\n      is_new_order: isNewOrder\n    };\n\n    // Revenue\n    summary.metrics.total_revenue += details.total_price;\n    if (isNewOrder) {\n      summary.metrics.new_orders_revenue += details.total_price;\n      summary.new_orders.push(details);\n    }\n\n    // Categorization\n    if (order.cancelled_at !== null || order.cancel_reason) {\n      details.reason = order.cancel_reason || 'Not specified';\n      details.cancelled_at = order.cancelled_at;\n      summary.cancelled.push(details);\n    }\n    else if (order.financial_status === 'refunded' || order.financial_status === 'partially_refunded') {\n      details.financial_status = order.financial_status;\n      details.refund_count = order.refunds ? order.refunds.length : 0;\n      details.refund_amount = order.refunds?.reduce((sum, r) => sum + (r.amount || 0), 0) || 0;\n      summary.returned_refunded.push(details);\n    }\n    else if (order.fulfillment_status === 'fulfilled' && order.fulfillments?.length > 0) {\n      details.fulfillment_status = order.fulfillment_status;\n      details.fulfillment_count = order.fulfillments.length;\n      details.tracking_numbers = order.fulfillments.map(f => f.tracking_number || 'None');\n      details.estimated_delivery = order.fulfillments[0]?.estimated_delivery_date || 'Unknown';\n      summary.shipped.push(details);\n    }\n    else {\n      details.financial_status = order.financial_status || 'pending';\n      details.fulfillment_status = order.fulfillment_status || 'unfulfilled';\n      details.is_closed = order.closed_at !== null;\n      details.days_pending = Math.floor((new Date() - new Date(order.created_at)) / (1000 * 60 * 60 * 24));\n      summary.other_pending.push(details);\n    }\n  });\n\n  // Calculate metrics\n  summary.metrics.new_orders_count = summary.new_orders.length;\n  summary.metrics.updated_orders_count = orders.length - summary.new_orders.length;\n  summary.metrics.average_order_value = (summary.metrics.total_revenue / orders.length).toFixed(2);\n  summary.metrics.fulfillment_rate = ((summary.shipped.length / orders.length) * 100).toFixed(2) + '%';\n  summary.metrics.cancellation_rate = ((summary.cancelled.length / orders.length) * 100).toFixed(2) + '%';\n  summary.metrics.refund_rate = ((summary.returned_refunded.length / orders.length) * 100).toFixed(2) + '%';\n\n  return [{ json: { summary_data: summary } }];\n\n} catch (error) {\n  console.log(\"Error reading orders:\", error.message);\n  return [{\n    json: {\n      summary_data: {\n        status: \"error\",\n        message: \"Failed to read Shopify orders: \" + error.message,\n        timestamp: new Date().toISOString(),\n        metrics: {\n          total_orders: 0\n        }\n      }\n    }\n  }];\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "6f863da7-91a3-4227-b591-65f509105b53",
      "name": "Log Daily Metrics to Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1184,
        2704
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $json.summary_data?.date }}",
            "Revenue": "={{ $json.summary_data?.metrics?.total_revenue || 0 }}",
            "Shipped": "={{ $json.summary_data?.shipped?.length || 0 }}",
            "Refunded": "={{ $json.summary_data?.returned_refunded?.length || 0 }}",
            "Avg Value": "={{ $json.summary_data?.metrics?.average_order_value || 0 }}",
            "Cancelled": "={{ $json.summary_data?.cancelled?.length || 0 }}",
            "Timestamp": "={{ new Date().toISOString() }}",
            "New Orders": "={{ $json.summary_data?.metrics?.new_orders_count || 0 }}",
            "Total Orders": "={{ $json.summary_data?.metrics?.total_orders || 0 }}",
            "Fulfillment %": "={{ $json.summary_data?.metrics?.fulfillment_rate || 0 }}"
          },
          "schema": [],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Set Config (Email & Sheet URL)').item.json.googleSheetUrl }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "5a9d1167-f42f-4536-ae2f-4395763f845c",
      "name": "Generate Gemini AI Summary",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1328,
        2704
      ],
      "parameters": {
        "text": "={{ \"Here is the detailed Shopify order data for \" + $now.toFormat('yyyy-MM-dd') + \":\\n\\n\" +\nJSON.stringify($('Orders Available?').item.json.summary_data, null, 2) + \n\"\\n\\nPlease generate a professional daily operations summary with:\\n\\n\" +\n\"1. **HEADLINE METRICS** - Show today's key numbers:\\n\" +\n\"   - Total Orders Updated: [count]\\n\" +\n\"   - Total New Orders: [count]\\n\" +\n\"   - Total Revenue Generated: [amount]\\n\" +\n\"   - Average Order Value: [amount]\\n\\n\" +\n\n\"2. **CATEGORY BREAKDOWN** - Use this format:\\n\" +\n\"   \u2705 SHIPPED ([count] orders) - List order numbers\\n\" +\n\"   \u26a0\ufe0f RETURNED/REFUNDED ([count] orders) - List with refund amounts\\n\" +\n\"   \u274c CANCELLED ([count] orders) - List with reasons\\n\" +\n\"   \ud83d\udd04 PENDING ([count] orders) - Show oldest first\\n\\n\" +\n\n\"3. **ACTION ITEMS** - Highlight:\\n\" +\n\"   - Any orders pending for >3 days\\n\" +\n\"   - Unusually high refund rate (if >10%)\\n\" +\n\"   - Spike in cancellations (if >20%)\\n\\n\" +\n\n\"4. **TEAM NOTES** - Add brief context:\\n\" +\n\"   - Trends compared to typical day\\n\" +\n\"   - Recommended actions\\n\\n\" +\n\n\"Use emojis liberally for Slack readability. Keep it under 500 words. Format for both email and Slack.\" }}",
        "batching": {},
        "promptType": "define"
      },
      "typeVersion": 1.9
    },
    {
      "id": "8d24747b-73a1-4e15-bf67-34d7c6dbc308",
      "name": "Gemini LLM Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1328,
        2896
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.5-flash"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "dbf97185-f4d6-4824-b13c-c4adeefaaaff",
      "name": "Email Daily Report",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1728,
        2704
      ],
      "parameters": {
        "sendTo": "={{ $('Set Config (Email & Sheet URL)').item.json.recipientMail }}",
        "message": "={{ $json.text }}",
        "options": {},
        "subject": "={{ 'Shopify Daily Summary - ' + $now.toFormat('yyyy-MM-dd') }}",
        "emailType": "HTML"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "459e5f25-8e93-48b3-9a9e-1b45ab93a05d",
      "name": "Slack - Send Report",
      "type": "n8n-nodes-base.slack",
      "position": [
        1728,
        2880
      ],
      "parameters": {
        "text": "={{ $json.text }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "1bf3186b-1bbc-4292-b69a-8e9880d2560c",
      "name": "Slack - No Orders Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        1728,
        3040
      ],
      "parameters": {
        "text": "=\u2139\ufe0f *Shopify Update:* No new orders or updates were found for {{ $now.toFormat('yyyy-MM-dd') }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "5102cbce-b70c-4718-a593-41ba6e9e97e2",
      "name": "Global Error Trigger",
      "type": "n8n-nodes-base.errorTrigger",
      "position": [
        480,
        3184
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "a55f043f-5222-48a7-bf18-00b733fd9795",
      "name": "Slack - Send Error Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        688,
        3184
      ],
      "parameters": {
        "text": "={{ '\ud83d\udea8 *Workflow Error Alert* \ud83d\udea8\\n\\n*Workflow:* ' + $workflow.name + '\\n*Failed Node:* ' + $json.execution.error.node.name + '\\n*Error Message:* ' + $json.execution.error.message }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "d8282e21-cca8-4a0a-84c4-606f34284798",
      "name": "Orders Available?",
      "type": "n8n-nodes-base.if",
      "position": [
        976,
        2752
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "4abefeb0-f32d-4e74-a0ad-efa2eca6021b",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.summary_data.metrics.total_orders }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.3
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "d31f4d69-b42b-4ecb-8e91-2381ea818c29",
  "connections": {
    "Gemini LLM Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Gemini AI Summary",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Orders Available?": {
      "main": [
        [
          {
            "node": "Log Daily Metrics to Sheets",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack - No Orders Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Email Daily Report": {
      "main": [
        []
      ]
    },
    "Slack - Send Report": {
      "main": [
        []
      ]
    },
    "Global Error Trigger": {
      "main": [
        [
          {
            "node": "Slack - Send Error Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Schedule Trigger": {
      "main": [
        [
          {
            "node": "Set Config (Email & Sheet URL)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack - No Orders Alert": {
      "main": [
        []
      ]
    },
    "Generate Gemini AI Summary": {
      "main": [
        [
          {
            "node": "Slack - Send Report",
            "type": "main",
            "index": 0
          },
          {
            "node": "Email Daily Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Daily Metrics to Sheets": {
      "main": [
        [
          {
            "node": "Generate Gemini AI Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Today's Updated Orders": {
      "main": [
        [
          {
            "node": "Calculate & Categorize Metrics",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate & Categorize Metrics": {
      "main": [
        [
          {
            "node": "Orders Available?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Config (Email & Sheet URL)": {
      "main": [
        [
          {
            "node": "Fetch Today's Updated Orders",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}