AutomationFlowsWeb Scraping › Student Progression Check

Student Progression Check

Student Progression Check. Uses httpRequest. Webhook trigger; 7 nodes.

Webhook trigger★★★★☆ complexity7 nodesHTTP Request
Web Scraping Trigger: Webhook Nodes: 7 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": "Student Progression Check",
  "nodes": [
    {
      "parameters": {
        "path": "assessment/progression-check",
        "httpMethod": "POST",
        "responseMode": "onReceived",
        "options": {}
      },
      "id": "0f3e6e8a-webhook-1",
      "name": "Webhook Trigger",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [
        250,
        300
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "{{$env.SJMS_API_URL}}/api/students/{{ $json.studentId }}/results",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer {{ $env.SJMS_API_KEY }}"
            }
          ]
        },
        "options": {},
        "headerParametersJson": "{\"X-N8N-API-KEY\": \"={{$env.N8N_API_KEY}}\"}"
      },
      "id": "1a2b3c4d-http-1",
      "name": "Fetch Student Results",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        450,
        300
      ],
      "connections": {
        "0f3e6e8a-webhook-1": [
          [
            {
              "node": "1a2b3c4d-http-1",
              "type": "main",
              "index": 0
            }
          ]
        ]
      }
    },
    {
      "parameters": {
        "jsCode": "// Apply progression rules\nconst results = $json.body;\nconst totalCredits = results.modules.reduce((sum, m) => sum + (m.passed ? m.credits : 0), 0);\nconst avgMark = results.modules.reduce((sum, m) => sum + m.mark, 0) / results.modules.length;\n\nlet progressionDecision = 'PROGRESS';\nlet condonementEligible = false;\n\n// Check 120 credit minimum for UG\nif (results.level === 'UG' && totalCredits < 120) {\n  progressionDecision = 'REPEAT_YEAR';\n}\n\n// Check condonement eligibility (35-39 mark, overall avg >= 40)\nconst failedModules = results.modules.filter(m => m.mark < 40);\nconst condoneableCount = failedModules.filter(m => m.mark >= 35 && m.mark < 40).length;\nconst condoneableCredits = failedModules.filter(m => m.mark >= 35 && m.mark < 40).reduce((sum, m) => sum + m.credits, 0);\n\nif (condoneableCount > 0 && avgMark >= 40 && condoneableCredits <= 30) {\n  condonementEligible = true;\n  if (progressionDecision !== 'REPEAT_YEAR') {\n    progressionDecision = 'PROGRESS_CONDONED';\n  }\n}\n\nreturn {\n  studentId: results.studentId,\n  progressionDecision,\n  condonementEligible,\n  totalCredits,\n  avgMark: Math.round(avgMark * 100) / 100,\n  failedModules: failedModules.length,\n  condoneableModules: condoneableCount\n};"
      },
      "id": "2b3c4d5e-function-1",
      "name": "Apply Progression Rules",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1,
      "position": [
        650,
        300
      ],
      "connections": {
        "1a2b3c4d-http-1": [
          [
            {
              "node": "2b3c4d5e-function-1",
              "type": "main",
              "index": 0
            }
          ]
        ]
      }
    },
    {
      "parameters": {
        "method": "PATCH",
        "url": "{{$env.SJMS_API_URL}}/api/students/{{ $json.studentId }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer {{ $env.SJMS_API_KEY }}"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "progressionStatus",
              "value": "={{ $json.progressionDecision }}"
            },
            {
              "name": "progressionDate",
              "value": "={{ new Date().toISOString() }}"
            }
          ]
        },
        "options": {},
        "headerParametersJson": "{\"X-N8N-API-KEY\": \"={{$env.N8N_API_KEY}}\"}"
      },
      "id": "3c4d5e6f-http-2",
      "name": "Update Student Record",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        850,
        300
      ],
      "connections": {
        "2b3c4d5e-function-1": [
          [
            {
              "node": "3c4d5e6f-http-2",
              "type": "main",
              "index": 0
            }
          ]
        ]
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "{{$env.SJMS_API_URL}}/api/notifications/send",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer {{ $env.SJMS_API_KEY }}"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "recipientId",
              "value": "={{ $json.studentId }}"
            },
            {
              "name": "type",
              "value": "PROGRESSION_DECISION"
            },
            {
              "name": "progressionStatus",
              "value": "={{ $json.progressionDecision }}"
            }
          ]
        },
        "options": {},
        "headerParametersJson": "{\"X-N8N-API-KEY\": \"={{$env.N8N_API_KEY}}\"}"
      },
      "id": "4d5e6f70-http-3",
      "name": "Notify Student",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        1050,
        200
      ],
      "connections": {
        "3c4d5e6f-http-2": [
          [
            {
              "node": "4d5e6f70-http-3",
              "type": "main",
              "index": 0
            }
          ]
        ]
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "{{$env.SJMS_API_URL}}/api/notifications/send",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer {{ $env.SJMS_API_KEY }}"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "recipientId",
              "value": "={{ $json.personalTutorId }}"
            },
            {
              "name": "type",
              "value": "PROGRESSION_NOTIFICATION"
            },
            {
              "name": "studentId",
              "value": "={{ $json.studentId }}"
            },
            {
              "name": "progressionStatus",
              "value": "={{ $json.progressionDecision }}"
            }
          ]
        },
        "options": {},
        "headerParametersJson": "{\"X-N8N-API-KEY\": \"={{$env.N8N_API_KEY}}\"}"
      },
      "id": "5e6f7081-http-4",
      "name": "Notify Personal Tutor",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        1050,
        400
      ],
      "connections": {
        "3c4d5e6f-http-2": [
          [
            {
              "node": "5e6f7081-http-4",
              "type": "main",
              "index": 0
            }
          ]
        ]
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "{{$env.SJMS_API_URL}}/api/logs/errors",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer {{ $env.SJMS_API_KEY }}"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "workflow",
              "value": "progression-check"
            },
            {
              "name": "error",
              "value": "={{ $json.errorMessage }}"
            },
            {
              "name": "timestamp",
              "value": "={{ new Date().toISOString() }}"
            }
          ]
        },
        "options": {},
        "headerParametersJson": "{\"X-N8N-API-KEY\": \"={{$env.N8N_API_KEY}}\"}"
      },
      "id": "7071829a-http-5",
      "name": "Log Error",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        450,
        500
      ],
      "connections": {
        "6f708192-errorTrigger-1": [
          [
            {
              "node": "7071829a-http-5",
              "type": "main",
              "index": 0
            }
          ]
        ]
      }
    }
  ],
  "connections": {
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Fetch Student Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Student Results": {
      "main": [
        [
          {
            "node": "Apply Progression Rules",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Apply Progression Rules": {
      "main": [
        [
          {
            "node": "Update Student Record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Student Record": {
      "main": [
        [
          {
            "node": "Notify Student",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify Student": {
      "main": [
        [
          {
            "node": "Notify Personal Tutor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify Personal Tutor": {
      "main": [
        [
          {
            "node": "Log Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "saveExecutionProgress": true,
    "retry": {
      "enabled": true,
      "maxTries": 3,
      "waitBetweenRetries": 1000
    },
    "errorWorkflow": "global-error-workflow"
  }
}
Pro

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

About this workflow

Student Progression Check. Uses httpRequest. Webhook trigger; 7 nodes.

Source: https://github.com/RJK134/sjms-v4-integrated/blob/59aca8a599c74c216f5afadc3195b8039ccb430a/n8n-workflows/progression-check.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

This n8n template provides enterprise-level version control for your workflows using GitHub integration. Stop losing hours to broken workflows and manual exports – get proper commit history, visual di

n8n, Execute Workflow Trigger, HTTP Request +1
Web Scraping

This flow creates dummy files for every item added in your *Arrs (Radarr/Sonarr) with the tag .

HTTP Request, Ssh
Web Scraping

eek-Go v2 (Batch-Then-Review). Uses httpRequest. Webhook trigger; 75 nodes.

HTTP Request
Web Scraping

This workflow receives webhook requests from a content calendar and uses the X API v2 to publish text posts, threads, image/video posts, and polls, as well as delete existing posts and run a credentia

HTTP Request
Web Scraping

This workflow acts as a central API gateway for all technical indicator agents in the Binance Spot Market Quant AI system. It listens for incoming webhook requests and dynamically routes them to the c

HTTP Request