{
  "name": "AI Job Application and Resume Tailoring System",
  "nodes": [
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -20,
        0
      ],
      "id": "56c51b7d-f954-4343-af3e-3512a5234967",
      "name": "When clicking ‘Execute workflow’"
    },
    {
      "parameters": {
        "operation": "get",
        "documentURL": "YOUR_GOOGLE_FILE_ID"
      },
      "type": "n8n-nodes-base.googleDocs",
      "typeVersion": 2,
      "position": [
        200,
        0
      ],
      "id": "0befc48e-f1bc-42dd-a25d-d26f36d62b7c",
      "name": "Google Docs"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.apify.com/v2/acts/hKByXkMQaC5Qt9UMN/run-sync-get-dataset-items",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/json"
            },
            {
              "name": "Authorization",
              "value": "Bearer YOUR_APIFY_API_TOKEN"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "{\n    \"count\": 100,\n    \"scrapeCompany\": true,\n    \"urls\": [\n        \"https://www.linkedin.com/jobs/search/?distance=25&f_TPR=r604800&f_WT=2&geoId=103644278&keywords=ai%20automation&origin=JOB_SEARCH_PAGE_JOB_FILTER&refresh=true&spellCorrectionEnabled=true\"\n    ]\n}",
        "options": {
          "redirect": {
            "redirect": {}
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        420,
        0
      ],
      "id": "9f48b609-ca67-42fb-a67d-1ca52f4d9f43",
      "name": "HTTP Request"
    },
    {
      "parameters": {
        "maxItems": 8
      },
      "type": "n8n-nodes-base.limit",
      "typeVersion": 1,
      "position": [
        640,
        0
      ],
      "id": "358894eb-c929-4ec1-a3bf-1e5c030d4ab8",
      "name": "Limit"
    },
    {
      "parameters": {
        "mode": "markdownToHtml",
        "markdown": "={{ $json.message.content }}",
        "options": {}
      },
      "type": "n8n-nodes-base.markdown",
      "typeVersion": 1,
      "position": [
        360,
        220
      ],
      "id": "be9cc3c7-4a2c-474b-889b-356a2377e84a",
      "name": "Markdown"
    },
    {
      "parameters": {
        "method": "PATCH",
        "url": "=https://www.googleapis.com/upload/drive/v3/files/{{ $('Create New Resume').item.json.id }}?uploadType=media",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "googleDocsOAuth2Api",
        "sendHeaders": true,
        "specifyHeaders": "json",
        "jsonHeaders": "{\n  \"Content-Type\":\"text/html\"\n}",
        "sendBody": true,
        "contentType": "raw",
        "rawContentType": "text/html",
        "body": "={{ $('Markdown').item.json.data }}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1020,
        220
      ],
      "id": "37d393ef-7254-4912-9b0f-5ee55b1099c5",
      "name": "Add HTML to Resume"
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "gpt-4.1-mini",
          "mode": "list",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "messages": {
          "values": [
            {
              "content": "You're a helpful, intelligent job filtering assistant.",
              "role": "system"
            },
            {
              "content": "=I'm looking for jobs. Your task is to filter them based on a list of attributes and skills that I have. Some jobs may not be relevant, which is why I want you to go through each of them and then let me know whether or not I'm an OK fit.\n\nBelow is a block of context about me and my skills:\n\n\t•\t[Your current role or title]\n\t•\t[Years of experience and core skills]\n\t•\t[Tools and platforms you know well]\n\t•\t[Two or three standout achievements]\n\t•\t[Industries you have worked in]\n\t•\t[Location, time zone and remote preference]\n\t•\t[Languages spoken]\n\t•\t[The kind of work you want, and what you want to avoid]\n\n--\n\nHere is the job description:\n\n{{ $json.toJsonString() }}\n\n--\n\nRespond in this JSON format:\n\n{\"verdict\":\"true or false\"}\n\nIf I'm a fit, return true. If I'm not a fit, return false (both strings)."
            }
          ]
        },
        "jsonOutput": true,
        "options": {
          "temperature": 0.7
        }
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        860,
        0
      ],
      "id": "00b61bc2-7615-4a64-8b49-833bf398798c",
      "name": "Filter Job"
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "gpt-4.1",
          "mode": "list",
          "cachedResultName": "GPT-4.1"
        },
        "messages": {
          "values": [
            {
              "content": "You're a helpful, intelligent resume customization assistant.",
              "role": "system"
            },
            {
              "content": "=I'm looking for jobs. Your task is to customize a provided resume using provided job description.\n\nBelow is a block of context about me and my skills:\n\n\t•\t[Your current role or title]\n\t•\t[Years of experience and core skills]\n\t•\t[Tools and platforms you know well]\n\t•\t[Two or three standout achievements]\n\t•\t[Industries you have worked in]\n\t•\t[Location, time zone and remote preference]\n\t•\t[Languages spoken]\n\t•\t[The kind of work you want, and what you want to avoid]\n\n--\n\nHere is the job description:\n\n{{ $('Limit').item.json.toJsonString() }}\n\n--\n\nHere is my resume:\n\n{{ $('Google Docs').item.json.content }}\n\nRespond with only the customized, updated resume—nothing else.\n\nWrite it in Markdown (atx) format. Do not output any backticks (no ```)."
            }
          ]
        },
        "options": {
          "temperature": 0.7
        }
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        -20,
        220
      ],
      "id": "78fa665f-69e2-49f0-b807-671d62370617",
      "name": "Rewrite Resume"
    },
    {
      "parameters": {
        "folderId": "default",
        "title": "[Your Name] Resume"
      },
      "type": "n8n-nodes-base.googleDocs",
      "typeVersion": 2,
      "position": [
        580,
        220
      ],
      "id": "cac24f57-2cf5-426d-9d98-cbf407ea1c2d",
      "name": "Create New Resume"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "fd1af23b-9be7-4cd9-9302-cfa90117cb97",
              "leftValue": "={{ $json.message.content.verdict }}",
              "rightValue": "true",
              "operator": {
                "type": "string",
                "operation": "equals",
                "name": "filter.operator.equals"
              }
            },
            {
              "id": "8423d995-f4cd-41c3-ad4e-eb0d39007198",
              "leftValue": "={{ $('Limit').item.json.companyWebsite }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        1236,
        0
      ],
      "id": "3eff2f42-d550-4ee1-a1bf-b6bb6141cde0",
      "name": "Filter True & Website"
    },
    {
      "parameters": {
        "maxItems": 3
      },
      "type": "n8n-nodes-base.limit",
      "typeVersion": 1,
      "position": [
        1456,
        0
      ],
      "id": "ec8c99c3-a5cf-4f36-a144-b76c779aa734",
      "name": "Limit 2"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.anymailfinder.com/v5.0/search/decision-maker.json",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_ANYMAILFINDER_API_KEY"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "domain",
              "value": "={{ $('Limit').item.json.companyWebsite }}"
            },
            {
              "name": "decision_maker_category",
              "value": "ceo"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1240,
        220
      ],
      "id": "ba541812-c37a-4397-8f36-766db8c5041e",
      "name": "Get Email",
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "0a2ab84a-23ed-4e44-903d-595c929b8967",
              "leftValue": "={{ $json.result.email }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        1460,
        220
      ],
      "id": "3459f336-8a4d-4da7-9ecd-43d8e2ad23fd",
      "name": "Email Exists"
    },
    {
      "parameters": {
        "resource": "draft",
        "subject": "=Re: {{ $('Limit').item.json.title }}",
        "message": "=Hey {{ $json.result.personFullName.split(\" \").first() }},\n\nI know you're hiring right now—just wanted to tell you I'm the right fit for the job. To be upfront: I actually used AI to scrape this job, customize my resume, and then automatically get your contact details. \n\nI know showing is better than telling, so would be happy to run you/any hiring managers here through the system. If picked, I'd going far above and beyond the job description (and implement systems similar to this in {{ $('Limit').item.json.companyName }}).\n\nResume below. Let me know what you'd like to do next!\n\nhttps://docs.google.com/document/d/{{ $('Create New Resume').item.json.id }}\n\nThanks,\n[Your Name]",
        "options": {}
      },
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [
        -20,
        400
      ],
      "id": "af671ea9-654a-4218-8410-1987e3a6df67",
      "name": "Gmail",
      "webhookId": "8caf91c4-cb33-4282-891b-25bd87e46498"
    },
    {
      "parameters": {
        "operation": "share",
        "fileId": {
          "__rl": true,
          "value": "={{ $json.id }}",
          "mode": "id"
        },
        "permissionsUi": {
          "permissionsValues": {
            "role": "writer",
            "type": "anyone"
          }
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        800,
        220
      ],
      "id": "49f9772c-fbe7-496b-8e68-d28f4780fad4",
      "name": "Google Drive"
    },
    {
      "parameters": {
        "content": "# AI Automated Resume System\n\nUpdate your resume template ID in the Google Docs module, your Apify API key in the Apify HTTP Request module, and your Anymailfinder API key in the Anymailfinder module.",
        "height": 220,
        "width": 500
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -20,
        -320
      ],
      "id": "11ca8fc3-b514-4e03-8479-bf4c7e868538",
      "name": "Sticky Note"
    }
  ],
  "connections": {
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "Google Docs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Docs": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit": {
      "main": [
        [
          {
            "node": "Filter Job",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Markdown": {
      "main": [
        [
          {
            "node": "Create New Resume",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Job": {
      "main": [
        [
          {
            "node": "Filter True & Website",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rewrite Resume": {
      "main": [
        [
          {
            "node": "Markdown",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create New Resume": {
      "main": [
        [
          {
            "node": "Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add HTML to Resume": {
      "main": [
        [
          {
            "node": "Get Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter True & Website": {
      "main": [
        [
          {
            "node": "Limit 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit 2": {
      "main": [
        [
          {
            "node": "Rewrite Resume",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Email": {
      "main": [
        [
          {
            "node": "Email Exists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Email Exists": {
      "main": [
        [
          {
            "node": "Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive": {
      "main": [
        [
          {
            "node": "Add HTML to Resume",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "active": false
}
