{"workflow":{"id":13241,"name":"Generate HR offer letters and contracts with GPT-4.1-mini and Google Docs","views":183,"recentViews":1,"totalViews":183,"createdAt":"2026-02-06T11:34:44.038Z","description":"## Description\n\nAn intelligent AI-powered workflow that automates HR document creation for new hires. Upload candidate documents via form, and the system extracts details, auto-calculates joining dates, fills professional templates using GPT-4, and saves the final Offer Letter or Employment Contract directly to Google Docs—all in seconds.\n\n---\n\n## What this workflow does\n\nThis automation handles your complete HR onboarding document pipeline:\n\n- **Form-based submission:** HR fills a simple form with candidate's Identity card, Resume, Job Role, Salary, and document type selection\n- **Smart data extraction:** Automatically extracts candidate name from uploaded Resume PDF and calculates joining date (1st of next month)\n- **Template selection:** Routes to Offer Letter or Employment Contract template based on HR's selection\n- **AI-powered filling:** Uses OpenAI GPT-4.1-mini to intelligently fill all placeholders while preserving exact formatting, line breaks, and emojis\n- **Google Docs output:** Saves the final professional document directly to Google Docs, ready to send to the candidate\n\n---\n\n## Setup requirements\n\n**Tools you'll need:**\n\n- Active n8n instance (self-hosted or n8n Cloud)\n- Google Docs with OAuth access\n- OpenAI API key (GPT-4.1-mini access)\n- PDF documents: Candidate's Identity card and Resume\n\n**Estimated setup time:** 15–20 minutes\n\n---\n\n## Step-by-step setup\n\n### 1. Connect Google Docs\n- In n8n: **Credentials → Add credential → Google Docs OAuth2 API**\n- Complete OAuth authentication\n- Open **\"Save Document to Google Docs\"** node\n- Create a new Google Doc or use an existing template document\n- Copy the document URL and paste it in the **documentURL** field\n\n### 2. Add OpenAI API credentials\n- Get API key: https://platform.openai.com/api-keys\n- In n8n: **Credentials → Add credential → OpenAI API**\n- Paste your API key\n- Open **\"OpenAI GPT-4.1 Mini Model\"** node\n- Select your OpenAI credential\n- Ensure model is set to **gpt-4.1-mini**\n\n### 3. Customize document templates\nThe workflow includes two pre-built templates. You can customize them:\n\n**Offer Letter Template:**\n- Open **\"Load Offer Letter Template\"** node\n- Edit the `template_offer` value\n- Available placeholders: `[Candidate Name]`, `[Job Role]`, `[Department/Team Name]`, `[Company Name]`, `[Joining Date]`, `[Salary Details]`, `[Work Location]`, `[Reporting Manager/Team Lead]`, `[Probation Period]`\n\n**Employment Contract Template:**\n- Open **\"Load Contract Template\"** node\n- Edit the `template_contract` value\n- Uses the same placeholders with additional terms and conditions sections\n\n**Important:** Keep all placeholders in square brackets `[Placeholder Name]` exactly as shown. The AI will replace them automatically.\n\n### 4. Configure form fields (optional)\n- Open **\"Receive Candidate Details via Form\"** node\n- Default fields: Identity card (file), Resume (file), Job Role (text), Salary Details (number), Type (dropdown)\n- Add optional fields if needed: Department Name, Work Location, Reporting Manager, Probation Period\n- Copy the **Form URL** from the node settings\n- Share this URL with your HR team\n\n### 5. Test the workflow\n- Open the **Form URL** in your browser\n- Upload sample Identity card and Resume PDFs\n- Fill Job Role: \"Software Developer\"\n- Enter Salary Details: 50000\n- Select Type: \"Offer Letter\"\n- Submit the form\n- Check your Google Docs—the filled document should appear automatically\n- Verify all placeholders are replaced correctly\n\n### 6. Activate the workflow\n- Toggle the workflow to **Active** at the top\n- The form will now accept submissions 24/7\n- Each submission generates a new document in Google Docs\n\n---\n\n## How it works\n\n### 1. Form submission\nHR opens the form link and uploads candidate documents (Identity card + Resume as PDFs), enters job details, and selects document type (Offer Letter or Contract).\n\n### 2. Document processing\nThe workflow splits uploaded files into separate items and auto-generates two dates:\n- **Form Date:** Current submission date\n- **Joining Date:** Automatically set to the 1st of next month\n\n### 3. Text extraction\nExtracts text from both PDF documents using n8n's built-in Extract From File node. The candidate's name is typically pulled from the Resume.\n\n### 4. Data aggregation\nCombines extracted text from both documents into a single data item for processing.\n\n### 5. Template routing\nChecks the selected document type:\n- If \"Offer Letter\" → loads the Offer Letter template\n- If \"Contract\" → loads the Employment Contract template\n\n### 6. AI template filling\nThe AI Agent receives:\n- The selected template with placeholders\n- All form data (Job Role, Salary, etc.)\n- Extracted candidate name from Resume\n- Auto-calculated joining date\n\nGPT-4.1-mini fills every placeholder with actual data while strictly preserving:\n- Line breaks and paragraph spacing\n- Emojis and special characters\n- Bold/italic formatting markers\n- Email, phone, and web links\n\n### 7. Google Docs save\nThe final filled document is inserted into your Google Docs document. Each submission appends a new document, so you can maintain a running archive or clear the doc periodically.\n\n---\n\n## Key features\n\n✅ **Zero manual typing:** Extract candidate name automatically from Resume PDF—no copy-paste needed\n\n✅ **Smart date calculation:** Joining date auto-set to 1st of next month based on submission date\n\n✅ **Dual document types:** Choose between simple Offer Letter or detailed Employment Contract with terms\n\n✅ **AI preserves formatting:** GPT-4.1-mini maintains exact line breaks, emojis, and structure from templates\n\n✅ **Google Docs integration:** Documents saved directly—no downloads, conversions, or file juggling\n\n✅ **Customizable templates:** Edit both templates to match your company's tone, policies, and branding\n\n✅ **Form-based workflow:** Share one URL with HR team—no n8n access needed for daily use\n\n---\n\n## Troubleshooting\n\n### Google Docs not saving\n- **Re-authenticate OAuth credentials:** Go to Credentials → Google Docs OAuth2 API → Reconnect\n- **Check document URL:** Ensure the documentURL field contains a valid Google Docs link (not a Sheets link)\n- **Verify permissions:** Make sure the connected Google account has edit access to the document\n\n### Candidate name not extracting correctly\n- **Resume format issue:** The workflow expects candidate name in the Resume PDF text. If your Resume format is unusual, you may need to adjust the extraction logic.\n- **Check extraction node:** Open \"Extract Text from Identity card and Resume\" node → Test execution → Verify text output\n- **Manual override:** Add a \"Candidate Name\" field to the form if automatic extraction fails\n\n### AI not filling placeholders\n- **Check API key:** Verify OpenAI API key is active and has credits at https://platform.openai.com/usage\n- **Placeholder mismatch:** Ensure template placeholders exactly match the format `[Placeholder Name]` with square brackets\n- **Test AI node:** Click \"Fill Template with AI\" → Execute node → Check output for errors\n\n### Joining date incorrect\n- **Timezone issue:** The date calculation uses server timezone. Verify your n8n instance timezone settings.\n- **Custom date needed:** If you want a different joining date logic (e.g., 15 days from submission), edit the \"Split Documents and Calculate Dates\" code node.\n\n### Form not accepting file uploads\n- **File size limit:** Default n8n form limit is 16MB. Compress PDFs if larger.\n- **File type validation:** Ensure uploaded files are PDFs, not images or other formats.\n- **Browser issue:** Try a different browser (Chrome recommended for file uploads).\n\n---\n\n## Use cases\n\n**HR teams at growing companies:** Onboard 5-10 new hires per week without spending hours on document preparation. Generate consistent, professional documents in seconds.\n\n**Recruitment agencies:** Send offer letters to multiple candidates daily. Maintain brand consistency while scaling operations without adding admin staff.\n\n**Startups and small businesses:** Automate HR paperwork from day one. Focus on candidate experience instead of document formatting.\n\n**Remote-first companies:** Enable distributed HR teams to generate documents without shared drives or email chains. Single form link, instant output.\n\n**Consulting firms:** Create client-specific employment contracts with custom templates. Switch between contract types based on project requirements.\n\n---\n\n## Expected results\n\n- **Time savings:** 15-20 minutes saved per document (from 20 min manual → 2 min automated)\n- **Output quality:** Professional, error-free documents with consistent formatting every time\n- **Scalability:** Process 50+ candidates per week without additional HR headcount\n- **Error reduction:** Eliminate typos and placeholder mistakes common in manual copy-paste workflows\n- **Faster hiring:** Send offer letters within 5 minutes of candidate approval\n\n---\n\n## Workflow customization\n\n### Add more form fields\nOpen \"Receive Candidate Details via Form\" node and add custom fields:\n- Department Name (dropdown with your teams)\n- Work Location (dropdown: Remote, Office, Hybrid)\n- Reporting Manager (text input)\n- Probation Period (number input)\n- Start Date (date picker for custom joining dates)\n\nThese values automatically populate in templates if placeholders are added.\n\n### Create additional templates\nDuplicate one of the \"Load Template\" nodes and create:\n- Internship Offer Letters\n- Part-time Contract\n- Freelancer Agreement\n- Probation Extension Letter\n\nAdd a corresponding option in the form Type dropdown.\n\n### Send documents via email\nAdd an **Email** node after \"Save Document to Google Docs\":\n- Attach the Google Docs link\n- Send to candidate email (add email field to form)\n- CC HR manager automatically\n\n### Multi-language support\nCreate template variations in different languages. Add a \"Language\" dropdown to the form and route to appropriate template.\n\n---\n\n## Support\n\nNeed help or custom development?\n\n📧 Email: [info@isawow.com](info@isawow.com)  \n🌐 Website: [https://isawow.com/](https://isawow.com/)","workflow":{"meta":{"instanceId":"bc8ca75c203589705ae2e446cad7181d6f2a7cc1766f958ef9f34810e53b8cb2"},"nodes":[{"id":"f18976c8-bd79-424f-8bf3-10f6f2d003c7","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[272,16],"parameters":{"color":7,"width":480,"height":176,"content":"## AI Generation & Google Docs Save\n\nAI fills all template placeholders with actual\ncandidate data while preserving formatting, then\nsaves the final document to Google Docs."},"typeVersion":1},{"id":"ff59c2fb-009b-4615-8f1f-232d3af40913","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-480,16],"parameters":{"color":7,"width":576,"height":240,"content":"## Template Selection & Loading\n\nChecks if the user selected \"Offer Letter\" or\n\"Contract\", then loads the appropriate template\nwith all placeholders ready for AI filling."},"typeVersion":1},{"id":"d88f0685-9b44-454e-a6ac-316f51d11ab8","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-1072,16],"parameters":{"color":7,"width":512,"height":192,"content":"## Form Submission & Document Processing\n\nReceives candidate details via form, splits\nuploaded Indentity card and Resume files, then extracts\ntext from both PDFs and merges the data."},"typeVersion":1},{"id":"681a25ee-79db-4803-817e-037961a3c2c5","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1744,-160],"parameters":{"width":432,"height":832,"content":"## AI-Powered HR Document Generator\n\nThis workflow automatically generates professional Offer Letters\nor Employment Contracts for new hires. HR submits a form with\nthe candidate's documents (Identity card & Resume), job details, and\ndocument type. The system extracts the candidate's name from\nuploaded files, auto-calculates the joining date, selects the\nappropriate template, and uses AI to intelligently fill all\nplaceholders while preserving formatting. The final document\nis saved directly to Google Docs — ready to send.\n\n## How it works\n1. HR fills a form with Identity card, Resume, Job Role, Salary, and Type.\n2. System splits uploaded files and auto-generates joining date.\n3. Extracts candidate name and details from PDF documents.\n4. Routes to Offer Letter or Contract template based on selection.\n5. AI fills all placeholders with actual data while keeping formatting.\n6. Final document is saved to Google Docs automatically.\n\n## Setup steps\n1. Connect Google Docs OAuth credentials.\n2. Add OpenAI API key for GPT-4.1-mini model.\n3. Update Google Docs document URL in the save node.\n4. Customize Offer Letter and Contract templates as needed.\n5. Share the form link with your HR team to start generating documents."},"typeVersion":1},{"id":"3a9e1ad1-867e-41a4-aa5a-0895b12b45d1","name":"Save Document to Google Docs","type":"n8n-nodes-base.googleDocs","position":[656,144],"parameters":{"actionsUi":{"actionFields":[{"text":"={{ $json.output }}","action":"insert"}]},"operation":"update","documentURL":"doc_url"},"credentials":{"googleDocsOAuth2Api":{"id":"credential-id","name":"Aksh:- Google Docs account"}},"typeVersion":2},{"id":"78e62aa7-6027-442c-a9b5-f2ef49ec12c8","name":"OpenAI GPT-4.1 Mini Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[272,384],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4.1-mini"},"options":{}},"credentials":{"openAiApi":{"id":"credential-id","name":"testing"}},"typeVersion":1.2},{"id":"5b3b0775-cfac-48bd-a60c-1a27dcc40ba5","name":"Fill Template with AI","type":"@n8n/n8n-nodes-langchain.agent","position":[272,144],"parameters":{"text":"=Adhar Card: {{ $('Receive Candidate Details via Form').item.json.Aadhar }}\nResume: {{ $('Receive Candidate Details via Form').item.json.Resume[0] }}\nForm Data:\nJob Role: {{ $('Receive Candidate Details via Form').item.json['Job Role'] }}\nSalary Details: {{ $item(0).$node[\"Split Documents and Calculate Dates\"].json[\"Salary Details\"] }}\nForm Date: {{ $item(0).$node[\"Split Documents and Calculate Dates\"].json.FormDate }}\nJoining Data: {{ \n  (() => {\n    const formDate = new Date($item(0).$node[\"Split Documents and Calculate Dates\"].json.FormDate);\n    const nextMonth = new Date(formDate.getFullYear(), formDate.getMonth() + 1, 1);\n    return nextMonth.toLocaleDateString(\"en-GB\", { day: \"numeric\", month: \"long\", year: \"numeric\" });\n  })()\n}}\n\n","options":{"systemMessage":"=You are an HR assistant.\n\nYour task is to generate a professional HR document (Offer Letter or Contract) based on the Document Type.\n\nUse the template provided in JSON below.  \nDo NOT paraphrase, merge, or rewrite sentences.  \nDo NOT remove or add any text.  \nReplace ALL placeholders in the template with the actual data provided.  \n**Preserve all line breaks and blank lines exactly as in the template.**\n\n---\n\n### Template_Offer Letter\n`{{ $json.template_offer || \" \" }}`\n\n### Template_Contract\n`{{ $json.template_contract || \" \" }}`\n\n---\n\n### Data\nDocument Type: {{ $('Receive Candidate Details via Form').item.json.Type }}\nCandidate Name: {{ $('Merge Extracted Document Texts').item.json.text[1].text }}\nJob Role: {{ $('Receive Candidate Details via Form').item.json['Job Role'] }}\nDepartment/Team Name: {{ $('Receive Candidate Details via Form').item.json['Department Name'] || \"Automation Team\" }}\nJoining Date: {{ $item(0).$node[\"Split Documents and Calculate Dates\"].json.JoiningDate }}\nSalary Details: {{ $('Receive Candidate Details via Form').item.json['Salary Details'] }}\nProbation Period: {{ $('Receive Candidate Details via Form').item.json['Probation Period'] || 6 }}\nWork Location: {{ $('Receive Candidate Details via Form').item.json['Work Location'] || \"Delhi\" }}\nReporting Manager/Team Lead: {{ $('Receive Candidate Details via Form').item.json['Reporting Manager'] || \"Team Lead\" }}\nCompany Name: Incrementors Web Solution\n\n---\n\n### Instructions\n1. If Document Type includes “offer”, generate the document using **Template_Offer Letter**.  \n2. If Document Type includes “contract”, generate the document using **Template_Contract**.  \n3. Replace **all placeholders** exactly with the corresponding values from Data.  \n4. **Keep all line breaks, blank lines, emojis, and formatting** exactly as in the template.  \n5. Do NOT merge paragraphs, paraphrase, or add extra text.  \n6. Output **only the final filled document**, nothing else.\n"},"promptType":"define"},"typeVersion":2.2},{"id":"fcb486d1-484b-465b-a3aa-8b72e1d52c5a","name":"Load Contract Template","type":"n8n-nodes-base.set","position":[0,256],"parameters":{"options":{},"assignments":{"assignments":[{"id":"91c81f7d-3d0a-48d2-a5a3-f20fe29ef105","name":"template_contract","type":"string","value":"Dear [Candidate Name],  We are pleased to confirm your appointment as [Job Role] in the [Department/Team Name] at [Company Name], effective [Joining Date].  This Employment Contract outlines the terms and conditions of your employment:\\n\n1. **Position & Reporting**   You will serve as [Job Role] reporting to [Reporting Manager/Team Lead]. Your responsibilities will include all tasks reasonably assigned to you within the scope of your position.\\n\n2. **Compensation & Benefits**   Your compensation package will be [Salary Details] per annum, along with applicable benefits as per the company policy.\\n\n3. **Probation**   You will be on probation for a period of [Probation Period] months, during which your performance will be reviewed. Continuation of employment will be confirmed upon satisfactory completion of the probation period.\\n\n4. **Working Hours & Location**   Your working hours will be as per company policy. Your primary work location will be [Work Location]. The company may request relocation or travel as necessary.\\n\n5. **Confidentiality & Non-Disclosure**   You agree to maintain the confidentiality of all company information and adhere to the company’s Non-Disclosure Agreements.\\n\n6. **Termination**   Either party may terminate this contract with notice as per company policy. The company reserves the right to terminate employment if performance, conduct, or cultural fit is unsatisfactory.\\n\n7. **Miscellaneous**   All other employment terms will be governed by company policies, which may be amended from time to time.  Please sign and return a copy of this contract after reviewing all terms. By doing so, you acknowledge your agreement to the above terms.\\n\n\nBest Regards,\\n\n\nHR Team | Incrementors Web Solutions \\n\n\n📧 Email: Hrincrementors.com  \\n\n\n📞 Phone: +1234567890   \\n\n\n🌐 Web: https://www.incrementors.com/"}]}},"typeVersion":3.4},{"id":"5695158d-2afe-4006-a864-6cf8ec723671","name":"Load Offer Letter Template","type":"n8n-nodes-base.set","position":[0,48],"parameters":{"options":{},"assignments":{"assignments":[{"id":"e7020468-e616-4ae3-a338-feb893b1aa3f","name":"template_offer","type":"string","value":"Dear [Candidate Name],  We are pleased to offer you the position of [Job Role] in the [Department/Team Name] at [Company Name], effective [Joining Date].  To proceed:  Kindly confirm your acceptance.  Kindly upload your joining documents for further approval using the button below.  This offer is contingent upon satisfactory credential verification and reference checks. Your compensation package will be as per our agreed terms.  A formal Joining Letter will be provided upon completion of joining formalities. Please note that your performance will be monitored. If you are found unsuitable for the role or culturally unfit, we reserve the right to discontinue your employment with fair feedback. \nBest Regards,\nHR Team | [Company Name]  \n📧 Email: Hrincrementors.com  \n📞 Phone: +1234567890 \n🌐 Web: https://www.incrementors.com/"}]}},"typeVersion":3.4},{"id":"0b868d5a-8ca7-4ba0-baa7-44d940fc8b1a","name":"Check Document Type Selection","type":"n8n-nodes-base.if","position":[-480,160],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"497d284a-0da7-4bc8-b39c-11b358bf7760","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $('Receive Candidate Details via Form').item.json.Type }}","rightValue":"Offer Letter"}]}},"typeVersion":2.2},{"id":"a0061fac-29cb-4bb1-b007-1d9361b4351e","name":"Merge Extracted Document Texts","type":"n8n-nodes-base.aggregate","position":[-656,160],"parameters":{"options":{},"aggregate":"aggregateAllItemData","destinationFieldName":"text"},"typeVersion":1},{"id":"c9657af8-bc03-4456-8e30-8f1d9e1b05cc","name":"Extract Text from Aadhar and Resume","type":"n8n-nodes-base.extractFromFile","position":[-864,160],"parameters":{"options":{},"operation":"pdf","binaryPropertyName":"Document"},"typeVersion":1},{"id":"8019d0ae-1771-4407-914f-d5b0595a7733","name":"Split Documents and Calculate Dates","type":"n8n-nodes-base.code","position":[-1072,160],"parameters":{"jsCode":"const items = $input.all();\nconst outputItems = [];\n\nitems.forEach(item => {\n  const jobRole = item.json.JobRole || '';\n\n  // Auto-generate FormDate (submission date)\n  const formDate = new Date();\n  const formDateStr = formDate.toISOString().split('T')[0];\n\n  // Auto-generate Joining Date → 1st of next month\n  const nextMonth = new Date(formDate.getFullYear(), formDate.getMonth() + 1, 1);\n  const joiningDateStr = nextMonth.toISOString().split('T')[0];\n\n  if (item.binary) {\n    if (item.binary.Aadhar) {\n      outputItems.push({\n        json: {\n          ...item.json,\n          documentType: 'Aadhar',\n          JobRole: jobRole,\n          FormDate: formDateStr,\n          JoiningDate: joiningDateStr,\n          \n        },\n        binary: { Document: item.binary.Aadhar }\n      });\n    }\n\n    if (item.binary.Resume) {\n      outputItems.push({\n        json: {\n          ...item.json,\n          documentType: 'Resume',\n          JobRole: jobRole,\n          FormDate: formDateStr,\n          JoiningDate: joiningDateStr,\n          \n        },\n        binary: { Document: item.binary.Resume }\n      });\n    }\n  }\n});\n\nreturn outputItems;\n"},"typeVersion":2},{"id":"6ae56a05-adc8-4efa-ae15-eb501f691482","name":"Receive Candidate Details via Form","type":"n8n-nodes-base.formTrigger","position":[-1280,160],"webhookId":"7546d4e7-5ea9-4df6-9907-db4fa7694596","parameters":{"options":{},"formTitle":"Basic Details","formFields":{"values":[{"fieldType":"file","fieldLabel":"Aadhar","requiredField":true},{"fieldType":"file","fieldLabel":"Resume","requiredField":true},{"fieldLabel":"Job Role","requiredField":true},{"fieldType":"number","fieldLabel":"Salary Details","requiredField":true},{"fieldType":"dropdown","fieldLabel":"Type","fieldOptions":{"values":[{"option":"Offer Letter"},{"option":"Contract"}]},"requiredField":true}]}},"typeVersion":2.3}],"pinData":{},"connections":{"Fill Template with AI":{"main":[[{"node":"Save Document to Google Docs","type":"main","index":0}]]},"Load Contract Template":{"main":[[{"node":"Fill Template with AI","type":"main","index":0}]]},"OpenAI GPT-4.1 Mini Model":{"ai_languageModel":[[{"node":"Fill Template with AI","type":"ai_languageModel","index":0}]]},"Load Offer Letter Template":{"main":[[{"node":"Fill Template with AI","type":"main","index":0}]]},"Check Document Type Selection":{"main":[[{"node":"Load Offer Letter Template","type":"main","index":0}],[{"node":"Load Contract Template","type":"main","index":0}]]},"Merge Extracted Document Texts":{"main":[[{"node":"Check Document Type Selection","type":"main","index":0}]]},"Receive Candidate Details via Form":{"main":[[{"node":"Split Documents and Calculate Dates","type":"main","index":0}]]},"Extract Text from Aadhar and Resume":{"main":[[{"node":"Merge Extracted Document Texts","type":"main","index":0}]]},"Split Documents and Calculate Dates":{"main":[[{"node":"Extract Text from Aadhar and Resume","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":14,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":2},"n8n-nodes-base.code":{"count":1},"n8n-nodes-base.aggregate":{"count":1},"n8n-nodes-base.googleDocs":{"count":1},"n8n-nodes-base.stickyNote":{"count":4},"n8n-nodes-base.formTrigger":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.extractFromFile":{"count":1},"@n8n/n8n-nodes-langchain.lmChatOpenAi":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"isaWOW","username":"isawow","bio":"","verified":true,"links":[""],"avatar":"https://gravatar.com/avatar/8e8c1f17a2be80c0d1b0248585660dff3062cefeda523bbafeafcdb813f52ffa?r=pg&d=retro&size=200"},"nodes":[{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":495,"icon":"file:googleDocs.svg","name":"n8n-nodes-base.googleDocs","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledocs/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Miscellaneous"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Google Docs"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSItMTggMCA5MCA4MCI+PHVzZSB4bGluazpocmVmPSIjYSIgeD0iLjUiIHk9Ii41Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzU0OGRmNiIgZD0ibTM2IDAgMjIgMjJ2NTNhNC45OSA0Ljk5IDAgMCAxLTUgNUg1YTQuOTkgNC45OSAwIDAgMS01LTVWNWE0Ljk5IDQuOTkgMCAwIDEgNS01eiIvPjxwYXRoIGQ9Ik0xNCA0MGgzMHYzSDE0em0wIDdoMzB2M0gxNHptMCA4aDMwdjNIMTR6bTAgN2gyMXYzSDE0eiIvPjxwYXRoIGZpbGw9IiNhYmQwZmIiIGQ9Im0zNiAwIDIyIDIySDQxYy0yLjc3IDAtNS0yLjQ4LTUtNS4yNXoiLz48cGF0aCBmaWxsPSIjM2U1YmI5IiBkPSJNNDAuNzUgMjIgNTggMjkuMTI1VjIyeiIvPjwvZz48L3N5bWJvbD48L3N2Zz4="},"displayName":"Google Docs","typeVersion":2,"nodeCategories":[{"id":11,"name":"Miscellaneous"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1153,"icon":"file:openAiLight.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenAI Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg0IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NyAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MiA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSIjN0Q3RDg3Ii8+Cjwvc3ZnPgo="},"displayName":"OpenAI Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1225,"icon":"file:form.svg","name":"n8n-nodes-base.formTrigger","codex":{"data":{"alias":["table","submit","post"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Other Trigger Nodes"]}}},"group":"[\"trigger\"]","defaults":{"name":"On form submission"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwQjdCQyIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzQuOTc4IDM3LjczMmExLjU2IDEuNTYgMCAwIDEtMS41NjIgMS41NjNINi4yNmExLjU2IDEuNTYgMCAwIDEtMS41NjMtMS41NjNWOS42MDdjMC0uNDA1LjE1Ny0uNzk0LjQzOC0xLjA4Nmw2LjMwNC02LjUzMXY1LjM0NEg4LjIxM2ExLjE3MiAxLjE3MiAwIDEgMCAwIDIuMzQzaDQuNDNhMS4xNyAxLjE3IDAgMCAwIDEuMTcxLTEuMTcxVi4yMzJoMTkuNjAyYTEuNTYgMS41NiAwIDAgMSAxLjU2MiAxLjU2M3YxMC4zMjdsLTIuODYgMi44Ni04LjI1MiA4LjI3NmE0MTMuMDA2IDQxMy4wMDYgMCAwIDEtMS42NTQgMS42NjJsLS4zMzcuMzM3YTIgMiAwIDAgMC0uNTU3IDEuMDhMMjAuMyAzMS45MjJjLS4xMDguNjM4LS4yMTUgMS4wNzkuMjExIDEuNDE4LjQwMy4zMi45LjE3NCAxLjU0LjA2Nmw1LjQwOC0uOTI4YTIgMiAwIDAgMCAxLjA4LS41NTZsNi40NC02LjQyOXptLTI0LjAzLTIxLjI2NWExLjE4IDEuMTggMCAwIDAgMS4xNzEgMS4xNzJoMTMuMTYzYTEuMTcyIDEuMTcyIDAgMSAwIDAtMi4zNDRIMTIuMTE5YTEuMTcgMS4xNyAwIDAgMC0xLjE3MiAxLjE3Mm03LjI5NCAxNC43NjZhMS4xNyAxLjE3IDAgMCAwLTEuMTcyLTEuMTcySDEyLjEyYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNC45NTFhMS4xNyAxLjE3IDAgMCAwIDEuMTcyLTEuMTcybS44Ni03LjM5MWExLjE3IDEuMTcgMCAwIDAtMS4xNzItMS4xNzJoLTUuODExYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNS44MWExLjE2NCAxLjE2NCAwIDAgMCAxLjE3My0xLjE3MSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iIzAwQjdCQyIgZD0ibTMzLjUzMiAxNi4zOTcgNC4yODktNC4yODkgMy43NTggMy43MSAxLjYxNy0xLjYxNiAyLjI1OCAyLjI1N2MuMjE4LjIxOC4zNC41MTMuMzQzLjgyLS4wMDIuMzExLS4xMjUuNjA4LS4zNDQuODNsLTYuODA0IDYuNzk2YTEuMTMgMS4xMyAwIDAgMS0uODI4LjM0MyAxLjE1IDEuMTUgMCAwIDEtLjgyOC0uMzQzIDEuMTggMS4xOCAwIDAgMSAwLTEuNjU3bDUuOTc2LTUuOTY4LTEuMzEyLTEuMzEzLTEuMzgzIDEuNDE0LTEzLjE0OSAxMy4xMjUtNC42MTcuNzgyLjc4Mi00LjYxNy4zMzYtLjMzNyAyLjU2MiAyLjU1NWExLjEgMS4xIDAgMCAwIC44MjguMzQ0Yy4zMTIuMDA1LjYxMi0uMTIuODI4LS4zNDRhMS4xOCAxLjE4IDAgMCAwIDAtMS42NTZsLTIuNTYyLTIuNTYyek00NC43MzYgMTIuMjRjMCAuNDE0LS4xNjMuODEtLjQ1NCAxLjEwMmwtLjkyMi45MTQtMy44NTItMy44MjguOTMtLjkzYTEuNTYzIDEuNTYzIDAgMCAxIDIuMjAzIDBsMS42NCAxLjY0MWMuMjkxLjI5My40NTUuNjkuNDU1IDEuMTAyIi8+PC9zdmc+"},"displayName":"n8n Form Trigger","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1235,"icon":"file:extractFromFile.svg","name":"n8n-nodes-base.extractFromFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","decode","decoding","Move Binary Data","Binary","File","PDF","JSON","HTML","ICS","iCal","txt","Text","RTF","XML","64","Base64","Convert"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Extract from File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAuOTM3NSAyQzAuNDE5NzMzIDIgMCAyLjQxOTczIDAgMi45Mzc1VjM3LjMyMjFDMCAzNy44Mzk5IDAuNDE5NzMzIDM4LjI1OTYgMC45Mzc1IDM4LjI1OTZIMjYuMjE1NEMyNi43MzMyIDM4LjI1OTYgMjcuMTUyOSAzNy44Mzk5IDI3LjE1MjkgMzcuMzIyMUwyNy4xNTI5IDMwLjY3MTlMMTYuNzk2OSAzMC42NzE5QzE0Ljg5ODQgMzAuNjcxOSAxMy4zNTk0IDI5LjEzMjkgMTMuMzU5NCAyNy4yMzQ0VjI1LjM1OTRDMTMuMzU5NCAyMy40NjA5IDE0Ljg5ODQgMjEuOTIxOSAxNi43OTY5IDIxLjkyMTlIMjcuMTUyOUwyNy4xNTI5IDE1Ljc4MjFIMTQuMzA4M0MxMy43OTA2IDE1Ljc4MjEgMTMuMzcwOCAxNS4zNjI0IDEzLjM3MDggMTQuODQ0NlYySDAuOTM3NVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTE2LjAyNzEgMkMxNS45NDA4IDIgMTUuODcwOCAyLjA2OTk2IDE1Ljg3MDggMi4xNTYyNVYxMi44MTM0QzE1Ljg3MDggMTMuMDcyMyAxNi4wODA3IDEzLjI4MjEgMTYuMzM5NiAxMy4yODIxSDI2Ljk5NjdDMjcuMDgzIDEzLjI4MjEgMjcuMTUyOSAxMy4yMTIyIDI3LjE1MjkgMTMuMTI1OUwyNy4xNTI5IDEyLjYxNzFDMjcuMTUyOSAxMi4zNjg4IDI3LjA1NDUgMTIuMTMwNyAyNi44NzkxIDExLjk1NUwxNy4yMjI1IDIuMjc1MzhDMTcuMDQ2NiAyLjA5OTA4IDE2LjgwNzkgMiAxNi41NTg4IDJIMTYuMDI3MVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTI5Ljc2NDIgMzQuNjUwM0MyOS4wMzQgMzMuOTE2IDI5LjAzNzQgMzIuNzI4OCAyOS43NzE2IDMxLjk5ODZMMzMuNjE5NyAyOC4xNzE5TDE2Ljc5NjkgMjguMTcxOUMxNi4yNzkxIDI4LjE3MTkgMTUuODU5NCAyNy43NTIxIDE1Ljg1OTQgMjcuMjM0NFYyNS4zNTk0QzE1Ljg1OTQgMjQuODQxNiAxNi4yNzkxIDI0LjQyMTkgMTYuNzk2OSAyNC40MjE5TDMzLjU0MTIgMjQuNDIxOUwyOS43NzE2IDIwLjY3MzNDMjkuMDM3NCAxOS45NDMxIDI5LjAzNCAxOC43NTU5IDI5Ljc2NDIgMTguMDIxNkMzMC40OTQ0IDE3LjI4NzQgMzEuNjgxNiAxNy4yODQgMzIuNDE1OSAxOC4wMTQyTDM5LjQ0NzEgMjUuMDA2NEMzOS44MDEgMjUuMzU4MyA0MCAyNS44MzY4IDQwIDI2LjMzNTlDNDAgMjYuODM1IDM5LjgwMSAyNy4zMTM1IDM5LjQ0NzEgMjcuNjY1NUwzMi40MTU5IDM0LjY1NzZDMzEuNjgxNiAzNS4zODc4IDMwLjQ5NDQgMzUuMzg0NSAyOS43NjQyIDM0LjY1MDNaIiBmaWxsPSIjMzUzRjZFIi8+Cjwvc3ZnPgo="},"displayName":"Extract from File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1236,"icon":"file:aggregate.svg","name":"n8n-nodes-base.aggregate","codex":{"data":{"alias":["Aggregate","Combine","Flatten","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Aggregate"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjRkY2RDVBIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMyIDE0OGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE0NmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJINDRjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTAgOTZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNDZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDQ0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyem0wIDk2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTQ2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg0NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik03NCA3NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDExNi4yMTdjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjU2YzAgMjYuOTc4IDEwLjI3MiA1MS41NTcgMjcuMTE5IDcwLjAzOSA1LjA1NSA1LjU0NSA1LjA1NSAxNC4zNzcgMCAxOS45MjItMTYuODQ3IDE4LjQ4Mi0yNy4xMTkgNDMuMDYxLTI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMySDg2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTE2LjIxN2M0NC4xODMgMCA4MC0zNS44MTcgODAtODB2LTU2YzAtMzAuOTI4IDI1LjA3Mi01NiA1Ni01NmE1Ljc4MyA1Ljc4MyAwIDAgMCA1Ljc4My01Ljc4M3YtMzYuNDM0YTUuNzgzIDUuNzgzIDAgMCAwLTUuNzgzLTUuNzgzYy0zMC45MjggMC01Ni0yNS4wNzItNTYtNTZ2LTU2YzAtNDQuMTgzLTM1LjgxNy04MC04MC04MEg4NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNzYgMjQ0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgzODhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUxMnY1MTJIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="},"displayName":"Aggregate","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":17,"name":"HR"},{"id":51,"name":"Multimodal AI"}],"image":[]}}