šŸš€ LinkedIn Comment Keyword Auto-Responder | ConnectSafely.ai

    Shared 12/8/2025

    4 views

    Visual Workflow

    JSON Code

    {
      "meta": {
        "instanceId": "d08b04dd82828441ef348efde572f33ff9c31c28b5ec044935581156de09542d"
      },
      "name": "šŸš€ LinkedIn Comment Keyword Auto-Responder | ConnectSafely.ai",
      "tags": [
        {
          "id": "8KeeA0P5VGUg3zgz",
          "name": "LinkedIn Automation",
          "createdAt": "2025-12-05T11:40:57.896Z",
          "updatedAt": "2025-12-05T11:40:57.896Z"
        },
        {
          "id": "vf7OwdxYXQqKUHBe",
          "name": "ConnectSafely",
          "createdAt": "2025-12-05T11:40:57.898Z",
          "updatedAt": "2025-12-05T11:40:57.898Z"
        },
        {
          "id": "M5q35yJpgdrXUsja",
          "name": "Engagement Automation",
          "createdAt": "2025-12-05T11:40:57.897Z",
          "updatedAt": "2025-12-05T11:40:57.897Z"
        },
        {
          "id": "ysNeNvCbRCwjVyED",
          "name": "Lead Generation",
          "createdAt": "2025-12-05T11:40:57.898Z",
          "updatedAt": "2025-12-05T11:40:57.898Z"
        },
        {
          "id": "7iRACZ6wXM1RkmIz",
          "name": "Template",
          "createdAt": "2025-12-05T11:40:57.903Z",
          "updatedAt": "2025-12-05T11:40:57.903Z"
        }
      ],
      "nodes": [
        {
          "id": "460a212a-1d2f-4bfe-b4c0-c5e560999efc",
          "name": "šŸ“– Workflow Overview",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            144,
            -32
          ],
          "parameters": {
            "width": 688,
            "height": 1176,
            "content": "# šŸš€ LinkedIn Comment Keyword Auto-Responder\n## By ConnectSafely.ai\n\n---\n\n### šŸ“‹ What This Workflow Does\nAutomatically monitors your LinkedIn posts for specific keywords in comments and sends personalized DMs with your content link to those who request it.\n\n---\n\n### šŸŽÆ Perfect For:\n- šŸ“š Sharing code examples, templates, or resources\n- šŸ“„ Lead magnets & content distribution\n- šŸ¤ Building relationships through value-first engagement\n- ⚔ Scaling your LinkedIn content strategy\n\n---\n\n### āœ… Requirements:\n1. **ConnectSafely.ai Account** - [Get Started](https://connectsafely.ai)\n2. **n8n Instance** - Self-hosted or cloud\n3. **LinkedIn Account** - Connected via ConnectSafely\n\n---\n\n### šŸ”„ Key Features:\n- ✨ Keyword-based comment detection\n- šŸ”— Connection status verification\n- šŸ“Ø Personalized DM delivery\n- ā±ļø Smart rate limiting (safety first!)\n- šŸ“Š Professional engagement\n\n---\n\n**Version:** 2.0 Enhanced\n**Last Updated:** December 2025"
          },
          "typeVersion": 1
        },
        {
          "id": "354af27a-9dfa-42b0-970b-9395f6f0ae0a",
          "name": "šŸ› ļø Setup Guide",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1200,
            -272
          ],
          "parameters": {
            "color": 6,
            "width": 492,
            "height": 812,
            "content": "## šŸ› ļø SETUP GUIDE\n\n---\n\n### Step 1: Configure ConnectSafely API\n1. Go to [app.connectsafely.ai](https://app.connectsafely.ai)\n2. Navigate to **Settings → API Keys**\n3. Copy your API key\n4. In n8n: **Credentials → Add Credential → ConnectSafely API**\n5. Paste your API key\n\n---\n\n### Step 2: Connect Your LinkedIn\n1. In ConnectSafely dashboard, click **Connect LinkedIn**\n2. Follow the authorization flow\n3. Ensure your account shows as \"Connected\"\n\n---\n\n### Step 3: Test The Workflow\n1. Click **\"Test workflow\"** button\n2. Copy the form URL that appears\n3. Open form in new browser tab\n4. Fill in test data\n5. Submit and watch execution\n\n---\n\n### Step 4: Activate for Production\n1. Review all nodes are configured\n2. Toggle workflow to **Active**\n3. Share form URL or embed in your process\n\n---\n\nāš ļø **Important:** Always test with your own posts first!"
          },
          "typeVersion": 1
        },
        {
          "id": "3bb2a1e6-5c5e-4299-990a-ba87a4b34d86",
          "name": "🚨 Troubleshooting",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2880,
            -480
          ],
          "parameters": {
            "color": 2,
            "width": 414,
            "height": 1020,
            "content": "## 🚨 TROUBLESHOOTING\n\n### āŒ \"No comments found\"\n- āœ… Verify post URL is correct\n- āœ… Ensure post is public\n- āœ… Check post actually has comments\n- āœ… Confirm ConnectSafely API connected\n\n---\n\n### āŒ \"Cannot send message\"\n- āœ… User must be 1st connection\n- āœ… Check if user accepts messages\n- āœ… Verify your messaging limits\n- āœ… Consider connection request first\n\n---\n\n### āŒ \"API Error / 429\"\n- āœ… You've hit rate limits\n- āœ… Increase wait time between messages\n- āœ… Check ConnectSafely quota\n- āœ… Wait 24h and try again\n\n---\n\n### āŒ \"Keyword not detected\"\n- āœ… Check keyword spelling\n- āœ… Keywords are case-insensitive\n- āœ… Try simpler keywords\n- āœ… Check the actual comment text\n\n---\n\n### āŒ \"Workflow stops unexpectedly\"\n- āœ… Check execution logs\n- āœ… Verify all credentials active\n- āœ… Check n8n memory/resources\n- āœ… Review error messages\n\n---\n\n### šŸ’” Still stuck?\nContact: support@connectsafely.ai"
          },
          "typeVersion": 1
        },
        {
          "id": "be9be1f7-93ac-4f3f-8a0e-71c9d8bc752d",
          "name": "āš ļø LinkedIn Limits",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1952,
            -384
          ],
          "parameters": {
            "color": 2,
            "width": 604,
            "height": 912,
            "content": "## āš ļø LINKEDIN LIMITS & SAFETY\n\n---\n\n### šŸ“Ø Daily Messaging Limits\n| Account Type | Daily Limit |\n|-------------|-------------|\n| Free Account | ~50-100 |\n| Premium | ~100-150 |\n| Sales Nav | ~150-200 |\n\n*Limits vary and LinkedIn doesn't publish exact numbers*\n\n---\n\n### 🚦 Warning Signs\n- āš ļø \"Unusual activity\" alerts\n- āš ļø Temporary restrictions\n- āš ļø CAPTCHA challenges\n- āš ļø Message sending failures\n\n---\n\n### āœ… Safe Practices\n- Stay under 80% of limits\n- Use random delays (built-in)\n- Don't run during off-hours only\n- Vary your message content\n- Take breaks between batches\n\n---\n\n### šŸ›‘ Account Protection\n- Stop immediately if warnings\n- Wait 24-48h before resuming\n- Reduce volume after warnings\n- Contact support if restricted\n\n---\n\n### šŸ“‹ Compliance Note\nThis workflow is designed for **authentic engagement** - responding to people who explicitly request content. Always ensure your usage aligns with LinkedIn's Terms of Service."
          },
          "typeVersion": 1
        },
        {
          "id": "257f7ef9-7846-4cfe-a37f-5ba9db9f5af4",
          "name": "1ļøāƒ£ Form: Enter Post Details",
          "type": "n8n-nodes-base.formTrigger",
          "notes": "## šŸ“‹ STEP 1: FORM TRIGGER\n\n---\n\n### āœ… Purpose:\nCaptures the input needed to run the workflow.\n\n---\n\n### šŸ“„ Inputs Collected:\n| Field | Description | Example |\n|-------|-------------|----------|\n| Post URL | LinkedIn post to monitor | https://linkedin.com/posts/... |\n| Keyword | Word that triggers DM | \"code\" |\n| Content Link | URL to send in DM | https://example.com/resource |\n| Your Name | Signature for message | \"John\" |\n\n---\n\n### šŸ”§ To Test:\n1. Click **\"Test workflow\"**\n2. Copy the form URL shown\n3. Open in browser & submit\n\n---\n\n### šŸ’” Production Use:\n- Activate workflow\n- Share form URL\n- Or integrate via API",
          "position": [
            1120,
            872
          ],
          "webhookId": "linkedin-keyword-responder-v2",
          "parameters": {
            "options": {},
            "formTitle": "šŸ¤– LinkedIn Keyword Auto-Responder",
            "formFields": {
              "values": [
                {
                  "fieldLabel": "LinkedIn Post URL",
                  "placeholder": "https://www.linkedin.com/posts/username_topic-activity-1234567890...",
                  "requiredField": true
                },
                {
                  "fieldLabel": "Trigger Keyword",
                  "placeholder": "code",
                  "requiredField": true
                },
                {
                  "fieldLabel": "Content Link to Send",
                  "placeholder": "https://your-link.com/resource",
                  "requiredField": true
                },
                {
                  "fieldLabel": "Your Name (for signature)",
                  "placeholder": "Your Name",
                  "requiredField": true
                }
              ]
            },
            "formDescription": "## Send Automatic DMs to Comment Keywords\n\nThis workflow monitors your LinkedIn post for specific keywords and automatically sends a personalized DM with your content link.\n\n---\n\n### šŸ“ How to Use:\n1. **Post URL** - Paste the full LinkedIn post URL\n2. **Keyword** - The word to trigger a DM (e.g., \"code\", \"example\")\n3. **Link** - The URL/content to send\n\n---\n\n### šŸ’” Tips:\n- Use unique keywords to avoid false positives\n- Make sure the post has comments\n- Only 1st connections will receive DMs\n\n---\n\n**Powered by ConnectSafely.ai**"
          },
          "typeVersion": 2.3
        },
        {
          "id": "5767854f-e8a0-4e20-9460-88dd4807439c",
          "name": "2ļøāƒ£ Fetch All Comments",
          "type": "n8n-nodes-connectsafely-ai.connectSafelyLinkedIn",
          "notes": "## šŸ” STEP 2: FETCH COMMENTS\n\n---\n\n### āœ… Purpose:\nRetrieves all comments from the specified LinkedIn post.\n\n---\n\n### šŸ“¤ Data Retrieved:\n| Field | Description |\n|-------|-------------|\n| `authorName` | Commenter's display name |\n| `commentText` | The comment content |\n| `publicIdentifier` | LinkedIn profile ID |\n| `profileUrn` | LinkedIn URN |\n\n---\n\n### āš ļø Requirements:\n- Valid LinkedIn post URL\n- Post must be publicly visible\n- ConnectSafely API credentials configured\n\n---\n\n### šŸ”§ Troubleshooting:\n- **No results?** Check URL format\n- **API error?** Verify credentials\n- **Empty array?** Post may have no comments",
          "position": [
            1344,
            872
          ],
          "parameters": {
            "postUrl": "={{ $json['LinkedIn Post URL'] }}",
            "operation": "getPostComments"
          },
          "typeVersion": 1
        },
        {
          "id": "5c365d83-5335-4a72-9e03-8d6902d8327e",
          "name": "3ļøāƒ£ Split Comments Array",
          "type": "n8n-nodes-base.splitOut",
          "notes": "## šŸ“¤ STEP 3: SPLIT ARRAY\n\n---\n\n### āœ… Purpose:\nConverts the comments array into individual items for processing.\n\n---\n\n### šŸ”§ Technical:\n```\nInput:  {comments: [c1, c2, c3]}\nOutput: 3 separate items\n```\n\n---\n\n### šŸ’” Why This Matters:\nn8n processes items individually, so we need to split the array to handle each comment one at a time.",
          "position": [
            1568,
            872
          ],
          "parameters": {
            "options": {},
            "fieldToSplitOut": "comments"
          },
          "typeVersion": 1
        },
        {
          "id": "b259d779-656b-4859-8eb3-4888c4ddc767",
          "name": "4ļøāƒ£ Loop: Process Each Comment",
          "type": "n8n-nodes-base.splitInBatches",
          "notes": "## šŸ”„ STEP 4: BATCH LOOP\n\n---\n\n### āœ… Purpose:\nProcesses comments one at a time, returning here after each completion.\n\n---\n\n### āš™ļø Settings:\n- **Batch Size:** 1 (one comment at a time)\n- **Reset:** FALSE (continue from where stopped)\n\n---\n\n### šŸ” Flow:\n```\nGet next comment → Process → Wait → Return here\n```\n\n---\n\n### šŸ“Š Outputs:\n- **Output 1 (Done):** All comments processed\n- **Output 2 (Loop):** Current comment to process",
          "position": [
            1792,
            872
          ],
          "parameters": {
            "options": {
              "reset": false
            }
          },
          "typeVersion": 3
        },
        {
          "id": "8cb503ae-e743-4d2a-818b-2be2530a8aa5",
          "name": "5ļøāƒ£ Detect Keyword Match",
          "type": "n8n-nodes-base.code",
          "notes": "## šŸ” STEP 5: KEYWORD DETECTION\n\n---\n\n### āœ… Purpose:\nAnalyzes comment text to find the trigger keyword.\n\n---\n\n### šŸŽÆ Current Logic:\n- Case-insensitive search\n- Partial match (keyword anywhere in comment)\n- Single keyword matching\n\n---\n\n### šŸ“¤ Output:\n| Field | Type | Description |\n|-------|------|-------------|\n| `isKeywordMatch` | boolean | True if keyword found |\n| `commentText` | string | Original comment |\n| `searchedKeyword` | string | Keyword searched for |\n| `matchDetails` | string | Human-readable result |\n\n---\n\n### šŸ”§ Customization Ideas:\n```javascript\n// Multiple keywords:\nconst keywords = ['code', 'example', 'sample'];\nconst found = keywords.some(k => \n  comment.toLowerCase().includes(k));\n\n// Exact match only:\nconst words = comment.split(/\\s+/);\nconst found = words.some(w => \n  w.toLowerCase() === keyword.toLowerCase());\n```",
          "position": [
            2016,
            800
          ],
          "parameters": {
            "jsCode": "// =====================================================\n// šŸ” KEYWORD DETECTION ENGINE\n// =====================================================\n// This code checks if the comment contains the trigger keyword\n//\n// šŸ“ CUSTOMIZATION:\n// - Modify this to check multiple keywords\n// - Add regex patterns for advanced matching\n// - Exclude certain phrases\n// =====================================================\n\n// Get the comment text from current item\nconst commentText = $input.first().json.commentText || \"\";\n\n// Get the keyword from the form submission\nconst keyword = $('1ļøāƒ£ Form: Enter Post Details').first().json['Trigger Keyword'] || \"\";\n\n// =====================================================\n// šŸŽÆ MATCHING LOGIC\n// =====================================================\n// Case-insensitive matching\n// You can modify this for:\n// - Exact match: commentText.toLowerCase() === keyword.toLowerCase()\n// - Multiple keywords: keywords.some(k => commentText.includes(k))\n// - Regex: /pattern/.test(commentText)\n\nconst isMatch = commentText.toLowerCase().includes(keyword.toLowerCase());\n\n// =====================================================\n// šŸ“¤ OUTPUT\n// =====================================================\nreturn [\n  {\n    json: {\n      isKeywordMatch: isMatch,\n      commentText: commentText,\n      searchedKeyword: keyword,\n      matchDetails: isMatch ? `Found \"${keyword}\" in comment` : `No match for \"${keyword}\"`\n    }\n  }\n];\n"
          },
          "typeVersion": 2
        },
        {
          "id": "484f60c1-3617-499b-9680-93b42a2d2bbc",
          "name": "6ļøāƒ£ If: Keyword Found?",
          "type": "n8n-nodes-base.if",
          "notes": "## ā“ STEP 6: KEYWORD ROUTING\n\n---\n\n### āœ… Purpose:\nRoutes the workflow based on whether keyword was found.\n\n---\n\n### šŸ”€ Routing:\n\n**āž”ļø TRUE (Keyword Found):**\n- Comment contains trigger word\n- Proceed to connection check\n- Will attempt to send message\n\n**āž”ļø FALSE (No Match):**\n- Comment doesn't match\n- Skip to next comment\n- No message sent\n\n---\n\n### šŸ’” Examples:\n| Comment | Keyword | Result |\n|---------|---------|--------|\n| \"Send me the code!\" | code | āœ… Match |\n| \"Great post!\" | code | āŒ No match |\n| \"Can I get an EXAMPLE?\" | example | āœ… Match |",
          "position": [
            2240,
            800
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "condition-keyword-match",
                  "operator": {
                    "type": "boolean",
                    "operation": "true",
                    "singleValue": true
                  },
                  "leftValue": "={{ $json.isKeywordMatch }}",
                  "rightValue": ""
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "4460f762-9494-4ff3-a155-1d5096412175",
          "name": "7ļøāƒ£ Check Connection Status",
          "type": "n8n-nodes-connectsafely-ai.connectSafelyLinkedIn",
          "notes": "## šŸ”— STEP 7: CONNECTION CHECK\n\n---\n\n### āœ… Purpose:\nVerifies if you can send a direct message to this person.\n\n---\n\n### šŸ“Š Returns:\n| Field | Description |\n|-------|-------------|\n| `connected` | Boolean - are you 1st connections? |\n| `connectionDegree` | 1st, 2nd, or 3rd degree |\n\n---\n\n### āš ļø LinkedIn Rules:\n- **1st Connections:** Can DM directly\n- **2nd/3rd Connections:** Need connection request first (or InMail)\n\n---\n\n### šŸ’” Strategy:\n- Connected → Send message immediately\n- Not connected → Skip (or add connection request node)",
          "position": [
            2464,
            728
          ],
          "parameters": {
            "operation": "checkRelationship",
            "profileId": "={{ $('4ļøāƒ£ Loop: Process Each Comment').item.json.publicIdentifier }}"
          },
          "typeVersion": 1
        },
        {
          "id": "faaa78dc-1b7e-4c5b-8009-9e468ea8a017",
          "name": "8ļøāƒ£ If: Connected?",
          "type": "n8n-nodes-base.if",
          "notes": "## ā“ STEP 8: CONNECTION ROUTING\n\n---\n\n### āœ… Purpose:\nDetermines messaging approach based on connection status.\n\n---\n\n### šŸ”€ Routing:\n\n**āž”ļø TRUE (Connected):**\n- You are 1st degree connections\n- Can send direct message\n- Proceed to Send DM node\n\n**āž”ļø FALSE (Not Connected):**\n- Cannot DM this person\n- Skip for now\n- (Optional: Add connection request)\n\n---\n\n### šŸ’” Enhancement Ideas:\nAdd a **\"Send Connection Request\"** node to the FALSE path to request connection with a message.",
          "position": [
            2688,
            728
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "condition-connected",
                  "operator": {
                    "type": "boolean",
                    "operation": "true",
                    "singleValue": true
                  },
                  "leftValue": "={{ $json.connected }}",
                  "rightValue": ""
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "676f567f-e7d4-442c-a6a2-9d5c9aa8b053",
          "name": "9ļøāƒ£ Send DM with Link",
          "type": "n8n-nodes-connectsafely-ai.connectSafelyLinkedIn",
          "notes": "## šŸ“Ø STEP 9: SEND MESSAGE\n\n---\n\n### āœ… Purpose:\nSends personalized direct message with your content link.\n\n---\n\n### šŸ“ Message Template:\n```\nHey {name}! šŸ‘‹\n\nThanks for your comment!\n\nHere's the link you requested:\nšŸ‘‰ {link}\n\nQuestions? Let me know!\n\nBest,\n{your_name}\n```\n\n---\n\n### šŸ”§ Customization:\nEdit the message field to:\n- Add more context\n- Include multiple links\n- Add PS or follow-up CTA\n- Adjust tone/formality\n\n---\n\n### āš ļø Best Practices:\n- Keep messages concise\n- Sound human, not automated\n- Provide clear value\n- Include a soft CTA\n\n---\n\n### āœ… Success:\nMessage sent → Proceed to rate limiting",
          "position": [
            2912,
            680
          ],
          "parameters": {
            "message": "=Hey {{ $('4ļøāƒ£ Loop: Process Each Comment').item.json.authorName }}! šŸ‘‹\n\nThanks for your comment on my post!\n\nAs promised, here's the link you requested:\nšŸ‘‰ {{ $('1ļøāƒ£ Form: Enter Post Details').item.json['Content Link to Send'] }}\n\nIf you have any questions or want more resources like this, just let me know!\n\nBest,\n{{ $('1ļøāƒ£ Form: Enter Post Details').item.json['Your Name (for signature)'] }}",
            "operation": "sendMessage",
            "recipientProfileId": "={{ $('4ļøāƒ£ Loop: Process Each Comment').item.json.publicIdentifier }}"
          },
          "typeVersion": 1
        },
        {
          "id": "084ecbf3-3ab1-4374-8d4a-588537edcfc4",
          "name": "šŸ”Ÿ Wait: Rate Limiting",
          "type": "n8n-nodes-base.wait",
          "notes": "## ā±ļø STEP 10: RATE LIMITING\n\n---\n\n### āœ… Purpose:\nAdds random delay between messages to avoid detection.\n\n---\n\n### ā±ļø Current Settings:\n- **Minimum:** 900 seconds (15 minutes)\n- **Maximum:** 1800 seconds (30 minutes)\n- **Selection:** Random within range\n\n---\n\n### šŸ”§ Adjustment Guide:\n| Risk Level | Wait Time | Formula |\n|------------|-----------|----------|\n| 🟢 Safe | 30-60 min | 1800-3600 |\n| 🟔 Moderate | 15-30 min | 900-1800 |\n| šŸ”“ Risky | 5-15 min | 300-900 |\n\n---\n\n### šŸ¤– Why This Matters:\n- LinkedIn monitors message frequency\n- Consistent timing = bot detection\n- Random delays = human-like behavior\n- Protects your account\n\n---\n\n### šŸ’” Formula Explained:\n```javascript\nMath.floor(Math.random() * (max - min + 1)) + min\n// Generates random integer between min and max\n```",
          "position": [
            3136,
            872
          ],
          "webhookId": "rate-limit-wait",
          "parameters": {
            "amount": "={{ Math.floor(Math.random() * (1800 - 900 + 1)) + 900 }}"
          },
          "typeVersion": 1.1
        },
        {
          "id": "476dae28-6d63-49e8-a219-83cc082f7b0a",
          "name": "ā­ļø Skip: No Match / Not Connected",
          "type": "n8n-nodes-base.noOp",
          "notes": "## ā­ļø SKIP NODE\n\n---\n\n### āœ… Purpose:\nHandles comments that don't trigger a message.\n\n---\n\n### šŸ”€ Triggers When:\n- Comment doesn't contain keyword\n- Commenter is not a 1st connection\n\n---\n\n### šŸ“Š Result:\n- No message sent\n- Returns to loop\n- Processes next comment\n\n---\n\n### šŸ’” Examples Skipped:\n- \"Great post!\" (no keyword)\n- \"Interesting!\" (no keyword)\n- \"Send code\" from 2nd connection",
          "position": [
            2912,
            896
          ],
          "parameters": {},
          "typeVersion": 1
        },
        {
          "id": "2487205f-842a-4650-991d-90236c16efd3",
          "name": "āœ… All Comments Processed",
          "type": "n8n-nodes-base.noOp",
          "notes": "## āœ… COMPLETION NODE\n\n---\n\n### šŸŽ‰ Workflow Complete!\n\n---\n\n### šŸ“Š What Happened:\nāœ“ Fetched all comments from post\nāœ“ Checked each for keyword match\nāœ“ Verified connection status\nāœ“ Sent DMs to eligible users\nāœ“ Applied rate limiting\n\n---\n\n### šŸ” Check Results:\n1. **Execution Log** - See all processed items\n2. **LinkedIn Messages** - Verify sent messages\n3. **Error Panel** - Check for any failures\n\n---\n\n### šŸŽÆ Next Steps:\n- Monitor response rates\n- Adjust keywords if needed\n- Scale to more posts\n- Optimize message templates\n\n---\n\n### šŸ“ˆ Success Metrics:\n- Messages successfully sent\n- Response rate\n- Conversion rate\n- Engagement generated",
          "position": [
            2016,
            608
          ],
          "parameters": {},
          "typeVersion": 1
        },
        {
          "id": "a4755f73-2445-4405-b2ca-3b6b751e5b61",
          "name": "Execution Zone",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            876,
            556
          ],
          "parameters": {
            "color": 7,
            "width": 2456,
            "height": 580,
            "content": "## šŸ”„ EXECUTION ZONE\n\nThe main workflow nodes are in this section.\n\n**Tip:** Follow the numbered sequence (1ļøāƒ£ → 2ļøāƒ£ → 3ļøāƒ£...)"
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "",
      "connections": {
        "8ļøāƒ£ If: Connected?": {
          "main": [
            [
              {
                "node": "9ļøāƒ£ Send DM with Link",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "ā­ļø Skip: No Match / Not Connected",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "šŸ”Ÿ Wait: Rate Limiting": {
          "main": [
            [
              {
                "node": "4ļøāƒ£ Loop: Process Each Comment",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "9ļøāƒ£ Send DM with Link": {
          "main": [
            [
              {
                "node": "šŸ”Ÿ Wait: Rate Limiting",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "2ļøāƒ£ Fetch All Comments": {
          "main": [
            [
              {
                "node": "3ļøāƒ£ Split Comments Array",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "6ļøāƒ£ If: Keyword Found?": {
          "main": [
            [
              {
                "node": "7ļøāƒ£ Check Connection Status",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "ā­ļø Skip: No Match / Not Connected",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "3ļøāƒ£ Split Comments Array": {
          "main": [
            [
              {
                "node": "4ļøāƒ£ Loop: Process Each Comment",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "5ļøāƒ£ Detect Keyword Match": {
          "main": [
            [
              {
                "node": "6ļøāƒ£ If: Keyword Found?",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "7ļøāƒ£ Check Connection Status": {
          "main": [
            [
              {
                "node": "8ļøāƒ£ If: Connected?",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "1ļøāƒ£ Form: Enter Post Details": {
          "main": [
            [
              {
                "node": "2ļøāƒ£ Fetch All Comments",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "4ļøāƒ£ Loop: Process Each Comment": {
          "main": [
            [
              {
                "node": "āœ… All Comments Processed",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "5ļøāƒ£ Detect Keyword Match",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "ā­ļø Skip: No Match / Not Connected": {
          "main": [
            [
              {
                "node": "4ļøāƒ£ Loop: Process Each Comment",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    }