20 Workflows n8n Que Ahorran 15 Horas/Semana (Con Código Para Copiar)

20 Workflows n8n Que Ahorran 15 Horas/Semana (Con Código Para Copiar)

Corro 20+ workflows n8n en producción. 8,000+ ejecuciones/mes.

Tiempo ahorrado: 15 horas/semana.

Costo: $20/mes (vs $99/mes Zapier equivalente).

No son workflows teóricos de tutorial. Son workflows que publican blog posts, sincronizan datos, generan imágenes, envían newsletters, crean tareas — automáticamente, 24/7.

Te muestro los 5 workflows más útiles (con código JSON para importar directo).


El Problema: Zapier es Caro, Make es Limitado

Zapier pricing (2026):

  • 8,000 tasks/mes → Team plan $99/mes

Make pricing:

  • 10,000 operations/mes → Pro plan $79/mes

Problema adicional:

  • Vendor lock-in (workflows viven en su plataforma)
  • Limited logic (branching, loops, complex transformations)
  • No code inspection (can’t see what’s happening under the hood)

La Solución: n8n (Self-Hosted + Cloud Hybrid)

n8n = Open source Zapier/Make alternative.

Mi setup:

  • Dev instance: n8n.nyx.yourdomain.com (Docker, VPS)
  • Prod instance: n8n.yourdomain.com (Docker, VPS)
  • Cloud instance: yourdomain.app.n8n.cloud (webhooks externos)

Por qué 3 instancias:

  • Dev: Testing sin romper prod
  • Prod: Workflows críticos self-hosted (costo $0)
  • Cloud: Webhooks externos (Stripe, etc.) que necesitan uptime SLA

Costo:

  • Dev + Prod: $0 (self-hosted en VPS que ya tengo)
  • Cloud: $20/mes (Starter plan)
  • Total: $20/mes (vs $99 Zapier)

Ahorro annual: $948/año


Workflow 1: Blog Post → Multi-Channel Distribution

Trigger: WordPress post publicado

Flow:

WordPress Webhook
  ↓
Extract post data (title, excerpt, featured image, URL)
  ↓
IF featured image exists:
  ├─ Yes → Use it
  └─ No → Generate with Replicate API (Synthwave style)
  ↓
Create LinkedIn post (Late API)
  ├─ Text: Excerpt + CTA
  └─ Image: Featured image
  ↓
Create Twitter thread (Late API)
  ├─ Text: Title + 3 key points
  └─ Image: Featured image
  ↓
Create newsletter (Listmonk)
  ├─ Subject: Post title
  └─ Body: Excerpt + "Read more" link
  ↓
Track in NocoDB (Content Calendar table)
  ├─ Platform: LinkedIn, Twitter, Newsletter
  └─ Status: Scheduled
  ↓
Notify Telegram: "Post distributed to 3 channels ✅"

Ejecución time: 30-45 segundos

Manual equivalent: 30-45 minutos

Ahorro: 44 minutos per post × 8 posts/mes = 6 horas/mes


Código (n8n JSON)

Ver workflow completo (click para expandir)
{
  "nodes": [
    {
      "name": "WordPress Webhook",
      "type": "n8n-nodes-base.webhook",
      "parameters": {
        "path": "wordpress-post-published",
        "responseMode": "onReceived",
        "options": {}
      },
      "position": [250, 300]
    },
    {
      "name": "Extract Post Data",
      "type": "n8n-nodes-base.set",
      "parameters": {
        "values": {
          "string": [
            {"name": "title", "value": "={{$json.title}}"},
            {"name": "excerpt", "value": "={{$json.excerpt}}"},
            {"name": "url", "value": "={{$json.link}}"},
            {"name": "featuredImage", "value": "={{$json.featured_media_url}}"}
          ]
        }
      },
      "position": [450, 300]
    },
    {
      "name": "Check Featured Image",
      "type": "n8n-nodes-base.if",
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json.featuredImage}}",
              "operation": "notEmpty"
            }
          ]
        }
      },
      "position": [650, 300]
    },
    {
      "name": "Generate Image (Replicate)",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://api.replicate.com/v1/predictions",
        "method": "POST",
        "authentication": "headerAuth",
        "jsonParameters": true,
        "bodyParametersJson": "{\"version\": \"flux-schnell\", \"input\": {\"prompt\": \"{{$json.title}} synthwave cyberpunk neon\", \"width\": 1216, \"height\": 640}}"
      },
      "position": [850, 400]
    },
    {
      "name": "Create LinkedIn Post",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://api.getlate.dev/v1/posts",
        "method": "POST",
        "authentication": "headerAuth",
        "jsonParameters": true,
        "bodyParametersJson": "{\"accountId\": \"YOUR_LINKEDIN_ID\", \"scheduledAt\": \"{{DateTime.now().plus({days: 1}).set({hour: 9}).toISO()}}\", \"post\": {\"text\": \"{{$json.excerpt}}\\n\\nLee más: {{$json.url}}\", \"media\": [{\"url\": \"{{$json.featuredImage}}\"}]}}"
      },
      "position": [1050, 300]
    },
    {
      "name": "Notify Telegram",
      "type": "n8n-nodes-base.telegram",
      "parameters": {
        "chatId": "YOUR_CHAT_ID",
        "text": "✅ Post distributed:\\n- LinkedIn\\n- Twitter\\n- Newsletter"
      },
      "position": [1450, 300]
    }
  ],
  "connections": {
    "WordPress Webhook": {
      "main": [[{"node": "Extract Post Data"}]]
    },
    "Extract Post Data": {
      "main": [[{"node": "Check Featured Image"}]]
    },
    "Check Featured Image": {
      "main": [
        [{"node": "Create LinkedIn Post"}],
        [{"node": "Generate Image (Replicate)"}]
      ]
    }
  }
}

Importar: n8n dashboard → Workflows → Import from File → Paste JSON


Workflow 2: Stripe → NocoDB Revenue Tracking

Trigger: Stripe webhook (payment successful)

Flow:

Stripe Webhook (charge.succeeded)
  ↓
Extract payment data (amount, customer, product)
  ↓
Create NocoDB record (Revenue Tracker table)
  ├─ Amount: {{amount / 100}} USD
  ├─ Customer: {{customer_email}}
  ├─ Product: {{product_name}}
  ├─ Date: {{created_timestamp}}
  └─ Source: Stripe
  ↓
IF amount > $100:
  ↓
  Notify Telegram: "🎉 New sale: ${{amount}} from {{customer_email}}"

Frequency: ~10-20 executions/month

Value: Automatic revenue tracking (no manual spreadsheet updates)


Function Node (Transform Stripe Data)

// Input: Stripe charge object
const charge = $input.item.json;

// Transform to NocoDB format
const record = {
  "Amount": charge.amount / 100,  // Cents to dollars
  "Currency": charge.currency.toUpperCase(),
  "Customer": charge.billing_details.email,
  "Product": charge.description,
  "Date": new Date(charge.created * 1000).toISOString(),
  "Source": "Stripe",
  "Status": charge.status
};

return { json: record };

Workflow 3: SEO Auto-Indexing

Trigger: New WordPress post published

Flow:

WordPress Webhook
  ↓
Extract post URL
  ↓
Submit to IndexNow
  ├─ Endpoint: https://api.indexnow.org/indexnow
  ├─ Key: YOUR_INDEX_NOW_KEY
  ├─ URL: {{post_url}}
  ↓
Submit to Google Search Console
  ├─ Endpoint: https://searchconsole.googleapis.com/v1/urlInspection
  ├─ Auth: Service Account
  ├─ URL: {{post_url}}
  ↓
Wait 48 hours (delay node)
  ↓
Check indexing status (Google API)
  ↓
IF not indexed:
  ↓
  Notify Telegram: "⚠️ Post not indexed: {{post_url}}"

Value: Posts indexados automáticamente (no manual submission)

Indexing time: Reduced from 7 days → 1-2 days


Workflow 4: Daily Task Backup (NocoDB → Git)

Trigger: Cron (daily 2 AM)

Flow:

Cron Trigger (daily 2 AM)
  ↓
Fetch all active tasks from NocoDB
  ↓
Transform to JSON
  ↓
Write to file: tasks-YYYY-MM-DD.json
  ↓
Git add + commit + push
  ↓
Notify: "✅ Daily backup completed"

Value: Task history preserved (even if NocoDB breaks)

Recovery: Can restore tasks from git


Git Commit Node (Execute Command)

#!/bin/bash
cd /home/user/backups
echo '$json.tasks' > tasks-$(date +%Y-%m-%d).json
git add tasks-$(date +%Y-%m-%d).json
git commit -m "Daily backup $(date +%Y-%m-%d)"
git push origin main

Workflow 5: Listmonk Campaign Stats → NocoDB

Trigger: Cron (daily 12 PM, 3 hours after typical send time)

Flow:

Cron Trigger
  ↓
Fetch recent campaigns from Listmonk API
  ↓
FOR EACH campaign:
  ├─ Get stats (opens, clicks, bounces)
  ├─ Find corresponding NocoDB record (by Listmonk ID)
  ├─ Update record:
      ├─ Status: Sent
      ├─ Sent At: {{sent_at}}
      ├─ Subscribers: {{total}}
      ├─ Opens: {{opens}}
      ├─ Open Rate: {{opens / total * 100}}%
      ├─ Clicks: {{clicks}}
      ├─ Click Rate: {{clicks / total * 100}}%
  ↓
Notify: "✅ Newsletter stats updated"

Value: Centralized metrics (don’t have to check Listmonk manually)

Frequency: Daily


OpenClaw ↔ n8n Integration Patterns

Pattern 1: n8n Triggers OpenClaw

Use case: External event needs AI processing

Example: Stripe payment → notify OpenClaw → generate thank-you email

// n8n HTTP Request node
POST https://gateway.openclaw.local/api/session/send
{
  "message": "New customer: {{$json.customer_email}}. Generate personalized thank-you email.",
  "sessionKey": "main"
}

Pattern 2: OpenClaw Calls n8n Webhook

Use case: OpenClaw needs external API orchestration

Example: OpenClaw generates image → n8n uploads to CDN

## OpenClaw skill
import requests

webhook_url = "https://n8n.yourdomain.com/webhook/upload-to-cdn"
response = requests.post(webhook_url, json={
    "image_data": base64_image,
    "filename": "synthwave-featured.jpg"
})

cdn_url = response.json()['cdn_url']

Pattern 3: n8n as Middleware

Use case: Complex workflow with multiple steps

Example: Blog post → generate image → publish 3 platforms → track

OpenClaw: "Publish blog post X"
  ↓
OpenClaw calls n8n webhook: /webhook/publish-blog-post
  ↓
n8n orchestrates:
  ├─ Generate image (Replicate)
  ├─ Publish LinkedIn (Late API)
  ├─ Publish Twitter (Late API)
  ├─ Create newsletter (Listmonk)
  ├─ Track in NocoDB
  └─ Return summary to OpenClaw
  ↓
OpenClaw announces: "Post published to 3 platforms ✅"

Lecciones Aprendidas

1. Self-Hosted Dev + Cloud Prod = Best of Both

All self-hosted:

  • ✅ Free
  • ❌ Public webhooks break (VPS IP changes, firewall)
  • ❌ No uptime SLA

All cloud:

  • ✅ Reliable webhooks
  • ✅ Uptime SLA
  • ❌ $99/month for >10K executions

Hybrid:

  • ✅ Test locally, deploy to cloud
  • ✅ Cloud only for external webhooks (80% self-hosted)
  • Cost: $20/month (vs $99 all-cloud)

2. Code Nodes = Unlimited Flexibility

When to use Function node:

  • Data transformation (WordPress → LinkedIn format)
  • Complex logic (if X and Y, then Z)
  • API payload construction

When NOT to use:

  • Simple field mapping (use Set node)
  • API calls (use HTTP Request node)

Example:

// Transform WordPress post to LinkedIn format
const post = $input.item.json;

const linkedinPost = {
  text: `${post.title}\n\n${post.excerpt}\n\nLee más: ${post.url}`,
  image_url: post.featured_image,
  scheduled_at: new Date(Date.now() + 86400000).toISO()
};

return { json: linkedinPost };

3. Error Handling = Production-Ready

Bad workflow:

Trigger → API Call → Done

If API fails: workflow stops, no notification, no retry.

Production workflow:

Trigger
  ↓
TRY:
  ├─ API Call
  └─ Success → Log to NocoDB
CATCH:
  ├─ Log error
  ├─ Retry 3x (exponential backoff)
  └─ IF still fails:
      └─ Notify Telegram: "Workflow failed: {{error}}"

Implementation: Error Trigger node + retry logic


4. Sub-Workflows = Reusable Patterns

Problem: «Generate Synthwave image» logic duplicated in 5 workflows.

Solution: Create sub-workflow:

Main workflow:

Trigger
  ↓
Call sub-workflow: "generate-synthwave-image"
  ├─ Input: prompt, style, format
  └─ Output: image_url
  ↓
Use image_url in Late API post

Sub-workflow:

Webhook Trigger (internal)
  ↓
Replicate API (synthwave model)
  ↓
Poll for completion (max 60s)
  ↓
Download image
  ↓
Upload to CDN
  ↓
Return CDN URL

5. Execution Limits = Monitor Before Hit

n8n Cloud Starter limits:

  • 2,500 executions/month
  • Overage: $1 per 500

My usage:

  • Month 1: 8,000 executions → $11 overage fees

Solution:

  1. Self-host high-frequency workflows (daily crons)
  2. Keep cloud for low-frequency webhooks (Stripe)
  3. Monitor dashboard (alert at 80%)

Result: $20/month (no overages) vs $32 before


Resultados (12 Meses)

Stats:

  • Workflows active: 20+
  • Monthly executions: 8,000+
  • Success rate: 97.2%
  • Failed executions: 224 (mostly API rate limits, handled by retry)

Tiempo ahorrado:

  • Blog distribution: 30 min → 30 sec (60x faster)
  • SEO indexing: 15 min → 0 min
  • Revenue tracking: 10 min/week → 0 min
  • Social scheduling: 2 hours/week → 0 min
  • Total: ~15 hours/week

Costos

Instance Hosting Monthly Cost
Dev Docker (VPS) $0
Prod Docker (VPS) $0
Cloud n8n Cloud Starter $20
Total $20/month

vs equivalents:

  • Zapier (8K tasks): $99/month
  • Make (10K ops): $79/month

Savings: $79-99/month = $948-1,188/year


Setup n8n (Self-Hosted)

docker-compose.yml:

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n-prod
    restart: always
    ports:

      - "5678:5678"
    environment:

      - N8N_HOST=n8n.yourdomain.com

      - N8N_PROTOCOL=https

      - WEBHOOK_URL=https://n8n.yourdomain.com/

      - N8N_BASIC_AUTH_ACTIVE=true

      - N8N_BASIC_AUTH_USER=${N8N_USER}

      - N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
    volumes:

      - n8n_data:/home/node/.n8n
    networks:

      - internal

volumes:
  n8n_data:

networks:
  internal:
    driver: bridge

Levantar:

docker-compose up -d

Acceder: https://n8n.yourdomain.com (via Caddy reverse proxy)


Workflows Para Importar (Repo)

GitHub: openclaw-production-guide

Case 8: n8n Workflow Automation

Included workflows:

  1. Blog → Multi-Channel Distribution
  2. Stripe → NocoDB Tracking
  3. SEO Auto-Indexing
  4. Daily Task Backup
  5. Listmonk Stats Sync

Format: JSON (import directo en n8n)


Conclusión: 15 Hours/Week Saved

Setup time: 1-2 días (one-time).

Ahorro mensual: 60 horas (15h/week × 4).

Costo: $20/mes.

ROI: 60 horas × $100/hora = $6,000 value / $20 cost = 300x ROI.

Cuándo usar n8n:

  • 1,000 tasks/mes (Zapier/Make expensive)

  • Want code control (inspect + customize)
  • Value flexibility (Function nodes)

Cuándo NO:

  • <500 tasks/mes (free tiers sufficient)
  • Team no-code only (Zapier simpler)

Si automatizas workflows y pagas >$50/mes en Zapier/Make, n8n self-hosted paga su peso en oro.


¿Usas n8n? ¿Qué workflows corres? Comparte en comentarios.

Suscríbete a mi Newsletter

Estrategias de automatización, AI y startups que funcionan. Análisis semanal directo a tu inbox. (Sin spam, prometo intentarlo.)