{
  "id": "6XBhCFDQmGPUza04",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Skill Gap Analyzer",
  "tags": [],
  "nodes": [
    {
      "id": "0ccc0872-000a-47f8-848b-5b5b1d472728",
      "name": "Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3168,
        -176
      ],
      "parameters": {
        "color": 4,
        "width": 540,
        "height": 1156,
        "content": "## Skill Gap Analyzer \u2014 Student Profile vs Job Market \u2014 BrowserAct + LinkedIn + GPT-4o-mini + Google Sheets + Gmail\n\nFor students, freshers, and career changers who want to know exactly which skills they are missing for their target job role \u2014 compared against real live LinkedIn job postings. A student submits a form with their name, email, current skills, target role, experience level, and preferred location. A Code node validates inputs and builds the LinkedIn search URL. BrowserAct opens LinkedIn with a real stealth browser and extracts required skills from the top job postings \u2014 bypassing the blocks that standard HTTP requests hit. A Code node cleans the raw scraped output. GPT-4o-mini analyzes the student's skills against market demand and returns: all market skills with frequency counts, skills the student already has, missing skills by priority, a gap score, top 3 free courses with URLs, and a 3-month learning plan. A Code node parses each labeled section. Google Sheets and Gmail run in parallel \u2014 Sheets appends the full report and Gmail sends the formatted HTML plan to the student.\n\n## How it works\n- **1. Form \u2014 Student Profile** collects name, email, target role, current skills (comma-separated), experience level, and preferred location\n- **2. Code \u2014 Prepare and Build LinkedIn URL** validates required fields and builds the LinkedIn job search URL with encoded role and location\n- **3. BrowserAct \u2014 Scrape LinkedIn Jobs** uses a real stealth browser to open LinkedIn and extract required skills from the top job postings\n- **4. Code \u2014 Extract Job Data** normalises the BrowserAct response across possible field names, cleans whitespace, trims to 5000 characters, and passes all student data through\n- **5. AI Agent \u2014 Skill Gap Analysis** uses GPT-4o-mini to produce: market skills with post frequencies, skills the student already has, missing skills sorted by priority, gap score, top 3 free courses, and a 3-month plan\n- **OpenAI \u2014 GPT-4o-mini Model** language model attached to the AI Agent\n- **6. Code \u2014 Parse Analysis** extracts each labeled section from the AI output and passes all student metadata through\n- **7. Google Sheets \u2014 Save Gap Report** and **8. Gmail \u2014 Send 90-Day Plan** run in parallel from node 6 output\n\n## Set up steps\n1. Install the BrowserAct community node: Settings \u2192 Community Nodes \u2192 Install `n8n-nodes-browseract`\n2. Sign up at browseract.com \u2014 join their Discord for free credits. Create a BrowserAct workflow that opens a LinkedIn URL and extracts job titles and required skills. Replace `YOUR_BROWSERACT_WORKFLOW_ID` in node 3 and connect your BrowserAct API credential\n3. In **OpenAI \u2014 GPT-4o-mini Model** \u2014 connect your OpenAI API credential\n4. In **7. Google Sheets \u2014 Save Gap Report** \u2014 connect Google Sheets OAuth2 credential and replace `YOUR_GOOGLE_SHEET_ID`. Create a tab named Skill Gap Reports with columns: Name, Email, Target Role, Experience, Student Skills, Skills You Have, Skills Missing, Gap Score, Top Courses, 90 Day Plan, LinkedIn URL, Date\n5. In **8. Gmail \u2014 Send 90-Day Plan** \u2014 connect Gmail OAuth2 credential"
      },
      "typeVersion": 1
    },
    {
      "id": "f500e63e-152f-43ab-85c1-52ceab23b643",
      "name": "Section \u2014 Student Profile Form and URL Preparation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2528,
        32
      ],
      "parameters": {
        "color": 5,
        "width": 484,
        "height": 468,
        "content": "## Student Profile Form and URL Preparation\nForm collects name, email, target role, current skills, experience level, and location. Code validates inputs and builds the LinkedIn job search URL."
      },
      "typeVersion": 1
    },
    {
      "id": "18187adf-0b17-417c-9369-617bdca4cb54",
      "name": "Section \u2014 LinkedIn Scrape and Job Data Extraction",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2000,
        48
      ],
      "parameters": {
        "color": 6,
        "width": 532,
        "height": 436,
        "content": "## LinkedIn Scrape and Job Data Extraction\nBrowserAct opens LinkedIn with a real stealth browser and extracts required skills from top job postings. Code normalises the response and trims to 5000 characters."
      },
      "typeVersion": 1
    },
    {
      "id": "d03e328a-a57e-4204-8c2d-a6535decf844",
      "name": "Section \u2014 GPT-4o-mini Gap Analysis and Section Parse",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1392,
        -48
      ],
      "parameters": {
        "color": 6,
        "width": 452,
        "height": 644,
        "content": "## GPT-4o-mini Gap Analysis and Section Parse\nGPT-4o-mini compares student skills vs market demand from job postings \u2014 produces market skills with frequencies, skills have and missing, gap score, top 3 free courses, and a 3-month learning plan. Code parses each labeled section."
      },
      "typeVersion": 1
    },
    {
      "id": "2364f01e-f7e5-4792-9969-22f03df33301",
      "name": "Section \u2014 Sheets Save and Gmail Send (Parallel)",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -832,
        -144
      ],
      "parameters": {
        "color": 4,
        "width": 292,
        "height": 804,
        "content": "## Sheets Save and Gmail Send (Parallel)\nNode 6 output branches to both nodes simultaneously. Sheets appends the full report. Gmail sends the formatted HTML gap analysis and 3-month plan to the student."
      },
      "typeVersion": 1
    },
    {
      "id": "dd8dfd15-43bf-4338-a3aa-37c7d57ada6a",
      "name": "1. Form \u2014 Student Profile",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -2432,
        208
      ],
      "parameters": {
        "options": {},
        "formTitle": "Skill Gap Analyzer",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Your Name",
              "placeholder": "e.g. Rahul Sharma",
              "requiredField": true
            },
            {
              "fieldLabel": "Your Email",
              "placeholder": "rahul@email.com",
              "requiredField": true
            },
            {
              "fieldLabel": "Target Job Role",
              "placeholder": "e.g. Data Analyst, Frontend Developer, Product Manager",
              "requiredField": true
            },
            {
              "fieldLabel": "Your Current Skills",
              "placeholder": "Comma separated \u2014 e.g. Python, Excel, SQL, HTML",
              "requiredField": true
            },
            {
              "fieldLabel": "Experience Level",
              "placeholder": "e.g. Fresher / 0-1 year / 1-3 years",
              "requiredField": true
            },
            {
              "fieldLabel": "Preferred Location",
              "placeholder": "e.g. India, Remote, United States",
              "requiredField": true
            }
          ]
        },
        "formDescription": "Enter your skills and target job. AI will analyze the job market and send you a personalized 90-day learning plan."
      },
      "typeVersion": 2.2
    },
    {
      "id": "5041a4e0-3a5c-4b36-a699-e760f4a0c0e4",
      "name": "2. Code \u2014 Prepare and Build LinkedIn URL",
      "type": "n8n-nodes-base.code",
      "position": [
        -2192,
        208
      ],
      "parameters": {
        "jsCode": "const row = $json;\n\nconst studentName     = (row['Your Name'] || '').trim();\nconst email           = (row['Your Email'] || '').trim();\nconst targetRole      = (row['Target Job Role'] || '').trim();\nconst currentSkills   = (row['Your Current Skills'] || '').trim();\nconst experienceLevel = (row['Experience Level'] || 'Fresher').trim();\nconst location        = (row['Preferred Location'] || 'India').trim();\n\nif (!studentName || !email || !targetRole || !currentSkills) {\n  throw new Error('Name, Email, Target Role, and Current Skills are required.');\n}\n\nconst encodedRole     = encodeURIComponent(targetRole);\nconst encodedLocation = encodeURIComponent(location);\nconst linkedinUrl = `https://www.linkedin.com/jobs/search/?keywords=${encodedRole}&location=${encodedLocation}&sortBy=R`;\n\nreturn [{\n  json: {\n    studentName,\n    email,\n    targetRole,\n    currentSkills,\n    experienceLevel,\n    location,\n    linkedinUrl\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "77aea540-d38e-4bed-87e0-a689a05f8957",
      "name": "3. BrowserAct \u2014 Scrape LinkedIn Jobs",
      "type": "n8n-nodes-browseract.BrowserAct",
      "position": [
        -1936,
        208
      ],
      "parameters": {
        "workflowId": "YOUR_BROWSERACT_WORKFLOW_ID",
        "workflowParams": "={{ JSON.stringify({ url: $json.linkedinUrl, targetRole: $json.targetRole }) }}"
      },
      "credentials": {},
      "typeVersion": 1
    },
    {
      "id": "00289020-ea18-4e94-8982-573a9abe10c5",
      "name": "4. Code \u2014 Extract Job Data",
      "type": "n8n-nodes-base.code",
      "position": [
        -1648,
        208
      ],
      "parameters": {
        "jsCode": "const output = $json;\nconst studentData = $('2. Code \u2014 Prepare and Build LinkedIn URL').item.json;\n\nlet jobData = '';\nif (typeof output.result === 'string')       jobData = output.result;\nelse if (typeof output.output === 'string')  jobData = output.output;\nelse if (typeof output.content === 'string') jobData = output.content;\nelse if (output.data?.text)                  jobData = output.data.text;\nelse                                         jobData = JSON.stringify(output);\n\njobData = jobData.replace(/\\n{3,}/g, '\\n\\n').trim();\nif (jobData.length > 5000) jobData = jobData.substring(0, 5000) + '\\n[Trimmed]';\n\nif (!jobData || jobData.length < 50) {\n  throw new Error('BrowserAct returned empty data. Check your BrowserAct workflow extracts job text from LinkedIn.');\n}\n\nreturn [{\n  json: {\n    jobData,\n    studentName:    studentData.studentName,\n    email:          studentData.email,\n    targetRole:     studentData.targetRole,\n    currentSkills:  studentData.currentSkills,\n    experienceLevel:studentData.experienceLevel,\n    location:       studentData.location,\n    linkedinUrl:    studentData.linkedinUrl\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "e1190a05-70f5-4666-b372-d7d634807c23",
      "name": "5. AI Agent \u2014 Skill Gap Analysis",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -1344,
        208
      ],
      "parameters": {
        "text": "=LinkedIn Job Postings for {{ $json.targetRole }}:\n{{ $json.jobData }}",
        "options": {
          "systemMessage": "=You are a career coach. Analyze job postings and the student's skills to generate a skill gap report.\n\nStudent: {{ $json.studentName }}\nTarget Role: {{ $json.targetRole }}\nExperience: {{ $json.experienceLevel }}\nLocation: {{ $json.location }}\nCurrent Skills: {{ $json.currentSkills }}\n\nReturn in this EXACT format:\n\nMARKET_SKILLS:\n- [skill] \u2014 [X]/20 jobs\n- [skill] \u2014 [X]/20 jobs\n[list all skills found sorted by frequency]\n\nSKILLS_YOU_HAVE:\n- [skill] \u2014 [why valuable for this role]\n[only skills the student already has]\n\nSKILLS_MISSING:\n- [skill] \u2014 Priority: High/Medium/Low \u2014 [why needed]\n[skills market wants but student lacks, sorted by priority]\n\nGAP_SCORE:\n[X out of Y required skills \u2014 Z percent ready]\n\nTOP_3_COURSES:\n1. [Course Name] \u2014 [Platform] \u2014 [Free URL] \u2014 fills: [skill]\n2. [Course Name] \u2014 [Platform] \u2014 [Free URL] \u2014 fills: [skill]\n3. [Course Name] \u2014 [Platform] \u2014 [Free URL] \u2014 fills: [skill]\n\nNINETY_DAY_PLAN:\nMonth 1: [Focus area + specific skill to learn + resource]\nMonth 2: [Focus area + skill + resource]\nMonth 3: [Focus area + portfolio/apply + resource]\n\nBe specific. Only use what is found in the job postings."
        },
        "promptType": "define"
      },
      "typeVersion": 1.9
    },
    {
      "id": "9be7c0be-3950-404a-838e-9b32b1899bfe",
      "name": "OpenAI \u2014 GPT-4o-mini Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -1344,
        384
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "typeVersion": 1.3
    },
    {
      "id": "8b48e500-ce28-46b2-bf3d-92425a42ef29",
      "name": "6. Code \u2014 Parse Analysis",
      "type": "n8n-nodes-base.code",
      "position": [
        -1072,
        208
      ],
      "parameters": {
        "jsCode": "const output = $input.first().json.output || '';\n\nconst extract = (label, next) => {\n  const p = next\n    ? new RegExp(label + ':\\\\s*([\\\\s\\\\S]*?)(?=\\\\n' + next + ':|$)')\n    : new RegExp(label + ':\\\\s*([\\\\s\\\\S]*)$');\n  const m = output.match(p);\n  return m ? m[1].trim() : '';\n};\n\nconst marketSkills  = extract('MARKET_SKILLS', 'SKILLS_YOU_HAVE');\nconst skillsHave    = extract('SKILLS_YOU_HAVE', 'SKILLS_MISSING');\nconst skillsMissing = extract('SKILLS_MISSING', 'GAP_SCORE');\nconst gapScore      = extract('GAP_SCORE', 'TOP_3_COURSES');\nconst top3Courses   = extract('TOP_3_COURSES', 'NINETY_DAY_PLAN');\nconst plan90Day     = extract('NINETY_DAY_PLAN', null);\n\nif (!skillsMissing) {\n  throw new Error('GPT did not return valid analysis. Preview: ' + output.substring(0, 200));\n}\n\nconst d = $('4. Code \u2014 Extract Job Data').item.json;\n\nreturn [{\n  json: {\n    marketSkills, skillsHave, skillsMissing,\n    gapScore, top3Courses, plan90Day,\n    studentName: d.studentName, email: d.email,\n    targetRole: d.targetRole, currentSkills: d.currentSkills,\n    experienceLevel: d.experienceLevel, location: d.location,\n    linkedinUrl: d.linkedinUrl\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "c554d29c-64be-4afc-8d58-69a88a989f72",
      "name": "7. Google Sheets \u2014 Save Gap Report",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -736,
        96
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $now.toFormat('dd MMM yyyy HH:mm') }}",
            "Name": "={{ $json.studentName }}",
            "Email": "={{ $json.email }}",
            "Gap Score": "={{ $json.gapScore }}",
            "Experience": "={{ $json.experienceLevel }}",
            "90 Day Plan": "={{ $json.plan90Day }}",
            "Target Role": "={{ $json.targetRole }}",
            "Top Courses": "={{ $json.top3Courses }}",
            "LinkedIn URL": "={{ $json.linkedinUrl }}",
            "Skills Missing": "={{ $json.skillsMissing }}",
            "Student Skills": "={{ $json.currentSkills }}",
            "Skills You Have": "={{ $json.skillsHave }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Target Role",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Target Role",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Experience",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Experience",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Student Skills",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Student Skills",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Skills You Have",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Skills You Have",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Skills Missing",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Skills Missing",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Gap Score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Gap Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Top Courses",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Top Courses",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "90 Day Plan",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "90 Day Plan",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "LinkedIn URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "LinkedIn URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Skill Gap Reports"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_GOOGLE_SHEET_ID"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "285632b6-6579-4e46-9c2f-417d15f10676",
      "name": "8. Gmail \u2014 Send 90-Day Plan",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -736,
        320
      ],
      "parameters": {
        "sendTo": "={{ $json.email }}",
        "message": "=<div style=\"font-family:Arial,sans-serif;max-width:660px;margin:0 auto;background:#f5f5f5;\">\n\n  <div style=\"background:#1a1a2e;padding:24px 28px;border-radius:8px 8px 0 0;\">\n    <h1 style=\"color:#fff;font-size:22px;margin:0;\">Skill Gap Report</h1>\n    <p style=\"color:#aaa;font-size:13px;margin:6px 0 0;\">{{ $json.targetRole }} \u2014 {{ $json.location }} \u2014 {{ $json.experienceLevel }}</p>\n  </div>\n\n  <div style=\"background:#4a90e2;padding:8px 28px;\">\n    <p style=\"color:#fff;font-size:13px;margin:0;\">{{ $json.studentName }} &nbsp;\u2022&nbsp; {{ $json.gapScore }}</p>\n  </div>\n\n  <div style=\"background:#fff;padding:24px 28px;\">\n\n    <div style=\"background:#e8f5e9;border-left:4px solid #43a047;padding:14px;border-radius:0 6px 6px 0;margin-bottom:20px;\">\n      <h2 style=\"margin:0 0 8px;font-size:15px;color:#1a1a2e;\">Skills You Already Have</h2>\n      <pre style=\"font-size:13px;color:#2e7d32;line-height:1.8;white-space:pre-wrap;margin:0;\">{{ $json.skillsHave }}</pre>\n    </div>\n\n    <div style=\"background:#fff5f5;border-left:4px solid #e53935;padding:14px;border-radius:0 6px 6px 0;margin-bottom:20px;\">\n      <h2 style=\"margin:0 0 8px;font-size:15px;color:#1a1a2e;\">Skills You Need to Learn</h2>\n      <pre style=\"font-size:13px;color:#c62828;line-height:1.8;white-space:pre-wrap;margin:0;\">{{ $json.skillsMissing }}</pre>\n    </div>\n\n    <div style=\"background:#fff8e1;border-left:4px solid #ffa000;padding:14px;border-radius:0 6px 6px 0;margin-bottom:20px;\">\n      <h2 style=\"margin:0 0 8px;font-size:15px;color:#1a1a2e;\">Top 3 Free Courses</h2>\n      <pre style=\"font-size:13px;color:#444;line-height:1.8;white-space:pre-wrap;margin:0;\">{{ $json.top3Courses }}</pre>\n    </div>\n\n    <div style=\"background:#f0f4ff;border-left:4px solid #4a90e2;padding:14px;border-radius:0 6px 6px 0;margin-bottom:20px;\">\n      <h2 style=\"margin:0 0 8px;font-size:15px;color:#1a1a2e;\">Your 90-Day Learning Plan</h2>\n      <pre style=\"font-size:13px;color:#333;line-height:1.8;white-space:pre-wrap;margin:0;\">{{ $json.plan90Day }}</pre>\n    </div>\n\n    <div style=\"background:#f9f9f9;padding:14px;border-radius:6px;\">\n      <h2 style=\"margin:0 0 8px;font-size:15px;color:#1a1a2e;\">Market Skills from Job Postings</h2>\n      <pre style=\"font-size:12px;color:#555;line-height:1.7;white-space:pre-wrap;margin:0;\">{{ $json.marketSkills }}</pre>\n    </div>\n\n  </div>\n\n  <div style=\"background:#1a1a2e;padding:12px 28px;text-align:center;border-radius:0 0 8px 8px;\">\n    <p style=\"color:#888;font-size:11px;margin:0;\">Powered by n8n + BrowserAct + GPT-4o-mini</p>\n  </div>\n\n</div>",
        "options": {
          "senderName": "Skill Gap Analyzer"
        },
        "subject": "=Your Skill Gap Report \u2014 {{ $json.targetRole }} | {{ $json.gapScore }}"
      },
      "typeVersion": 2.1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "f9229724-7be7-452c-b176-7e56ab6dce47",
  "connections": {
    "6. Code \u2014 Parse Analysis": {
      "main": [
        [
          {
            "node": "7. Google Sheets \u2014 Save Gap Report",
            "type": "main",
            "index": 0
          },
          {
            "node": "8. Gmail \u2014 Send 90-Day Plan",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1. Form \u2014 Student Profile": {
      "main": [
        [
          {
            "node": "2. Code \u2014 Prepare and Build LinkedIn URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4. Code \u2014 Extract Job Data": {
      "main": [
        [
          {
            "node": "5. AI Agent \u2014 Skill Gap Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI \u2014 GPT-4o-mini Model": {
      "ai_languageModel": [
        [
          {
            "node": "5. AI Agent \u2014 Skill Gap Analysis",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "5. AI Agent \u2014 Skill Gap Analysis": {
      "main": [
        [
          {
            "node": "6. Code \u2014 Parse Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3. BrowserAct \u2014 Scrape LinkedIn Jobs": {
      "main": [
        [
          {
            "node": "4. Code \u2014 Extract Job Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2. Code \u2014 Prepare and Build LinkedIn URL": {
      "main": [
        [
          {
            "node": "3. BrowserAct \u2014 Scrape LinkedIn Jobs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}