This workflow follows the Gmail → HTTP Request 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 →
{
"updatedAt": "2026-04-15T23:51:12.697Z",
"createdAt": "2026-04-14T20:07:25.073Z",
"id": "vjejHZvJa2PtTLYh",
"name": "Addendo \u2014 Blog Automatico Addendo Lunes y Jueves",
"description": null,
"active": false,
"isArchived": false,
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 7 * * 1,4"
}
]
}
},
"id": "adn-schedule-01",
"name": "Trigger Lunes y Jueves 7am EST",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.1,
"position": [
240,
300
],
"notes": "Activa el workflow los lunes (1) y jueves (4) a las 7am hora de Nueva York"
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const keywordsBase = [\n 'automatizaci\u00f3n marketing',\n 'inteligencia artificial negocios',\n 'marketing digital latinos',\n 'automatizar redes sociales',\n 'leads con inteligencia artificial',\n 'chatbot para negocios',\n 'agencia marketing IA',\n 'automatizaci\u00f3n ventas',\n 'email marketing automatizado',\n 'SEO con inteligencia artificial',\n 'publicidad en redes sociales',\n 'estrategia digital negocios latinos',\n 'herramientas IA marketing',\n 'contenido automatizado redes',\n 'campa\u00f1as google ads automatizadas'\n];\n\nreturn {\n json: {\n cliente: 'addendo',\n sitio_web: 'addendo.io',\n repositorio: 'AddendoGrowthPartner/addendo-website',\n idioma: 'bilingue',\n mercado: 'duenos de negocios latinos en USA',\n keywords_base: keywordsBase,\n fecha_ejecucion: new Date().toISOString()\n }\n};"
},
"id": "adn-config-cliente",
"name": "Configuracion Cliente",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
440,
300
]
},
{
"parameters": {
"method": "POST",
"url": "https://api.dataforseo.com/v3/keywords_data/google/search_volume/live",
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "=[\n {\n \"keywords\": {{ JSON.stringify($json.keywords_base) }},\n \"language_code\": \"es\",\n \"location_name\": \"United States\",\n \"sort_by\": \"search_volume\"\n }\n]",
"options": {
"timeout": 30000
}
},
"id": "adn-dataforseo",
"name": "DataForSEO - Buscar Keywords",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
640,
300
],
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"method": "GET",
"url": "https://api.github.com/repos/AddendoGrowthPartner/addendo-website/contents/src/pages/blog",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "githubApi",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/vnd.github+json"
}
]
},
"options": {
"timeout": 15000
}
},
"id": "adn-github-list",
"name": "GitHub - Listar Articulos",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
840,
300
],
"credentials": {
"githubApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"mode": "runOnceForAllItems",
"jsCode": "const dataforseoResp = $('DataForSEO - Buscar Keywords').first().json;\nconst result = dataforseoResp?.tasks?.[0]?.result || [];\n\nconst keywordsFiltradas = result\n .filter(kw => {\n const volume = kw.search_volume || 0;\n const difficulty = kw.keyword_difficulty;\n return volume >= 100 && (difficulty == null || difficulty < 70);\n })\n .map(kw => ({\n keyword: kw.keyword,\n volume: kw.search_volume,\n difficulty: kw.keyword_difficulty || 0,\n cpc: kw.cpc || 0,\n competition: kw.competition || 0\n }));\n\nkeywordsFiltradas.sort((a, b) => b.volume - a.volume);\n\nconst raw = $input.all().map(i => i.json);\nconst githubFiles = (raw.length === 1 && Array.isArray(raw[0])) ? raw[0] : raw;\n\nfunction slugify(s) {\n return s.toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^a-z0-9\\s-]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n}\n\nconst ahora = Date.now();\nconst sieteDiasMs = 7 * 24 * 60 * 60 * 1000;\nconst slugsBloqueados = new Set();\nfor (const f of githubFiles) {\n const name = f?.name;\n if (!name || !name.endsWith('.astro')) continue;\n if (name === 'index.astro') continue;\n const base = name.replace(/\\.astro$/, '');\n const m = base.match(/^(.+)-(\\d{4}-\\d{2}-\\d{2})$/);\n if (!m) {\n // Articulos hand-coded sin fecha: bloquear permanentemente\n slugsBloqueados.add(base);\n continue;\n }\n const slug = m[1];\n const fechaPub = Date.parse(m[2]);\n if (!isNaN(fechaPub) && (ahora - fechaPub) <= sieteDiasMs) {\n slugsBloqueados.add(slug);\n }\n}\n\nconst keywordSeleccionada = keywordsFiltradas.find(\n kw => !slugsBloqueados.has(slugify(kw.keyword))\n);\n\nif (!keywordSeleccionada) {\n throw new Error('No hay keywords disponibles no publicadas recientemente');\n}\n\nconst slug = slugify(keywordSeleccionada.keyword);\nconst fecha = new Date().toISOString().split('T')[0];\nconst nombreArchivo = `${slug}-${fecha}.astro`;\n\nreturn [{\n json: {\n keyword_seleccionada: keywordSeleccionada.keyword,\n volumen: keywordSeleccionada.volume,\n dificultad: keywordSeleccionada.difficulty,\n cpc: keywordSeleccionada.cpc,\n slug: slug,\n nombre_archivo: nombreArchivo,\n fecha: fecha,\n cliente: 'addendo',\n sitio_web: 'addendo.io',\n url_articulo: `https://addendo.io/blog/${slug}`,\n slugs_bloqueados: [...slugsBloqueados]\n }\n}];"
},
"id": "adn-seleccionar",
"name": "Seleccionar Mejor Keyword",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1040,
300
]
},
{
"parameters": {
"method": "GET",
"url": "=https://api.pexels.com/v1/search?query={{ encodeURIComponent($json.keyword_seleccionada) }}&per_page=1&locale=es-MX&orientation=landscape",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {
"timeout": 15000
}
},
"id": "adn-pexels",
"name": "Pexels - Buscar Imagen",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1640,
300
],
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const freepik = $('Freepik - Generar Imagen').item.json;\nconst freepikOk = !!(freepik && freepik.data && freepik.data[0] && freepik.data[0].base64);\n\nconst pexels = $input.item.json;\nconst meta = $('Seleccionar Mejor Keyword').first().json;\n\nlet imagen_url, imagen_alt, imagen_source;\n\nif (freepikOk) {\n imagen_url = `/blog/${meta.slug}-${meta.fecha}.jpg`;\n imagen_alt = `${meta.keyword_seleccionada} \u2014 Addendo`;\n imagen_source = 'freepik';\n} else {\n const pexelsUrl = pexels?.photos?.[0]?.src?.landscape\n || pexels?.photos?.[0]?.src?.large\n || 'https://images.pexels.com/photos/3184291/pexels-photo-3184291.jpeg';\n const encoded = encodeURIComponent(pexelsUrl);\n imagen_url = `https://res.cloudinary.com/dokzw376u/image/fetch/f_auto,q_auto,w_1200/${encoded}`;\n imagen_alt = pexels?.photos?.[0]?.alt || `${meta.keyword_seleccionada} \u2014 Addendo`;\n imagen_source = 'pexels';\n}\n\nreturn {\n json: {\n ...meta,\n imagen_url,\n imagen_alt,\n imagen_source\n }\n};"
},
"id": "adn-combinar",
"name": "Combinar Datos + Imagen",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1840,
300
]
},
{
"parameters": {
"method": "POST",
"url": "https://api.anthropic.com/v1/messages",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"specifyHeaders": "keypair",
"headerParameters": {
"parameters": [
{
"name": "anthropic-version",
"value": "2023-06-01"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify({model:\"claude-sonnet-4-6\",max_tokens:20000,messages:[{role:\"user\",content:`Eres el editor jefe de contenido de Addendo Growth Partner, agencia de marketing con IA para due\u00f1os de negocios latinos en Estados Unidos.\n\nVas a escribir un articulo de blog BILINGUE (espa\u00f1ol + ingles) sobre la keyword: \"${$json.keyword_seleccionada}\"\n\nEl articulo debe ayudar a duenos de negocios latinos en USA a entender y aplicar practicamente el tema. Tono: experto en marketing con IA, directo, orientado a resultados, sin sensacionalismo.\n\n=== DATOS DE ENTRADA ===\n- Keyword principal: ${$json.keyword_seleccionada}\n- Volumen mensual: ${$json.volumen}\n- Slug: ${$json.slug}\n- Fecha: ${$json.fecha}\n- URL imagen hero (usar tal cual): ${$json.imagen_url}\n- Alt sugerido: ${$json.imagen_alt}\n\n=== FORMATO DE SALIDA (CRITICO) ===\n\nDevuelve UN UNICO archivo .astro completo. NO envuelvas en code fences, NO a\u00f1adas explicaciones, NO uses markdown. SOLO el archivo .astro exactamente en este formato:\n\n---\nimport BlogPostLayout from '../../layouts/BlogPostLayout.astro';\n---\n<BlogPostLayout\n titleEs=\"[titulo SEO espa\u00f1ol, max 60 chars, incluye keyword]\"\n titleEn=\"[titulo SEO ingles, max 60 chars, traduccion natural]\"\n descEs=\"[meta description ES, 150-160 chars, con keyword]\"\n descEn=\"[meta description EN, 150-160 chars, natural]\"\n category=\"[UNA de: Marketing Digital | IA | Automatizaci\u00f3n | SEO | Redes Sociales | Publicidad | Email Marketing]\"\n date=\"${$json.fecha}\"\n readTime={8}\n heroImg=\"${$json.imagen_url}\"\n heroAlt=\"[alt bilingue corto basado en ${$json.imagen_alt}]\"\n slug=\"${$json.slug}\"\n>\n <!-- ========== ES ========== -->\n <div class=\"blog-article\" data-lang-es>\n <p>[Primer parrafo ES: hook empatico, keyword en primeras 60 palabras, reconoce el problema del lector]</p>\n\n <h2>[H2 #1 en espa\u00f1ol]</h2>\n <p>[parrafo...]</p>\n <p>[parrafo...]</p>\n\n <h2>[H2 #2]</h2>\n <p>[...]</p>\n <h3>[H3 interno cuando aplique]</h3>\n <p>[...]</p>\n\n [6-8 secciones H2 total]\n\n <h2>Preguntas Frecuentes</h2>\n <h3>[Pregunta 1]</h3>\n <p>[Respuesta 1]</p>\n [Minimo 5 preguntas]\n\n <h2>[H2 final de conclusion o proximos pasos]</h2>\n <p>[cierre ES con la keyword]</p>\n </div>\n\n <!-- ========== EN ========== -->\n <div class=\"blog-article\" data-lang-en>\n <p>[First paragraph EN: parallel to ES, natural translation with the keyword topic]</p>\n\n <h2>[H2 #1 in english]</h2>\n <p>[...]</p>\n\n [Same structure as ES, 6-8 H2, FAQ with 5+ Q/A, closing H2]\n </div>\n</BlogPostLayout>\n\n=== REGLAS ESTRICTAS ===\n- Todo el contenido dentro de <BlogPostLayout>...</BlogPostLayout>\n- Etiquetas HTML: <p>, <h2>, <h3>, <strong>, <em>, <ul>/<li>\n- NO sintaxis markdown (sin #, ##, **, -, guiones de lista)\n- NO code fences en ninguna parte\n- Atributos siempre con comillas dobles\n- Primera linea DEBE ser exactamente: ---\n- Despues del --- de cierre de imports, sigue <BlogPostLayout>\n- NO menciones competidores por nombre\n- NO promesas imposibles (\"garantizado\", \"100%\", \"siempre funciona\")\n- NO clises de IA: \"en el mundo de hoy\", \"sin duda alguna\", \"es importante destacar\", \"en conclusion\", \"in today\\u2019s world\", \"it is important to note\", \"in conclusion\"\n\n=== REQUISITOS DE CONTENIDO ===\n1. Minimo 1,500 palabras POR IDIOMA dentro del respectivo div\n2. Keyword principal en titleEs, titleEn (traduccion), primer <p> de cada idioma, minimo 8 veces naturalmente por idioma\n3. Keywords secundarias relacionadas al tema: segun aplique (IA, automatizaci\u00f3n, leads, conversion, embudo, ROI, analytics)\n4. Tono empatico y practico desde la primera linea\n5. Parrafos cortos (3-4 lineas max), variando longitud de oraciones\n6. Ejemplos concretos de negocios latinos cuando aplique (restaurantes, contractors, servicios profesionales, e-commerce hispano)\n\nDEVUELVE SOLO EL ARCHIVO .astro. Nada antes, nada despues.`}]}) }}",
"options": {
"timeout": 180000
}
},
"id": "adn-claude",
"name": "Claude - Escribir Articulo",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
2040,
300
],
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "let articulo = $input.item.json.content?.[0]?.text\n || $input.item.json.message?.content?.[0]?.text\n || (typeof $input.item.json.content === 'string' ? $input.item.json.content : '')\n || '';\n\n// Strip code fences defensivo (Claude a veces los agrega)\narticulo = articulo.trim();\narticulo = articulo.replace(/^```[a-zA-Z]*\\s*\\n/, '');\narticulo = articulo.replace(/\\n```\\s*$/, '');\narticulo = articulo.trim();\n\nconst metadata = $('Combinar Datos + Imagen').item.json;\n\nif (!articulo.startsWith('---')) {\n throw new Error('El articulo generado no tiene frontmatter valido');\n}\nif (articulo.length < 4000) {\n throw new Error(`Articulo muy corto: ${articulo.length} caracteres (minimo 4000)`);\n}\n\nreturn {\n json: {\n ...metadata,\n contenido_articulo: articulo,\n contenido_base64: Buffer.from(articulo).toString('base64'),\n longitud_caracteres: articulo.length,\n commit_message: `blog: articulo bilingue SEO - ${metadata.keyword_seleccionada}`,\n ruta_archivo: `src/pages/blog/${metadata.nombre_archivo}`\n }\n};"
},
"id": "adn-preparar",
"name": "Preparar Archivo para GitHub",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2240,
300
]
},
{
"parameters": {
"method": "PUT",
"url": "=https://api.github.com/repos/AddendoGrowthPartner/addendo-website/contents/{{ $json.ruta_archivo }}",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "githubApi",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/vnd.github+json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify({message: $json.commit_message, content: $json.contenido_base64, branch: 'main'}) }}",
"options": {
"timeout": 30000
}
},
"id": "adn-github-crear",
"name": "GitHub - Crear Archivo Blog",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
2440,
300
],
"credentials": {
"githubApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"method": "GET",
"url": "https://api.github.com/repos/AddendoGrowthPartner/addendo-website/contents/src/pages/blog/index.astro",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "githubApi",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/vnd.github+json"
}
]
},
"options": {
"timeout": 15000
}
},
"id": "adn-github-leer-idx",
"name": "GitHub - Leer Index",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
2640,
460
],
"onError": "continueRegularOutput",
"credentials": {
"githubApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "try {\n const gh = $input.item.json;\n const meta = $('Preparar Archivo para GitHub').item.json;\n const articulo = meta.contenido_articulo || '';\n\n if (!gh || !gh.content || !gh.sha) {\n throw new Error('No se pudo leer index.astro de GitHub');\n }\n\n const pick = (re, fb) => { const m = articulo.match(re); return (m && m[1]) ? m[1] : fb; };\n const titleEs = pick(/\\btitleEs=\"([^\"]+)\"/, meta.keyword_seleccionada);\n const descEs = pick(/\\bdescEs=\"([^\"]+)\"/, '');\n const category = pick(/\\bcategory=\"([^\"]+)\"/, 'Marketing Digital');\n const heroImg = pick(/\\bheroImg=\"([^\"]+)\"/, '/blog/placeholder.jpg');\n\n const mesesEs = ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];\n const [yyyy, mm] = meta.fecha.split('-');\n const dateHuman = `${mesesEs[parseInt(mm,10)-1]} ${yyyy}`;\n\n const current = Buffer.from(gh.content, 'base64').toString('utf8');\n\n const url = `/blog/${meta.slug}-${meta.fecha}`;\n if (current.includes(`url: '${url}'`) || current.includes(`url: \"${url}\"`)) {\n throw new Error(`URL ${url} ya presente en el indice`);\n }\n\n const entry = ` {\n title: ${JSON.stringify(titleEs)},\n image: ${JSON.stringify(heroImg)},\n category: ${JSON.stringify(category)},\n date: ${JSON.stringify(dateHuman)},\n excerpt: ${JSON.stringify(descEs)},\n url: ${JSON.stringify(url)},\n },`;\n\n const updated = current.replace(/const posts = \\[\\s*\\n?/, `const posts = [\\n${entry}\\n`);\n if (updated === current) {\n throw new Error('No se localizo const posts = [ en index.astro');\n }\n\n return {\n json: {\n ok: true,\n sha: gh.sha,\n updated_content_base64: Buffer.from(updated, 'utf8').toString('base64'),\n commit_message: `blog: actualizar indice \u2014 ${meta.slug}`,\n }\n };\n} catch (e) {\n return { json: { ok: false, error: String(e.message || e) } };\n}"
},
"id": "adn-regenerar-idx",
"name": "Regenerar Index",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2840,
460
],
"onError": "continueRegularOutput"
},
{
"parameters": {
"method": "PUT",
"url": "https://api.github.com/repos/AddendoGrowthPartner/addendo-website/contents/src/pages/blog/index.astro",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "githubApi",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/vnd.github+json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ $json.ok ? JSON.stringify({message: $json.commit_message, content: $json.updated_content_base64, sha: $json.sha, branch: 'main'}) : '{\"skip\":true}' }}",
"options": {
"timeout": 20000
}
},
"id": "adn-github-actualizar-idx",
"name": "GitHub - Actualizar Index",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
3040,
460
],
"onError": "continueRegularOutput",
"credentials": {
"githubApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"method": "POST",
"url": "https://indexing.googleapis.com/v3/urlNotifications:publish",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "googleApi",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify({url: 'https://addendo.io/blog/' + $('Preparar Archivo para GitHub').item.json.slug, type: 'URL_UPDATED'}) }}",
"options": {
"timeout": 20000
}
},
"id": "adn-google-indexing",
"name": "Google Indexing API",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
3200,
300
],
"onError": "continueRegularOutput",
"credentials": {
"googleApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"resource": "message",
"operation": "send",
"sendTo": "admin@addendo.io",
"subject": "=Blog Addendo publicado: {{ $('Preparar Archivo para GitHub').item.json.keyword_seleccionada }}",
"emailType": "text",
"message": "=Articulo publicado en https://addendo.io/blog/{{ $('Preparar Archivo para GitHub').item.json.slug }}\n\nKeyword: {{ $('Preparar Archivo para GitHub').item.json.keyword_seleccionada }}\nVolumen: {{ $('Preparar Archivo para GitHub').item.json.volumen }}\nLongitud: {{ $('Preparar Archivo para GitHub').item.json.longitud_caracteres }} chars\nFecha: {{ $('Preparar Archivo para GitHub').item.json.fecha }}",
"options": {}
},
"id": "adn-gmail",
"name": "Gmail - Notificar a Jose",
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.1,
"position": [
3400,
300
],
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"method": "POST",
"url": "https://api.freepik.com/v1/ai/text-to-image",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify({prompt: $json.keyword_seleccionada + ' marketing digital profesional para negocios', num_images: 1, image: {size: 'widescreen_16_9'}}) }}",
"options": {
"timeout": 90000
}
},
"id": "adn-freepik",
"name": "Freepik - Generar Imagen",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1240,
300
],
"onError": "continueRegularOutput",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"method": "PUT",
"url": "=https://api.github.com/repos/AddendoGrowthPartner/addendo-website/contents/public/blog/{{ $('Seleccionar Mejor Keyword').item.json.slug }}-{{ $('Seleccionar Mejor Keyword').item.json.fecha }}.jpg",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "githubApi",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/vnd.github+json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ ($json.data && $json.data[0] && $json.data[0].base64) ? JSON.stringify({message: 'blog: imagen Freepik para ' + $('Seleccionar Mejor Keyword').item.json.slug + '-' + $('Seleccionar Mejor Keyword').item.json.fecha, content: $json.data[0].base64, branch: 'main'}) : '{\"skip\":true}' }}",
"options": {
"timeout": 30000
}
},
"id": "adn-gh-subir-imagen",
"name": "GitHub - Subir Imagen",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1440,
300
],
"onError": "continueRegularOutput",
"credentials": {
"githubApi": {
"name": "<your credential>"
}
}
}
],
"connections": {
"Trigger Lunes y Jueves 7am EST": {
"main": [
[
{
"node": "Configuracion Cliente",
"type": "main",
"index": 0
}
]
]
},
"Configuracion Cliente": {
"main": [
[
{
"node": "DataForSEO - Buscar Keywords",
"type": "main",
"index": 0
}
]
]
},
"DataForSEO - Buscar Keywords": {
"main": [
[
{
"node": "GitHub - Listar Articulos",
"type": "main",
"index": 0
}
]
]
},
"GitHub - Listar Articulos": {
"main": [
[
{
"node": "Seleccionar Mejor Keyword",
"type": "main",
"index": 0
}
]
]
},
"Seleccionar Mejor Keyword": {
"main": [
[
{
"node": "Freepik - Generar Imagen",
"type": "main",
"index": 0
}
]
]
},
"Pexels - Buscar Imagen": {
"main": [
[
{
"node": "Combinar Datos + Imagen",
"type": "main",
"index": 0
}
]
]
},
"Combinar Datos + Imagen": {
"main": [
[
{
"node": "Claude - Escribir Articulo",
"type": "main",
"index": 0
}
]
]
},
"Claude - Escribir Articulo": {
"main": [
[
{
"node": "Preparar Archivo para GitHub",
"type": "main",
"index": 0
}
]
]
},
"Preparar Archivo para GitHub": {
"main": [
[
{
"node": "GitHub - Crear Archivo Blog",
"type": "main",
"index": 0
}
]
]
},
"GitHub - Crear Archivo Blog": {
"main": [
[
{
"node": "GitHub - Leer Index",
"type": "main",
"index": 0
}
]
]
},
"GitHub - Leer Index": {
"main": [
[
{
"node": "Regenerar Index",
"type": "main",
"index": 0
}
]
]
},
"Regenerar Index": {
"main": [
[
{
"node": "GitHub - Actualizar Index",
"type": "main",
"index": 0
}
]
]
},
"GitHub - Actualizar Index": {
"main": [
[
{
"node": "Google Indexing API",
"type": "main",
"index": 0
}
]
]
},
"Google Indexing API": {
"main": [
[
{
"node": "Gmail - Notificar a Jose",
"type": "main",
"index": 0
}
]
]
},
"Freepik - Generar Imagen": {
"main": [
[
{
"node": "GitHub - Subir Imagen",
"type": "main",
"index": 0
}
]
]
},
"GitHub - Subir Imagen": {
"main": [
[
{
"node": "Pexels - Buscar Imagen",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1",
"saveManualExecutions": true,
"callerPolicy": "workflowsFromSameOwner",
"saveExecutionProgress": true,
"saveDataErrorExecution": "all",
"saveDataSuccessExecution": "all",
"timezone": "America/New_York",
"availableInMCP": false
},
"staticData": {
"node:Trigger Lunes y Jueves 7am EST": {
"recurrenceRules": []
}
},
"meta": null,
"versionId": "2b1d5a95-e836-4223-9bcb-d684af7d62e4",
"activeVersionId": null,
"versionCounter": 10,
"triggerCount": 1,
"shared": [
{
"updatedAt": "2026-04-14T20:07:25.078Z",
"createdAt": "2026-04-14T20:07:25.078Z",
"role": "workflow:owner",
"workflowId": "vjejHZvJa2PtTLYh",
"projectId": "kOz4cM3t590yiTX0",
"project": {
"updatedAt": "2026-04-06T19:49:50.605Z",
"createdAt": "2026-04-06T05:13:47.025Z",
"id": "kOz4cM3t590yiTX0",
"name": "Jose Raul Ramirez <admin@addendo.io>",
"type": "personal",
"icon": null,
"description": null,
"creatorId": "22729d36-131e-405e-8267-dcd82aca785f"
}
}
],
"tags": [],
"activeVersion": null
}
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.
githubApigmailOAuth2googleApihttpBasicAuthhttpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Addendo — Blog Automatico Addendo Lunes y Jueves. Uses httpRequest, gmail. Scheduled trigger; 17 nodes.
Source: https://github.com/AddendoGrowthPartner/addendo-website/blob/2ae39168e1f352f84fbb4d89b2eb515ef8b2c5d7/workflows/vjejHZvJa2PtTLYh.json.bak-20260415-233615 — 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.
YOUR_ID 4. Uses gmail, googleDrive, googleSheets, httpRequest. Scheduled trigger; 53 nodes.
Instead of providing a routine check, it focuses on significant movements by: Sending a Slack alert only if a query crosses a defined movement threshold. Emailing a structured report with the Top 25 i
Looking for a way to track GitHub bounty issues automatically and get notified in real time? This GitHub Bounty Tracker workflow monitors repositories for issues labeled 💎 Bounty, logs them in Google
This workflow automatically sends a beautifully designed HTML newsletter every Sunday at 8 AM, featuring products currently on sale from your Algolia-powered e-commerce store.
This workflow automatically identifies your weekly bestselling product from your Algolia-powered e-commerce store and generates a cinematic product video using Google VEO 3.0 AI, helping marketing tea