AutomationFlowsAI & RAG › Ai-powered Degree Audit System with Google Sheets and Gpt-5

Ai-powered Degree Audit System with Google Sheets and Gpt-5

ByRobert Breen @rbreen on n8n.io

Run an AI-powered degree audit for each senior student. This template reads student rows from Google Sheets, evaluates completed courses against hard-coded program requirements, and writes back an AI Degree Summary of what's still missing (major core, Gen Eds, major electives,…

Event trigger★★★☆☆ complexityAI-powered10 nodesOpenAI ChatOutput Parser StructuredAgentGoogle Sheets
AI & RAG Trigger: Event Nodes: 10 Complexity: ★★★☆☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #8093 — we link there as the canonical source.

This workflow follows the Agent → Google Sheets recipe pattern — see all workflows that pair these two integrations.

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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "5432b2ed-adde-4021-b6b3-e75e43bd102c",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -2048,
        7776
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "86b73ee2-7e25-4ab2-b781-f677032e7fb2",
      "name": "Sticky Note68",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1840,
        7248
      ],
      "parameters": {
        "color": 3,
        "width": 224,
        "height": 656,
        "content": "### 1) Connect Google Sheets (OAuth2)\n1. In **n8n \u2192 Credentials \u2192 New \u2192 Google Sheets (OAuth2)**  \n2. Sign in with your Google account and grant access  \n3. In each Google Sheets node, select your **Spreadsheet** and the appropriate **Worksheet**:  \n   - **data** (raw spend)  \n   - **Lookup** (channel reference table)  \n   - **render pivot** (output tab)  \n\nhttps://docs.google.com/spreadsheets/d/10IMnD8JhiR4lTlNFQTG_Auopg8haAiEt3_G9EKWTqLw/edit?gid=1466231493#gid=1466231493\n"
      },
      "typeVersion": 1
    },
    {
      "id": "01782593-fe8a-46fe-82ba-23c1a13c604e",
      "name": "OpenAI Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -1344,
        8048
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5",
          "cachedResultName": "gpt-5"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "24d787bc-36ca-4808-851d-bcdcbfdc681c",
      "name": "Structured Output Parser1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -1120,
        8032
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"StudentID\": \"S001\",\n  \"Program\": \"Example Program\",\n  \"Missing\": [\n    \"CS-201 | Computer Systems | 3\",\n    \"CS-220 | Databases | 3\",\n    \"GEN-107 | Introduction to Sociology | 3\"\n  ],\n  \"Summary\": \"Student still needs two core Computer Science courses and one general education requirement. Should prioritize 200-level major courses next term.\"\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "602cbc87-b96e-4ee6-8925-6e0213ca4a41",
      "name": "Sticky Note69",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1424,
        7744
      ],
      "parameters": {
        "color": 3,
        "width": 224,
        "height": 400,
        "content": "### 3) Connect OpenAI (API Key)\n1. In **n8n \u2192 Credentials \u2192 New \u2192 OpenAI API**  \n2. Paste your **OpenAI API key**  \n3. In **OpenAI Chat Model**, select your credential and a **vision-capable** chat model (e.g., `gpt-4o-mini`, `gpt-4o`, or your configured vision model)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8ae8ffe0-e377-4fd5-b134-5b3ecd61aacf",
      "name": "Sticky Note57",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2304,
        7136
      ],
      "parameters": {
        "color": 7,
        "width": 2144,
        "height": 1056,
        "content": "## \ud83d\udd0e Audit student degree progress in Google Sheets using OpenAI\n\nRun an **AI-powered degree audit** for each senior student. This workflow reads rows from a Google Sheet, checks their completed courses against hard-coded program requirements, and writes back a summary of what\u2019s still missing \u2014 core classes, electives, general education, and upper-division credits.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2694ca9c-f3fb-4dd9-bda4-dc55748d5fba",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2736,
        7136
      ],
      "parameters": {
        "width": 400,
        "height": 1056,
        "content": "## Setup (2 steps)\n\n### 1) Connect Google Sheets (OAuth2)\nIn n8n \u2192 Credentials \u2192 New \u2192 Google Sheets (OAuth2) and sign in.\n\nIn the Google Sheets nodes, select your spreadsheet and the Senior_data tab.\n\nEnsure your input sheet has at least: StudentID, Name, Program, Year, CompletedCourses.\n\n### 2) Connect OpenAI (API Key)\nIn n8n \u2192 Credentials \u2192 New \u2192 OpenAI API, paste your key.\n\nIn the OpenAI Chat Model node, select that credential and a model (e.g., gpt-4o or gpt-5).\n\n\n\n- \ud83d\udce7 **rbreen@ynteractive.com**  \n- \ud83d\udd17 **Robert Breen** \u2014 https://www.linkedin.com/in/robert-breen-29429625/  \n- \ud83c\udf10 **ynteractive.com** \u2014 https://ynteractive.com\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "05c50b84-4ed3-4327-b17a-8262cac58305",
      "name": "Degree Audit Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -1120,
        7552
      ],
      "parameters": {
        "text": "=student:  {{ $json.StudentID }}, Name: {{ $json.Name }}, Program: {{ $json.Program }} Year: {{ $json.Year }} Completed Courses: {{ $json.CompletedCourses }}",
        "options": {
          "systemMessage": "You are a university degree-audit assistant. Your job is to analyze each student\u2019s completed courses against the hard-coded program requirements and catalog below, then output only what they are still missing.\n\nPROGRAM REQUIREMENTS (HARD-CODED)\n\nComputer Science BS\n\nTotal Credits Required: 120\n\nGen Ed Credits Required: 36\n\nMajor Core Courses: CS-101, CS-102, CS-103, CS-201, CS-220\n\nMajor Elective Credits Required: 12 (any CS course with \u201cMajor Elective\u201d)\n\nUpper-Division Credits Required: 30 (courses level \u2265 200)\n\nBusiness Administration BBA\n\nTotal Credits Required: 120\n\nGen Ed Credits Required: 36\n\nMajor Core Courses: BUS-101, BUS-102, BUS-103, BUS-201, BUS-202\n\nMajor Elective Credits Required: 12 (BUS electives level \u2265 200)\n\nUpper-Division Credits Required: 30\n\nPsychology BA\n\nTotal Credits Required: 120\n\nGen Ed Credits Required: 42\n\nMajor Core Courses: PSY-101, PSY-201\n\nMajor Elective Credits Required: 18 (PSY electives level \u2265 200)\n\nUpper-Division Credits Required: 27\n\nMechanical Engineering BS\n\nTotal Credits Required: 128\n\nGen Ed Credits Required: 30\n\nMajor Core Courses: ENGR-101, ENGR-102, MTH-121, MTH-122, PHY-151, ME-201\n\nMajor Elective Credits Required: 12 (ME electives level \u2265 200)\n\nUpper-Division Credits Required: 36\n\nBiology BS (Pre-Med)\n\nTotal Credits Required: 124\n\nGen Ed Credits Required: 36\n\nMajor Core Courses: BIO-101, BIO-102, CHM-101, CHM-102, BIO-201\n\nMajor Elective Credits Required: 9 (BIO electives level \u2265 200)\n\nUpper-Division Credits Required: 30\n\nEnglish Literature BA\n\nTotal Credits Required: 120\n\nGen Ed Credits Required: 42\n\nMajor Core Courses: ENG-101, ENG-201\n\nMajor Elective Credits Required: 18 (ENG electives level \u2265 200)\n\nUpper-Division Credits Required: 27\n\nData Science BS\n\nTotal Credits Required: 120\n\nGen Ed Credits Required: 36\n\nMajor Core Courses: CS-101, CS-102, DS-101, DS-201\n\nMajor Elective Credits Required: 12 (DS electives level \u2265 200)\n\nUpper-Division Credits Required: 30\n\nNursing BSN\n\nTotal Credits Required: 124\n\nGen Ed Credits Required: 36\n\nMajor Core Courses: BIO-101, CHM-101, NUR-101, NUR-201\n\nMajor Elective Credits Required: 9 (NUR electives level \u2265 200)\n\nUpper-Division Credits Required: 30\n\nEconomics BA\n\nTotal Credits Required: 120\n\nGen Ed Credits Required: 36\n\nMajor Core Courses: ECON-101, ECON-102, ECON-201\n\nMajor Elective Credits Required: 12 (ECON electives level \u2265 200)\n\nUpper-Division Credits Required: 27\n\nGraphic Design BFA\n\nTotal Credits Required: 120\n\nGen Ed Credits Required: 30\n\nMajor Core Courses: ART-101, ART-102, ART-201\n\nMajor Elective Credits Required: 18 (ART electives level \u2265 200)\n\nUpper-Division Credits Required: 30\n\nOUTPUT RULES\n\nFor each student, output valid JSON only.\n\nOutput must be a JSON array of objects.\n\nEach object must include:\n\n\"StudentID\"\n\n\"Program\"\n\n\"Missing\" \u2192 array of strings, each formatted \"COURSEID | Title | Credits\" (list the missing Major Core, plus indicate Gen Ed/Elective requirements if still needed)\n\n\"Summary\" \u2192 1\u20132 sentences explaining what they\u2019re missing and what to prioritize next (mention 200/300-level if upper-division is short).\n\nWould you like me to now fill in a JSON example for one program (e.g., Computer Science BS with Ava Thompson\u2019s courses) so you see exactly how the Missing list and Summary would look?\n\nOutput like this. \n\n{\n  \"StudentID\": \"S001\",\n  \"Program\": \"Example Program\",\n  \"Missing\": [\n    \"CS-201 | Computer Systems | 3\",\n    \"CS-220 | Databases | 3\",\n    \"GEN-107 | Introduction to Sociology | 3\"\n  ],\n  \"Summary\": \"Student still needs two core Computer Science courses and one general education requirement. Should prioritize 200-level major courses next term.\"\n}\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "executeOnce": false,
      "typeVersion": 2.2,
      "alwaysOutputData": false
    },
    {
      "id": "e719b531-b1c0-431a-b2ba-9bc9b1c71d1a",
      "name": "Add Student Degree Summary",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -720,
        7568
      ],
      "parameters": {
        "columns": {
          "value": {
            "StudentID": "={{ $json.output.StudentID }}",
            "AI Degree Summary": "={{ $json.output.Summary }}"
          },
          "schema": [
            {
              "id": "StudentID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "StudentID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Program",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Program",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Year",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Year",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CompletedCourses",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "CompletedCourses",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Degree Summary",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Degree Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "AI Degree Summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "AI Degree Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "StudentID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1466231493,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/10IMnD8JhiR4lTlNFQTG_Auopg8haAiEt3_G9EKWTqLw/edit#gid=1466231493",
          "cachedResultName": "Senior_data"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "10IMnD8JhiR4lTlNFQTG_Auopg8haAiEt3_G9EKWTqLw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/10IMnD8JhiR4lTlNFQTG_Auopg8haAiEt3_G9EKWTqLw/edit?usp=drivesdk",
          "cachedResultName": "Student Details"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "22a77dea-d57c-487c-9d55-382e8121f711",
      "name": "Get Student Data1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1760,
        7776
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1466231493,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/10IMnD8JhiR4lTlNFQTG_Auopg8haAiEt3_G9EKWTqLw/edit#gid=1466231493",
          "cachedResultName": "Senior_data"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "10IMnD8JhiR4lTlNFQTG_Auopg8haAiEt3_G9EKWTqLw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/10IMnD8JhiR4lTlNFQTG_Auopg8haAiEt3_G9EKWTqLw/edit?usp=drivesdk",
          "cachedResultName": "Student Details"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    }
  ],
  "connections": {
    "Get Student Data1": {
      "main": [
        [
          {
            "node": "Degree Audit Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Degree Audit Agent": {
      "main": [
        [
          {
            "node": "Add Student Degree Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Degree Audit Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser1": {
      "ai_outputParser": [
        [
          {
            "node": "Degree Audit Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Get Student Data1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

Run an AI-powered degree audit for each senior student. This template reads student rows from Google Sheets, evaluates completed courses against hard-coded program requirements, and writes back an AI Degree Summary of what's still missing (major core, Gen Eds, major electives,…

Source: https://n8n.io/workflows/8093/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

Disparo de WhatsApp. Uses agent, lmChatOpenAi, outputParserStructured, chainLlm. Event-driven trigger; 29 nodes.

Agent, OpenAI Chat, Output Parser Structured +4
AI & RAG

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

OpenAI Chat, Tool Think, Output Parser Structured +6
AI & RAG

*Tags: AI Agent, Supply Chain, Logistics, Circular Economy, Route Planning, Transportation, GPS API*

Gmail Trigger, Output Parser Structured, Agent +4
AI & RAG

Streamline Facebook Messenger inbox management with an AI-powered categorization and response system. 💬⚙️ This workflow automatically classifies new messages as Lead, Query, or Spam using GPT-4, route

Error Trigger, Slack, Facebook Graph Api +5
AI & RAG

This workflow streamlines your content organization process by automatically analyzing new blog posts in your GitHub repository and assigning appropriate categories and tags using OpenAI. It compares

Agent, Memory Buffer Window, OpenAI Chat +5