AutomationFlowsAI & RAG › Generate Tailored Interview Questions with Gpt-4 Based on Cv, Jd, and Round

Generate Tailored Interview Questions with Gpt-4 Based on Cv, Jd, and Round

ByTrung Tran @trungtran on n8n.io

[](https://youtu.be/-KHze-bRpqQ)

Event trigger★★★★☆ complexityAI-powered26 nodesForm TriggerOutput Parser StructuredOpenAI ChatGoogle SheetsGoogle DriveAgentEmail SendChain Llm
AI & RAG Trigger: Event Nodes: 26 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Chainllm 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": "zbggnEhKUnzCjVEY",
  "meta": {
    "templateId": "5453",
    "templateCredsSetupCompleted": true
  },
  "name": "Smart Interview Assistant: Tailored Questions Based on CV, JD, and Round",
  "tags": [
    {
      "id": "OcQfoQT2ejtrpKfF",
      "name": "HR Workflow",
      "createdAt": "2025-07-30T05:57:04.113Z",
      "updatedAt": "2025-07-30T05:57:04.113Z"
    }
  ],
  "nodes": [
    {
      "id": "951cb8f8-c122-42fb-929a-7008fd545e5c",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        1856
      ],
      "parameters": {
        "width": 748,
        "height": 176,
        "content": "## 1. Hiring manager select candidate profile, applied position and interview round\n- Profile will be candidate resume in PDF format\n- Job role from dropdown list (configurable), need match with list in the positions sheet\n- Interview round (From Initial Screening to Final Interview"
      },
      "typeVersion": 1
    },
    {
      "id": "02b35afe-c7ee-425f-95d7-5e22489d4445",
      "name": "Application form",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -560,
        2112
      ],
      "parameters": {
        "options": {
          "customCss": ":root {\n\t--font-family: 'Open Sans', sans-serif;\n\t--font-weight-normal: 400;\n\t--font-weight-bold: 600;\n\t--font-size-body: 12px;\n\t--font-size-label: 14px;\n\t--font-size-test-notice: 12px;\n\t--font-size-input: 14px;\n\t--font-size-header: 20px;\n\t--font-size-paragraph: 14px;\n\t--font-size-link: 12px;\n\t--font-size-error: 12px;\n\t--font-size-html-h1: 28px;\n\t--font-size-html-h2: 20px;\n\t--font-size-html-h3: 16px;\n\t--font-size-html-h4: 14px;\n\t--font-size-html-h5: 12px;\n\t--font-size-html-h6: 10px;\n\t--font-size-subheader: 14px;\n\n\t/* Colors */\n\t--color-background: #fbfcfe;\n\t--color-test-notice-text: #e6a23d;\n\t--color-test-notice-bg: #fefaf6;\n\t--color-test-notice-border: #f6dcb7;\n\t--color-card-bg: #ffffff;\n\t--color-card-border: #dbdfe7;\n\t--color-card-shadow: rgba(99, 77, 255, 0.06);\n\t--color-link: #7e8186;\n\t--color-header: #525356;\n\t--color-label: #555555;\n\t--color-input-border: #dbdfe7;\n\t--color-input-text: #71747A;\n\t--color-focus-border: rgb(90, 76, 194);\n\t--color-submit-btn-bg: #0000FF; /* Changed to blue */\n\t--color-submit-btn-text: #ffffff;\n\t--color-error: #ea1f30;\n\t--color-required: #ff6d5a;\n\t--color-clear-button-bg: #7e8186;\n\t--color-html-text: #555;\n\t--color-html-link: #ff6d5a;\n\t--color-header-subtext: #7e8186;\n\n\t/* Border Radii */\n\t--border-radius-card: 8px;\n\t--border-radius-input: 6px;\n\t--border-radius-clear-btn: 50%;\n\t--card-border-radius: 8px;\n\n\t/* Spacing */\n\t--padding-container-top: 24px;\n\t--padding-card: 24px;\n\t--padding-test-notice-vertical: 12px;\n\t--padding-test-notice-horizontal: 24px;\n\t--margin-bottom-card: 16px;\n\t--padding-form-input: 12px;\n\t--card-padding: 24px;\n\t--card-margin-bottom: 16px;\n\n\t/* Dimensions */\n\t--container-width: 448px;\n\t--submit-btn-height: 48px;\n\t--checkbox-size: 18px;\n\n\t/* Others */\n\t--box-shadow-card: 0px 4px 16px 0px var(--color-card-shadow);\n\t--opacity-placeholder: 0.5;\n}\n",
          "appendAttribution": false
        },
        "formTitle": "Smart Interview Prep Assistant",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "CV",
              "multipleFiles": false,
              "requiredField": true,
              "acceptFileTypes": ".pdf"
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Job Role",
              "fieldOptions": {
                "values": [
                  {
                    "option": "Talent acquisition Specialist (Intermediate)"
                  },
                  {
                    "option": "Senior Tester/QC (Web Apps, Mobile, API, Database)"
                  },
                  {
                    "option": "Lead Full-stack Developer (.NET, Angular/React.js)"
                  },
                  {
                    "option": "Manual Tester/QC (Senior level)"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Interview Round",
              "fieldOptions": {
                "values": [
                  {
                    "option": "Initial Screening"
                  },
                  {
                    "option": "Technical/Functional Interview"
                  },
                  {
                    "option": "Managerial/Team Fit Interview"
                  },
                  {
                    "option": "Final Interview"
                  }
                ]
              }
            }
          ]
        },
        "formDescription": "Effortlessly generate tailored interview questions based on the candidate\u2019s resume, job description, and interview round. Perfect for recruiters, hiring managers, and interviewers who want to save time while staying sharp and relevant."
      },
      "typeVersion": 2.2
    },
    {
      "id": "fede7d7a-9e6b-4f41-8faa-11bc18385a1e",
      "name": "Extract profile",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -144,
        1776
      ],
      "parameters": {
        "options": {},
        "operation": "pdf",
        "binaryPropertyName": "CV"
      },
      "typeVersion": 1
    },
    {
      "id": "89b76cb0-9ac8-40c5-a305-cee3914be9dc",
      "name": "json parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        304,
        1968
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"full_name\": \"\",\n  \"job_title\": \"\",\n  \"summary\": \"\",\n  \"contact\": {\n    \"email\": \"\",\n    \"phone\": \"\",\n    \"address\": \"\",\n    \"linkedin\": \"\",\n    \"website\": \"\"\n  },\n  \"education\": [\n    {\n      \"degree\": \"\",\n      \"field_of_study\": \"\",\n      \"institution\": \"\",\n      \"location\": \"\",\n      \"start_year\": \"\",\n      \"end_year\": \"\"\n    }\n  ],\n  \"certifications\": [\n    {\n      \"name\": \"\",\n      \"issuer\": \"\",\n      \"date_obtained\": \"\",\n      \"expiration_date\": \"\"\n    }\n  ],\n  \"work_experience\": [\n    {\n      \"company\": \"\",\n      \"position\": \"\",\n      \"location\": \"\",\n      \"start_date\": \"\",\n      \"end_date\": \"\",\n      \"responsibilities\": [\n        \"\"\n      ],\n      \"achievements\": [\n        \"\"\n      ]\n    }\n  ],\n  \"skills\": {\n    \"technical_skills\": [\n      \"\"\n    ],\n    \"soft_skills\": [\n      \"\"\n    ],\n    \"languages\": [\n      {\n        \"language\": \"\",\n        \"proficiency\": \"\"\n      }\n    ],\n    \"tools_and_technologies\": [\n      \"\"\n    ]\n  },\n  \"projects\": [\n    {\n      \"name\": \"\",\n      \"description\": \"\",\n      \"technologies_used\": [\n        \"\"\n      ],\n      \"role\": \"\",\n      \"duration\": \"\"\n    }\n  ],\n  \"awards\": [\n    {\n      \"title\": \"\",\n      \"issuer\": \"\",\n      \"date\": \"\",\n      \"description\": \"\"\n    }\n  ],\n  \"volunteer_experience\": [\n    {\n      \"organization\": \"\",\n      \"role\": \"\",\n      \"description\": \"\",\n      \"start_date\": \"\",\n      \"end_date\": \"\"\n    }\n  ],\n  \"additional_information\": {\n    \"availability\": \"\",\n    \"preferred_location\": \"\",\n    \"salary_expectation\": \"\",\n    \"work_authorization\": \"\",\n    \"other_notes\": \"\"\n  }\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "bdab7446-ab5a-4bde-9f05-5d9eea6c392d",
      "name": "gpt4-1 model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        112,
        1968
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e81e164b-2f0a-44be-ae52-66b1de95a0f2",
      "name": "Get position JD",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -304,
        2256
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $('Application form').item.json['Job Role'] }}",
              "lookupColumn": "Job Role"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/15CZPMbxmz-RVYji1fev_6vYeEwpPa3MjewGEPf6aSoA/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "15CZPMbxmz-RVYji1fev_6vYeEwpPa3MjewGEPf6aSoA",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/15CZPMbxmz-RVYji1fev_6vYeEwpPa3MjewGEPf6aSoA/edit?usp=drivesdk",
          "cachedResultName": "Positions"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6,
      "alwaysOutputData": true
    },
    {
      "id": "8ef88c1b-16d1-4984-87a2-3fe10d98646c",
      "name": "Download file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -80,
        2256
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $json['Job Description'] }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "b9d5fe39-af88-419e-bdf8-4646a324f892",
      "name": "Extract Job Description",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        240,
        2256
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "d9c3fd9b-ca77-4c39-b4fe-1e5f51d0aebf",
      "name": "Profile Analyzer Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        112,
        1776
      ],
      "parameters": {
        "text": "=Please extract all relevant information from this candiadte:\nCV Content:\n===\n{{ $json[\"text\"] }}\n===",
        "options": {
          "systemMessage": ""
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.1
    },
    {
      "id": "d2e82f1b-7d55-4588-8f5b-28f6fef8ed48",
      "name": "gpt-4-1 model 2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1376,
        2272
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ceaca356-c885-44ed-8976-291f29550f7c",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2512,
        928
      ],
      "parameters": {
        "width": 1312,
        "height": 2896,
        "content": "# \ud83e\udd16 Smart Interview Assistant: Tailored Questions Based on CV, JD, and Round\n\n## \ud83d\udccc Who\u2019s it for\nThis workflow is designed for:\n- **Recruiters** and **Talent Acquisition Specialists** who want to automate candidate interview prep.\n- **Hiring Managers** conducting multiple interviews and needing personalized question sets.\n- **Technical Interviewers** who want to save time and be well-prepared with relevant questions.\n\n## \u2699\ufe0f How it works / What it does\nThe Smart Interview Assistant automates the interview preparation process in a few clicks:\n\n1. Accepts:\n   - **Multiple resumes (PDFs)**\n   - **Selected job role**\n   - **Chosen interview round**\n2. Extracts structured data from:\n   - The candidate\u2019s **CV**\n   - The corresponding **Job Description (JD)**\n3. Uses **GPT-4** to analyze:\n   - Candidate profile\n   - Role requirements\n   - Interview round context\n4. Generates:\n   - **Tailored interview questions**\n   - **Expected answers**\n   - **A summarized interview prep report**\n5. Sends the report directly to the **hiring team via email (SMTP)**\n\n## \ud83d\udcc1 Google Drive Structure\n\n```\n\ud83d\udcc2 Root Folder\n\u251c\u2500\u2500 \ud83d\udcc1 jd/                          # Stores all job descriptions in PDF format\n\u2502   \u251c\u2500\u2500 Backend_Engineer.pdf\n\u2502   \u251c\u2500\u2500 Azure_DevOps_Lead.pdf\n\u2502   \u2514\u2500\u2500 ...\n\u2514\u2500\u2500 \ud83d\udcc4 Positions (Google Sheet)    # Maps Job Role \u2194 JD File Link\n```\n\n\ud83d\udcdd **Sample Mapping Sheet**:  \n[Positions Sheet](https://docs.google.com/spreadsheets/d/1pW0muHp1NXwh2GiRvGVwGGRYCkcMR7z8NyS9wvSPYjs/edit?usp=sharing)\n\n**Columns:**\n- `Job Role`\n- `Job Description File URL` (pointing to PDF in `jd/` folder)\n\n## \ud83d\udee0\ufe0f How to Set Up\n\n### Step 1: Configure API Integrations\n- \u2705 Connect your **OpenAI GPT-4 API Key**\n- \u2705 Enable **Google Cloud APIs**:\n  - Google Sheets API (to read job roles)\n  - Google Drive API (to access CV and JD files)\n- \u2705 Set up **SMTP** credentials (for email delivery)\n\n### Step 2: Prepare Google Drive & Mapping Sheet\n\n1. Create a root folder on Google Drive  \n2. Inside the root folder:\n   - Create a folder named `/jd/` and upload all **job descriptions (PDFs)**  \n3. Create a **Google Sheet** named `Positions` with the following format:\n\n```\n| Job Role                     | Job Description File URL                   |\n|-----------------------------|--------------------------------------------|\n| Azure DevOps Engineer        | https://drive.google.com/xxx/jd1.pdf       |\n| Full-Stack Developer (.NET)  | https://drive.google.com/xxx/jd2.pdf       |\n```\n\n### Step 3: Build the Application Form\n\nUse any form tool (e.g., Typeform, Tally, or custom HTML) that collects:\n- \ud83d\udcce Resume file (PDF)\n- \ud83e\uddfe Job Role (dropdown)\n- \ud83d\udd04 Interview Round (dropdown)\n\n### Step 4: Resume & JD Extraction\n\n- \ud83d\udd0d Use `Extract from PDF` to parse the resume content\n- \ud83d\udcc4 Retrieve the JD link from the `Positions` sheet based on the selected Job Role\n- \ud83d\udd17 Use `Download file` to pull the PDF for processing\n\n### Step 5: Analyze with GPT-4\n\n- Run both Resume and JD through a **Profile Analyzer Agent** (GPT-4 with JSON output)\n- Merge results\n- Add manual input or mapping for the **Interview Round metadata**\n\n### Step 6: Generate Interview Report\n\n- Use a second GPT-4 agent (e.g., `HR Expert Agent`) to:\n  - Generate 6\u20138 tailored interview questions\n  - Include expected answers and rationale\n\n### Step 7: Deliver Final Report\n\n- Format the content as:\n  - \ud83d\udcc4 PDF (optional)\n  - \ud83d\udce8 Email body\n- Send the report to the **recruiter, hiring manager, or interviewer** via **SMTP**\n\n## \u2705 Requirements\n\n- \ud83d\udd11 **OpenAI GPT-4 API Key**\n- \ud83d\udcc1 Google Drive (for resume and JD storage)\n- \ud83d\udcca Google Sheet (job role mapping)\n- \ud83d\udcec SMTP credentials (host, username, password)\n- \ud83e\uddf0 n8n self-hosted or cloud instance with:\n  - PDF Parser\n  - Google Sheets node\n  - HTTP Download node\n  - Email node\n\n## \u270f\ufe0f How to Customize the Workflow\n\n| Part                        | Customization Options                                      |\n|----------------------------|-------------------------------------------------------------|\n| **Form UI**                | Modify the design, dropdown options, or input validations   |\n| **Job Description Source** | Replace Google Sheet with Notion, Airtable, or database     |\n| **Interview Metadata**     | Add job level, region, or language preference               |\n| **AI Prompt Tuning**       | Adjust prompt phrasing or temperature in GPT nodes          |\n| **Report Format**          | Generate PDF instead of email body using PDF node           |\n| **Delivery Method**        | Add internal HR portal webhook or generate downloadable link |"
      },
      "typeVersion": 1
    },
    {
      "id": "0c6aa881-8155-444f-9cb2-0a5ba0ea968e",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        2048
      ],
      "parameters": {
        "width": 556,
        "height": 708,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-08-01+at+2.29.54%E2%80%AFPM.png \"Optional title text\")"
      },
      "typeVersion": 1
    },
    {
      "id": "0833bd6f-9ea5-450e-9818-628082b8b762",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -304,
        2464
      ],
      "parameters": {
        "width": 736,
        "height": 128,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-07-29+at+12.54.54%E2%80%AFPM.png \"Optional title text\")"
      },
      "typeVersion": 1
    },
    {
      "id": "7ae138fa-8739-4eee-80c0-91e357e40054",
      "name": "Interview round metadata",
      "type": "n8n-nodes-base.set",
      "position": [
        992,
        2112
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "caac3f3e-06a2-4095-91e3-41910f80b1ea",
              "name": "Initial Screening",
              "type": "string",
              "value": "Purpose: Quickly assess whether the candidate meets the basic qualifications and is a potential fit for the role and company culture.  Conducted by: Recruiter or Talent Acquisition (TA) Specialist.  Focus Areas: \t\u2022\tResume walkthrough and career summary \t\u2022\tMotivation for applying \t\u2022\tSalary expectations and availability \t\u2022\tBasic qualification and communication skills \t\u2022\tClarifying job responsibilities and candidate\u2019s interest  Goal for Agent: Generate light, conversational questions that verify resume claims, screen for red flags, and confirm role alignment."
            },
            {
              "id": "9baaec07-ddaa-4d10-a80f-33a0dd200fcc",
              "name": "Technical/Functional Interview",
              "type": "string",
              "value": "Purpose: Evaluate the candidate\u2019s core technical or functional skills required for the job.  Conducted by: Team members, senior engineers, or functional managers.  Focus Areas: \t\u2022\tRole-specific skills (e.g., coding, data analysis, sales strategy) \t\u2022\tProblem-solving and past project experience \t\u2022\tUnderstanding of tools, frameworks, or domain knowledge \t\u2022\tScenario-based or behavioral questions related to their role  Goal for Agent: Generate targeted, skill-assessing questions with a mix of practical scenarios and behavioral prompts."
            },
            {
              "id": "672e2623-81b8-4e2a-959d-3e1ec9886cf8",
              "name": "Managerial/Team Fit Interview",
              "type": "string",
              "value": "Purpose: Assess collaboration skills, ownership, team dynamics, and alignment with team culture.  Conducted by: Hiring Manager or Team Lead.  Focus Areas: \t\u2022\tCommunication and stakeholder management \t\u2022\tDecision-making and conflict resolution \t\u2022\tPast team experiences and leadership style \t\u2022\tCareer growth and adaptability  Goal for Agent: Generate behavioral and situational questions that test emotional intelligence, leadership, and problem ownership."
            },
            {
              "id": "516ca9b8-de86-41a8-b398-f14e746ed414",
              "name": "Final Interview (Executive/Leadership Round)",
              "type": "string",
              "value": "Purpose: Validate overall fit with company values, long-term potential, and alignment with business goals. May include negotiation.  Conducted by: Director, VP, or C-level executives.  Focus Areas: \t\u2022\tVision alignment and strategic thinking \t\u2022\tLong-term career goals and role alignment \t\u2022\tBusiness acumen and cross-functional collaboration \t\u2022\tSalary/compensation discussion (if applicable)  Goal for Agent: Generate questions around strategic vision, values alignment, and leadership potential."
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9634847d-288d-4c09-824d-b0a391ace376",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        544,
        2112
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "5867643e-e996-43bd-b025-ba4ad6308289",
      "name": "Transform output",
      "type": "n8n-nodes-base.code",
      "position": [
        768,
        2112
      ],
      "parameters": {
        "jsCode": "// Raw merged input (first N items are candidate profiles, last item is JD)\nconst items = $input.all();\n\n// Extract job description (assuming it's the last element)\nconst jdItem = items[items.length - 1];\nconst job_description = jdItem.json.text;\n// Prepare output array\nconst results = [];\n\n// Loop through all items except the last one (JD)\nfor (let i = 0; i < items.length - 1; i++) {\n  const candidate = items[i].json.output;\n  results.push({\n    json: {\n      candidate_profile: candidate,\n      job_description: job_description,\n      applied_position: $('Application form').first().json['Job Role'],\n      interview_round: $('Application form').first().json['Interview Round']\n    }\n  });\n}\n\nreturn results;"
      },
      "typeVersion": 2
    },
    {
      "id": "61e4c089-30a5-4b93-af09-75f2c68d6fb6",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1568,
        2288
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"candidate_summary\": {\n    \"name\": \"string\",\n    \"position_applied\": \"string\",\n    \"years_of_experience\": \"number\",\n    \"key_skills\": [\"string\"],\n    \"highlights\": \"string\"\n  },\n  \"job_description_summary\": {\n    \"role_title\": \"string\",\n    \"team\": \"string\",\n    \"core_requirements\": [\"string\"]\n  },\n  \"interview_round\": {\n    \"round_type\": \"string\",\n    \"round_purpose\": \"string\",\n    \"conducted_by\": \"string\",\n    \"focus_areas\": [\"string\"]\n  },\n  \"interview_questions\": [\n    {\n      \"question\": \"string\",\n      \"expected_answer\": \"string\"\n    }\n  ]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "530851ff-f0c3-47a1-abdd-01d13f1875e4",
      "name": "Build interview prep report",
      "type": "n8n-nodes-base.code",
      "position": [
        1984,
        2112
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const data = $json.output;\n\nconst candidate = data.candidate_summary;\nconst jd = data.job_description_summary;\nconst round = data.interview_round;\nconst questions = data.interview_questions;\n\nlet html = `\n  <html>\n    <head>\n      <style>\n        body { font-family: Arial, sans-serif; line-height: 1.5; padding: 20px; }\n        h1, h2 { color: #2c3e50; }\n        h3 { color: #34495e; }\n        ul { padding-left: 20px; }\n        .section { margin-bottom: 25px; }\n        .question { margin-bottom: 15px; }\n        .q-label { font-weight: bold; color: #2c3e50; }\n        .a-label { font-style: italic; color: #7f8c8d; }\n      </style>\n    </head>\n    <body>\n      <h1>Interview Prep Report</h1>\n\n      <div class=\"section\">\n        <h2>Candidate Summary</h2>\n        <p><strong>Name:</strong> ${candidate.name}</p>\n        <p><strong>Position Applied:</strong> ${candidate.position_applied}</p>\n        <p><strong>Experience:</strong> ${candidate.years_of_experience}</p>\n        <p><strong>Highlights:</strong> ${candidate.highlights}</p>\n        <p><strong>Key Skills:</strong></p>\n        <ul>${candidate.key_skills.map(skill => `<li>${skill}</li>`).join('')}</ul>\n      </div>\n\n      <div class=\"section\">\n        <h2>Job Description Summary</h2>\n        <p><strong>Role:</strong> ${jd.role_title}</p>\n        <p><strong>Team:</strong> ${jd.team}</p>\n        <p><strong>Requirements:</strong></p>\n        <ul>${jd.core_requirements.map(req => `<li>${req}</li>`).join('')}</ul>\n      </div>\n\n      <div class=\"section\">\n        <h2>Interview Round</h2>\n        <p><strong>Round Type:</strong> ${round.round_type}</p>\n        <p><strong>Purpose:</strong> ${round.round_purpose}</p>\n        <p><strong>Conducted By:</strong> ${round.conducted_by}</p>\n        <p><strong>Focus Areas:</strong></p>\n        <ul>${round.focus_areas.map(item => `<li>${item}</li>`).join('')}</ul>\n      </div>\n\n      <div class=\"section\">\n        <h2>Interview Questions</h2>\n        ${questions.map((q, index) => `\n          <div class=\"question\">\n            <p class=\"q-label\">Q${index + 1}: ${q.question}</p>\n            <p class=\"a-label\">Expected Answer: ${q.expected_answer}</p>\n          </div>\n        `).join('')}\n      </div>\n    </body>\n  </html>\n`;\n\nreturn { json: { html }}"
      },
      "typeVersion": 2
    },
    {
      "id": "2e188bfa-db80-4493-9ec3-6853ead3e3c1",
      "name": "Send interview prep report to hiring team",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        2208,
        2112
      ],
      "parameters": {
        "html": "={{ $json.html }}",
        "options": {},
        "subject": "=Interview Preparation Guide for [{{ $('Interview Expert Agent').item.json.output.candidate_summary.name }}] \u2013 [{{ $('Interview Expert Agent').item.json.output.candidate_summary.position_applied }}]",
        "toEmail": "user@example.com",
        "fromEmail": "no-reply@example.com"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "3e49e6fa-0dab-4f73-bd7f-8f6473d0559c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -336,
        2128
      ],
      "parameters": {
        "width": 780,
        "height": 304,
        "content": "## 2.2. Download selected job description\n- Get position name & job description URL from google sheet based on candidate application form\n- Download job description file from Google Drive\n- Extract data from job description PDF file to be used in the next steps"
      },
      "typeVersion": 1
    },
    {
      "id": "aabd3e08-605e-4fe2-b687-78eccefc1103",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -336,
        1648
      ],
      "parameters": {
        "width": 780,
        "height": 432,
        "content": "## 2.1. Candidate profile analyzer\n- Extract candidate information from PDF file\n- Transform candidate information to expected JSON format for later use (send message, add to evaluation sheet)"
      },
      "typeVersion": 1
    },
    {
      "id": "17f5f597-3bf3-4314-82a8-67fc654ac144",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        512,
        1952
      ],
      "parameters": {
        "width": 652,
        "height": 336,
        "content": "## 3. Prepare material for Interview Expert Agent\n- Candidate profile\n- Applied position job description\n- Interview round (description, target...)"
      },
      "typeVersion": 1
    },
    {
      "id": "84d88fdb-f333-45c9-94ae-eb5545b2087c",
      "name": "Interview Expert Agent",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1376,
        2112
      ],
      "parameters": {
        "text": "=Generate interview prep document based on the following:\n- Applied Position: {{ $('Transform output').item.json.applied_position }}\n- Job Description: {{ $('Transform output').item.json.job_description }}\n- Candidate Profile: {{ $('Transform output').item.json.candidate_profile.toJsonString() }}\n- Interview Round: {{ $('Transform output').item.json.interview_round }}\n- Interview Round Description: {{ $json[$('Transform output').item.json.interview_round] }}",
        "messages": {
          "messageValues": [
            {
              "message": "You are an AI Interview Prep Assistant supporting Talent Acquisition (TA) teams. Your job is to generate relevant, role-specific interview questions based on three inputs: the candidate\u2019s profile, the job description (JD), and the selected interview round.  You must first analyze the candidate profile to understand key skills, experiences, and career highlights. Then extract the core requirements and responsibilities from the JD. Based on the specified interview round, adjust the tone, focus, and style of your questions appropriately.  Your output must include: \t\u2022\tA summary of the candidate and applied position, including name, role, years of experience, and notable skills or achievements. \t\u2022\tA summary of the job description, highlighting the core role requirements and expectations. \t\u2022\tThe interview round type, along with its purpose and focus areas. \t\u2022\tA list of 5 to 8 high-quality interview questions, each with a brief explanation of the expected answer or evaluation criteria.  Questions should reflect the intent of the selected round: \t\u2022\tFor screening rounds, keep them light and conversational to verify fit and clarify resume details. \t\u2022\tFor technical or functional rounds, generate questions that evaluate skill depth and practical knowledge. \t\u2022\tFor managerial or leadership rounds, focus on behavior, decision-making, and collaboration. \t\u2022\tFor executive rounds, assess strategic thinking, long-term alignment, and business perspective."
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.5
    },
    {
      "id": "64389790-9976-4905-a09b-416dbc445588",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1216,
        1952
      ],
      "parameters": {
        "width": 652,
        "height": 496,
        "content": "## 4. Interview Expert Agent generate interview prep report\n- Generate interview prep report with candidate summary, interview round note, interview questions.\n- All tailored with input parameters (profile, resume, interview round)"
      },
      "typeVersion": 1
    },
    {
      "id": "f0f1a9f5-92a6-4ac4-8c4c-fc65cbb4d32a",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1904,
        2048
      ],
      "parameters": {
        "width": 572,
        "height": 224,
        "content": "## 5. Parse the output and send email to hiring team"
      },
      "typeVersion": 1
    },
    {
      "id": "ebf2fcc0-19bd-4d7e-aa49-875952463f52",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2512,
        1776
      ],
      "parameters": {
        "width": 736,
        "height": 768,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/interview-prep-2.png \"Optional title text\")\n![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/interview-prep-3.png \"Optional title text\")"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "eb364707-bf93-475b-abd4-5105515732a1",
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Transform output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "json parser": {
      "ai_outputParser": [
        [
          {
            "node": "Profile Analyzer Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "gpt4-1 model": {
      "ai_languageModel": [
        [
          {
            "node": "Profile Analyzer Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Download file": {
      "main": [
        [
          {
            "node": "Extract Job Description",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract profile": {
      "main": [
        [
          {
            "node": "Profile Analyzer Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get position JD": {
      "main": [
        [
          {
            "node": "Download file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "gpt-4-1 model 2": {
      "ai_languageModel": [
        [
          {
            "node": "Interview Expert Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Application form": {
      "main": [
        [
          {
            "node": "Get position JD",
            "type": "main",
            "index": 0
          },
          {
            "node": "Extract profile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transform output": {
      "main": [
        [
          {
            "node": "Interview round metadata",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Interview Expert Agent": {
      "main": [
        [
          {
            "node": "Build interview prep report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Profile Analyzer Agent": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Job Description": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Interview round metadata": {
      "main": [
        [
          {
            "node": "Interview Expert Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Interview Expert Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Build interview prep report": {
      "main": [
        [
          {
            "node": "Send interview prep report to hiring 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.

Pro

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

About this workflow

[](https://youtu.be/-KHze-bRpqQ)

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

🎯 Create viral TikToks, Shorts, Reels, podcasts, and ASMR videos in minutes — all on autopilot.

OpenAI, HTTP Request, Form Trigger +7
AI & RAG

This end-to-end AI-powered recruitment automation workflow helps HR and talent acquisition teams automate the complete hiring pipeline—from resume intake and parsing to GPT-4-based evaluation, TA appr

Form Trigger, Output Parser Structured, Google Drive +10
AI & RAG

The workflow runs every hour with a randomized delay of 5–20 minutes to help distribute load. It records the exact date and time a lead is emailed so you can track outreach. Follow-ups are automatical

Google Sheets, Agent, OpenAI Chat +5
AI & RAG

This workflow is perfect for graphic designers, creative agencies, marketing teams, or freelancers who regularly use AI-generated images in their projects. It's specifically beneficial for teams that

Google Sheets, Google Drive, HTTP Request +5
AI & RAG

HR Job Posting and Evaluation with AI. Uses formTrigger, airtable, googleDrive, stickyNote. Event-driven trigger; 36 nodes.

Form Trigger, Airtable, Google Drive +8