AutomationFlowsGeneral › Monthly Competitor Comparison Email

Monthly Competitor Comparison Email

Original n8n title: Arenza — Monthly Competitor Comparison Email

Arenza — Monthly Competitor Comparison Email. Uses httpRequest, emailSend. Scheduled trigger; 6 nodes.

Cron / scheduled trigger★★★★☆ complexity6 nodesHTTP RequestEmail Send
General Trigger: Cron / scheduled Nodes: 6 Complexity: ★★★★☆ Added:

This workflow follows the Emailsend → 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 →

Download .json
{
  "name": "Arenza \u2014 Monthly Competitor Comparison Email",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 9 1 * *"
            }
          ]
        }
      },
      "id": "node-cron",
      "name": "Schedule: 1st of month 9 AM",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.1,
      "position": [
        240,
        300
      ]
    },
    {
      "parameters": {
        "url": "https://api.arenza.ai/v1/brands",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {
          "retry": {
            "maxRetries": 3,
            "waitBetweenRetries": 5000
          }
        }
      },
      "id": "node-list-brands",
      "name": "GET /v1/brands",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        460,
        300
      ],
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "fieldToSplitOut": "data",
        "options": {}
      },
      "id": "node-split-brands",
      "name": "Split Brands",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        680,
        300
      ]
    },
    {
      "parameters": {
        "url": "=https://api.arenza.ai/v1/brands/{{ $json.id }}/competitor-comparison?top=3&markets=US,UK,DE,JP",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {
          "retry": {
            "maxRetries": 3,
            "waitBetweenRetries": 5000
          }
        }
      },
      "id": "node-comparison",
      "name": "GET /brands/:id/competitor-comparison",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        900,
        300
      ],
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// Build an HTML email body comparing brand vs top-3 competitors per market.\nconst LLMS = ['ChatGPT', 'Claude', 'Gemini', 'Perplexity', 'Copilot', 'Grok'];\n\nreturn items.map(item => {\n  const d = item.json;\n  const brand = d.brand?.name ?? 'unknown brand';\n  const markets = d.markets ?? [];\n\n  let html = `<h1>${brand} \u2014 Monthly Competitor Comparison</h1>`;\n  html += `<p>Across the 6 LLMs (${LLMS.join(', ')}) and ${markets.length} markets:</p>`;\n\n  for (const m of markets) {\n    html += `<h2>${m.market}</h2>`;\n    html += '<table border=\"1\" cellpadding=\"6\" cellspacing=\"0\"><tr><th>Brand</th><th>SoV%</th><th>Mention rate</th><th>Wrong claims (30d)</th></tr>';\n    const rows = [m.target, ...(m.competitors ?? [])];\n    for (const r of rows) {\n      const isUs = r.id === d.brand?.id;\n      html += `<tr style=\"font-weight:${isUs ? 'bold' : 'normal'}\">`;\n      html += `<td>${r.name}${isUs ? ' (you)' : ''}</td>`;\n      html += `<td>${(r.share_of_voice ?? 0).toFixed(1)}%</td>`;\n      html += `<td>${((r.mention_rate ?? 0) * 100).toFixed(0)}%</td>`;\n      html += `<td>${r.wrong_claims ?? 0}</td>`;\n      html += '</tr>';\n    }\n    html += '</table>';\n  }\n\n  html += `<p><a href=\"https://app.arenza.ai/brands/${d.brand?.id}\">Open in Arenza dashboard</a> \u00b7 powered by arenza.ai</p>`;\n\n  return {\n    json: {\n      to: d.brand?.notification_email ?? 'geo-team@example.com',\n      subject: `${brand} \u2014 Monthly Competitor Comparison`,\n      html\n    }\n  };\n});\n"
      },
      "id": "node-format",
      "name": "Format Email HTML",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1140,
        300
      ]
    },
    {
      "parameters": {
        "fromEmail": "geo-reports@arenza.ai",
        "toEmail": "={{ $json.to }}",
        "subject": "={{ $json.subject }}",
        "emailFormat": "html",
        "html": "={{ $json.html }}",
        "options": {}
      },
      "id": "node-email",
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2.1,
      "position": [
        1360,
        300
      ],
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Schedule: 1st of month 9 AM": {
      "main": [
        [
          {
            "node": "GET /v1/brands",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET /v1/brands": {
      "main": [
        [
          {
            "node": "Split Brands",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Brands": {
      "main": [
        [
          {
            "node": "GET /brands/:id/competitor-comparison",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET /brands/:id/competitor-comparison": {
      "main": [
        [
          {
            "node": "Format Email HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Email HTML": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "tags": [
    {
      "name": "arenza"
    },
    {
      "name": "geo"
    },
    {
      "name": "competitor-comparison"
    }
  ]
}

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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Arenza — Monthly Competitor Comparison Email. Uses httpRequest, emailSend. Scheduled trigger; 6 nodes.

Source: https://github.com/arenza-ai/arenza-n8n-template/blob/main/workflows/competitor-comparison.json — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

General

Politician Research Pipeline. Uses httpRequest, emailSend. Scheduled trigger; 9 nodes.

HTTP Request, Email Send
General

API Health Check. Uses httpRequest, emailSend. Scheduled trigger; 5 nodes.

HTTP Request, Email Send
General

backup. Uses googleDrive, httpRequest. Scheduled trigger; 15 nodes.

Google Drive, HTTP Request
General

Smart google indexing: sitemap filter and url inspection. Uses httpRequest, xml, splitOut, scheduleTrigger. Scheduled trigger; 13 nodes.

HTTP Request, XML
General

Yourang - Complete Workflow Example. Uses n8n-nodes-yourang, httpRequest. Scheduled trigger; 10 nodes.

N8N Nodes Yourang, HTTP Request