This workflow corresponds to n8n.io template #9574 — we link there as the canonical source.
This workflow follows the Agent → Gmail 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": "1b3e27e1-2217-4f2a-8b88-1e8bf29b90d3",
"name": "Extract Application Data",
"type": "n8n-nodes-base.set",
"position": [
-688,
304
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "student_name",
"name": "student_name",
"type": "string",
"value": "={{ $json.Name }}"
},
{
"id": "student_email",
"name": "student_email",
"type": "string",
"value": "={{ $json['E-mail'] }}"
},
{
"id": "phone",
"name": "phone",
"type": "string",
"value": "={{ $json['Phone Number'].full }}"
},
{
"id": "gpa",
"name": "gpa",
"type": "number",
"value": "={{ $json.GPA }}"
},
{
"id": "sat_score",
"name": "sat_score",
"type": "number",
"value": "={{ $json['SAT Score'] }}"
},
{
"id": "intended_major",
"name": "intended_major",
"type": "string",
"value": "={{ $json.Major }}"
},
{
"id": "extracurriculars",
"name": "extracurriculars",
"type": "string",
"value": "={{ $json.Extracurriculars }}"
},
{
"id": "essay",
"name": "essay",
"type": "string",
"value": "={{ $json.Essay }}"
},
{
"id": "application_id",
"name": "application_id",
"type": "string",
"value": "=APP-{{ Date.now() }}-{{ Math.random().toString(36).substr(2, 8).toUpperCase() }}"
},
{
"id": "submission_date",
"name": "submission_date",
"type": "string",
"value": "={{ new Date().toISOString() }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d764d655-ab9d-465e-b61d-d5e34df9338c",
"name": "Parse AI Evaluation",
"type": "n8n-nodes-base.code",
"position": [
-160,
304
],
"parameters": {
"jsCode": "const item = $input.first().json;\n\ntry {\n const response = item.choices[0].message.content;\n let cleanJson = response.replace(/```json\\n?|```\\n?/g, '').trim();\n const jsonMatch = cleanJson.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n cleanJson = jsonMatch[0];\n }\n const evaluationData = JSON.parse(cleanJson);\n const originalData = $('Extract Application Data').first().json;\n return [{\n json: {\n ...originalData,\n ...evaluationData\n }\n }];\n} catch (error) {\n const originalData = $('Extract Application Data').first().json;\n const gpa = parseFloat(originalData.gpa) || 0;\n const satScore = parseInt(originalData.sat_score) || 0;\n let score = 0;\n if (gpa >= 3.8) score += 40;\n else if (gpa >= 3.5) score += 30;\n else if (gpa >= 3.0) score += 20;\n else score += 10;\n if (satScore >= 1400) score += 40;\n else if (satScore >= 1200) score += 30;\n else if (satScore >= 1000) score += 20;\n else score += 10;\n score += 20;\n let decision = 'reject';\n if (score >= 90) decision = 'auto_accept';\n else if (score >= 70) decision = 'interview_required';\n return [{\n json: {\n ...originalData,\n eligibility_score: score,\n decision_category: decision,\n academic_strength: gpa >= 3.5 ? 'strong' : 'average',\n scholarship_eligible: score >= 85,\n estimated_scholarship: score >= 85 ? 10000 : 0,\n admission_likelihood: score >= 80 ? 'high' : score >= 60 ? 'medium' : 'low'\n }\n }];\n}"
},
"typeVersion": 2
},
{
"id": "6ea97b97-2016-48c3-98d3-fdf6eef9a95b",
"name": "Auto Accept?",
"type": "n8n-nodes-base.if",
"position": [
48,
240
],
"parameters": {
"options": {},
"conditions": {
"options": {
"caseSensitive": true
},
"conditions": [
{
"id": "auto-accept",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.decision_category }}",
"rightValue": "auto_accept"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "3bdac661-48b1-4f68-87d6-818432004d6d",
"name": "Interview Required?",
"type": "n8n-nodes-base.if",
"position": [
48,
608
],
"parameters": {
"options": {},
"conditions": {
"options": {
"caseSensitive": true
},
"conditions": [
{
"id": "interview-check",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.decision_category }}",
"rightValue": "interview_required"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "162f6466-64d0-44a1-8bf9-f4440a41a1ee",
"name": "Send Acceptance Letter",
"type": "n8n-nodes-base.gmail",
"position": [
288,
80
],
"parameters": {
"sendTo": "={{ $json.student_email }}",
"message": "=<!DOCTYPE html>\n<html>\n<body style=\"font-family:Arial;padding:20px;max-width:650px\">\n<div style=\"background:#2E7D32;color:white;padding:30px;text-align:center\">\n<h1>CONGRATULATIONS!</h1>\n<p style=\"font-size:18px\">You've Been Accepted!</p>\n</div>\n<div style=\"padding:30px;border:3px solid #2E7D32\">\n<p>Dear {{ $json.student_name }},</p>\n<p>We are thrilled to inform you that you have been <strong>accepted</strong> to our university for the {{ $json.intended_major }} program!</p>\n<div style=\"background:#E8F5E9;padding:20px;border-radius:8px;margin:20px 0\">\n<h3 style=\"margin-top:0\">Your Academic Profile</h3>\n<p><strong>Eligibility Score:</strong> {{ $json.eligibility_score }}/100<br>\n<strong>Academic Strength:</strong> {{ $json.academic_strength }}</p>\n</div>\n{{ $json.scholarship_eligible ? '<div style=\"background:#FFF3E0;padding:20px;border-radius:8px;margin:20px 0\"><h3 style=\"margin-top:0\">Scholarship Award</h3><p>You are eligible for a merit scholarship of $' + $json.estimated_scholarship + ' per year!</p></div>' : '' }}\n<h3>Next Steps:</h3>\n<ol>\n<li>Accept Your Offer by [deadline]</li>\n<li>Housing Application</li>\n<li>Course Registration</li>\n<li>Orientation Details</li>\n</ol>\n<p><strong>Application ID:</strong> {{ $json.application_id }}</p>\n<p>We look forward to welcoming you!</p>\n<p>Sincerely,<br><strong>Office of Admissions</strong></p>\n</div>\n</body>\n</html>",
"options": {},
"subject": "=Congratulations! Acceptance to Our University"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "52560021-6b9a-4e3c-a964-b62de318b651",
"name": "Send Interview Invitation",
"type": "n8n-nodes-base.gmail",
"position": [
288,
400
],
"parameters": {
"sendTo": "={{ $json.student_email }}",
"message": "=<!DOCTYPE html>\n<html>\n<body style=\"font-family:Arial;padding:20px;max-width:650px\">\n<div style=\"background:#1976D2;color:white;padding:25px;text-align:center\">\n<h2>Interview Invitation</h2>\n</div>\n<div style=\"padding:30px\">\n<p>Dear {{ $json.student_name }},</p>\n<p>Thank you for your application. We would like to invite you for an <strong>admissions interview</strong>.</p>\n<div style=\"background:#E3F2FD;padding:20px;border-radius:8px;margin:20px 0\">\n<h3 style=\"margin-top:0\">Your Application Status</h3>\n<p><strong>Eligibility Score:</strong> {{ $json.eligibility_score }}/100<br>\n<strong>Program:</strong> {{ $json.intended_major }}</p>\n</div>\n<h3>Schedule Your Interview:</h3>\n<p>Visit: interviews.university.edu<br>\n<strong>Code:</strong> {{ $json.application_id }}</p>\n<p><strong>Application ID:</strong> {{ $json.application_id }}</p>\n<p>We look forward to meeting you!</p>\n<p>Best regards,<br><strong>Admissions Committee</strong></p>\n</div>\n</body>\n</html>",
"options": {},
"subject": "=Interview Invitation - University Admissions"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "001d3463-0cc7-40b1-a8f8-0c5f3955cc03",
"name": "Send Rejection Letter",
"type": "n8n-nodes-base.gmail",
"position": [
288,
768
],
"parameters": {
"sendTo": "={{ $json.student_email }}",
"message": "=<!DOCTYPE html>\n<html>\n<body style=\"font-family:Arial;padding:20px;max-width:650px\">\n<div style=\"background:#757575;color:white;padding:25px;text-align:center\">\n<h2>Application Update</h2>\n</div>\n<div style=\"padding:30px\">\n<p>Dear {{ $json.student_name }},</p>\n<p>Thank you for your interest in our university. After careful review, we are unable to offer you admission at this time.</p>\n<div style=\"background:#F5F5F5;padding:20px;border-radius:8px;margin:20px 0\">\n<p><strong>Application ID:</strong> {{ $json.application_id }}</p>\n</div>\n<h3>Moving Forward:</h3>\n<ul>\n<li>You're welcome to reapply next year</li>\n<li>Consider transfer options</li>\n<li>Explore other programs</li>\n</ul>\n<p>We wish you the best in your educational journey.</p>\n<p>Sincerely,<br><strong>Office of Admissions</strong></p>\n</div>\n</body>\n</html>",
"options": {},
"subject": "=Update on Your University Application"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "6e6ade6a-90fd-4007-b613-e816495a9090",
"name": "Alert Admissions Team",
"type": "n8n-nodes-base.gmail",
"position": [
528,
240
],
"parameters": {
"sendTo": "user@example.com",
"message": "=<!DOCTYPE html>\n<html>\n<body style=\"font-family:Arial;padding:20px\">\n<h2>Exceptional Applicant Alert</h2>\n<p><strong>Student:</strong> {{ $json.student_name }}<br>\n<strong>Major:</strong> {{ $json.intended_major }}<br>\n<strong>GPA:</strong> {{ $json.gpa }}<br>\n<strong>SAT:</strong> {{ $json.sat_score }}</p>\n<h3>Evaluation:</h3>\n<p><strong>Score:</strong> {{ $json.eligibility_score }}/100<br>\n<strong>Decision:</strong> {{ $json.decision_category }}<br>\n<strong>Scholarship:</strong> {{ $json.scholarship_eligible ? 'Yes - $' + $json.estimated_scholarship : 'No' }}</p>\n<p><strong>Application ID:</strong> {{ $json.application_id }}</p>\n</body>\n</html>",
"options": {},
"subject": "=High-Score Application: {{ $json.student_name }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "6d0d22f8-bf61-45bd-a360-4df7fa0aa9ac",
"name": "Log to Database",
"type": "n8n-nodes-base.googleSheets",
"position": [
768,
240
],
"parameters": {
"columns": {
"value": {
"id": "={{ $json.id }}",
"GPA": "={{ $('Extract Application Data').item.json.gpa }}",
"Name": "={{ $('Extract Application Data').item.json.student_name }}",
"Essay": "={{ $('Extract Application Data').item.json.essay }}",
"Major": "={{ $('Extract Application Data').item.json.intended_major }}",
"E-mail": "={{ $('Extract Application Data').item.json.student_email }}",
"SAT Score": "={{ $('Extract Application Data').item.json.sat_score }}",
"Phone Number": "={{ $('Extract Application Data').item.json.phone }}",
"Extracurriculars": "={{ $('Extract Application Data').item.json.extracurriculars }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "E-mail",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "E-mail",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone Number",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Phone Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "GPA",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "GPA",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "SAT Score",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "SAT Score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Major",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Major",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Essay",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Essay",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Extracurriculars",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Extracurriculars",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "id",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "threadId",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "threadId",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "labelIds",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "labelIds",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RLedvjitdtKOuYfH7d2Z0Plwpn935fYobFb5jxQIc_M/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1RLedvjitdtKOuYfH7d2Z0Plwpn935fYobFb5jxQIc_M",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RLedvjitdtKOuYfH7d2Z0Plwpn935fYobFb5jxQIc_M/edit?usp=drivesdk",
"cachedResultName": "Student"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "85692260-3391-4ab4-b579-192f6527f582",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1008,
80
],
"parameters": {
"color": 5,
"width": 460,
"height": 424,
"content": "## \ud83d\udcdd Application Form\n- **Jotform** trigger receives application.\nCreate your form for free on [Jotform using this link](https://www.jotform.com/?partner=mediajade)\nCaptures:\n\u2022 Student info\n\u2022 GPA & test scores\n\u2022 Essay\n\u2022 Major choice"
},
"typeVersion": 1
},
{
"id": "84194334-69a4-4c58-b802-c34346ddacf2",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-480,
304
],
"parameters": {
"text": "You are an expert university admissions officer with 15+ years of experience evaluating student applications for competitive undergraduate programs.\n\nYour role is to conduct thorough, fair, and holistic evaluations of student applications, considering academic merit, extracurricular achievements, personal qualities, and potential for success.\n\nEVALUATION CRITERIA:\n1. Academic Performance (40% weight)\n - GPA: 3.8+ excellent, 3.5-3.7 strong, 3.0-3.4 average, <3.0 needs improvement\n - Test Scores: SAT 1400+ or ACT 32+ excellent, 1200-1399 or 28-31 strong, 1000-1199 or 24-27 average\n - Course rigor and AP/IB classes\n \n2. Extracurricular Activities (25% weight)\n - Leadership positions and impact\n - Depth vs breadth of involvement\n - Community service and civic engagement\n - Awards and recognitions\n \n3. Essay Quality (20% weight)\n - Authenticity and personal voice\n - Writing quality and clarity\n - Insight and self-reflection\n - Alignment with institutional values\n \n4. Fit and Potential (15% weight)\n - Alignment with intended major\n - Demonstrated passion and curiosity\n - Unique perspectives or experiences\n - Potential for campus contribution\n\nDECISION CATEGORIES:\n- \"auto_accept\": Score 95-100 - Exceptional candidates with outstanding academics, leadership, and fit\n- \"interview_required\": Score 70-94 - Strong candidates who need additional evaluation\n- \"waitlist\": Score 50-69 - Qualified but not competitive in current pool\n- \"reject\": Score <50 - Does not meet minimum standards\n\nSCHOLARSHIP ELIGIBILITY:\n- $20,000+/year: Score 98-100 (Presidential Scholar)\n- $15,000-19,999/year: Score 95-97 (Dean's Scholar)\n- $10,000-14,999/year: Score 90-94 (Merit Scholar)\n- $5,000-9,999/year: Score 85-89 (Achievement Award)\n- $0: Score <85\n\nOUTPUT REQUIREMENTS:\n- Return ONLY valid JSON format\n- No markdown code blocks (no ```)\n- No explanatory text outside JSON\n- Be specific and evidence-based in assessments\n- Consider diversity, equity, and inclusion\n- Identify both strengths and areas for growth\n- Provide actionable interview focus areas\n- Recommend alternative programs if applicable\n\nSCORING PHILOSOPHY:\n- Be consistent and calibrated across applications\n- Consider context (school quality, opportunities available)\n- Value authentic engagement over resume padding\n- Recognize different paths to excellence\n- Balance quantitative metrics with qualitative factors\n\nETHICAL GUIDELINES:\n- Evaluate fairly without bias based on demographics\n- Consider socioeconomic context and access to resources\n- Value diverse experiences and perspectives\n- Focus on potential, not just past achievements\n- Maintain high standards while being inclusive\n\nYour evaluations directly impact students' futures. Be thorough, fair, and thoughtful in every assessment.",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "68045bd2-5f68-4b1e-a1e8-0df093140e3a",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-480,
480
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "eeb30437-f977-4fe7-9d93-7b9452c813b3",
"name": "Jotform Application",
"type": "n8n-nodes-base.jotFormTrigger",
"position": [
-944,
304
],
"parameters": {
"form": "252853345242456"
},
"credentials": {
"jotFormApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
}
],
"connections": {
"AI Agent": {
"main": [
[
{
"node": "Parse AI Evaluation",
"type": "main",
"index": 0
}
]
]
},
"Auto Accept?": {
"main": [
[
{
"node": "Send Acceptance Letter",
"type": "main",
"index": 0
}
],
[
{
"node": "Send Rejection Letter",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Interview Required?": {
"main": [
[
{
"node": "Send Interview Invitation",
"type": "main",
"index": 0
}
]
]
},
"Jotform Application": {
"main": [
[
{
"node": "Extract Application Data",
"type": "main",
"index": 0
}
]
]
},
"Parse AI Evaluation": {
"main": [
[
{
"node": "Auto Accept?",
"type": "main",
"index": 0
},
{
"node": "Interview Required?",
"type": "main",
"index": 0
}
]
]
},
"Alert Admissions Team": {
"main": [
[
{
"node": "Log to Database",
"type": "main",
"index": 0
}
]
]
},
"Send Rejection Letter": {
"main": [
[
{
"node": "Log to Database",
"type": "main",
"index": 0
}
]
]
},
"Send Acceptance Letter": {
"main": [
[
{
"node": "Alert Admissions Team",
"type": "main",
"index": 0
}
]
]
},
"Extract Application Data": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Send Interview Invitation": {
"main": [
[
{
"node": "Alert Admissions Team",
"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.
gmailOAuth2googleSheetsOAuth2ApijotFormApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Revolutionize university admissions with intelligent AI-driven application evaluation that analyzes student profiles, calculates eligibility scores, and automatically routes decisions - saving 2.5 hours per application and reducing decision time from weeks to hours.
Source: https://n8n.io/workflows/9574/ — 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.
Transform guest complaints into loyalty opportunities - achieving 60% reduction in negative reviews, 85% faster service recovery, and turning dissatisfied guests into brand advocates through AI-powere
Transform patient intake from paperwork chaos into intelligent, automated triage that detects emergencies, prepares providers with comprehensive briefs, and streamlines scheduling—improving patient sa
Transform accounts payable from a manual bottleneck into an intelligent, automated system that reads invoices, detects fraud, and processes payments automatically—saving 20+ hours per week while preve
Transform college admissions from an overwhelming manual process into an intelligent, efficient, and equitable system that analyzes essays, scores applicants holistically, and identifies top candidate
Streamline client onboarding and project setup from hours to minutes with AI-driven automation. This intelligent workflow eliminates manual coordination, builds proposals, creates projects in Asana, w