AutomationFlowsAI & RAG › Optimize Resumes & Generate Cover Letters with Gemini AI and Pdf.co

Optimize Resumes & Generate Cover Letters with Gemini AI and Pdf.co

ByPaul Abraham @hellopaul on n8n.io

This n8n template automates the process of creating ATS-friendly resumes and personalized cover letters from uploaded pdf resume.

Event trigger★★★★☆ complexityAI-powered23 nodesForm TriggerAgentGoogle Gemini ChatGoogle DriveHTTP RequestGmail
AI & RAG Trigger: Event Nodes: 23 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Form Trigger 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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "c89cf5b9-6261-4c9f-bda2-137f424dd80d",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        128,
        0
      ],
      "parameters": {},
      "typeVersion": 2.3
    },
    {
      "id": "d7bb8be4-ddff-4266-a10d-3c028144934c",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1952,
        0
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "5c085c5f-555a-42c1-8094-4d5bfad5d463",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1952,
        224
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "c9b82f06-82e0-4978-afd9-32e0222bc009",
      "name": "Get PDF Data Only",
      "type": "n8n-nodes-base.set",
      "position": [
        1344,
        0
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "a2956443-d047-4658-87ef-443e15e24b2a",
      "name": "Get PDF Files/File",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        736,
        0
      ],
      "parameters": {},
      "typeVersion": 3
    },
    {
      "id": "df7a5048-3e31-4fa9-9d61-32a47f7c60aa",
      "name": "Download Retrieval Files/File",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        928,
        0
      ],
      "parameters": {},
      "typeVersion": 3
    },
    {
      "id": "56f54c29-38e2-4e0f-a914-7b51b904fabd",
      "name": "Extract Files/File's Data",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        1152,
        0
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "e76a18f5-0dcd-4cd7-8019-da4d006570c5",
      "name": "Data Parser & Cleaner",
      "type": "n8n-nodes-base.code",
      "position": [
        1520,
        0
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "03b45197-d407-4fd6-9c74-dc4fca9b42a6",
      "name": "HTML to PDF",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2304,
        0
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "1e1f4f8f-f7c0-4a20-9cdb-631de729782e",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        3504,
        -16
      ],
      "parameters": {},
      "typeVersion": 2.1
    },
    {
      "id": "bbf55acd-12a9-4664-83ca-f5c931ad263f",
      "name": "Cover Letter Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2304,
        -576
      ],
      "parameters": {},
      "typeVersion": 2.2,
      "alwaysOutputData": false
    },
    {
      "id": "11400dcf-7f61-4f70-a795-13aff9ca7faa",
      "name": "Google Gemini Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        2304,
        -400
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "45a222ec-a0c2-4d16-a834-c91b25637a59",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        3264,
        -16
      ],
      "parameters": {},
      "typeVersion": 3.2,
      "alwaysOutputData": true
    },
    {
      "id": "c7107927-74fc-4726-a2f6-876eaa6be8fe",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        720,
        -560
      ],
      "parameters": {},
      "typeVersion": 3.3,
      "alwaysOutputData": true
    },
    {
      "id": "ded58812-a204-439f-a7ab-ac2b2d828322",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        928,
        -560
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "0d849ae2-9bf6-419c-9a2b-adeb4638fa69",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -928,
        -800
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "40584612-37e4-41ee-a9d6-f4667c94496e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        704,
        -272
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "3dd1078b-30dc-43ed-8f2b-a131163d9c5e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1104,
        -272
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "8d97ef77-1e43-4906-90cb-99c31b450ab1",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1824,
        -224
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "6029c5a0-1258-4414-8a63-ec6be6790e62",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        704,
        -688
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "f268956e-ba79-42c8-84d2-8c1b519f5ae5",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2240,
        -720
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "b4f1e77f-f5ef-4ccc-8e1e-c4ad253649a8",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3408,
        -176
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "5eeca8bd-2644-4dac-8ce0-8a084f635156",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        -208
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Cover Letter Agent",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "HTML to PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML to PDF": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Send a message": {
      "main": [
        []
      ]
    },
    "Get PDF Data Only": {
      "main": [
        [
          {
            "node": "Data Parser & Cleaner",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Cover Letter Agent": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get PDF Files/File": {
      "main": [
        [
          {
            "node": "Download Retrieval Files/File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Get PDF Files/File",
            "type": "main",
            "index": 0
          },
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Parser & Cleaner": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Extract Files/File's Data": {
      "main": [
        [
          {
            "node": "Get PDF Data Only",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Cover Letter Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Download Retrieval Files/File": {
      "main": [
        [
          {
            "node": "Extract Files/File's Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

This n8n template automates the process of creating ATS-friendly resumes and personalized cover letters from uploaded pdf resume.

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

🤖🧑‍💻 AI Agent for Top n8n Creators Leaderboard Reporting. Uses httpRequest, lmChatOpenAi, executeWorkflowTrigger, toolWorkflow. Event-driven trigger; 49 nodes.

HTTP Request, OpenAI Chat, Execute Workflow Trigger +8
AI & RAG

🤖🧑‍💻 AI Agent for Top n8n Creators Leaderboard Reporting. Uses httpRequest, lmChatOpenAi, executeWorkflowTrigger, toolWorkflow. Event-driven trigger; 49 nodes.

HTTP Request, OpenAI Chat, Execute Workflow Trigger +8
AI & RAG

This n8n workflow is designed to automate the aggregation, processing, and reporting of community statistics related to n8n creators and workflows. Its primary purpose is to generate insightful report

HTTP Request, OpenAI Chat, Execute Workflow Trigger +8
AI & RAG

This comprehensive n8n workflow automates the complete process of generating professional interior design moodboards from concept to client delivery. Users submit a design brief through a form, and th

Google Gemini Chat, Output Parser Structured, Tool Think +7
AI & RAG

This n8n workflow automates turning short user ideas into production-ready real-estate marketing assets (photorealistic images and optional 360° videos). A form submission seeds a prompt board → an LL

Form Trigger, Google Sheets, Agent +6