This workflow corresponds to n8n.io template #9859 — we link there as the canonical source.
This workflow follows the Agent → Emailsend 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 →
{
"id": "pWwGK5GKRNhv1Lxi",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "ArXiv Curator",
"tags": [],
"nodes": [
{
"id": "73958f40-4cd5-4f03-8114-934d5ce12545",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
16,
368
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.5-flash-lite"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "0aa97c0c-ad06-4b25-bedb-227841397983",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
208,
368
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"title\": {\n \"type\": \"string\",\n \"description\": \"Paper title\"\n },\n \"abstract\": {\n \"type\": \"string\",\n \"description\": \"Paper abstract/summary\"\n },\n \"arxiv_id\": {\n \"type\": \"string\",\n \"description\": \"ArXiv id\"\n },\n \"pdf_link\": {\n \"type\": \"string\",\n \"description\": \"Direct PDF link\"\n },\n \"relevance_score\": {\n \"type\": \"number\",\n \"description\": \"Integer from 1-10, where 10 = immediately actionable\"\n },\n \"key_insight\": {\n \"type\": \"string\",\n \"description\": \"One sentence on what practitioners can do differently\"\n },\n \"expected_impact\": {\n \"type\": \"string\",\n \"description\": \"Specific improvement users might see\"\n }\n },\n \"required\": [\"title\", \"abstract\", \"arxiv_id\", \"pdf_link\", \"relevance_score\", \"key_insight\", \"expected_impact\"]\n }\n}"
},
"typeVersion": 1.3
},
{
"id": "ebedeb64-aef7-462c-9915-75af9188e6f7",
"name": "Google Gemini Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
912,
544
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "6a341ed5-dc00-4333-9ecb-b478784e51bb",
"name": "Structured Output Parser1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1088,
544
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"arxiv_id\": {\n \"type\": \"string\",\n \"description\": \"ArXiv id\"\n },\n \"approach\": {\n \"type\": \"string\",\n \"description\": \"Core research question and methodology (2-3 sentences)\"\n },\n \"key_findings\": {\n \"type\": \"string\",\n \"description\": \"Specific results with numbers where available (3-4 sentences)\"\n },\n \"value\": {\n \"type\": \"string\",\n \"description\": \"What practitioners can actually do with this (2-3 sentences)\"\n },\n \"limitations\": {\n \"type\": \"string\",\n \"description\": \"Critical constraints on applicability (1-2 sentences)\"\n },\n \"bottom_line\": {\n \"type\": \"string\",\n \"description\": \"Is this genuinely actionable for AI users (1 sentence)\"\n }\n },\n \"required\": [\"arxiv_id\", \"approach\", \"key_findings\", \"value\", \"limitations\", \"bottom_line\"]\n }\n}"
},
"typeVersion": 1.3
},
{
"id": "55603a10-5b27-4d3a-9105-689bb566ca03",
"name": "Send email",
"type": "n8n-nodes-base.emailSend",
"position": [
1936,
208
],
"parameters": {
"html": "={{ $json.html }}",
"options": {},
"subject": "Your daily ArXiv Paper report by @OfficeOptOut",
"toEmail": "owsipovs@hotmail.de",
"fromEmail": "officeoptout@gmail.com"
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "48093df1-3cef-40ae-bf47-545c028779d4",
"name": "Stop and Error",
"type": "n8n-nodes-base.stopAndError",
"position": [
832,
-160
],
"parameters": {
"errorMessage": "No Paper were retrieved from ArXiv. It's probably the weekend. Otherwise have a look what went wrong!"
},
"typeVersion": 1
},
{
"id": "8268b7b1-0d3d-4d4d-9e09-c530d43337ec",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-160,
-144
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "6 0 * * 2-5"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "83940444-dfd1-4b27-877e-eefa48d22d2f",
"name": "Construct API query",
"type": "n8n-nodes-base.code",
"position": [
32,
-144
],
"parameters": {
"jsCode": "const today = new Date();\nconst yesterday = new Date(today);\nyesterday.setDate(yesterday.getDate() - 1);\n\nfunction formatDate(date) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}${month}${day}0400`;\n}\n\nconst apiUrl = `https://export.arxiv.org/api/query?search_query=cat:cs.AI+AND+submittedDate:[${formatDate(yesterday)}+TO+${formatDate(today)}]&max_results=1000`;\n\nreturn { json: { url: apiUrl } };"
},
"typeVersion": 2
},
{
"id": "b83696cc-cdd6-4f8a-a6d8-1d63751c2cdd",
"name": "Get ArXiv Paper Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
224,
-144
],
"parameters": {
"url": "={{ $json.url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "40fb033c-4a6c-4918-a186-05c638d86221",
"name": "Convert XML Feed",
"type": "n8n-nodes-base.xml",
"position": [
416,
-144
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "dcbf25e3-cf31-4f65-b8be-206a7b6ad288",
"name": "Check Paper Availability",
"type": "n8n-nodes-base.switch",
"position": [
624,
-144
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "9ad4d502-154e-4be8-bffb-ce9c23a8b87f",
"operator": {
"type": "array",
"operation": "notExists",
"singleValue": true
},
"leftValue": "={{ $json.feed.entry }}",
"rightValue": ""
}
]
}
},
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3cc4339e-9046-44a6-921a-5806d06e4e41",
"operator": {
"type": "array",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.feed.entry }}",
"rightValue": "="
}
]
},
"renameOutput": "="
}
]
},
"options": {}
},
"typeVersion": 3.3
},
{
"id": "a7b9bad7-e6d5-4828-ae2a-3c7d81f075b5",
"name": "Paper Relevance Analyzer",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
48,
192
],
"parameters": {
"text": "=Here's the papers to rank: {{ JSON.stringify($json.entries) }}\n",
"options": {
"systemMessage": "<role>AI research curator for high-value academic papers</role>\n<task>Filter ArXiv papers and select exactly 3 papers that match the criteria.</task>\n\n<mission>Identify research that cuts through AI hype with evidence-based insights, providing actionable techniques for users who already actively use AI tools (ChatGPT, Claude, etc.) in professional work</mission>\n\n<target_relevance_profile>\nPapers should benefit AI users who:\n- Want evidence-backed techniques that improve their AI outcomes\n- Seek the \"what works\" over theoretical \"why\"\n- Are skeptical and value their time\n</target_relevance_profile>\n\n<must_have>\n- Practical Application: Research must directly impact how practitioners use AI tools. Ask: \"Can someone implement this insight and see improved results within a week?\"\n- Measurable Outcomes: Papers should enable users to achieve tangible improvements (better accuracy, efficiency, output quality)\n- Tool-Relevant: Focus on research about using, prompting, or optimizing existing AI systems rather than building new ones\n</must_have>\n\n<high_priority_topics>\n- Prompt engineering techniques and optimization\n- RAG (Retrieval-Augmented Generation) improvements\n- Evaluation methods for LLM outputs\n- Human-AI interaction patterns\n- Cost/performance optimization\n- Reliability and consistency improvements\n</high_priority_topics>\n\n<exclude>\n- Pure theoretical advances without clear practical application\n- Hardware/infrastructure papers (unless directly affecting tool usage)\n- Papers primarily about model architecture internals\n- Research requiring massive computational resources to implement\n- Marketing-disguised-as-research or obvious product announcements\n- Ethics/policy papers (unless containing actionable guidelines)\n- Papers about training large models from scratch\n</exclude>\n\n<interpretation_reminder>\nWhen identifying practical applications from abstracts:\n- Stay true to what the abstract actually claims\n- Don't invent capabilities or results that aren't mentioned\n- Reasonable extrapolation to practical use cases is expected and necessary\n- If unsure whether an application is supported by the abstract, err on the conservative side\n</interpretation_reminder>\n\n<output_format>\nReturn your analysis as a JSON array containing exactly 3 papers, ranked by relevance score (highest first). DO NOT REPLY ANYTHING BESIDES THE JSON ARRRAY!\nEach paper object must follow this schema:\n{{\n \"title\": \"string\", // Paper title\n \"abstract\": \"string\", // Paper abstract/summary\n \"arxiv_id\": \"string\", // ArXiv id (e.g., \"2509.17413v1\")\n \"pdf_link\": \"string\", // Direct PDF link (e.g., \"http://arxiv.org/pdf/2509.17413v1\")\n \"relevance_score\": number, // Integer from 1-10, where 10 = immediately actionable\n \"key_insight\": \"string\", // One sentence on what practitioners can do differently\n \"expected_impact\": \"string\" // Specific improvement users might see\n}}\nExample output structure:\n[\n {{\n \"title\": \"Prompt Engineering with XML: A Structured Approach\",\n \"abstract\": \"This paper explores how XML formatting impacts LLM prompt accuracy...\",\n \"arxiv_id\": \"2509.17413v1\",\n \"pdf_link\": \"http://arxiv.org/pdf/2509.17413v1\",\n \"relevance_score\": 9,\n \"key_insight\": \"Use XML formatting for complex prompts to increase accuracy by up to 300%\",\n \"expected_impact\": \"Better results without changing prompt content, just structure\"\n }},\n {{\n \"title\": \"Advanced Prompt Optimization Techniques\",\n \"abstract\": \"We investigate novel methods for optimizing prompt performance...\",\n \"arxiv_id\": \"2149.23463v2\",\n \"pdf_link\": \"http://arxiv.org/pdf/2149.23463v2\",\n \"relevance_score\": 8,\n \"key_insight\": \"...\",\n \"expected_impact\": \"...\"\n }}\n]\nReturn only the JSON array, no additional text or markdown code blocks.\nMake sure to NOT add any additional quotation marks (\"'`) where it's not required.\n</output_format>\n\n<decision_framework>\nWhen evaluating, ask:\n- Does this change what an AI user should DO tomorrow?\n- Can the average ChatGPT/Claude power user implement this?\n- Will implementation produce noticeable improvements?\n- Is there evidence (not just claims) of effectiveness?\n\nIf you answer \"no\" to any of these, the paper likely isn't relevant enough\n</decision_framework>\n\n<successful_examples>\n\nExample 1: Cross-Lingual Knowledge Transfer\n- Abstract Core: LLMs hallucinate when asked in one language about facts learned in another. Unification of representations across languages is essential for transfer\n- Why Selected: Directly impacts how billions of users should prompt AI for accuracy\n- Actionable Insight: Use English for general knowledge (75% more accurate), but switch to native language for culturally-specific information\n- Impact: Immediate accuracy improvement by choosing the right prompt language\n\nExample 2: Prompt Template Sensitivity\n- Abstract Core: LLM performance varies by up to 40% based on prompt format (plain text, Markdown, JSON, YAML). GPT-3.5 highly sensitive, GPT-4 more robust\n- Why Selected: Simple formatting change = massive performance boost, zero cost to implement\n- Actionable Insight: Use XML or Markdown formatting for complex prompts (up to 300% accuracy increase)\n- Impact: Better results without changing prompt content, just structure\n\n</successful_examples>\n\n<pattern_to_recognize>\nPapers that share these characteristics:\n- Offer simple changes with measurable impact\n- Apply to everyday AI usage (not just specialized tasks)\n</pattern_to_recognize>"
},
"promptType": "define",
"hasOutputParser": true
},
"retryOnFail": true,
"typeVersion": 2.2,
"waitBetweenTries": 5000
},
{
"id": "0764599c-9af8-409c-bf6f-9f823dbcd44f",
"name": "Split Data Fragments",
"type": "n8n-nodes-base.splitOut",
"position": [
384,
192
],
"parameters": {
"options": {},
"fieldToSplitOut": "output"
},
"typeVersion": 1
},
{
"id": "a394aa60-bae7-4d73-b05e-22aabbf36442",
"name": "Paper Summarizer",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
704,
352
],
"parameters": {
"text": "=<role>\nYou are an expert at analyzing AI research papers and extracting their practical implications for AI tool users. Your task is to provide concise, focused summaries of academic papers.\n</role>\n\n<objective>\nProduce unbiased summaries that capture what the paper ACTUALLY demonstrates, not what it could theoretically enable. Focus on actionable insights while remaining true to the paper's findings.\n</objective>\n\n<summary_structure>\n0. ID (The ArXiv ID of that document as an identifier, which is provided at the very bottom of this prompt)\n1. APPROACH (2-3 sentences)\nCore research question and methodology\n2. KEY FINDINGS (3-4 sentences)\n- Specific results with numbers where available\n- Most important discoveries only\n- Scope of testing\n3. PRACTICAL VALUE (2-3 sentences)\nWhat can practitioners actually do with this? Based ONLY on demonstrated results.\n4. MAJOR LIMITATIONS (1-2 sentences)\n- Critical constraints on applicability\n- What wasn't tested but matters for real use\n5. BOTTOM LINE (1 sentence)\nIs this genuinely actionable for AI users, or more theoretical?\n</summary_structure>\n\n<summarization_rules>\n- Stay grounded in what was actually proven\n- Include specific numbers over vague claims\n- Flag if there's a mismatch between claims and evidence\n- Don't extrapolate beyond the paper's scope\n- Keep total summary under 250 words\n</summarization_rules>\n\n<red_flags>\n- Testing on outdated models only\n- Narrow scenarios that don't generalize\n- Missing real-world applicability\n</red_flags>\n\n<reminder>\nRemember: Accuracy over comprehensiveness. Better to capture the essential truth concisely than to be thorough but lengthy.\n</reminder>\n\nHere is the ArXiv ID of the related document: {{ $json.arxiv_id }}",
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-flash-lite-latest",
"cachedResultName": "models/gemini-flash-lite-latest"
},
"options": {},
"resource": "document",
"documentUrls": "={{ $json.pdf_link }}"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "dc5c97cd-4461-4d1e-aa9d-3a7261d5eb8c",
"name": "Summary Formatter",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
928,
352
],
"parameters": {
"text": "=Here's the summary: {{ $json.content.parts[0].text }}\n",
"options": {
"systemMessage": "<role>You are an expert, automated data formatting agent. Your sole purpose is to convert a structured text summary of a research paper into a precise JSON format. You do not analyze, interpret, or add information; you only restructure the provided content. </role>\n\n<instruction>\n1. Parse the input text, which is divided into numbered sections starting with\u00a00. ID.\n2. Extract the ArXiv ID from the\u00a00. ID\u00a0section and map it directly to the\u00a0\"arxiv_id\"\u00a0field in the JSON.\n3. Map the content from the remaining text sections (1. APPROACH,\u00a02. KEY FINDINGS, etc.) to the corresponding JSON keys. Note that\u00a0PRACTICAL VALUE\u00a0maps to\u00a0\"value\"\u00a0and\u00a0MAJOR LIMITATIONS\u00a0maps to\u00a0\"limitations\".\n4. When populating the JSON values, remove the original numbered headings (e.g., \"1. APPROACH\") and any markdown formatting (like\u00a0**). Concatenate the sentences from each section into a single, clean string.\n5. Adhere strictly to the JSON schema and rules provided below.\n</instruction>\n\n\n<output_format>\nReturn your summary as a JSON object within a JSON array following this exact schema:\n[\n {{\n \"arxiv_id\": \"string\", // ArXiv id (e.g., \"2509.17413v1\")\n \"approach\": \"string\",\n \"key_findings\": \"string\",\n \"value\": \"string\",\n \"limitations\": \"string\",\n \"bottom_line\": \"string\"\n }}\n]\nExample output:\n[\n {{\n \"arxiv_id\": \"2509.17413v1\",\n \"approach\": \"Researchers tested whether XML-formatted prompts improve LLM accuracy compared to plain text prompts. They evaluated performance across 5 different models on 10 reasoning tasks.\",\n \"key_findings\": \"XML formatting increased accuracy by 15-30% across all models tested. Improvement was most significant on complex multi-step reasoning tasks and effect held consistent across model sizes from 7B to 70B parameters.\",\n \"value\": \"Users can immediately restructure existing prompts using XML tags to improve response quality without changing content. The technique requires no additional tokens or costs.\",\n \"limitations\": \"Only tested on reasoning tasks, not creative or conversational use cases. No evaluation of production latency impacts.\",\n \"bottom_line\": \"Immediately actionable technique with demonstrated benefits across multiple models and task types.\"\n }}\n]\nReturn only the JSON Array object, no additional text or markdown code blocks.\nMake sure to NOT add any additional quotation marks (\"'`) where it's not required.\nEnsure all strings are properly escaped for valid JSON.\n</output_format>"
},
"promptType": "define",
"hasOutputParser": true
},
"notesInFlow": false,
"retryOnFail": true,
"typeVersion": 2.2,
"waitBetweenTries": 5000
},
{
"id": "8f216c72-2bf3-400a-8b18-1151b88d11c9",
"name": "Merge Paper Data with Summaries",
"type": "n8n-nodes-base.merge",
"position": [
1408,
208
],
"parameters": {
"mode": "combine",
"options": {},
"advanced": true,
"joinMode": "enrichInput1",
"mergeByFields": {
"values": [
{
"field1": "arxiv_id",
"field2": "output[0].arxiv_id"
}
]
}
},
"typeVersion": 3.2,
"alwaysOutputData": false
},
{
"id": "1fb697a0-74d1-432f-a743-3e0e484e4b2d",
"name": "Create Aggregate",
"type": "n8n-nodes-base.aggregate",
"position": [
1584,
208
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "431bad28-c5b2-4653-91e0-77284b780c54",
"name": "Create HTML Template",
"type": "n8n-nodes-base.code",
"position": [
1760,
208
],
"parameters": {
"jsCode": "// n8n Code Node - ArXiv Email Template Generator\n// This node expects input items with a 'data' array containing paper objects\n\nconst inputData = $input.all();\n\n// Helper function to escape HTML\nfunction escapeHtml(text) {\n if (!text) return '';\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n// Get current date\nconst today = new Date().toLocaleDateString('en-US', { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric' \n});\n\n// Process all input items\nconst results = inputData.map(item => {\n const data = item.json.data || [];\n \n // Separate successful papers from errors\n const papers = [];\n const summaryErrors = [];\n \n data.forEach(paper => {\n if (paper.output && paper.output.length > 0) {\n // Successfully processed paper\n papers.push({\n final_score: paper.relevance_score || 0,\n updated_key_insight: paper.key_insight || '',\n updated_expected_impact: paper.expected_impact || '',\n video_ideas: paper.video_ideas || '',\n summarized_paper: {\n ranked_paper: {\n paper: {\n title: paper.title || 'Untitled',\n pdf_link: paper.pdf_link || '#'\n }\n },\n summary_data: paper.output[0] || null\n }\n });\n } else {\n // Paper with processing error\n summaryErrors.push({\n ranked_paper: {\n paper: {\n title: paper.title || 'Untitled',\n pdf_link: paper.pdf_link || '#'\n },\n key_insight: paper.key_insight || '',\n expected_impact: paper.expected_impact || ''\n },\n error: 'Summary data could not be generated'\n });\n }\n });\n \n // Generate papers HTML\n let papersHtml = '';\n \n papers.forEach(paper => {\n papersHtml += `\n <tr>\n <td style=\"padding: 0 40px 30px;\">\n <div style=\"border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; background-color: #fafafa;\">\n\n <!-- Paper Header -->\n <div style=\"background-color: #ffffff; padding: 24px; border-bottom: 3px solid #1155cc;\">\n <h2 style=\"margin: 0 0 12px; color: #1a1a1a; font-size: 20px; font-weight: 600; line-height: 1.4;\">\n ${escapeHtml(paper.summarized_paper.ranked_paper.paper.title)}\n </h2>\n <div style=\"margin-bottom: 12px;\">\n <span style=\"display: inline-block; background-color: #e3f2fd; color: #1976d2; font-size: 12px; font-weight: 600; padding: 6px 12px; border-radius: 4px; margin-right: 8px;\">\n \u2b50 Final Score: ${paper.final_score}/10\n </span>\n </div>\n <a href=\"${paper.summarized_paper.ranked_paper.paper.pdf_link}\"\n style=\"display: inline-block; color: #1155cc; text-decoration: none; font-size: 14px; font-weight: 500; padding: 8px 16px; border: 1px solid #1155cc; border-radius: 6px; transition: all 0.2s;\">\n \ud83d\udcc4 View PDF\n </a>\n </div>\n\n <!-- Paper Content -->\n <div style=\"padding: 24px;\">`;\n \n if (paper.updated_key_insight) {\n papersHtml += `\n <div style=\"margin-bottom: 20px;\">\n <div style=\"display: inline-block; background-color: #1155cc; color: #ffffff; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; padding: 4px 10px; border-radius: 4px; margin-bottom: 8px;\">\n \ud83d\udca1 Key Insight\n </div>\n <p style=\"margin: 8px 0 0; color: #333333; font-size: 15px; line-height: 1.6;\">\n ${escapeHtml(paper.updated_key_insight)}\n </p>\n </div>`;\n }\n \n if (paper.updated_expected_impact) {\n papersHtml += `\n <div style=\"margin-bottom: 20px;\">\n <div style=\"display: inline-block; background-color: #1155cc; color: #ffffff; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; padding: 4px 10px; border-radius: 4px; margin-bottom: 8px;\">\n \ud83c\udfaf Expected Impact\n </div>\n <p style=\"margin: 8px 0 0; color: #333333; font-size: 15px; line-height: 1.6;\">\n ${escapeHtml(paper.updated_expected_impact)}\n </p>\n </div>`;\n }\n \n if (paper.video_ideas) {\n papersHtml += `\n <div style=\"margin-bottom: 20px;\">\n <div style=\"display: inline-block; background-color: #1155cc; color: #ffffff; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; padding: 4px 10px; border-radius: 4px; margin-bottom: 8px;\">\n \ud83c\udfac Video Ideas\n </div>\n <p style=\"margin: 8px 0 0; color: #333333; font-size: 15px; line-height: 1.6; white-space: pre-line;\">\n ${escapeHtml(paper.video_ideas)}\n </p>\n </div>`;\n }\n \n if (paper.summarized_paper.summary_data) {\n const summary = paper.summarized_paper.summary_data;\n papersHtml += `\n <div style=\"background-color: #f0f4ff; border-left: 4px solid #1155cc; padding: 16px; border-radius: 4px;\">\n <div style=\"display: inline-block; background-color: #1155cc; color: #ffffff; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; padding: 4px 10px; border-radius: 4px; margin-bottom: 8px;\">\n \ud83d\udccb Summary\n </div>\n\n <div style=\"margin-top: 12px;\">\n <strong style=\"color: #1155cc; font-size: 13px;\">Approach:</strong>\n <p style=\"margin: 4px 0 12px; color: #2c3e50; font-size: 14px; line-height: 1.6;\">\n ${escapeHtml(summary.approach)}\n </p>\n\n <strong style=\"color: #1155cc; font-size: 13px;\">Key Findings:</strong>\n <p style=\"margin: 4px 0 12px; color: #2c3e50; font-size: 14px; line-height: 1.6;\">\n ${escapeHtml(summary.key_findings)}\n </p>\n\n <strong style=\"color: #1155cc; font-size: 13px;\">Value:</strong>\n <p style=\"margin: 4px 0 12px; color: #2c3e50; font-size: 14px; line-height: 1.6;\">\n ${escapeHtml(summary.value)}\n </p>\n\n <strong style=\"color: #1155cc; font-size: 13px;\">Limitations:</strong>\n <p style=\"margin: 4px 0 12px; color: #2c3e50; font-size: 14px; line-height: 1.6;\">\n ${escapeHtml(summary.limitations)}\n </p>\n\n <strong style=\"color: #1155cc; font-size: 13px;\">Bottom Line:</strong>\n <p style=\"margin: 4px 0 0; color: #2c3e50; font-size: 14px; line-height: 1.6;\">\n ${escapeHtml(summary.bottom_line)}\n </p>\n </div>\n </div>`;\n }\n \n papersHtml += `\n </div>\n </div>\n </td>\n </tr>`;\n });\n \n // Generate error papers HTML\n let errorsHtml = '';\n \n if (summaryErrors.length > 0) {\n errorsHtml = `\n <tr>\n <td style=\"padding: 0 40px 30px;\">\n <div style=\"border: 2px solid #f57c00; border-radius: 8px; overflow: hidden; background-color: #fff3e0;\">\n <div style=\"background-color: #ff9800; padding: 16px; text-align: center;\">\n <h3 style=\"margin: 0; color: #ffffff; font-size: 18px; font-weight: 600;\">\n \u26a0\ufe0f Papers with Processing Errors\n </h3>\n </div>\n <div style=\"padding: 20px;\">\n <p style=\"margin: 0 0 16px; color: #e65100; font-size: 14px; line-height: 1.6;\">\n The following papers could not be fully processed. Basic information is provided below:\n </p>\n </div>\n </div>\n </td>\n </tr>`;\n \n summaryErrors.forEach(errorItem => {\n errorsHtml += `\n <tr>\n <td style=\"padding: 0 40px 30px;\">\n <div style=\"border: 1px solid #ffb74d; border-radius: 8px; overflow: hidden; background-color: #fff8e1;\">\n\n <!-- Error Paper Header -->\n <div style=\"background-color: #ffffff; padding: 24px; border-bottom: 3px solid #ff9800; border-left: 4px solid #f57c00;\">\n <h2 style=\"margin: 0 0 12px; color: #1a1a1a; font-size: 20px; font-weight: 600; line-height: 1.4;\">\n ${escapeHtml(errorItem.ranked_paper.paper.title)}\n </h2>\n <a href=\"${errorItem.ranked_paper.paper.pdf_link}\"\n style=\"display: inline-block; color: #f57c00; text-decoration: none; font-size: 14px; font-weight: 500; padding: 8px 16px; border: 1px solid #f57c00; border-radius: 6px; transition: all 0.2s;\">\n \ud83d\udcc4 View PDF\n </a>\n </div>\n\n <!-- Error Paper Content -->\n <div style=\"padding: 24px;\">`;\n \n if (errorItem.ranked_paper.key_insight) {\n errorsHtml += `\n <div style=\"margin-bottom: 20px;\">\n <div style=\"display: inline-block; background-color: #ff9800; color: #ffffff; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; padding: 4px 10px; border-radius: 4px; margin-bottom: 8px;\">\n \ud83d\udca1 Key Insight\n </div>\n <p style=\"margin: 8px 0 0; color: #333333; font-size: 15px; line-height: 1.6;\">\n ${escapeHtml(errorItem.ranked_paper.key_insight)}\n </p>\n </div>`;\n }\n \n if (errorItem.ranked_paper.expected_impact) {\n errorsHtml += `\n <div style=\"margin-bottom: 20px;\">\n <div style=\"display: inline-block; background-color: #ff9800; color: #ffffff; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; padding: 4px 10px; border-radius: 4px; margin-bottom: 8px;\">\n \ud83c\udfaf Expected Impact\n </div>\n <p style=\"margin: 8px 0 0; color: #333333; font-size: 15px; line-height: 1.6;\">\n ${escapeHtml(errorItem.ranked_paper.expected_impact)}\n </p>\n </div>`;\n }\n \n errorsHtml += `\n <!-- Error Message -->\n <div style=\"background-color: #ffebee; border-left: 4px solid #d32f2f; padding: 16px; border-radius: 4px; margin-top: 20px;\">\n <div style=\"display: inline-block; background-color: #d32f2f; color: #ffffff; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; padding: 4px 10px; border-radius: 4px; margin-bottom: 8px;\">\n \u274c Error Details\n </div>\n <p style=\"margin: 8px 0 0; color: #c62828; font-size: 14px; line-height: 1.6; font-family: 'Courier New', monospace;\">\n ${escapeHtml(errorItem.error)}\n </p>\n </div>\n\n </div>\n </div>\n </td>\n </tr>`;\n });\n }\n \n // Complete HTML template\n const html = `<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>ArXiv Paper Report</title>\n</head>\n\n<body style=\"margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background-color: #f5f5f5;\">\n <table role=\"presentation\" style=\"width: 100%; border-collapse: collapse;\">\n <tr>\n <td style=\"padding: 40px 20px;\">\n <table role=\"presentation\" style=\"max-width: 680px; margin: 0 auto; background-color: #ffffff; border-radius: 12px; box-shadow: 0 2px 8px rgba(0,0,0,0.08); overflow: hidden;\">\n\n <!-- Header -->\n <tr>\n <td style=\"background: linear-gradient(135deg, #1155cc 0%, #0d47a1 100%); padding: 40px 40px 30px; text-align: center;\">\n <h1 style=\"margin: 0; color: #ffffff; font-size: 28px; font-weight: 600; letter-spacing: -0.5px;\">\n \ud83d\udcda Your Daily ArXiv Report presented by @OfficeOptOut\n </h1>\n <p style=\"margin: 10px 0 0; color: rgba(255,255,255,0.9); font-size: 14px;\">\n ${today}\n </p>\n </td>\n </tr>\n\n <!-- Introduction -->\n <tr>\n <td style=\"padding: 30px 40px 20px;\">\n <p style=\"margin: 0; color: #333333; font-size: 16px; line-height: 1.6;\">\n Here are today's most relevant papers for your content strategy:\n </p>\n </td>\n </tr>\n\n <!-- Papers Loop -->\n ${papersHtml}\n\n <!-- Summary Errors Section -->\n ${errorsHtml}\n\n <!-- Footer -->\n <tr>\n <td style=\"padding: 30px 40px 40px; text-align: center; border-top: 1px solid #e0e0e0;\">\n <p style=\"margin: 0 0 10px; color: #666666; font-size: 13px; line-height: 1.5;\">\n This automated report was generated by your ArXiv Content Scraper\n </p>\n <p style=\"margin: 0; color: #999999; font-size: 12px;\">\n Keep creating amazing content! \ud83d\ude80\n </p>\n </td>\n </tr>\n\n </table>\n </td>\n </tr>\n </table>\n</body>\n\n</html>`;\n\n return {\n json: {\n html: html,\n paperCount: papers.length,\n errorCount: summaryErrors.length,\n date: today\n }\n };\n});\n\nreturn results"
},
"typeVersion": 2
},
{
"id": "bbbfcf56-19da-44f6-bf73-b23aca8e3ba4",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-240,
-288
],
"parameters": {
"color": 4,
"width": 1248,
"height": 384,
"content": "## Get Paper Data from ArXiv\n- Retrieve Paper Titles and Abstracts for the current day\n- Only schedules from Tuesday to Friday, as no uploads during the weekend\n- Workflow will stop if no paper data is fetched (i.e. for weekends)"
},
"typeVersion": 1
},
{
"id": "f646aba2-529c-4129-842c-9c5d47c187e3",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-240,
128
],
"parameters": {
"width": 784,
"height": 480,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Extract paper data and analyze paper relevance via LLM Call"
},
"typeVersion": 1
},
{
"id": "bcdc8c1a-2401-4921-bb0c-f406458dafc2",
"name": "Extract Relevant Data",
"type": "n8n-nodes-base.code",
"position": [
-144,
192
],
"parameters": {
"language": "python",
"pythonCode": "cleaned_items = []\nfor item in _input.all():\n for entry in item[\"json\"][\"feed\"][\"entry\"]:\n pdf_link = None\n for possible_link in entry[\"link\"]:\n if possible_link.get(\"type\") == \"application/pdf\":\n pdf_link = possible_link[\"href\"]\n break\n elif \"pdf\" in possible_link.get(\"href\", \"\"):\n pdf_link = possible_link[\"href\"]\n break\n \n cleaned_item = {\n \"title\": entry[\"title\"],\n \"abstract\": entry[\"summary\"],\n \"link\": entry[\"id\"],\n \"pdf_link\": pdf_link\n }\n cleaned_items.append(cleaned_item)\n\nreturn {\"json\": {\"entries\": cleaned_items}}"
},
"typeVersion": 2
},
{
"id": "390eb4a5-d573-46cf-b21e-9824422a265f",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
608,
288
],
"parameters": {
"color": 6,
"width": 656,
"height": 448,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Summarize & structure summary output via LLM calls"
},
"typeVersion": 1
},
{
"id": "7b08581f-ee25-4aa8-8eab-033201190697",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1312,
112
],
"parameters": {
"color": 5,
"width": 816,
"height": 304,
"content": "## Create output format and send via Email"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "9dc4f8b5-9b67-4631-b039-f7a800c77285",
"connections": {
"Send email": {
"main": [
[]
]
},
"Convert XML Feed": {
"main": [
[
{
"node": "Check Paper Availability",
"type": "main",
"index": 0
}
]
]
},
"Create Aggregate": {
"main": [
[
{
"node": "Create HTML Template",
"type": "main",
"index": 0
}
]
]
},
"Paper Summarizer": {
"main": [
[
{
"node": "Summary Formatter",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Construct API query",
"type": "main",
"index": 0
}
]
]
},
"Summary Formatter": {
"main": [
[
{
"node": "Merge Paper Data with Summaries",
"type": "main",
"index": 1
}
]
]
},
"Construct API query": {
"main": [
[
{
"node": "Get ArXiv Paper Data",
"type": "main",
"index": 0
}
]
]
},
"Create HTML Template": {
"main": [
[
{
"node": "Send email",
"type": "main",
"index": 0
}
]
]
},
"Get ArXiv Paper Data": {
"main": [
[
{
"node": "Convert XML Feed",
"type": "main",
"index": 0
}
]
]
},
"Split Data Fragments": {
"main": [
[
{
"node": "Merge Paper Data with Summaries",
"type": "main",
"index": 0
},
{
"node": "Paper Summarizer",
"type": "main",
"index": 0
}
]
]
},
"Extract Relevant Data": {
"main": [
[
{
"node": "Paper Relevance Analyzer",
"type": "main",
"index": 0
}
]
]
},
"Check Paper Availability": {
"main": [
[
{
"node": "Stop and Error",
"type": "main",
"index": 0
}
],
[
{
"node": "Extract Relevant Data",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "Paper Relevance Analyzer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Paper Relevance Analyzer": {
"main": [
[
{
"node": "Split Data Fragments",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Paper Relevance Analyzer",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Google Gemini Chat Model1": {
"ai_languageModel": [
[
{
"node": "Summary Formatter",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Structured Output Parser1": {
"ai_outputParser": [
[
{
"node": "Summary Formatter",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Merge Paper Data with Summaries": {
"main": [
[
{
"node": "Create Aggregate",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googlePalmApismtp
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
The system uses a three-stage pipeline architecture: automated paper retrieval from ArXiv's API AI-powered relevance filtering and analysis via Google Gemini Intelligent summarization with HTML formatting for clean email delivery
Source: https://n8n.io/workflows/9859/ — 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.
How it Works
Fully automated blog creation system using n8n + AI Agents + Image Generation
kisisel asistan. Uses toolWorkflow, toolHttpRequest, toolCalculator, toolThink. Scheduled trigger; 43 nodes.
This workflow automatically creates short-form AI videos using Sora 2 Cameos, powered by n8n and AI agents.
Automatically generate viral short-form health videos using AI and publish them to social platforms with n8n and Veo 3. This workflow collects viral ideas, analyzes engagement patterns, generates AI v