AutomationFlowsAI & RAG › Evaluate Interview & Update Scores with Azure Gpt-4o-mini and Google Sheets

Evaluate Interview & Update Scores with Azure Gpt-4o-mini and Google Sheets

ByRahul Joshi @rahul08 on n8n.io

Automatically score candidate questionnaire responses using Azure OpenAI (GPT-4o-mini), combine them with existing evaluations from Google Sheets, and keep your candidate database up to date—all in near real time. Get consistent, structured scores and key takeaways for faster,…

Event trigger★★★★☆ complexityAI-powered16 nodesGoogle Sheets TriggerAgentLm Chat Azure Open AiGoogle Sheets
AI & RAG Trigger: Event Nodes: 16 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #8526 — 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
{
  "id": "ncJgeZeVdsws0GpM",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Candidate Questionarie analysis",
  "tags": [],
  "nodes": [
    {
      "id": "5745071e-e64f-44ab-a972-65a3b7ef2a06",
      "name": "Monitor New Questionnaire Responses",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        -80,
        816
      ],
      "parameters": {
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 3745099,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SFFWWqefQ6tcaEK0_Ovy9nVgyxS4LQPvno1i8fi39MY/edit#gid=3745099",
          "cachedResultName": "Form Responses 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1SFFWWqefQ6tcaEK0_Ovy9nVgyxS4LQPvno1i8fi39MY",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SFFWWqefQ6tcaEK0_Ovy9nVgyxS4LQPvno1i8fi39MY/edit?usp=drivesdk",
          "cachedResultName": "BD Questionarie"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "cb360f3e-257f-49d8-930a-b3d31841edbe",
      "name": "AI Questionnaire Evaluator",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        144,
        816
      ],
      "parameters": {
        "text": "=Role:\nQuestions and Candidate Answers:\nQ1: What is Business development according to you\nA1: {{ $json[\"What is BD according to you?\"] }}\nQ2: What is SWOT analysis\nA2: {{ $json[\"What is SWOT analysis\"] }}\n\nPlease evaluate the above responses based on knowledge depth, problem-solving ability, and communication clarity.",
        "options": {
          "systemMessage": "=You are an AI evaluator for candidate screening. \nYou will be given:\n- A set of role-specific questions.\n- A candidate's answers.\n\nYour job:\n1. Evaluate the quality of the answers against the intent of each question.\n2. Score the questionnaire (0\u201330 by default, or adjust scale if specified).\n3. Provide key takeaways (strengths, weaknesses, red flags, or standout qualities).\n\nOutput ONLY in JSON with this structure:\n{\n  \"questionnaire_score\": <number>,\n  \"key_takeaways\": \"<summary of candidate performance>\"\n}"
        },
        "promptType": "define"
      },
      "typeVersion": 2.1
    },
    {
      "id": "ed9b6126-dadf-4bd6-851f-dbe3e421434e",
      "name": "Azure OpenAI GPT-4 Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "position": [
        240,
        1040
      ],
      "parameters": {
        "model": "gpt-4o-mini",
        "options": {}
      },
      "credentials": {
        "azureOpenAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "3817a7af-23d1-445d-abc3-b68556ff5ec4",
      "name": "Lookup Candidate Profile Data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        768,
        816
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1424038785,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JlXxy90s0we_IqErHyvomrJSijb8pd4H91hOUCH6xCA/edit#gid=1424038785",
          "cachedResultName": "Sheet2"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JlXxy90s0we_IqErHyvomrJSijb8pd4H91hOUCH6xCA",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JlXxy90s0we_IqErHyvomrJSijb8pd4H91hOUCH6xCA/edit?usp=drivesdk",
          "cachedResultName": "Resume store"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "5cd8411b-1851-46e5-833b-2723d14dd509",
      "name": "Parse AI Evaluation Results",
      "type": "n8n-nodes-base.code",
      "position": [
        544,
        816
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  let text = item.json.output;\n\n  // Remove code fences like ```json ... ```\n  text = text.replace(/```json|```/g, \"\").trim();\n\n  let parsed = {};\n  try {\n    parsed = JSON.parse(text);\n  } catch (err) {\n    parsed = { error: \"Failed to parse JSON\", raw: text };\n  }\n\n  return { json: parsed };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "abfe1e72-3291-4bfe-ab80-8b9339ea0aa9",
      "name": "Calculate Combined Scores",
      "type": "n8n-nodes-base.set",
      "position": [
        992,
        816
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1fb84fd6-db3f-432d-baee-2e3e2cfd404a",
              "name": "=final score",
              "type": "number",
              "value": "={{ $json.Score + $('Parse AI Evaluation Results').item.json.questionnaire_score }}\n\n"
            },
            {
              "id": "d257e53b-6887-4cdc-8f50-f90715312b81",
              "name": "Questionarie Score",
              "type": "string",
              "value": "={{ $('Parse AI Evaluation Results').item.json.questionnaire_score }}"
            }
          ]
        }
      },
      "typeVersion": 3.4,
      "alwaysOutputData": true
    },
    {
      "id": "895de667-d515-4331-a2be-e3079af6b468",
      "name": "Update Candidate Database",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1216,
        816
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name": "John Doe",
            "Final score": "={{ $json[\"final score\"] }}",
            "Questionarie Score": "={{ $json[\"Questionarie Score\"] }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone ",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Phone ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Years of experience",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Years of experience",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "skills",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "skills",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "curent role",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "curent role",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "education",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "education",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Score",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Questionarie Score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Questionarie Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Final score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Final score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Skill name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Skill name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Skill level",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Skill level",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Skill years",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Skill years",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Name"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1424038785,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JlXxy90s0we_IqErHyvomrJSijb8pd4H91hOUCH6xCA/edit#gid=1424038785",
          "cachedResultName": "Sheet2"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JlXxy90s0we_IqErHyvomrJSijb8pd4H91hOUCH6xCA",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JlXxy90s0we_IqErHyvomrJSijb8pd4H91hOUCH6xCA/edit?usp=drivesdk",
          "cachedResultName": "Resume store"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "60456c78-e211-4bfe-852d-81467d3d5fda",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        512
      ],
      "parameters": {
        "width": 320,
        "height": 352,
        "content": "## \ud83d\udd14 AUTOMATIC TRIGGER\n\n**Monitor New Questionnaire Responses**\n\n\u2022 **Purpose**: Automatically detects when candidates submit questionnaire forms\n\u2022 **Monitoring**: Polls Google Sheets every minute for new responses\n\u2022 **Source**: 'BD Questionarie' spreadsheet, 'Form Responses 1' sheet\n\u2022 **Trigger**: Activates immediately when new form submission is detected\n\u2022 **Reliability**: Continuous monitoring ensures no responses are missed\n\u2022 **Real-time Processing**: Enables immediate evaluation of candidate submissions"
      },
      "typeVersion": 1
    },
    {
      "id": "eb5a2306-50c1-4222-9778-8dbd51546ae8",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        368
      ],
      "parameters": {
        "width": 320,
        "height": 420,
        "content": "## \ud83e\udd16 AI EVALUATION ENGINE\n\n**AI Questionnaire Evaluator**\n\n\u2022 **Purpose**: Intelligently analyzes candidate responses to role-specific questions\n\u2022 **Evaluation Criteria**:\n  - Knowledge depth and accuracy\n  - Problem-solving ability\n  - Communication clarity and structure\n\u2022 **Scoring**: 0-30 points for questionnaire performance\n\u2022 **Questions Analyzed**:\n  - Business Development concepts\n  - SWOT analysis understanding\n\u2022 **Output**: JSON with score and detailed key takeaways"
      },
      "typeVersion": 1
    },
    {
      "id": "29578b3f-a8ff-42d9-9b30-61821ad9a807",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -128,
        1088
      ],
      "parameters": {
        "width": 320,
        "height": 280,
        "content": "## \u2699\ufe0f AI MODEL CONFIGURATION\n\n**Azure OpenAI GPT-4 Model**\n\n\u2022 **Model**: GPT-4o-mini for efficient evaluation\n\u2022 **Purpose**: Powers the questionnaire analysis engine\n\u2022 **Capabilities**: \n  - Natural language understanding\n  - Structured JSON output\n  - Business domain knowledge\n\u2022 **Connection**: Azure OpenAI service integration\n\u2022 **Performance**: Optimized for consistent evaluation quality"
      },
      "typeVersion": 1
    },
    {
      "id": "2f0e9fba-d447-4951-ac95-7b71ed965e7a",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        400
      ],
      "parameters": {
        "width": 320,
        "height": 340,
        "content": "## \ud83d\udd27 DATA PROCESSING\n\n**Parse AI Evaluation Results**\n\n\u2022 **Purpose**: Converts AI text output into structured JSON format\n\u2022 **Process**: \n  - Removes markdown code fences (```json)\n  - Parses JSON structure safely\n  - Handles parsing errors gracefully\n\u2022 **Output**: Clean JSON object with questionnaire_score and key_takeaways\n\u2022 **Error Handling**: Returns error details if JSON parsing fails\n\u2022 **Data Quality**: Ensures consistent data structure for downstream processing"
      },
      "typeVersion": 1
    },
    {
      "id": "2ba1d0f1-4531-4b09-8283-df69a1425360",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        656,
        992
      ],
      "parameters": {
        "width": 320,
        "height": 352,
        "content": "## \ud83d\udcca DATA RETRIEVAL\n\n**Lookup Candidate Profile Data**\n\n\u2022 **Purpose**: Retrieves existing candidate information from central database\n\u2022 **Source**: 'Resume store' spreadsheet, Sheet2\n\u2022 **Data Retrieved**: \n  - Current evaluation scores\n  - Candidate profile information\n  - Previous assessment results\n\u2022 **Matching**: Links questionnaire responses to existing candidate records\n\u2022 **Integration**: Enables combining multiple evaluation sources"
      },
      "typeVersion": 1
    },
    {
      "id": "512b6d1c-c678-4d9f-9b12-0243b2b44dc0",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        384
      ],
      "parameters": {
        "width": 320,
        "height": 372,
        "content": "## \ud83e\uddee SCORE CALCULATION\n\n**Calculate Combined Scores**\n\n\u2022 **Purpose**: Combines questionnaire score with existing evaluation score\n\u2022 **Calculations**:\n  - **Final Score**: Existing Score + Questionnaire Score\n  - **Questionnaire Score**: Extracted from AI evaluation (0-30)\n\u2022 **Data Fields Created**:\n  - 'final score': Combined total score\n  - 'Questionarie Score': Individual questionnaire performance\n\u2022 **Scoring Logic**: Additive scoring model for comprehensive evaluation"
      },
      "typeVersion": 1
    },
    {
      "id": "605aa0a9-3b28-4251-b55a-a0d5d6b8e074",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1200,
        1008
      ],
      "parameters": {
        "width": 320,
        "height": 360,
        "content": "## \ud83d\udcbe DATABASE UPDATE\n\n**Update Candidate Database**\n\n\u2022 **Purpose**: Saves questionnaire results and updated scores to candidate database\n\u2022 **Update Method**: Append or update existing records using name matching\n\u2022 **Data Stored**:\n  - Questionnaire Score (0-30 points)\n  - Final Score (combined evaluation)\n  - Maintains all existing candidate data\n\u2022 **Matching Key**: Uses candidate name for record identification\n\u2022 **Database Integrity**: Preserves existing candidate information while adding new scores"
      },
      "typeVersion": 1
    },
    {
      "id": "2bd8f006-8113-4ed2-a56a-1973f6a8ecec",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -976,
        704
      ],
      "parameters": {
        "width": 480,
        "height": 620,
        "content": "## \ud83d\udcdd CANDIDATE QUESTIONNAIRE ANALYSIS WORKFLOW\n\n**\ud83c\udfaf Purpose:** Automatically evaluates candidate questionnaire responses and integrates scores with existing evaluations for comprehensive assessment\n\n**\ud83d\udd04 Automated Process Flow:**\n1. **Real-time Monitoring**: Continuously watches for new questionnaire submissions\n2. **AI Analysis**: Evaluates responses using advanced language models\n3. **Score Processing**: Parses and validates evaluation results\n4. **Data Integration**: Combines questionnaire scores with existing candidate data\n5. **Score Calculation**: Creates comprehensive final scores\n6. **Database Update**: Maintains centralized candidate evaluation records\n\n**\ud83d\udcca Evaluation Framework:**\n\u2022 **Questionnaire Score**: 0-30 points based on:\n  - Knowledge depth and accuracy\n  - Problem-solving approach\n  - Communication clarity\n\u2022 **Final Score**: Combined evaluation (Resume + Questionnaire)\n\n**\ud83c\udfd7\ufe0f System Integration:**\n\u2022 **Google Forms**: Questionnaire collection\n\u2022 **Google Sheets**: Data storage and monitoring\n\u2022 **Azure OpenAI**: Intelligent evaluation engine\n\u2022 **Automated Processing**: Real-time response handling\n\n**\u2728 Key Benefits:**\n\u2022 **Immediate Processing**: No delay between submission and evaluation\n\u2022 **Objective Analysis**: AI-powered consistent evaluation criteria\n\u2022 **Comprehensive Scoring**: Combines multiple assessment sources\n\u2022 **Scalable Solution**: Handles high volume of questionnaire responses\n\u2022 **Quality Insights**: Detailed takeaways for each candidate evaluation"
      },
      "typeVersion": 1
    },
    {
      "id": "5dceeae5-f433-42ae-9a42-8d8491133104",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1616,
        640
      ],
      "parameters": {
        "width": 380,
        "height": 520,
        "content": "## \u2699\ufe0f CONFIGURATION & CUSTOMIZATION\n\n**\ud83d\udd27 Questionnaire Questions (Customizable):**\n\u2022 **Current Questions**:\n  - \"What is Business Development according to you?\"\n  - \"What is SWOT analysis?\"\n\u2022 **Question Types**: Role-specific knowledge assessment\n\u2022 **Scoring Range**: 0-30 points per questionnaire\n\n**\ud83d\udcca Scoring Configuration:**\n\u2022 **Questionnaire Weight**: 30 points maximum\n\u2022 **Combined Scoring**: Additive model (Resume + Questionnaire)\n\u2022 **Evaluation Criteria**:\n  - Knowledge depth (40%)\n  - Problem-solving ability (30%) \n  - Communication clarity (30%)\n\n**\ud83d\udd04 Monitoring Settings:**\n\u2022 **Poll Frequency**: Every minute\n\u2022 **Response Source**: Google Forms \u2192 Google Sheets\n\u2022 **Processing**: Real-time evaluation and scoring\n\n**\ud83d\udcdd Maintenance Tasks:**\n\u2022 Update questions based on role requirements\n\u2022 Review AI evaluation criteria quarterly\n\u2022 Monitor response processing accuracy\n\u2022 Backup questionnaire data regularly"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "17c11c31-64d6-417f-b01d-863e13dd207f",
  "connections": {
    "Azure OpenAI GPT-4 Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Questionnaire Evaluator",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Combined Scores": {
      "main": [
        [
          {
            "node": "Update Candidate Database",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Questionnaire Evaluator": {
      "main": [
        [
          {
            "node": "Parse AI Evaluation Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Evaluation Results": {
      "main": [
        [
          {
            "node": "Lookup Candidate Profile Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Lookup Candidate Profile Data": {
      "main": [
        [
          {
            "node": "Calculate Combined Scores",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Monitor New Questionnaire Responses": {
      "main": [
        [
          {
            "node": "AI Questionnaire Evaluator",
            "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

Automatically score candidate questionnaire responses using Azure OpenAI (GPT-4o-mini), combine them with existing evaluations from Google Sheets, and keep your candidate database up to date—all in near real time. Get consistent, structured scores and key takeaways for faster,…

Source: https://n8n.io/workflows/8526/ — 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

This workflow is designed for marketers, content creators, agencies, and solo founders who want to publish long‑form posts with visuals on autopilot using n8n and AI agents. ​

Tool Http Request, Agent, HTTP Request +27
AI & RAG

Description:

Agent, YouTube, HTTP Request +4
AI & RAG

Automatically qualify and route new leads from a Google Sheet into your CRM with AI-powered scoring and instant sales notifications. Turn raw form submissions into prioritized opportunities—effortless

Google Sheets Trigger, Agent, Lm Chat Azure Open Ai +3
AI & RAG

Description:

Google Sheets Trigger, Google Sheets, Agent +1
AI & RAG

This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.

OpenAI Chat, Memory Buffer Window, Output Parser Structured +11