{
  "id": "EaPJLkAw016gfRk1",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "AI_powered_Automated_Job_Search___Application_Workflow_Using_Free_Adzuna_API",
  "tags": [],
  "nodes": [
    {
      "id": "70caa4ed-feff-499c-9f62-76c63ef44258",
      "name": "3\ufe0f\u20e3Set Job Title",
      "type": "n8n-nodes-base.set",
      "position": [
        2220,
        -600
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "99d327d4-7bed-4b76-9150-75247e4eaf0f",
              "name": "job_title",
              "type": "string",
              "value": "={{ $('Webhook').item.json.body.jobSearchKeyword }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "dc1a078c-8be1-4d90-99c8-0b87e29e0284",
      "name": "4\ufe0f\u20e3Get Jobs from Adzuna",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2440,
        -600
      ],
      "parameters": {
        "url": "=https://api.adzuna.com/v1/api/jobs/us/search/1?app_id=YOUR_ADZUNA_APP_ID&app_key=YOUR_ADZUNA_APP_KEY&results_per_page=20&what={{ $json.job_title }}\n",
        "options": {}
      },
      "typeVersion": 4
    },
    {
      "id": "95f22931-9258-4860-aa06-d5d94e2454bb",
      "name": "OpenRouter Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        3700,
        -440
      ],
      "parameters": {
        "model": "deepseek/deepseek-r1",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "18664c66-67a7-4b7c-881a-cd90f346a523",
      "name": "7\ufe0f\u20e3Extract Skills from Job Description",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        3320,
        -600
      ],
      "parameters": {
        "text": "=Extracts the top skills and qualifications from this job description: \n{{ $('\ud83e\uddea Extract Job Info').item.json.job_description }}",
        "options": {
          "systemMessage": "You're an AI expert that extracts the top skills and qualifications from a job description. Return as JSON array."
        },
        "promptType": "define"
      },
      "executeOnce": true,
      "typeVersion": 2
    },
    {
      "id": "43312e89-42a8-4206-b192-35d7a9cf6ccc",
      "name": "\ud83d\udce4 Split Jobs ",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        2660,
        -600
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "results"
      },
      "typeVersion": 1,
      "alwaysOutputData": false
    },
    {
      "id": "8469870e-775c-4674-beb1-47fb096de7e3",
      "name": "\ud83e\uddea Extract Job Info",
      "type": "n8n-nodes-base.set",
      "position": [
        3100,
        -600
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "fa733dce-d1b9-4d5a-8d62-062259a5c288",
              "name": "job_description",
              "type": "string",
              "value": "={{ $json.description }}"
            },
            {
              "id": "138373bf-97ba-43e1-bd43-6caf42af494d",
              "name": "job_url",
              "type": "string",
              "value": "={{ $json.redirect_url }}"
            },
            {
              "id": "f023780b-9999-4167-88b0-9053a2735065",
              "name": "job_title",
              "type": "string",
              "value": "={{ $json.title }}"
            },
            {
              "id": "ae7ada2d-8fdc-445d-ae84-fcad4a1d9233",
              "name": "company",
              "type": "string",
              "value": "={{ $json.company.display_name }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "8b85d7c5-49e8-4b9e-a89b-bed683d6f023",
      "name": "Filter Duplicates",
      "type": "n8n-nodes-base.code",
      "position": [
        2880,
        -600
      ],
      "parameters": {
        "jsCode": "const seen = new Set();\n\nreturn items.filter(item => {\n  const job = item.json;\n  const key = `${job.title}-${job.company.display_name}-${job.description.substring(0, 100)}`;\n  \n  if (seen.has(key)) return false;\n  seen.add(key);\n  return true;\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "197d6478-9cbb-4dea-a3dc-e7264e48f247",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        1780,
        -600
      ],
      "parameters": {
        "path": "jobmonkeyadzuna",
        "options": {
          "binaryPropertyName": "data"
        },
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "05b840e4-d44c-40d9-b095-8f3d6145ebaf",
      "name": "OpenRouter Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        1860,
        -140
      ],
      "parameters": {
        "model": "deepseek/deepseek-r1",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "277ecd45-73a1-445f-bc51-99f8b49e82f5",
      "name": "\ud83d\udcc8 IF Score \u2265 3",
      "type": "n8n-nodes-base.if",
      "position": [
        2140,
        -360
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "bd5a9af0-b569-4a75-9744-20699a5021d0",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ JSON.parse($json.output).score.toNumber() }}",
              "rightValue": 1
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "484d3a3c-82d2-4a03-b01b-d22d0f87c082",
      "name": "9\ufe0f\u20e3Resume Match Score ",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1780,
        -360
      ],
      "parameters": {
        "text": "=Evaluate how well this resume's {{ $('Extract from File').item.json.text }} matches the job's required skills: {{ $json.output }}. \n\nRate it and ouput a score between 1 and 5\n",
        "options": {
          "systemMessage": "You are an expert AI assistant who evaluates resume-job fit. Focus only on comparing the work experience section of the resume to the job skills. Be strict but fair. Return only JSON. Do not make up data.\n\nYou're an AI assistant that scores how well a resume matches a job description. Return JSON: { \"score\": \"1-5\" }. Output a score between 1 and 5."
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "ddd54c3a-e6c5-4ab5-aaab-bb07492df04a",
      "name": "OpenRouter Chat Model3",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        2840,
        -140
      ],
      "parameters": {
        "model": "deepseek/deepseek-r1:free",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bd16d8d2-d0e0-41ac-b8ec-651e78de5cfb",
      "name": "\ud83d\udd25Write Cover Letter",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2740,
        -360
      ],
      "parameters": {
        "text": "=Write a cover letter based on the Tailored resume:{{ $json.output }} and make it match the Job description from Adzuna: {{ $('\ud83e\uddea Extract Job Info').item.json.job_description }} for a {{ $('\ud83e\uddea Extract Job Info').item.json.job_title }} at {{ $('\ud83e\uddea Extract Job Info').item.json.company }}\nI will be sending your output by email so please generate it as html that will well formatted fo rhuman reading.\n\nKeep it ATS-optimized and human-readable.\n",
        "options": {
          "systemMessage": "=You're an AI that writes a personalized cover letter tailored for a job based on the tailored resume."
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "ac58e6d2-4900-4aae-bbc2-0bb734a1b036",
      "name": "8\ufe0f\u20e3Rewrite Resume",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2360,
        -360
      ],
      "parameters": {
        "text": "=If the {{ $json.output }} is between 3 and 5, rewrite this resume:  {{ $('Extract from File').item.json.text }} to highlight the following skills \n\nLet it be tailored for the role of {{ $('\ud83e\uddea Extract Job Info').item.json.job_title }} at {{ $('\ud83e\uddea Extract Job Info').item.json.company }}. Format the output as structured JSON with fields:\n\n- name\n- contact (email, phone)\n- education (degree, institution)\n- experience (title, company, duration, highlights[])\n- skills[]\n- certifications[]\n- summary\nYou can add other fields if necessary and they exist in the source resume user submitted. But do not make up things that don't exist. You must be factual.\n\nI will be sending your output by email so please generate it as html that will well formatted fo rhuman reading.\n\nKeep it ATS-optimized and human-readable.\n",
        "options": {
          "systemMessage": "=You're an AI that rewrites resumes to highlight specific skills and job fit.\n\n# ATS Resume Optimization Instructions\n\nYou are an expert resume optimizer specializing in beating Applicant Tracking Systems (ATS) while maintaining authenticity and readability for human recruiters.\n\n## Your Task\nRestructure the provided resume to maximize ATS compatibility and keyword matching for the specific job description, while ensuring the content remains truthful and compelling.\n\n## Input Data\n- **Original Resume**: {{ $('Extract from File').item.json.text }}\n- **Target Job Description**: {{ $('\ud83e\uddea Extract Job Info').item.json.job_description }}\n- **Company Name**: {{ $('\ud83e\uddea Extract Job Info').item.json.company }}\n\n## Optimization Requirements\n\n### 1. Format Optimization\n- Use clean, simple formatting with standard fonts\n- Employ standard section headings: \"Professional Summary,\" \"Work Experience,\" \"Education,\" \"Skills,\" \"Certifications\"\n- Remove any complex formatting, tables, or graphics\n- Ensure consistent formatting throughout\n- Use bullet points with standard symbols (\u2022, -, *)\n\n### 2. Keyword Analysis & Integration\n- **Extract Keywords**: Identify all relevant keywords from the job description including:\n  - Technical skills and software\n  - Soft skills and competencies  \n  - Industry terminology and jargon\n  - Required qualifications and certifications\n  - Job titles and role-specific terms\n  - Action verbs used in job requirements\n\n- **Strategic Placement**: Integrate keywords naturally into:\n  - Professional summary (3-4 most critical keywords)\n  - Skills section (comprehensive keyword list)\n  - Work experience descriptions (context-appropriate usage)\n  - Education section (relevant coursework, projects)\n\n- **Keyword Matching Rules**:\n  - Use exact phrasing from job description when possible\n  - Include both full terms and abbreviations (e.g., \"Artificial Intelligence (AI)\")\n  - Maintain natural language flow\n  - Avoid keyword stuffing\n\n### 3. Content Restructuring\n\n#### Professional Summary\n- Create a 3-4 line summary that mirrors the job requirements\n- Lead with the most important keywords for the role\n- Quantify experience where possible\n- Align career trajectory with the position\n\n#### Work Experience\n- Reorder and emphasize experiences most relevant to the target role\n- Rewrite bullet points to incorporate job description keywords\n- Quantify achievements with specific metrics\n- Use action verbs that match the job posting\n- Highlight transferable skills for career changers\n\n#### Skills Section\n- Create a comprehensive skills section with relevant keywords\n- Organize into categories: Technical Skills, Software Proficiency, Languages, Certifications\n- Include both hard and soft skills mentioned in job description\n- Use exact terminology from the posting\n\n#### Education & Certifications\n- Highlight relevant coursework, projects, or academic achievements\n- Include any certifications that match job requirements\n- Add relevant keywords in descriptions\n\n### 4. ATS Compatibility Rules\n- Use standard date formats (MM/YYYY or Month YYYY)\n- Spell out abbreviations at least once\n- Use standard job titles when possible\n- Include city, state format for locations\n- Avoid headers and footers\n- Use clear section breaks\n\n### 5. Quality Assurance\n- Ensure all information remains truthful and accurate\n- Maintain professional tone and readability\n- Verify keyword integration feels natural\n- Check that the resume tells a coherent career story\n- Ensure the final version would appeal to human recruiters\n\n## Output Format\nProvide the optimized resume in clean, ATS-friendly format with:\n\n1. **Optimization Summary**: Brief explanation of key changes made\n2. **Keyword Integration Report**: List of keywords incorporated and their placement\n3. **ATS Compatibility Score**: Your assessment of how well the resume will perform\n4. **Complete Optimized Resume**: Full restructured resume ready for application\n\n## Important Notes\n- Never fabricate experience, skills, or qualifications\n- Focus on reframing existing experience rather than inventing new content\n- Maintain the candidate's authentic voice and career narrative\n- Prioritize the most critical 15-20 keywords rather than trying to include everything\n- Balance ATS optimization with human readability\n\n\nRemember: The goal is to help qualified candidates get past initial ATS screening to reach human recruiters, not to misrepresent their qualifications.\n"
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "397d0eb5-e605-452c-83db-bf09b776d5c7",
      "name": "OpenRouter Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        2460,
        -140
      ],
      "parameters": {
        "model": "deepseek/deepseek-r1",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "efe315eb-d796-4e23-8870-0bfad16f35b1",
      "name": "Upate sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3120,
        -360
      ],
      "parameters": {
        "columns": {
          "value": {
            "status": "draft",
            "job_url": "={{ $('\ud83e\uddea Extract Job Info').item.json.job_url }}",
            "cover_letter": "={{ $json.output }}",
            "tailored_resume": "={{ $('8\ufe0f\u20e3Rewrite Resume').item.json.output }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "job_title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "job_title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "job_description",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "job_description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "job_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "job_url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "resume",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "resume",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "tailored_resume",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "tailored_resume",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cover_letter",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "cover_letter",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "status"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1612746852,
          "cachedResultUrl": "YOUR_GOOGLE_SHEET_URL#gid=1612746852",
          "cachedResultName": "update sheet"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "YOUR_GOOGLE_SHEET_URL",
          "cachedResultName": "Job Search Automation Product Database"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "96617cf6-7968-4ca2-9fd4-9fecd78b1b9a",
      "name": "\ud83d\udce7Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        3340,
        -360
      ],
      "parameters": {
        "sendTo": "={{ $('Webhook').item.json.body.email }}",
        "message": "=<html>\n  <body style=\"font-family: Arial, sans-serif; line-height: 1.6; color: #333;\">\n    <p>Hi,</p>\n    <p>\n      As requested, below are the Cover Letter and Tailored Resume\n      with which you can apply for the \n      <strong>{{ $json.cover_letter }}</strong> position at \n      <strong>{{ $('\ud83e\uddea Extract Job Info').item.json.company }}</strong>.\n    </p>\n\n    <hr style=\"margin: 20px 0;\">\n\n    <p><strong>Your Cover Letter:</strong></p>\n    <div style=\"background: #f9f9f9; padding: 10px; border: 1px solid #ccc;\">\n      {{ $json.cover_letter }}\n    </div>\n\n    <hr style=\"margin: 20px 0;\">\n\n    <p><strong>Your Tailored Resume:</strong></p>\n    <div style=\"background: #f9f9f9; padding: 10px; border: 1px solid #ccc;\">\n      {{ $json.tailored_resume }}\n    </div>\n\n    <hr style=\"margin: 20px 0;\">\n\n    <p><strong>NEXT STEPS:</strong></p>\n    <ul>\n      <li>Review the cover letter and tailored resume to make sure you are satisfied.</li>\n      <li>Then, copy and paste the materials into your email.</li>\n      <li>Get the recruiter's details at the link below and send off your application.</li>\n    </ul>\n\n    <p>\n      \ud83d\udd17 <a href=\"{{ $('\ud83e\uddea Extract Job Info').item.json.job_url }}\" target=\"_blank\" style=\"color: #1a0dab;\">\n        View Job Posting on Adzuna\n      </a>\n    </p>\n\n    <hr style=\"margin-top: 30px;\">\n  </body>\n</html>\n",
        "options": {
          "appendAttribution": false,
          "replyToSenderOnly": true
        },
        "subject": "=Job Application for {{ $('\ud83e\uddea Extract Job Info').item.json.job_title }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "ad39b65c-d383-446f-9b36-404d83a8d640",
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        3540,
        -360
      ],
      "parameters": {
        "options": {
          "responseHeaders": {
            "entries": [
              {
                "name": "Content-Type",
                "value": "text/html"
              }
            ]
          }
        },
        "respondWith": "text",
        "responseBody": "=Hi,\nAs requested, below are the Cover Letter and Tailored Resume with which you can apply for the {{ $('\ud83e\uddea Extract Job Info').item.json.job_title }} position at {{ $('\ud83e\uddea Extract Job Info').item.json.company }}.\n\nYour Cover Letter:\n{{ $('Upate sheets').item.json.cover_letter }}\n\nYour Tailored Resume:\n{{ $('Upate sheets').item.json.tailored_resume }}\n\nNEXT STEPS:\n* Review the cover letter and tailored resume to make sure you are satisfied.\n* Then, copy and paste the materials into your email.\n* Get the recruiter's details at the link below and send off your application.\n\n\ud83d\udd17 View Job Posting on Adzuna: {{ $('\ud83e\uddea Extract Job Info').item.json.job_url }}\n\nThank you\nThe JobMonkey team"
      },
      "typeVersion": 1.4
    },
    {
      "id": "486d3479-52a2-40e9-b4c9-7f3b3fde8915",
      "name": "Extract from File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        2000,
        -600
      ],
      "parameters": {
        "options": {},
        "operation": "pdf",
        "binaryPropertyName": "data0"
      },
      "typeVersion": 1
    },
    {
      "id": "65b7c9b6-c7aa-4547-a221-44e82eaf271d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        840,
        -340
      ],
      "parameters": {
        "color": 5,
        "width": 860,
        "height": 80,
        "content": "## Step 2: Analyze Job, Match Resume to Job and Write a Customized Resume for the New Job=>\n"
      },
      "typeVersion": 1
    },
    {
      "id": "68b96518-9cda-4135-bbd6-c0db2717fa4e",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1100,
        -580
      ],
      "parameters": {
        "color": 5,
        "width": 620,
        "height": 80,
        "content": "## Step 1:Retrieve Job Data from adzuna.com Via API=>\n"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "settings": {
    "timezone": "Africa/Lagos",
    "callerPolicy": "workflowsFromSameOwner",
    "executionOrder": "v1"
  },
  "versionId": "578986f5-de82-41ad-9530-b2755bed8fda",
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udce7Gmail": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upate sheets": {
      "main": [
        [
          {
            "node": "\ud83d\udce7Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udce4 Split Jobs ": {
      "main": [
        [
          {
            "node": "Filter Duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "3\ufe0f\u20e3Set Job Title",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Duplicates": {
      "main": [
        [
          {
            "node": "\ud83e\uddea Extract Job Info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udcc8 IF Score \u2265 3": {
      "main": [
        [],
        [
          {
            "node": "8\ufe0f\u20e3Rewrite Resume",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3\ufe0f\u20e3Set Job Title": {
      "main": [
        [
          {
            "node": "4\ufe0f\u20e3Get Jobs from Adzuna",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8\ufe0f\u20e3Rewrite Resume": {
      "main": [
        [
          {
            "node": "\ud83d\udd25Write Cover Letter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "7\ufe0f\u20e3Extract Skills from Job Description",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "\ud83e\uddea Extract Job Info": {
      "main": [
        [
          {
            "node": "7\ufe0f\u20e3Extract Skills from Job Description",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "9\ufe0f\u20e3Resume Match Score ",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "8\ufe0f\u20e3Rewrite Resume",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model3": {
      "ai_languageModel": [
        [
          {
            "node": "\ud83d\udd25Write Cover Letter",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udd25Write Cover Letter": {
      "main": [
        [
          {
            "node": "Upate sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9\ufe0f\u20e3Resume Match Score ": {
      "main": [
        [
          {
            "node": "\ud83d\udcc8 IF Score \u2265 3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4\ufe0f\u20e3Get Jobs from Adzuna": {
      "main": [
        [
          {
            "node": "\ud83d\udce4 Split Jobs ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7\ufe0f\u20e3Extract Skills from Job Description": {
      "main": [
        [
          {
            "node": "9\ufe0f\u20e3Resume Match Score ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}