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 →
{
"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.
googleSheetsOAuth2ApiopenAiApi
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Disparo de WhatsApp. Uses agent, lmChatOpenAi, outputParserStructured, chainLlm. Event-driven trigger; 29 nodes.
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
*Tags: AI Agent, Supply Chain, Logistics, Circular Economy, Route Planning, Transportation, GPS API*
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
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