{
  "name": "Monitor Dynamic Website Changes with Firecrawl, Sheets & Gmail Alerts",
  "nodes": [
    {
      "parameters": {
        "path": "example_path",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "3bcb980c-74a4-4460-b5b7-16f54f5d46f1",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -176,
        576
      ],
      "webhookId": "a2d68f11-97d1-4dbd-85e1-3a38b81b29bb",
      "typeVersion": 1,
      "notes": "Trigger node – waits for an HTTP request on /webhook/n8n-challenge and starts the workflow. The final response is supplied by the Respond* nodes."
    },
    {
      "parameters": {
        "method": "POST",
        "url": "<insert_url>",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"url\": \"https://we-hang.com/pages/n8n-automation-expert-challenge\",\n  \"formats\": [\n    \"markdown\",\n    \"html\"\n  ]\n} ",
        "options": {}
      },
      "id": "410d357b-8a03-474f-849f-5cdfa8cfe790",
      "name": "Firecrawl HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        48,
        576
      ],
      "typeVersion": 4.2,
      "onError": "continueErrorOutput",
      "notes": "Calls Firecrawl API to scrape the target web page in Markdown and HTML. Uses Bearer-token authentication configured in credentials."
    },
    {
      "parameters": {
        "jsCode": "const items = $input.all();\n\nconst updatedItems = items.map((item) => {\n  if (item.json.data.port > 5000) {\n    item.json.data[\"high-port\"] = true;\n  }\n  return item.json;\n});\n\nconst timestamp = new Date().getTime();\n\nreturn { updatedItems, timestamp };\n"
      },
      "id": "f0c7b197-4789-4fa0-b65a-d5a03b25c686",
      "name": "Get Timestamp",
      "type": "n8n-nodes-base.code",
      "position": [
        272,
        576
      ],
      "typeVersion": 2,
      "onError": "continueErrorOutput",
      "notes": "JavaScript Code node – attaches a millisecond timestamp to the scraped content (legacy high-port flag kept untouched for compatibility)."
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g/edit?usp=drivesdk",
          "cachedResultName": "Häng_Log"
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 725909638,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g/edit#gid=725909638",
          "cachedResultName": "comparison"
        },
        "columns": {
          "value": {
            "row_number": "2",
            "current_content": "={{ $json.updatedItems[0].data.markdown }}",
            "current_timestamp": "={{ $json.timestamp }}"
          },
          "schema": [
            {
              "id": "last_timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "last_timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "last_content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "last_content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "current_timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "current_timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "current_content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "current_content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "id": "6db9b9e6-1add-4f2e-9193-a0bbbb881814",
      "name": "Update Current Content",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        496,
        576
      ],
      "typeVersion": 4.6,
      "onError": "continueErrorOutput",
      "notes": "Writes the freshly scraped content into row 2 of the *comparison* sheet (columns current_timestamp & current_content)."
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g/edit?usp=drivesdk",
          "cachedResultName": "Häng_Log"
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 725909638,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g/edit#gid=725909638",
          "cachedResultName": "comparison"
        },
        "options": {
          "returnAllMatches": "returnFirstMatch"
        }
      },
      "id": "715e3c19-eb36-4a04-8d2f-a3ec13669f0f",
      "name": "Read Current and Latest Content",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        704,
        576
      ],
      "typeVersion": 4,
      "alwaysOutputData": true,
      "onError": "continueErrorOutput",
      "notes": "Loads the same row 2, giving us both last_content and current_content for comparison."
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.last_content }}",
              "value2": "={{ $json.current_content }}"
            }
          ]
        },
        "combineOperation": "any"
      },
      "id": "c942d691-a7b3-4fba-9377-e8913b5916c8",
      "name": "Is Equal?",
      "type": "n8n-nodes-base.if",
      "position": [
        928,
        576
      ],
      "executeOnce": true,
      "typeVersion": 1,
      "onError": "continueErrorOutput",
      "notes": "IF node – checks whether the scraped content changed. True branch → unchanged, False branch → changed."
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "82b5c17a-d921-4e45-9387-474c89697d80",
      "name": "Respond Unchanged",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1152,
        480
      ],
      "typeVersion": 1,
      "notes": "Returns a 200 OK response to the original webhook caller when no change was detected."
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g/edit?usp=drivesdk",
          "cachedResultName": "Häng_Log"
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 725909638,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g/edit#gid=725909638",
          "cachedResultName": "comparison"
        },
        "options": {
          "returnAllMatches": "returnFirstMatch"
        }
      },
      "id": "220d5745-0c3d-4b20-8046-1fd4892b8c49",
      "name": "Read Latest and Latest Content",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1152,
        672
      ],
      "typeVersion": 4,
      "alwaysOutputData": true,
      "onError": "continueErrorOutput",
      "notes": "Reads the current sheet row again on the ‘changed’ path so subsequent code nodes have the freshest values."
    },
    {
      "parameters": {
        "jsCode": "const items = $input.all().map((item) => item.json);\n\nconst result = items.map((item) => {\n  const lastContent = item.last_content.split(\",\");\n  const currentContent = item.current_content.split(\",\");\n  const newContent = currentContent.filter((i) => !lastContent.includes(i));\n  const missingContent = lastContent.filter((i) => !currentContent.includes(i));\n  return {\n    ...item,\n    newContent,\n    missingContent,\n    timestamp: new Date().getTime(),\n  };\n});\n\nreturn result;\n"
      },
      "id": "1e62ede5-bb7d-4344-a144-f595964e420d",
      "name": "Extract Differences",
      "type": "n8n-nodes-base.code",
      "position": [
        1376,
        480
      ],
      "typeVersion": 2,
      "onError": "continueErrorOutput",
      "notes": "Splits last & current content into arrays, determines new vs missing segments, attaches another timestamp."
    },
    {
      "parameters": {
        "sendTo": "=example@gmail.com",
        "subject": "Relevante Inhaltsänderung auf Website",
        "emailType": "text",
        "message": "=Guten Tag, \n\nEs gab eine Änderung an der beobachteten Website:\n\nUm \"{{ $json.timestamp }}\" wurde \"{{ $json.missingContent[0] }}\" durch \"{{ $json.newContent[0] }}\" ersetzt.\n\nViele Grüße ",
        "options": {}
      },
      "id": "5ca668aa-97e5-45dd-94df-92507a8bc062",
      "name": "Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1584,
        480
      ],
      "webhookId": "c591ca46-7626-4de5-968c-9bfce7d97b38",
      "typeVersion": 2.1,
      "onError": "continueErrorOutput",
      "notes": "Sends a plain-text email detailing what changed (first diff only) to n8nchallenge@we-hang.com."
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g/edit?usp=drivesdk",
          "cachedResultName": "Häng_Log"
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g/edit#gid=0",
          "cachedResultName": "Log"
        },
        "columns": {
          "value": {
            "content": "={{ $json.current_content }}",
            "timestamp": "={{ $json.current_timestamp }}"
          },
          "schema": [
            {
              "id": "timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "id": "505481ca-1409-4dd8-b245-c6b1e7a198f1",
      "name": "Append Log Row",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1584,
        672
      ],
      "typeVersion": 4,
      "onError": "continueErrorOutput",
      "notes": "Adds a new row to *Log* sheet with timestamp & full current content – creates a historical audit trail."
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g/edit?usp=drivesdk",
          "cachedResultName": "Häng_Log"
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 725909638,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JashxHNjWMu0IGg7ck6pDxtH6Eo-jVvIIMAWWRspc8g/edit#gid=725909638",
          "cachedResultName": "comparison"
        },
        "columns": {
          "value": {
            "row_number": "2",
            "last_content": "={{ $json.current_content }}",
            "last_timestamp": "={{ $json.current_timestamp }}"
          },
          "schema": [
            {
              "id": "last_timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "last_timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "last_content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "last_content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "current_timestamp",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "current_timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "current_content",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "current_content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "id": "b7a743d3-9edc-4e3f-9e9f-0da34e233522",
      "name": "Update Latest Content",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1584,
        880
      ],
      "typeVersion": 4.6,
      "onError": "continueErrorOutput",
      "notes": "Moves current values into the *last_* columns (row 2) so the next run will compare against them."
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "42359670-cc98-4937-8ae5-cc6f3eeee521",
      "name": "Respond Changed",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1808,
        784
      ],
      "typeVersion": 1,
      "notes": "Returns a success response to the original HTTP call confirming that a change was processed."
    },
    {
      "parameters": {
        "content": "🎯 WORKFLOW PURPOSE:\nThis workflow monitors a webpage for content changes and sends email notifications when changes are detected.\n\n📊 KEY COMPONENTS:\n• Firecrawl API for web scraping\n• Google Sheets for data storage & comparison\n• Gmail for notifications\n• Webhook trigger for external activation\n\n🔄 WORKFLOW FLOW:\nWebhook → Scrape → Compare → Email (if changed) → Log → Respond",
        "height": 460,
        "width": 400
      },
      "id": "fd4dc246-95c2-4e87-a38c-f30c236abff2",
      "name": "📋 SETUP OVERVIEW",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -496,
        -128
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "⚙️ REQUIRED CREDENTIALS:\n\n1️⃣ FIRECRAWL API:\n• Sign up at https://firecrawl.dev\n• Get API key from dashboard\n• Create 'Bearer Auth' credential in n8n\n• Name: 'Bearer Auth account'\n\n2️⃣ GOOGLE SHEETS:\n• Enable Google Sheets API in Google Cloud Console\n• Create OAuth2 credentials\n• Add credential in n8n as 'Google Sheets account'\n\n3️⃣ GMAIL:\n• Enable Gmail API in Google Cloud Console\n• Create OAuth2 credentials\n• Add credential in n8n as 'Gmail account'",
        "height": 460,
        "width": 400
      },
      "id": "633fea8c-2888-4375-b55d-d7626a277168",
      "name": "🔐 CREDENTIALS SETUP",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -128
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "📋 SPREADSHEET STRUCTURE:\n\n🗂️ Create a Google Sheet with 2 tabs:\n\n1️⃣ 'Log' sheet (gid=0):\n• Column A: timestamp\n• Column B: content\n\n2️⃣ 'comparison' sheet (gid=725909638):\n• Column A: last_timestamp\n• Column B: last_content  \n• Column C: current_timestamp\n• Column D: current_content\n• Column E: row_number\n• Row 2: Set 'row_number' to '2'\n\n📝 Copy the spreadsheet ID from the URL and update all Google Sheets nodes with your ID.",
        "height": 300,
        "width": 400
      },
      "id": "ea84b99c-1e92-41b7-bb6f-7b93040f4758",
      "name": "📊 GOOGLE SHEETS SETUP",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        336,
        816
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "🔧 CUSTOMIZATION SETTINGS:\n\n🌐 TARGET WEBSITE:\n• Update Firecrawl node 'url' parameter\n\n📧 EMAIL SETTINGS:\n• Update Gmail node 'sendTo' field\n• Customize subject and message template\n\n🪝 WEBHOOK PATH:\n• Can be customized in Webhook node\n\n📄 SCRAPING FORMAT:\n• Currently set to markdown + html\n• Modify in Firecrawl node if needed",
        "height": 460,
        "width": 400
      },
      "id": "671e5008-ae5e-442d-a00a-a948d8ba7bfb",
      "name": "⚙️ CONFIGURATION",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        416,
        -128
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "✅ TESTING STEPS:\n\n1️⃣ MANUAL TEST:\n• Click 'Execute Workflow' button\n• Check if all nodes execute successfully\n• Verify Google Sheets get populated\n• Check if email is sent (if content differs)\n\n2️⃣ WEBHOOK TEST:\n• Activate workflow (toggle switch)\n• Copy webhook URL from Webhook node\n• Test with curl or Postman:\n  curl -X POST [your-webhook-url]\n\n3️⃣ TROUBLESHOOTING:\n• Check node execution logs for errors\n• Verify all credentials are properly configured\n• Ensure Google Sheets permissions are correct",
        "height": 460,
        "width": 400
      },
      "id": "f0ccdc07-ffe0-4e36-8568-1c5cef1f349c",
      "name": "🧪 TESTING & ACTIVATION",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2624,
        -128
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "⏰ SCHEDULING OPTIONS:\n\n🔄 CRON JOB (Recommended):\n• Set up external cron job to call webhook\n• Example: */30 * * * * (every 30 minutes)\n• Command: curl -X POST [webhook-url]\n\n⚡ N8N CRON TRIGGER:\n• Replace Webhook with Cron Trigger node\n• Set desired interval\n• Remove Respond nodes (not needed)\n\n🌐 EXTERNAL MONITORING:\n• Use services like UptimeRobot\n• Configure to call webhook at intervals\n• Provides additional monitoring layer",
        "height": 460,
        "width": 400
      },
      "id": "f61cfad0-b075-4e2e-8b37-9f34ae0cfe40",
      "name": "🤖 AUTOMATION SETUP",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        -128
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "📈 MONITORING:\n\n📊 EXECUTION HISTORY:\n• Check n8n execution log regularly\n• Monitor for failed executions\n• Set up n8n error notifications\n\n📋 LOG REVIEW:\n• Check Google Sheets 'Log' tab\n• Verify timestamps are updating\n• Monitor content changes over time\n\n🚨 ERROR HANDLING:\n• All nodes have 'Continue on Error' enabled\n• Failed nodes won't stop the workflow\n• Check individual node outputs for issues",
        "height": 460,
        "width": 400
      },
      "id": "7f17b386-5d9e-4c21-86bd-02bd8f0f42d2",
      "name": "🔧 MAINTENANCE & MONITORING",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1312,
        -128
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "🛡️ SECURITY CONSIDERATIONS:\n\n🔐 API KEYS:\n• Store all credentials securely in n8n\n• Never hardcode API keys in workflow\n• Regularly rotate API keys\n\n📧 EMAIL SECURITY:\n• Use dedicated email for notifications\n• Consider email filtering rules\n• Monitor for spam/bounce issues\n\n🌐 WEBHOOK SECURITY:\n• Consider adding authentication\n• Use HTTPS endpoints only\n• Monitor webhook access logs\n\n💾 DATA PRIVACY:\n• Regularly clean old log entries\n• Be mindful of scraped content sensitivity",
        "height": 460,
        "width": 400
      },
      "id": "126a30ac-315c-421d-8179-bdb8f09754c7",
      "name": "🔒 SECURITY & BEST PRACTICES",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1744,
        -128
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "⚠️ COMMON PROBLEMS:\n\n🚫 FIRECRAWL ERRORS:\n• Check API key validity\n• Verify target URL is accessible\n• Check rate limits on Firecrawl account\n\n📊 GOOGLE SHEETS ISSUES:\n• Verify sheet ID and tab names\n• Check OAuth permissions\n• Ensure sheets have correct structure\n\n📧 EMAIL PROBLEMS:\n• Check Gmail API quotas\n• Verify recipient email address\n• Check spam folders\n\n🪝 WEBHOOK ISSUES:\n• Ensure workflow is activated\n• Check webhook URL format\n• Verify n8n instance is accessible",
        "height": 460,
        "width": 400
      },
      "id": "a308561e-cced-4eb2-abf0-b1514e40dbab",
      "name": "🔍 COMMON ISSUES & SOLUTIONS",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2192,
        -128
      ],
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Firecrawl HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Firecrawl HTTP Request": {
      "main": [
        [
          {
            "node": "Get Timestamp",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Timestamp": {
      "main": [
        [
          {
            "node": "Update Current Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Current Content": {
      "main": [
        [
          {
            "node": "Read Current and Latest Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Current and Latest Content": {
      "main": [
        [
          {
            "node": "Is Equal?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Equal?": {
      "main": [
        [
          {
            "node": "Respond Unchanged",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Read Latest and Latest Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Latest and Latest Content": {
      "main": [
        [
          {
            "node": "Extract Differences",
            "type": "main",
            "index": 0
          },
          {
            "node": "Append Log Row",
            "type": "main",
            "index": 0
          },
          {
            "node": "Update Latest Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Differences": {
      "main": [
        [
          {
            "node": "Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail": {
      "main": [
        [
          {
            "node": "Respond Changed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append Log Row": {
      "main": [
        [
          {
            "node": "Respond Changed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Latest Content": {
      "main": [
        [
          {
            "node": "Respond Changed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "availableInMCP": false
  },
  "versionId": "fd1ab48f-a8ba-48fe-96f8-2fd5fc891e38",
  "meta": {
    "instanceId": "5ff5a5992c4c72af22abbdcfa574d8cdf93dc14d57eb9f66e3d9ef2a3e2dbb6c"
  },
  "id": "IYuP66JNSNjeHh9l",
  "tags": []
}