{"meta":{"instanceId":"workflow-41f18dbc","versionId":"1.0.0","createdAt":"2025-09-29T07:07:45.168278","updatedAt":"2025-09-29T07:07:45.168317","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"nodes":[{"id":"53cc8017-5310-4205-85e0-8cc839693601","name":"Structured Output Parser","type":"n8n-nodes-base.noOp","position":[720,400],"parameters":{"schemaType":"manual","inputSchema":"{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"name\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n      \"email\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n      \"linkedin\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n      \"score\": {\n\t\t\t\"type\": \"string\"\n\t\t}\n\t\t\n\t}\n}"},"typeVersion":1,"notes":"This outputParserStructured node performs automated tasks as part of the workflow."},{"id":"ea0c00d3-25c8-4523-88ff-d61d6665ecf7","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-760,160],"parameters":{"width":480,"height":260,"content":"## Resume Screener from Gmail to Sheets\n\n### 📃Before you get started, you'll need:\n- [n8n installation]({{ $env.WEBHOOK_URL }} \n- [OpenAI API Key]({{ $env.API_BASE_URL }}\n- Google Sheets API enabled in [Google Cloud Console]({{ $env.API_BASE_URL }}\n- Google Drive API enabled in [Google Cloud Console]({{ $env.API_BASE_URL }}\n- OAuth 2.0 Client ID and Client Secret from your [Google Cloud Console Credentials]({{ $env.API_BASE_URL }}\n"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"e4f3aef9-750a-48bb-899b-bd4a810032f2","name":"Extract text from PDF File","type":"n8n-nodes-base.extractFromFile","position":[320,180],"parameters":{"options":{},"operation":"pdf","binaryPropertyName":"attachment_0"},"typeVersion":1,"notes":"This extractFromFile node performs automated tasks as part of the workflow."},{"id":"5418cfae-25da-4f58-99ef-d6957d8819a8","name":"AI Agent to evaluate Resume","type":"n8n-nodes-base.noOp","position":[540,180],"parameters":{"text":"=Here is the resume:\n\n{{ $json.text }}","options":{"systemMessage":"You are an invaluable assistant. You were given a resume. You have to help me analyze the resume and give it a score based on the details available in the resume. Also, extract the name, email, and LinkedIn profile from the resume."},"promptType":"define","hasOutputParser":true},"typeVersion":1,"notes":"This agent node performs automated tasks as part of the workflow."},{"id":"dce8e431-9d5c-4aa1-a0eb-c2a27de2d7f9","name":"OpenAI Chat Model (GPT 4o-mini)","type":"n8n-nodes-base.noOp","position":[520,400],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"credentials":{"openAiApi":{"id":"PMxepoh6OuVxbpg1","name":"OpenAi account"}},"typeVersion":1,"notes":"This lmChatOpenAi node performs automated tasks as part of the workflow."},{"id":"e7fdaf75-11ad-40c2-84a0-13c52f6f2eb1","name":"Add Resume Evaluation to Google Sheets","type":"n8n-nodes-base.googleSheets","position":[920,180],"parameters":{"columns":{"value":{"Name":"={{ $json.output.name }}","Email":"={{ $json.output.email }}","Score":"={{ $json.output.score }}","LinkedIn":"={{ $json.output.linkedin }}","Resume text":"={{ $('Extract text from PDF File').item.json.text }}"},"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":"LinkedIn","type":"string","display":true,"removed":false,"required":false,"displayName":"LinkedIn","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Score","type":"string","display":true,"required":false,"displayName":"Score","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Resume text","type":"string","display":true,"required":false,"displayName":"Resume text","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{"useAppend":true},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":781640061,"cachedResultUrl":"{{ $env.WEBHOOK_URL }}","cachedResultName":"Resume Score"},"documentId":{"__rl":true,"mode":"list","value":"1SGYsuJI2YJVztZZmSLsFZ0lbUHnxm0V9r3c8S5-2q74","cachedResultUrl":"{{ $env.WEBHOOK_URL }}","cachedResultName":"Lead Generation"}},"credentials":{"googleSheetsOAuth2Api":{"id":"kzZGQmdAV5cPfymZ","name":"Google Sheets (server@hic)"}},"typeVersion":4.5,"notes":"This googleSheets node performs automated tasks as part of the workflow."},{"id":"0ad65e2b-665d-4b77-a941-b15a7ffbfb89","name":"Trigger on new Email Received","type":"n8n-nodes-base.gmailTrigger","position":[60,180],"parameters":{"simple":false,"filters":{"q":"has:attachment","labelIds":["UNREAD"],"readStatus":"unread"},"options":{"downloadAttachments":true},"pollTimes":{"item":[{"mode":"everyHour","minute":1}]}},"credentials":{"gmailOAuth2":{"id":"tPOAqAl9y3adqJD6","name":"Gmail account (hire@hic)"}},"typeVersion":1.2,"notes":"This gmailTrigger node performs automated tasks as part of the workflow."},{"id":"error-e23b7ef4","name":"Error Handler","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1000,400],"parameters":{"message":"Workflow execution error","options":{}}}],"connections":{"Extract text from PDF File":{"main":[[]]},"OpenAI Chat Model (GPT 4o-mini)":{"main":[[]]},"Add Resume Evaluation to Google Sheets":{"main":[[]]}},"name":"Outputparserstructured Workflow","settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"description":"Automated workflow: Outputparserstructured Workflow. This workflow integrates 8 different services: stickyNote, gmailTrigger, agent, outputParserStructured, stopAndError. It contains 10 nodes and follows best practices for error handling and security.","notes":"Excellent quality workflow: Outputparserstructured Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}