AutomationFlowsWeb Scraping › Wf-rev-sl-03 Delivery Status Cleanup 15min

Wf-rev-sl-03 Delivery Status Cleanup 15min

WF-REV-SL-03 Delivery Status Cleanup 15min. Uses httpRequest. Scheduled trigger; 12 nodes.

Cron / scheduled trigger★★★★☆ complexity12 nodesHTTP Request
Web Scraping Trigger: Cron / scheduled Nodes: 12 Complexity: ★★★★☆ Added:

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "WF-REV-SL-03 Delivery Status Cleanup 15min",
  "nodes": [
    {
      "id": "trg-15min",
      "name": "Every 15 min",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -16,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "*/15 * * * *"
            }
          ]
        }
      }
    },
    {
      "id": "http-get-batch",
      "name": "GET Convex delivery-check-batch",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        208,
        0
      ],
      "parameters": {
        "method": "GET",
        "url": "https://YOUR_CONVEX_DEPLOYMENT/reviews/sales-delivery-check-batch?limit=50",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "httpHeaderAuth",
        "options": {}
      },
      "onError": "continueRegularOutput",
      "retryOnFail": true,
      "maxTries": 3
    },
    {
      "id": "split-out",
      "name": "Split to Items",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        432,
        0
      ],
      "parameters": {
        "fieldToSplitOut": "leads",
        "options": {}
      }
    },
    {
      "id": "loop",
      "name": "Loop Batches (10)",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        656,
        0
      ],
      "parameters": {
        "batchSize": 10,
        "options": {}
      }
    },
    {
      "id": "http-close-sms-hist",
      "name": "Close GET SMS history",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        880,
        112
      ],
      "parameters": {
        "method": "GET",
        "url": "=https://api.close.com/api/v1/activity/sms/?lead_id={{ $json.closeLeadId }}&direction=outbound&_order_by=-date_created&_limit=1&_fields=id,status",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBasicAuth",
        "options": {}
      },
      "onError": "continueRegularOutput",
      "retryOnFail": true,
      "maxTries": 3
    },
    {
      "id": "code-latest-status",
      "name": "Get Latest SMS Status",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1104,
        112
      ],
      "parameters": {
        "language": "javaScript",
        "jsCode": "// Extract latest SMS status from Close response\nconst lead = $('Loop Batches (10)').item.json;\nconst hist = $input.first().json;\nconst latest = (hist.data && hist.data[0]) ? hist.data[0] : null;\nconst status = latest ? String(latest.status || '').toLowerCase() : 'no_history';\n// Final statuses per Close: sent, delivered, error, failed, bounced\nconst isFinal = ['delivered','error','failed','bounced','undelivered'].includes(status);\nconst isDelivered = status === 'delivered' || status === 'sent';\nreturn [{ json: { ...lead, latestStatus: status, isFinal, isDelivered } }];"
      }
    },
    {
      "id": "if-final",
      "name": "Is Final Status?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        1328,
        112
      ],
      "parameters": {
        "conditions": {
          "combinator": "and",
          "options": {
            "version": 2,
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "leftValue": "={{ $json.isFinal }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ]
        }
      }
    },
    {
      "id": "if-delivered",
      "name": "Is Delivered?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        1552,
        0
      ],
      "parameters": {
        "conditions": {
          "combinator": "and",
          "options": {
            "version": 2,
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "leftValue": "={{ $json.isDelivered }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ]
        }
      }
    },
    {
      "id": "http-set-mobile",
      "name": "Convex set-phone-type mobile",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        1776,
        -96
      ],
      "parameters": {
        "method": "POST",
        "url": "https://YOUR_CONVEX_DEPLOYMENT/reviews/sales-set-phone-type",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "httpHeaderAuth",
        "sendBody": true,
        "bodyContentType": "json",
        "jsonBody": "={{ JSON.stringify({ leadId: $json.id, phoneType: 'mobile' }) }}",
        "options": {}
      },
      "onError": "continueRegularOutput",
      "retryOnFail": true,
      "maxTries": 3
    },
    {
      "id": "http-set-landline",
      "name": "Convex set-phone-type landline",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        1776,
        128
      ],
      "parameters": {
        "method": "POST",
        "url": "https://YOUR_CONVEX_DEPLOYMENT/reviews/sales-set-phone-type",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "httpHeaderAuth",
        "sendBody": true,
        "bodyContentType": "json",
        "jsonBody": "={{ JSON.stringify({ leadId: $json.id, phoneType: 'landline' }) }}",
        "options": {}
      },
      "onError": "continueRegularOutput",
      "retryOnFail": true,
      "maxTries": 3
    },
    {
      "id": "http-move-error",
      "name": "Convex move-to-error",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        2000,
        128
      ],
      "parameters": {
        "method": "POST",
        "url": "https://YOUR_CONVEX_DEPLOYMENT/reviews/sales-move-to-error",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "httpHeaderAuth",
        "sendBody": true,
        "bodyContentType": "json",
        "jsonBody": "={{ JSON.stringify({ leadId: $json.id, reason: 'landline' }) }}",
        "options": {}
      },
      "onError": "continueRegularOutput",
      "retryOnFail": true,
      "maxTries": 3
    },
    {
      "id": "wait",
      "name": "Wait 1s",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        2224,
        0
      ],
      "parameters": {
        "amount": 1,
        "unit": "seconds"
      }
    }
  ],
  "connections": {
    "Every 15 min": {
      "main": [
        [
          {
            "node": "GET Convex delivery-check-batch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET Convex delivery-check-batch": {
      "main": [
        [
          {
            "node": "Split to Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split to Items": {
      "main": [
        [
          {
            "node": "Loop Batches (10)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Close GET SMS history": {
      "main": [
        [
          {
            "node": "Get Latest SMS Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Latest SMS Status": {
      "main": [
        [
          {
            "node": "Is Final Status?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Final Status?": {
      "main": [
        [
          {
            "node": "Is Delivered?",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 1s",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Delivered?": {
      "main": [
        [
          {
            "node": "Convex set-phone-type mobile",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Convex set-phone-type landline",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convex set-phone-type mobile": {
      "main": [
        [
          {
            "node": "Wait 1s",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convex set-phone-type landline": {
      "main": [
        [
          {
            "node": "Convex move-to-error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convex move-to-error": {
      "main": [
        [
          {
            "node": "Wait 1s",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 1s": {
      "main": [
        [
          {
            "node": "Loop Batches (10)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Batches (10)": {
      "main": [
        [],
        [
          {
            "node": "Close GET SMS history",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "timezone": "America/New_York",
    "saveDataSuccessExecution": "none",
    "callerPolicy": "workflowsFromSameOwner",
    "availableInMCP": false
  },
  "active": false
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

WF-REV-SL-03 Delivery Status Cleanup 15min. Uses httpRequest. Scheduled trigger; 12 nodes.

Source: https://github.com/rafiulislam4246/review-engine/blob/main/workflows/15-sales-delivery-status-cleanup.json — original creator credit. Request a take-down →

More Web Scraping workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Web Scraping

Birthday Automation - Production (Fixed). Uses stopAndError, httpRequest, emailSend, bannerbear. Scheduled trigger; 86 nodes.

Stop And Error, HTTP Request, Email Send +1
Web Scraping

This template runs two scheduled workflows to govern Microsoft Entra ID (Azure AD) guest accounts by detecting stale users via Microsoft Graph, staging deletions in SharePoint with a 72-hour window, n

Microsoft SharePoint, Microsoft Teams, Microsoft Entra +1
Web Scraping

Jira-Allure-Auto-Qa. Uses httpRequest, jira. Scheduled trigger; 68 nodes.

HTTP Request, Jira
Web Scraping

Spotify-Sync-Surrealdb-V1. Uses httpRequest, n8n-nodes-surrealdb, spotify. Scheduled trigger; 62 nodes.

HTTP Request, N8N Nodes Surrealdb, Spotify
Web Scraping

As n8n instances scale, teams often lose track of sub-workflows—who uses them, where they are referenced, and whether they can be safely updated. This leads to inefficiencies like unnecessary copies o

HTTP Request, n8n, N8N Trigger +1