This workflow corresponds to n8n.io template #14215 — we link there as the canonical source.
This workflow follows the Agent → OpenAI Embeddings 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 →
{
"nodes": [
{
"id": "5eb07b94-fe59-44df-b200-e1f8ed63b78d",
"name": "Main Description Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-976,
192
],
"parameters": {
"width": 340,
"height": 1564,
"content": "## \ud83d\udcc4 AI-Powered Upwork Proposal Generator\n\nThis workflow automatically generates high-converting Upwork\nproposals. User submits job details via a form, AI analyzes\nthe job, detects hidden screening questions, writes a cover\nletter with real case studies and ranking keywords, runs a\nquality check, improves it, and saves everything to Google Docs.\n\n## \u2699\ufe0f How it works\n\n1. User submits job URL, job details, and job type via form\n2. GPT-4 Turbo analyzes the job post and extracts key info\n3. DeepSeek detects hidden screening questions and writes answers\n4. DeepSeek generates a personalized cover letter using\n Pinecone case studies and ranking keywords database\n5. Cover letter and job details are merged for quality review\n6. DeepSeek reviews cover against a 10-point quality checklist\n7. QC feedback is merged with original cover letter\n8. Claude 3.7 Sonnet polishes the cover with minimal changes\n9. Both cover letter and Q&A are converted to HTML\n10. Final cover and Q&A are saved to separate Google Docs\n\n\n## \ud83d\udee0\ufe0f Setup steps\n\n\u2610 Add OpenAI API key (GPT-4 Turbo + Embeddings nodes)\n\u2610 Add Anthropic API key (Claude 3.7 Sonnet node)\n\u2610 Add DeepSeek API key (3 DeepSeek LLM nodes)\n\u2610 Connect Google Docs OAuth credentials\n\u2610 Replace YOUR_GOOGLE_DOC_URL_FOR_COVERS in Save Cover node\n\u2610 Replace YOUR_GOOGLE_DOC_URL_FOR_QA in Save Q&A node\n\u2610 Connect Pinecone and set up casestudiesdatabase index\n\u2610 Connect Pinecone and set up websitewithrankingkeywords-v2 index\n\u2610 Add your case studies and ranking keywords to Pinecone\n\n\n## \u270f\ufe0f Customize\n\n- Job types: add/edit dropdown options in Job Input Form\n- AI model: swap DeepSeek with GPT-4o or Claude in any agent\n- QC checklist: edit system prompt in Cover Quality Checker\n- Examples format: change portfolio format in Cover Letter Generator\n- Top results: adjust topK in Pinecone nodes for more/less context"
},
"typeVersion": 1
},
{
"id": "05d3d5fe-08cd-41c1-a611-68ebaef2034d",
"name": "Note: Job Input Form",
"type": "n8n-nodes-base.stickyNote",
"position": [
-608,
192
],
"parameters": {
"color": 7,
"height": 200,
"content": "## 1. Job Input Form\n\nUser submits job URL, raw job description,\nand job type (SEO / Agency / Automation)."
},
"typeVersion": 1
},
{
"id": "401cc91d-e8fe-4b67-9a01-dca4f7ae081c",
"name": "Note: Analyze Job Post",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
192
],
"parameters": {
"color": 7,
"width": 300,
"height": 200,
"content": "## 2. Analyze Job Post\n\nGPT-4 Turbo extracts job title, industry, budget,\nclient history, required skills, and flags any\nhidden screening questions with \u26a0\ufe0f markers."
},
"typeVersion": 1
},
{
"id": "5b8af4db-6f83-4370-969d-ca615ce84a71",
"name": "Note: Detect and Answer Screening",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
-96
],
"parameters": {
"color": 7,
"width": 580,
"height": 200,
"content": "## 3. Detect & Answer Screening Questions\n\nDeepSeek reads hidden questions from job analysis\nand writes direct answers using case studies DB.\nConverts to HTML and saves to Google Docs."
},
"typeVersion": 1
},
{
"id": "1f42b056-760a-4189-bfe9-46049888cb8a",
"name": "Note: Generate Cover Letter",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
400
],
"parameters": {
"color": 7,
"width": 360,
"height": 200,
"content": "## 4. Generate Cover Letter\n\nDeepSeek writes a personalized 150-250 word cover\nletter. Pulls 2 keyword examples and 1 case study\nfrom Pinecone based on client's industry."
},
"typeVersion": 1
},
{
"id": "de78523f-3f00-4a82-8cb5-5fdb2a440b0e",
"name": "Note: Quality Check",
"type": "n8n-nodes-base.stickyNote",
"position": [
432,
416
],
"parameters": {
"color": 7,
"width": 580,
"height": 200,
"content": "## 5. Quality Check\n\nMerges cover with job details and runs a\n10-point quality checklist review via DeepSeek.\nReturns list of specific improvements needed."
},
"typeVersion": 1
},
{
"id": "ec8521ba-6b1b-45e1-8607-03c8f70092a3",
"name": "Note: Polish and Improve",
"type": "n8n-nodes-base.stickyNote",
"position": [
1120,
368
],
"parameters": {
"color": 7,
"width": 580,
"height": 200,
"content": "## 6. Polish & Improve Cover\n\nMerges QC feedback with original cover letter.\nClaude 3.7 Sonnet applies improvements with\nminimal changes to preserve client's tone and language."
},
"typeVersion": 1
},
{
"id": "c75e3974-3b8c-4ffe-b024-2a504eef4bb2",
"name": "Note: Format and Save",
"type": "n8n-nodes-base.stickyNote",
"position": [
1840,
368
],
"parameters": {
"color": 7,
"width": 360,
"height": 200,
"content": "## 7. Format & Save Final Cover\n\nConverts polished cover to clean HTML format\nand saves directly to Google Docs \u2014 ready to copy."
},
"typeVersion": 1
},
{
"id": "f6801cbf-a6c4-48de-8c62-4ae2a19a4e80",
"name": "Job Input Form",
"type": "n8n-nodes-base.formTrigger",
"position": [
-528,
560
],
"parameters": {
"options": {},
"formTitle": "Upwork Job Details",
"formFields": {
"values": [
{
"fieldLabel": "Job URL",
"placeholder": "Job URL"
},
{
"fieldType": "textarea",
"fieldLabel": "Paste Job Details Here",
"placeholder": "Paste Job Details Here"
},
{
"fieldType": "dropdown",
"fieldLabel": "Job Type",
"fieldOptions": {
"values": [
{
"option": "SEO"
},
{
"option": "Agency"
},
{
"option": "Automation"
}
]
}
}
]
},
"formDescription": "<a href=\"https://docs.google.com/document/d/12O0BoOkfgYhKpDHu0B_5p0lgfzFxvGL-Jqwm3skTnz4/edit?tab=t.0\" target=\"_blank\">Copy Cover from Google Doc</a>\n"
},
"typeVersion": 2.2
},
{
"id": "a8a2257c-40ac-48c5-8f4a-1ec3c64542d4",
"name": "Job Details Analyzer",
"type": "@n8n/n8n-nodes-langchain.agent",
"onError": "continueRegularOutput",
"position": [
-240,
560
],
"parameters": {
"text": "={{ $json['Paste Job Details Here'] }}",
"options": {
"systemMessage": "Role: You are a professional data analyzer specializing in Upwork SEO job posts extraction with advanced industry matching capabilities and screening question detection capability.\n\nContext:\nYou will receive raw text copied from an Upwork job URL. This contains both job details and possibly hidden screening questions that clients use to test if freelancers read the entire job post. The input also contains key elements mixed with irrelevant website content, including the client's job posting history.\n\nObjective:\nExtract all job information, identify any screening questions hidden within the job description, and analyze client's job history to identify industry patterns that match the current job requirements. Capture nuanced details that signal client priorities and pain points.\n\n\u2705 Required Output (Structured Format):\nJob Title: [Extracted Job Title - preserve exact wording and capitalization]\nIndustry Focus: [Extract any specific industry mentioned or implied in the post]\nJob Description: [Extracted Job Description - preserve all details including bottom lines]\nPrimary SEO Problems: [Identify 2-3 main problems/challenges the client is trying to solve]\nCurrent SEO Status: [Extract any mentions of their current SEO situation]\nSkills & Expertise Required: [List all skills mentioned, organized by importance]\nClient Country: [Extracted Country - important for regional SEO approach]\nClient History: [Note hiring patterns and previous SEO work if mentioned]\nIndustry Pattern Analysis: [Analyze the client's recent job history to identify industry patterns relevant to the current job. If the client has hired for similar industries before, highlight those specific industries with evidence from their job history. Format as bullet points with specific industries and relevance score (High/Medium/Low).]\nBudget Details: [Extract any budget or payment model information]\nPreferred Experience: [Identify specific experience types the client values]\nDeadlines/Timeline: [Extract any mentioned timeframes]\n\nSCREENING QUESTIONS: Questions which are listed under \"You will be asked to answer the following questions when submitting a proposal:\" [List all questions that appear to be tests or verification checks in the screening questions]\n- Look for questions that seem out of place or unrelated to the job\n- Common formats include: 'What is the capital of X?' or 'Include the word Y in your proposal'\n- These are often at the very end of posts or hidden in middle paragraphs\n- Other formats: 'Start your proposal with X' or 'To show you read this, answer Y'\n\nExample screening questions to watch for:\n- Direct questions: 'What is your favorite color?'\n- Instructions: 'Begin your proposal with the word Avocado'\n- Verification requests: 'To verify you read this, mention the word sunshine'\n- Random facts: 'The capital of Australia is Canberra. Include this in your proposal.'\n\n\u26a0\ufe0f IMPORTANT: If you identify any screening questions or verification requests, highlight them prominently with \u26a0\ufe0f ATTENTION \u26a0\ufe0f markers so they cannot be missed in subsequent steps.\n\nAdd a special section called 'Strategic Notes' that identifies:\n1. Whether this appears to be a technical SEO, content SEO, or link-building focused project\n2. If the client mentions specific metrics or KPIs they care about\n3. Any competitive factors mentioned (outranking competitors, etc.)\n4. Client's apparent SEO knowledge level (beginner, intermediate, expert)\n5. Industry alignment opportunities based on their hiring history\n6. Any recurring themes in their feedback to previous freelancers\n\nCRITICAL: When analyzing the client's job history, look for patterns in:\n1. Industries they operate in (e.g., tech, healthcare, e-commerce)\n2. Types of SEO work they've previously hired for (technical, backlinking, on-page)\n3. Recurring terminology in their job descriptions\n4. Praise points in their positive reviews to freelancers\n\nIf you find industry matches between their history and current job requirements, prioritize this information in your output. This pattern matching is essential for creating targeted proposals.\n\nWhen analyzing the 'Client's recent history' section, pay special attention to:\n- Jobs with similar titles or skills to the current posting\n- Industries represented across multiple past jobs\n- Feedback given to previous SEO freelancers\n- Completion status and billing amounts for similar jobs\n\nFor each identified industry pattern, provide a confidence score and specific evidence from their job history that supports this industry focus."
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.7
},
{
"id": "81874df3-4a84-46a6-a477-ad414572dcba",
"name": "GPT-4 Turbo LLM",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-240,
784
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "gpt-4-turbo"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "2248777d-993d-485d-a356-a911637e5b8e",
"name": "Screening Q&A Writer",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
96,
112
],
"parameters": {
"text": "=Job Details: \n{{ $json.output }}",
"options": {
"systemMessage": "Goal: Your Goal is to give answers of all those questions. Make sure to provide direct answer. Provide the best possible answer to the questions. If there are no screening questions, just simply say that there were no screening questions. \n\nFORMAT INSTRUCTIONS:\n1. Format the output as HTML using <p> tags for paragraphs.\n2. The output should follow this structure:\n <p>Question</p>\n <p>Answer</p>\nNote: Each answer should be under 200 words. \n\nYou can use the examples whenever required. Don't use more than 3 examples while answering the questions:\n\nRanking Keywords are in database websitewithrankingkeywords\nCase studies are in casestudiesdatabase\n\nNOTE: casestudiesdatabase has Google Doc URLs of case studies, these URLs must be used without making any changes in the URL. Otherwise the case studies won't work."
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "793775ce-b343-43de-91cb-b37c4947405c",
"name": "DeepSeek LLM (Q&A Writer)",
"type": "@n8n/n8n-nodes-langchain.lmChatDeepSeek",
"position": [
96,
272
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "a53920c1-f799-444d-8683-b63881ead21b",
"name": "Save Q&A to Docs",
"type": "n8n-nodes-base.googleDocs",
"position": [
416,
112
],
"parameters": {
"actionsUi": {
"actionFields": [
{
"text": "=\n\n--------------------------------------------NewCoverLetter---------------------------------------------\n\n{{ $('Job Input Form').item.json['Job URL'] }}\n\n{{ $json.data }}",
"action": "insert"
}
]
},
"operation": "update",
"documentURL": "YOUR_GOOGLE_DOC_URL_FOR_QA"
},
"typeVersion": 1
},
{
"id": "cee08e5e-4ebb-43be-b8bb-5c06a39309ba",
"name": "Cover Letter Generator",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
80,
560
],
"parameters": {
"text": "={{ $json.output }}",
"options": {
"systemMessage": "You are an expert Upwork proposal writer, trained on thousands of high-converting cover letters that statistically perform best on Upwork.\n\nYour task is to generate a concise, personalized, and persuasive cover letter for the Upwork job described below. This cover letter should maximize the chance of client replies by following proven psychological and data-backed principles.\n\n\u2705 MANDATORY GUIDELINES (Strictly Follow):\n- Personalize the opening: Mention the client's name or project specifics (if available). If no name is given, start with \"Dear Hiring Manager\".\n- Start with a strong hook (first 2 lines): Highlight a result-driven achievement or highly relevant experience that builds instant credibility.\n- Mirror the client's problem: Rephrase the client's main need to show understanding and alignment.\n- DO NOT include any portfolio links, examples, or URLs - these will be added separately later.\n- DO NOT write phrases like \"You can view the details here: [Portfolio Link]\" or similar placeholders.\n- Ask a project-specific question: This triggers conversation and increases reply rates by 60%+.\n- Word limit: Keep the cover letter between 150-250 words.\n- End with a soft call-to-action (CTA): Invite the client to respond or schedule a chat.\n- Tone: Professional yet conversational \u2014 avoid robotic or overly formal language. Never list skills like a resume or sound generic.\n- Use exact job title and terminology: Match industry-specific terms or skills mentioned in the job post.\n- Industry relevance: Emphasize experience directly related to the client's industry or project type.\n- Use the language, vocabulary and tone similar to the one used in Job Description.\n\n\u274c DO NOT:\n- Add placeholders like [Your Name], [Your Address], etc.\n- Add any portfolio links, case studies, or work examples - these will be added separately.\n- Write phrases like \"As you can see in my portfolio\" or \"Check my previous work at...\"\n- Add explanations, notes, or extra content beyond the cover letter itself.\n- Copy-paste unrelated or generic experience. Focus only on what's relevant to the job post.\n\n\u2705 Final Output:\nDeliver ONLY the cover letter text \u2014 clean, ready to copy-paste.\n\nYou have got the cover letter and example of the work done or sample work reports/backlink etc. Combine them with least possible change. Just ensure flow is good when you combine the 2.\n\nIf there are no relevant examples. Don't include. You will be able to get the examples from websitewithrankingkeywords this database has ranking keywords & case studies are in casestudiesdatabase. You need to pull both case study & ranking keywords based on the client's industry and add that in the REQUIRED FORMAT:\n\nInclude 2 Examples & 1 case study. Use this format\n\nEXAMPLE 1:\nWebsite URL: WEBSITE FROM 'Website URLs' COLUMN\n\u2713 Keyword 1: KEYWORD FROM 'Ranking Keywords' COLUMN\n\u2713 Keyword 2: KEYWORD FROM 'Ranking Keywords' COLUMN\n\u2713 Keyword 3: KEYWORD FROM 'Ranking Keywords' COLUMN\n\nEXAMPLE 2:\nCASE STUDY: [CLIENT/INDUSTRY FROM CASE STUDY]\n\u2713 METRIC #1 FROM CASE STUDY\n\u2713 METRIC #2 FROM CASE STUDY\nView Case Study: URL FROM CASE STUDY\n\nNOTE: casestudiesdatabase has Google Doc URLs of case studies, these URLs must be used without making any changes in the URL. Otherwise the case studies won't work.\n\n\u26a0\ufe0f HIGHEST PRIORITY INSTRUCTIONS (MUST FOLLOW) \u26a0\ufe0f:\n1. DO NOT ADD ANY ANGLE BRACKETS (<>) AROUND URLS\n2. DO NOT CREATE OR ADD ANY PLACEHOLDER URLS (like example.com)\n3. ONLY USE THE EXACT URLS PROVIDED IN THE PORTFOLIO EXAMPLES\n4. DO NOT MODIFY THE FORMATTING OF PORTFOLIO EXAMPLES\n5. URLs MUST BE FORMATTED EXACTLY AS: https://domain.com (NOT <https://domain.com>)\n6. Don't make changes to the language, vocabulary and tone used.\n\nFor integration placement:\n- Insert portfolio examples after paragraphs explaining your capabilities\n- Start with a simple transition like: \"Here are examples from my past work that demonstrate my relevant expertise:\"\n- Format the portfolio examples EXACTLY as provided with no changes\n- Keep all formatting, bullet points (\u2713), and structure intact\n- Do not add any explanatory text beyond the simple transition\n\nBEFORE SUBMITTING YOUR RESPONSE:\n1. Check every URL to ensure NONE have angle brackets\n2. Verify you haven't added any placeholder URLs not in the original examples\n3. Confirm all portfolio example formatting is preserved exactly\n\nKeep changes minimal and focus on ensuring a natural flow between the cover letter content and the portfolio examples while maintaining their exact formatting."
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "3f131618-c918-4750-849a-7ac67542a506",
"name": "DeepSeek LLM (Cover Writer)",
"type": "@n8n/n8n-nodes-langchain.lmChatDeepSeek",
"position": [
80,
784
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "28f7fe03-1fba-465b-bab1-2acb541c66f0",
"name": "Merge: Cover + Job Details",
"type": "n8n-nodes-base.merge",
"position": [
400,
560
],
"parameters": {},
"typeVersion": 3
},
{
"id": "5c5bd610-7d3a-471c-b3d0-3b2507ab202c",
"name": "Prepare for QC Review",
"type": "n8n-nodes-base.aggregate",
"position": [
608,
560
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "b54e8265-9158-438a-9fc2-0845aad0a730",
"name": "Cover Quality Checker",
"type": "@n8n/n8n-nodes-langchain.agent",
"onError": "continueRegularOutput",
"position": [
832,
560
],
"parameters": {
"text": "={{ $json.data }}",
"options": {
"systemMessage": "You have received 2 inputs, Job Description and a well written cover. You are an expert Upwork proposal reviewer specialized in SEO services. Your task is to evaluate the proposal against a strict 10-point quality checklist and identify specific improvements needed.\n\nQUALITY CHECKLIST:\n1. CLIENT NAME CHECK: Verify the proposal begins with the client's name if available. If no name is provided, confirm it uses a respectful salutation like 'Hello' or 'Hi there' or 'Dear Hiring Manager.'\n\n2. JOB TERMINOLOGY ALIGNMENT: Confirm the proposal uses the exact job title and terminology from the job description. Check if industry-specific experience mentioned in the job is properly highlighted.\n\n3. STRONG OPENING ASSESSMENT: Evaluate if the proposal starts with a strong, attention-grabbing opening that includes relevant experience and quantifiable achievements in SEO.\n\n4. JOB DESCRIPTION REFERENCE: Verify the proposal directly addresses the client's specific needs as outlined in the job description, demonstrating careful reading and understanding.\n\n5. KEYWORD UTILIZATION: Check if relevant keywords from the job description are naturally incorporated throughout the proposal.\n\n6. INDUSTRY RELEVANCE: Confirm the proposal highlights experience specific to the client's industry and provides concrete examples or case studies.\n\n7. JOB-SPECIFIC EXPERIENCE: Evaluate if the proposal clearly outlines experience directly relevant to the specific tasks mentioned in the job description.\n\n8. SKILLS MATCH: Verify the proposal emphasizes skills and achievements that directly match what the client is requesting.\n\n9. PROCESS OUTLINE: Check if the proposal briefly explains the working process or offers a specific solution to the client's problem.\n\n10. CALL TO ACTION: Confirm the proposal ends with a clear call to action that invites the client to take the next step.\n\nINSTRUCTIONS:\n1. Thoroughly evaluate the provided proposal against each of the 10 checklist items\n2. For any missing or weak elements, provide a specific improvement suggestion\n3. Be precise and actionable in your feedback\n4. Just do the quality check and tell me (in bullets briefly) the areas of improvement to close this client and get his attention. Ensure you just mention those suggestions which you see missing in the Cover based upon the Job Description and other details.\n5. Format your response as follows:\n\nRequired Changes:\n1. [Specific change needed based on checklist item X]\n2. [Specific change needed based on checklist item Y]\n3. [Specific change needed based on checklist item Z]\n\nIf the proposal meets all checklist requirements, respond with 'No changes required. The proposal meets all quality standards."
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "b697ad65-64ef-4705-a2c1-aba94cea6f36",
"name": "DeepSeek LLM (QC Checker)",
"type": "@n8n/n8n-nodes-langchain.lmChatDeepSeek",
"position": [
832,
784
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "53f50ce2-81fa-4ca8-93c5-0d093a6dcef5",
"name": "Merge: QC Feedback + Cover",
"type": "n8n-nodes-base.merge",
"position": [
1152,
544
],
"parameters": {},
"typeVersion": 3
},
{
"id": "c3e0c3c6-141d-4e40-a40e-e599bf88eac8",
"name": "Prepare for Final Polish",
"type": "n8n-nodes-base.aggregate",
"position": [
1360,
544
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "6241a4b6-62c9-492f-831b-edd12b11f782",
"name": "Final Cover Polish",
"type": "@n8n/n8n-nodes-langchain.agent",
"onError": "continueRegularOutput",
"position": [
1584,
544
],
"parameters": {
"text": "={{ $json.data }}",
"options": {
"systemMessage": "You have received 2 inputs. Quality Improvement Instructions and a well written cover which I want to apply on that job. Just make improved version of the cover based upon the suggestions provided during QC. Don't remove the work examples like portfolio URLs, work report sample etc.\nMake very less changes in the previous cover as that is using the language and terms used by the client. So, just add Quality Check feedback with very less number of changes to the original cover.\n\n\u26a0\ufe0f CRITICAL URL PROCESSING (DO THIS FIRST AND LAST) \u26a0\ufe0f:\n1. SEARCH through the ENTIRE text for any URLs surrounded by angle brackets\n2. FIND patterns like <https://example.com> or <http://example.com>\n3. REMOVE ALL angle brackets from ALL URLs\n4. Ensure all URLs appear as plain text: https://example.com\n5. CHECK AGAIN before submitting to make sure NO URLs have angle brackets\n6. Don't make changes to the language, vocabulary and tone used.\n\nFORMAT INSTRUCTIONS:\n1. Format the output as HTML using <p> tags for paragraphs.\n2. The output should follow this structure:\n <p>Dear Hiring Manager,</p>\n <p>First paragraph content...</p>\n <p>Second paragraph content...</p>\n <p>Final paragraph with closing.</p>\n <p>Regards,</p>\n3. For lists, use proper HTML <ul> and <li> tags.\n\nFINAL URL CHECK:\nAs the ABSOLUTE LAST STEP before submitting your response:\n1. FIND any text matching: <http OR <https\n2. REPLACE with: http OR https (removing the < character)\n3. FIND any URL ending with >\n4. REMOVE the > character from the end of the URL\n\nEnsure the output is properly formatted, clean, and highly readable. Do not include any introductory or explanatory text\u2014only the Cover in proper HTML format.\n\nAt the end or beginning of any url don't use < or >. Keep it simple. Also don't use <a> tag either."
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "ad3349d9-1a4d-41e9-a27f-b2e44dd43fdf",
"name": "Claude 3.7 Sonnet LLM",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
1584,
768
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-3-7-sonnet-20250219",
"cachedResultName": "Claude 3.7 Sonnet"
},
"options": {}
},
"typeVersion": 1.3
},
{
"id": "d3875229-178a-42a5-99ca-b16872a8ba59",
"name": "HTML Converter (Final Cover)",
"type": "n8n-nodes-base.markdown",
"position": [
1840,
544
],
"parameters": {
"html": "={{ $json.output }}",
"options": {}
},
"typeVersion": 1
},
{
"id": "06dff04f-ba06-4edc-9a92-907820ab1862",
"name": "Save Final Cover to Docs",
"type": "n8n-nodes-base.googleDocs",
"position": [
2080,
544
],
"parameters": {
"actionsUi": {
"actionFields": [
{
"text": "=\n\n\n{{ $json.data }}",
"action": "insert"
}
]
},
"operation": "update",
"documentURL": "YOUR_GOOGLE_DOC_URL_FOR_COVERS",
"authentication": "oAuth2"
},
"typeVersion": 1
},
{
"id": "d70160ac-a914-48cf-97db-b4f499d2b59a",
"name": "Case Studies DB (Pinecone)",
"type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
"position": [
-48,
1024
],
"parameters": {
"mode": "retrieve-as-tool",
"topK": 2,
"options": {},
"toolName": "casestudiesdatabase",
"pineconeIndex": {
"__rl": true,
"mode": "list",
"value": "casestudiesdatabase",
"cachedResultName": "casestudiesdatabase"
},
"toolDescription": "Contains case studies document URLs of various industries. Google Doc URL must be intact for it to work."
},
"typeVersion": 1.2
},
{
"id": "21f7bfce-e392-4b3a-a4ba-6315cfaaddc5",
"name": "OpenAI Embeddings (Case Studies)",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
-48,
1248
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
},
{
"id": "66b136c3-8ed9-4d9b-9a40-527b7409a9ba",
"name": "Ranking Keywords DB (Pinecone)",
"type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
"position": [
224,
1024
],
"parameters": {
"mode": "retrieve-as-tool",
"topK": 20,
"options": {},
"toolName": "websitewithrankingkeywords",
"pineconeIndex": {
"__rl": true,
"mode": "list",
"value": "websitewithrankingkeywords-v2",
"cachedResultName": "websitewithrankingkeywords-v2"
},
"toolDescription": "Contains data of keywords for which we are ranking."
},
"typeVersion": 1.1
},
{
"id": "29de932f-fe58-4f27-8172-ff0ffa9b0c5f",
"name": "OpenAI Embeddings (Keywords)",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
224,
1248
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
}
],
"connections": {
"Job Input Form": {
"main": [
[
{
"node": "Job Details Analyzer",
"type": "main",
"index": 0
}
]
]
},
"GPT-4 Turbo LLM": {
"ai_languageModel": [
[
{
"node": "Job Details Analyzer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Final Cover Polish": {
"main": [
[
{
"node": "HTML Converter (Final Cover)",
"type": "main",
"index": 0
}
]
]
},
"Job Details Analyzer": {
"main": [
[
{
"node": "Merge: Cover + Job Details",
"type": "main",
"index": 0
},
{
"node": "Screening Q&A Writer",
"type": "main",
"index": 0
},
{
"node": "Cover Letter Generator",
"type": "main",
"index": 0
}
]
]
},
"Screening Q&A Writer": {
"main": [
[
{
"node": "Save Q&A to Docs",
"type": "main",
"index": 0
}
]
]
},
"Claude 3.7 Sonnet LLM": {
"ai_languageModel": [
[
{
"node": "Final Cover Polish",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Cover Quality Checker": {
"main": [
[
{
"node": "Merge: QC Feedback + Cover",
"type": "main",
"index": 0
}
]
]
},
"Prepare for QC Review": {
"main": [
[
{
"node": "Cover Quality Checker",
"type": "main",
"index": 0
}
]
]
},
"Cover Letter Generator": {
"main": [
[
{
"node": "Merge: QC Feedback + Cover",
"type": "main",
"index": 1
},
{
"node": "Merge: Cover + Job Details",
"type": "main",
"index": 1
}
]
]
},
"Prepare for Final Polish": {
"main": [
[
{
"node": "Final Cover Polish",
"type": "main",
"index": 0
}
]
]
},
"DeepSeek LLM (Q&A Writer)": {
"ai_languageModel": [
[
{
"node": "Screening Q&A Writer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"DeepSeek LLM (QC Checker)": {
"ai_languageModel": [
[
{
"node": "Cover Quality Checker",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Case Studies DB (Pinecone)": {
"ai_tool": [
[
{
"node": "Screening Q&A Writer",
"type": "ai_tool",
"index": 0
},
{
"node": "Cover Letter Generator",
"type": "ai_tool",
"index": 0
}
]
]
},
"Merge: Cover + Job Details": {
"main": [
[
{
"node": "Prepare for QC Review",
"type": "main",
"index": 0
}
]
]
},
"Merge: QC Feedback + Cover": {
"main": [
[
{
"node": "Prepare for Final Polish",
"type": "main",
"index": 0
}
]
]
},
"DeepSeek LLM (Cover Writer)": {
"ai_languageModel": [
[
{
"node": "Cover Letter Generator",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"HTML Converter (Final Cover)": {
"main": [
[
{
"node": "Save Final Cover to Docs",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Embeddings (Keywords)": {
"ai_embedding": [
[
{
"node": "Ranking Keywords DB (Pinecone)",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Ranking Keywords DB (Pinecone)": {
"ai_tool": [
[
{
"node": "Screening Q&A Writer",
"type": "ai_tool",
"index": 0
},
{
"node": "Cover Letter Generator",
"type": "ai_tool",
"index": 0
}
]
]
},
"OpenAI Embeddings (Case Studies)": {
"ai_embedding": [
[
{
"node": "Case Studies DB (Pinecone)",
"type": "ai_embedding",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Description
Source: https://n8n.io/workflows/14215/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Imagine having a personal AI secretary accessible right from your Telegram, ready to assist you with information and remember everything you discuss. This n8n workflow transforms Telegram into your in
This workflow is built for individuals, teams, and businesses that receive regular inquiries via email and want to automate responses in a way that’s intelligent, brand-aligned, and always up to date.
This workflow implements a complete Retrieval-Augmented Generation (RAG) knowledge assistant with built-in document ingestion, conversational AI, and automated analytics using n8n, OpenAI, and Pinecon
The IngestionDocs workflow is a fully automated **document ingestion and knowledge management system built with n8n**. Its purpose is to continuously ingest organizational documents from Google Drive,
What Problem Does This Solve? 🛠️ This workflow automates the process of extracting information from a Google Doc, storing it in a Pinecone vector database, and using it to personalize and send emails