Prompt: Create an n8n automation that handles general automation

Response:
# Workflow Architecture

**Purpose**: General Automation

**Key Components**:
- Total Nodes: 23
- Node Types: n8n-nodes-base.set, n8n-nodes-base.wait, n8n-nodes-base.splitInBatches, n8n-nodes-base.mailerLite, @n8n/n8n-nodes-langchain.openAi, n8n-nodes-base.if, n8n-nodes-base.filter, n8n-nodes-base.manualTrigger, n8n-nodes-base.stickyNote, n8n-nodes-base.aggregate

**Logic Flow**:
1. **Trigger**: n8n-nodes-base.manualTrigger - Initiates the workflow

## Complete Workflow JSON

```json
{
  "name": "Mailing List Analysis",
  "nodes": [
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -60,
        0
      ],
      "id": "37c270cd-3e5d-4ef6-8763-29d71cc8131c",
      "name": "When clicking ‘Test workflow’"
    },
    {
      "parameters": {
        "operation": "getAll",
        "returnAll": true,
        "filters": {}
      },
      "type": "n8n-nodes-base.mailerLite",
      "typeVersion": 2,
      "position": [
        160,
        0
      ],
      "id": "92f3c50f-1189-4d9f-a40b-09aed968c940",
      "name": "Get All Subscribers",
      "credentials": {
        "mailerLiteApi": {
          "id": "",
          "name": "MailerLite account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "bdcb77d5-0ca8-4fde-a9f2-c2ec41b7bf2a",
              "leftValue": "={{ $json.status }}",
              "rightValue": "active",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        380,
        0
      ],
      "id": "be6e055a-570e-4b45-b460-147a235f7f51",
      "name": "Filter Active Subscribers"
    },
    {
      "parameters": {
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "email"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        600,
        0
      ],
      "id": "f7ff85f8-6a5d-4429-aeff-e13683783ae0",
      "name": "Get Email Addresses"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "27d75a75-71ff-4fa2-8a17-c0e0b16a046c",
              "leftValue": "={{ $json.isCustomDomain }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "false",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        1040,
        80
      ],
      "id": "6e86a425-38a9-414c-88d8-fea3010f3b4f",
      "name": "Get Common Provider Emails"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "bacc9bba-0bf0-4dda-bc4f-a4345d30e5ac",
              "leftValue": "={{ $json.isCustomDomain }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        1040,
        -120
      ],
      "id": "d2e00312-16a2-4948-90ab-a33c7a23f74f",
      "name": "Get Business Mails"
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "value": "",
          "mode": "list",
          "cachedResultName": "",
          "cachedResultUrl": ""
        },
        "sheetName": {
          "__rl": true,
          "value": 305542890,
          "mode": "list",
          "cachedResultName": "",
          "cachedResultUrl": ""
        },
        "columns": {
          "mappingMode": "autoMapInputData",
          "value": {},
          "matchingColumns": [],
          "schema": [
            {
              "id": "email",
              "displayName": "email",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "isCustomDomain",
              "displayName": "isCustomDomain",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "domainInformation",
              "displayName": "domainInformation",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "personInformation",
              "displayName": "personInformation",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        1580,
        160
      ],
      "id": "29e3f607-3b5d-4909-9bc5-d6b19bfd612e",
      "name": "Save Non Business Mails",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "oYP1Bc15GY7emvD3",
          "name": "Google Sheets account"
        }
      }
    },
    {
      "parameters": {
        "url": "=http://crawl4ai:11235/task/{{ $json.task_id }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2460,
        -140
      ],
      "id": "8b3dc3ee-7b95-4ab0-b9dc-3a343dbc7db9",
      "name": "Get Crawl Status",
      "retryOnFail": true,
      "waitBetweenTries": 5000,
      "credentials": {
        "httpHeaderAuth": {
          "id": "MKoLytfiKC3rb7GP",
          "name": "crawl4ai"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "5d2415b6-a502-477a-a448-3542ed58d5ad",
              "leftValue": "={{ $json.status }}",
              "rightValue": "completed",
              "operator": {
                "type": "string",
                "operation": "equals",
                "name": "filter.operator.equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        2680,
        -80
      ],
      "id": "b1e3d759-e474-4f63-8042-ea78ca538768",
      "name": "Is Completed"
    },
    {
      "parameters": {
        "url": "={{\"http://\" + $json.email.split(\"@\").filter(Boolean).pop() }}",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1800,
        -80
      ],
      "id": "6ac470dc-733d-49f4-992b-02ca44a4e92e",
      "name": "Ping Website",
      "alwaysOutputData": false,
      "notesInFlow": false,
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "71985a5b-f7ec-4bbe-a390-7b329b90bc29",
              "name": "result.metadata.title",
              "value": "={{ $json.result.metadata.title }}",
              "type": "string"
            },
            {
              "id": "b0ae3939-c83c-4a4e-8b1f-676bbc1131c3",
              "name": "result.metadata.description",
              "value": "={{ $json.result.metadata.description }}",
              "type": "string"
            },
            {
              "id": "38bb1e85-53ca-48b8-bedd-eaf037ac893c",
              "name": "result.metadata[\"og:locale\"]",
              "value": "={{ $json.result.metadata[\"og:locale\"] }}",
              "type": "string"
            },
            {
              "id": "25d5c681-6459-4de4-a4fe-e7898406c6df",
              "name": "result.markdown",
              "value": "={{ $json.result.markdown }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        2900,
        -80
      ],
      "id": "547a8b55-9b7b-4154-bc43-65add729074f",
      "name": "Get Metadata"
    },
    {
      "parameters": {
        "content": "## Get Subscribers",
        "height": 540,
        "width": 980
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -160,
        -220
      ],
      "id": "1e3f0129-3864-4e8f-b74a-379b2e3af477",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "## Divide Subscribers",
        "height": 540,
        "width": 620,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        840,
        -220
      ],
      "id": "fddd8c77-3f5d-4e03-8c8c-5365721e88a7",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## Crawl Subscriber Information",
        "height": 540,
        "width": 1640,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1480,
        -220
      ],
      "id": "f3c5c27a-4185-414a-8169-e169e6ef2cca",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "## Analyze & Save Data",
        "height": 540,
        "width": 600,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        3140,
        -220
      ],
      "id": "dd170de2-c65c-4e46-89d5-12585fd39d57",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "jsCode": "// this could be improved by loading a list with more known providers\n// You could also use the mails mentioned here as a filter: https://gist.github.com/ammarshah/f5c2624d767f91a7cbdc4e54db8dd0bf\nconst commonDomains = [\n  'gmail',\n  'yahoo',\n  'outlook',\n  'hotmail',\n  'aol',\n  'icloud',\n  'protonmail',\n  'mail',\n  'zoho',\n  'yandex',\n  'live',\n  'msn',\n  'gmx'\n];\n\nconst result = [];\n\nfor (const item of $input.all()) {\n  for (const email of item.json.email) {\n    const domain = email.split('@')[1].toLowerCase();\n    // Extract the base domain (remove the TLD)\n    const baseDomain = domain.split('.')[0];\n    result.push({\n      email: email,\n      isCustomDomain: !commonDomains.includes(baseDomain)\n    });\n  }\n}\n\nreturn result;"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        860,
        0
      ],
      "id": "401e9f00-9f2c-4a4d-8835-50a5fc779947",
      "name": "Check Domain"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "http://crawl4ai:11235/crawl",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"urls\": \"{{\"https://\" +  $('Loop Over Emails').item.json.email.split(\"@\").filter(Boolean).pop()}}\",\n  \"priority\": 10\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2040,
        -60
      ],
      "id": "91b3698e-bee0-43d1-8cd5-db088f9cc1fe",
      "name": "Crawl Website",
      "credentials": {
        "httpHeaderAuth": {
          "id": "MKoLytfiKC3rb7GP",
          "name": "crawl4ai"
        }
      }
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "gpt-4o-mini",
          "mode": "list",
          "cachedResultName": "I"
        },
        "messages": {
          "values": [
            {
              "content": "You are an expert in website analysis and content categorization. Your task is to analyze the provided website data, including the title, meta description, og:locale, and content, to determine the following:\n\n1. What the website is about (its purpose or main focus).\n2. The niche or industry the website belongs to.\n3. The services or offerings provided by the website.\n\nYour response must always follow this JSON structure:\n\n\"website_analysis\": \n{\n  \"about\": \"[Provide a concise summary of what the website is about.]\",\n  \"niche\": \"[Identify the niche or industry the website belongs to.]\",\n  \"services\": [\n    \"[List the services or offerings provided by the website in bullet points.]\"\n  ]\n}\n\nUse the information provided to make accurate and concise inferences. If any information is missing or unclear, make reasonable assumptions based on the context.",
              "role": "system"
            },
            {
              "content": "=Here is the data extracted from a website. Analyze it and provide the following details:\n1. What the website is about.\n2. The niche or industry it belongs to.\n3. The services or offerings provided.\n\n### Website Data:\n- **Title:** {{ $json.result.metadata.title }}\n- **Meta Description:** {{ $json.result.metadata.description }}\n- **og:locale:** {{ $json.result.metadata[\"og:locale\"] }}\n- **Content:** {{ $json.result.markdown }}\n\nPlease analyze this data and provide your response in a structured format. "
            }
          ]
        },
        "jsonOutput": true,
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        3180,
        -80
      ],
      "id": "134b0d97-5f1b-4c72-b430-908c6ed52505",
      "name": "Analyze Website",
      "credentials": {
        "openAiApi": {
          "id": "RAj3VxCHt0rIwBTk",
          "name": "OpenAI"
        }
      }
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "value": "",
          "mode": "list",
          "cachedResultName": "",
          "cachedResultUrl": ""
        },
        "sheetName": {
          "__rl": true,
          "value": 1218456268,
          "mode": "list",
          "cachedResultName": "",
          "cachedResultUrl": ""
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "services": "={{ $json.message.content.website_analysis.services }}",
            "about": "={{ $json.message.content.website_analysis.about }}",
            "isCustomDomain": "={{ $('Loop Over Emails').item.json.isCustomDomain }}",
            "email": "={{ $('Loop Over Emails').item.json.email }}",
            "niche": "={{ $json.message.content.website_analysis.niche }}"
          },
          "matchingColumns": [
            "email"
          ],
          "schema": [
            {
              "id": "email",
              "displayName": "email",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "isCustomDomain",
              "displayName": "isCustomDomain",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "about",
              "displayName": "about",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "niche",
              "displayName": "niche",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "services",
              "displayName": "services",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        3560,
        -60
      ],
      "id": "a1c7cc7c-0b0a-4386-954f-52899c74f778",
      "name": "Save Subscriber Information",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "oYP1Bc15GY7emvD3",
          "name": "Google Sheets account"
        }
      }
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        1580,
        -40
      ],
      "id": "0441498f-a3cf-4e1f-ade7-93e63b4e8517",
      "name": "Loop Over Emails"
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "",
          "mode": "list",
          "cachedResultName": "",
          "cachedResultUrl": ""
        },
        "sheetName": {
          "__rl": true,
          "value": 1218456268,
          "mode": "list",
          "cachedResultName": "",
          "cachedResultUrl": ""
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        160,
        -180
      ],
      "id": "e9fc527b-e16c-44c2-b6fa-64ce93c2b887",
      "name": "Get Analyzed Subscribers",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "oYP1Bc15GY7emvD3",
          "name": "Google Sheets account"
        }
      }
    },
    {
      "parameters": {
        "mergeByFields": {
          "values": [
            {
              "field1": "email",
              "field2": "email"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.compareDatasets",
      "typeVersion": 2.3,
      "position": [
        1240,
        -200
      ],
      "id": "4f181484-a220-4d29-8d09-45a10daed04e",
      "name": "Get Emails to Analyze"
    },
    {
      "parameters": {
        "amount": 15
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        2240,
        -80
      ],
      "id": "fde02556-495b-40b9-8fb8-79a9b2545a96",
      "name": "Sleep",
      "webhookId": "f63502d1-6006-423a-bbeb-345991818635"
    }
  ],
  "pinData": {},
  "connections": {
    "When clicking ‘Test workflow’": {
      "main": [
        [
          {
            "node": "Get All Subscribers",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get Analyzed Subscribers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get All Subscribers": {
      "main": [
        [
          {
            "node": "Filter Active Subscribers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Active Subscribers": {
      "main": [
        [
          {
            "node": "Get Email Addresses",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Email Addresses": {
      "main": [
        [
          {
            "node": "Check Domain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Business Mails": {
      "main": [
        [
          {
            "node": "Get Emails to Analyze",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Get Common Provider Emails": {
      "main": [
        [
          {
            "node": "Save Non Business Mails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Crawl Status": {
      "main": [
        [
          {
            "node": "Is Completed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Completed": {
      "main": [
        [
          {
            "node": "Get Metadata",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Sleep",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ping Website": {
      "main": [
        [
          {
            "node": "Crawl Website",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Metadata": {
      "main": [
        [
          {
            "node": "Analyze Website",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Domain": {
      "main": [
        [
          {
            "node": "Get Business Mails",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get Common Provider Emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Crawl Website": {
      "main": [
        [
          {
            "node": "Sleep",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze Website": {
      "main": [
        [
          {
            "node": "Save Subscriber Information",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Subscriber Information": {
      "main": [
        [
          {
            "node": "Loop Over Emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Emails": {
      "main": [
        [],
        [
          {
            "node": "Ping Website",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Analyzed Subscribers": {
      "main": [
        [
          {
            "node": "Get Emails to Analyze",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Emails to Analyze": {
      "main": [
        [],
        [],
        [],
        [
          {
            "node": "Loop Over Emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Sleep": {
      "main": [
        [
          {
            "node": "Get Crawl Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "86acd2d0-4e0e-43c0-8de1-5bdda8e79daf",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a"
  },
  "id": "sBeN4ryu7Vg1eLMc",
  "tags": []
}
```


Prompt: Create an n8n automation that handles general automation

Response:
# Workflow Architecture

**Purpose**: General Automation

**Key Components**:
- Total Nodes: 7
- Node Types: n8n-nodes-base.set, n8n-nodes-base.manualTrigger, n8n-nodes-base.executeWorkflow

**Logic Flow**:
1. **Trigger**: n8n-nodes-base.manualTrigger - Initiates the workflow

## Complete Workflow JSON

```json
{
  "name": "Report Examples Demo",
  "nodes": [
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -100,
        100
      ],
      "id": "0b4e2c14-3b21-4463-b1a8-44a8f6fd20ed",
      "name": "When clicking ‘Execute workflow’"
    },
    {
      "parameters": {
        "mode": "raw",
        "jsonOutput": "{\n  \"title\": \"SEO Report July\",\n  \"filename\": \"seo_report\",\n  \"content\": {\n    \"website\": \"example-store.com\",\n    \"analysis_date\": \"2025-07-31\",\n    \"overall_score\": 78,\n    \"critical_issues\": [\n      \"Missing meta descriptions on 15 pages\",\n      \"Slow page load times (average 4.2 seconds)\",\n      \"Broken internal links found\"\n    ],\n    \"technical_seo\": {\n      \"page_speed\": {\n        \"desktop_score\": 65,\n        \"mobile_score\": 42,\n        \"recommendations\": [\n          \"Optimize images (reduce file sizes by 60%)\",\n          \"Enable browser caching\",\n          \"Minify CSS and JavaScript files\"\n        ]\n      },\n      \"crawlability\": {\n        \"status\": \"Good\",\n        \"sitemap_url\": \"https://example-store.com/sitemap.xml\",\n        \"robots_txt\": \"Present and properly configured\",\n        \"issues\": []\n      }\n    },\n    \"content_analysis\": {\n      \"keyword_optimization\": {\n        \"primary_keywords\": [\"organic skincare\", \"natural beauty products\", \"eco-friendly cosmetics\"],\n        \"keyword_density\": \"2.3%\",\n        \"missing_keywords\": [\"sustainable beauty\", \"cruelty-free products\"]\n      },\n      \"content_quality\": {\n        \"readability_score\": 82,\n        \"average_word_count\": 450,\n        \"duplicate_content\": \"3 pages with similar content detected\"\n      }\n    },\n    \"recommendations\": {\n      \"high_priority\": [\n        \"Add meta descriptions to all product pages\",\n        \"Implement image compression to improve load times\",\n        \"Fix 12 broken internal links in navigation\"\n      ],\n      \"medium_priority\": [\n        \"Optimize title tags for better CTR\",\n        \"Add schema markup for products\",\n        \"Improve mobile responsiveness\"\n      ],\n      \"low_priority\": [\n        \"Add social media meta tags\",\n        \"Consider implementing breadcrumb navigation\"\n      ]\n    },\n    \"next_review_date\": \"2025-10-31\"\n  }\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        200,
        100
      ],
      "id": "4238e624-1664-4d45-95ec-b5dadfda7ea3",
      "name": "Mock SEO Report"
    },
    {
      "parameters": {
        "mode": "raw",
        "jsonOutput": "{\n  \"title\": \"Mediterranean Recipe\",\n  \"filename\": \"recipe\",\n  \"content\": {\n    \"dish_name\": \"Mediterranean Herb-Crusted Salmon with Roasted Vegetables\",\n    \"cuisine_type\": \"Mediterranean\",\n    \"difficulty_level\": \"Intermediate\",\n    \"prep_time\": \"25 minutes\",\n    \"cook_time\": \"35 minutes\",\n    \"serves\": 4,\n    \"ingredients\": {\n      \"main_protein\": [\n        \"4 salmon fillets (6 oz each)\",\n        \"2 tablespoons olive oil\",\n        \"1 teaspoon sea salt\",\n        \"1/2 teaspoon black pepper\"\n      ],\n      \"herb_crust\": [\n        \"1/2 cup fresh breadcrumbs\",\n        \"2 tablespoons fresh parsley, chopped\",\n        \"1 tablespoon fresh dill, chopped\",\n        \"1 tablespoon fresh oregano, chopped\",\n        \"2 cloves garlic, minced\",\n        \"2 tablespoons lemon zest\"\n      ],\n      \"roasted_vegetables\": [\n        \"2 medium zucchini, sliced\",\n        \"1 red bell pepper, cut into strips\",\n        \"1 yellow bell pepper, cut into strips\",\n        \"1 red onion, sliced\",\n        \"12 cherry tomatoes, halved\",\n        \"3 tablespoons olive oil\",\n        \"1 teaspoon dried thyme\"\n      ]\n    },\n    \"cooking_instructions\": {\n      \"preparation\": {\n        \"step_1\": \"Preheat oven to 425°F (220°C)\",\n        \"step_2\": \"Line two baking sheets with parchment paper\",\n        \"step_3\": \"Pat salmon fillets dry and season with salt and pepper\"\n      },\n      \"herb_crust_preparation\": {\n        \"mixing\": \"Combine breadcrumbs, herbs, garlic, and lemon zest in a bowl\",\n        \"binding\": \"Add 1 tablespoon olive oil to create a paste-like consistency\",\n        \"application\": \"Press herb mixture firmly onto top of each salmon fillet\"\n      },\n      \"vegetable_preparation\": {\n        \"cutting\": \"Cut all vegetables into uniform pieces for even cooking\",\n        \"seasoning\": \"Toss vegetables with olive oil, thyme, salt, and pepper\",\n        \"arrangement\": \"Spread vegetables in single layer on prepared baking sheet\"\n      },\n      \"cooking_process\": {\n        \"vegetables_first\": \"Roast vegetables for 15 minutes before adding salmon\",\n        \"salmon_cooking\": \"Place herb-crusted salmon on second baking sheet\",\n        \"final_cooking\": \"Cook both salmon and vegetables for additional 12-15 minutes\",\n        \"doneness_check\": \"Salmon should flake easily and reach internal temperature of 145°F\"\n      }\n    },\n    \"nutritional_information\": {\n      \"per_serving\": {\n        \"calories\": 485,\n        \"protein\": \"38g\",\n        \"carbohydrates\": \"18g\",\n        \"fat\": \"28g\",\n        \"fiber\": \"5g\",\n        \"sodium\": \"420mg\"\n      },\n      \"health_benefits\": [\n        \"Rich in omega-3 fatty acids for heart health\",\n        \"High protein content supports muscle maintenance\",\n        \"Antioxidants from colorful vegetables boost immune system\",\n        \"Mediterranean herbs provide anti-inflammatory compounds\"\n      ]\n    },\n    \"serving_suggestions\": {\n      \"accompaniments\": [\n        \"Lemon wedges for extra citrus flavor\",\n        \"Tzatziki sauce or Greek yogurt\",\n        \"Warm pita bread or crusty sourdough\",\n        \"Mixed green salad with olive oil dressing\"\n      ],\n      \"wine_pairings\": [\n        \"Sauvignon Blanc - crisp and herbaceous\",\n        \"Pinot Grigio - light and fresh\",\n        \"Rosé - complements the Mediterranean flavors\"\n      ]\n    },\n    \"storage_and_leftovers\": {\n      \"refrigeration\": {\n        \"duration\": \"Store leftovers for up to 3 days in refrigerator\",\n        \"container\": \"Use airtight containers to maintain freshness\",\n        \"reheating\": \"Reheat gently in 350°F oven for 8-10 minutes\"\n      },\n      \"meal_prep_tips\": [\n        \"Prepare herb crust mixture up to 2 days ahead\",\n        \"Cut vegetables the night before and store in refrigerator\",\n        \"Cook extra vegetables for easy weekday sides\"\n      ]\n    },\n    \"chef_notes\": {\n      \"substitutions\": {\n        \"fish_alternatives\": [\"Cod fillets\", \"Halibut steaks\", \"Sea bass\"],\n        \"herb_variations\": [\"Basil and thyme\", \"Rosemary and sage\", \"Cilantro and mint\"],\n        \"vegetable_swaps\": [\"Asparagus\", \"Brussels sprouts\", \"Eggplant\"]\n      },\n      \"pro_tips\": [\n        \"Don't overcrowd vegetables on baking sheet for proper roasting\",\n        \"Let salmon rest at room temperature for 15 minutes before cooking\",\n        \"Use a meat thermometer for perfectly cooked salmon every time\"\n      ]\n    },\n    \"recipe_source\": \"Chef Maria's Mediterranean Kitchen\",\n    \"recipe_url\": \"https://mediterranean-kitchen.com/herb-crusted-salmon\"\n  }\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        200,
        -100
      ],
      "id": "50ab8c9b-368d-4357-b250-486b228cbba8",
      "name": "Mock Recipe"
    },
    {
      "parameters": {
        "mode": "raw",
        "jsonOutput": "{\n  \"title\": \"SEO Report July\",\n  \"filename\": \"project\",\n  \"content\": {\n    \"project_name\": \"TaskFlow Pro - Project Management API\",\n    \"version\": \"2.4.1\",\n    \"release_date\": \"2025-07-15\",\n    \"overview\": \"A comprehensive REST API for managing projects, tasks, and team collaboration with real-time updates and advanced reporting capabilities.\",\n    \"system_requirements\": {\n      \"minimum_requirements\": {\n        \"operating_system\": [\"Windows 10\", \"macOS 12.0\", \"Ubuntu 20.04 LTS\"],\n        \"memory\": \"8GB RAM minimum\",\n        \"storage\": \"2GB available disk space\",\n        \"network\": \"Stable internet connection required\"\n      },\n      \"recommended_requirements\": {\n        \"operating_system\": [\"Windows 11\", \"macOS 13.0\", \"Ubuntu 22.04 LTS\"],\n        \"memory\": \"16GB RAM or higher\",\n        \"storage\": \"5GB available disk space\",\n        \"processor\": \"Multi-core processor (4+ cores recommended)\"\n      }\n    },\n    \"installation_guide\": {\n      \"prerequisites\": {\n        \"software_dependencies\": [\n          \"Node.js version 18.0 or higher\",\n          \"PostgreSQL 14.0 or higher\",\n          \"Redis 6.2 or higher\",\n          \"Docker (optional but recommended)\"\n        ],\n        \"environment_setup\": {\n          \"development\": \"Set NODE_ENV=development in your environment variables\",\n          \"production\": \"Configure SSL certificates and set NODE_ENV=production\",\n          \"database\": \"Create a new PostgreSQL database named 'taskflow_db'\"\n        }\n      },\n      \"installation_steps\": {\n        \"step_1\": {\n          \"title\": \"Clone the Repository\",\n          \"command\": \"git clone https://github.com/taskflow/taskflow-api.git\",\n          \"description\": \"Download the latest version from our GitHub repository\"\n        },\n        \"step_2\": {\n          \"title\": \"Install Dependencies\",\n          \"command\": \"npm install --production\",\n          \"description\": \"Install all required Node.js packages and dependencies\"\n        },\n        \"step_3\": {\n          \"title\": \"Configure Environment\",\n          \"files\": [\".env.example\", \".env.production\"],\n          \"description\": \"Copy .env.example to .env and configure your database credentials\"\n        },\n        \"step_4\": {\n          \"title\": \"Database Migration\",\n          \"command\": \"npm run migrate:latest\",\n          \"description\": \"Set up database tables and initial schema\"\n        },\n        \"step_5\": {\n          \"title\": \"Start the Application\",\n          \"command\": \"npm start\",\n          \"description\": \"Launch the API server on default port 3000\"\n        }\n      }\n    },\n    \"api_endpoints\": {\n      \"authentication\": {\n        \"login\": {\n          \"method\": \"POST\",\n          \"endpoint\": \"/api/v2/auth/login\",\n          \"description\": \"Authenticate user and receive JWT token\",\n          \"required_fields\": [\"email\", \"password\"],\n          \"response_format\": \"JSON with access_token and user_info\"\n        },\n        \"register\": {\n          \"method\": \"POST\",\n          \"endpoint\": \"/api/v2/auth/register\",\n          \"description\": \"Create new user account\",\n          \"required_fields\": [\"email\", \"password\", \"first_name\", \"last_name\"],\n          \"optional_fields\": [\"company\", \"phone\"]\n        }\n      },\n      \"project_management\": {\n        \"create_project\": {\n          \"method\": \"POST\",\n          \"endpoint\": \"/api/v2/projects\",\n          \"description\": \"Create a new project with initial settings\",\n          \"required_fields\": [\"name\", \"description\", \"start_date\"],\n          \"optional_fields\": [\"end_date\", \"budget\", \"team_members\"]\n        },\n        \"list_projects\": {\n          \"method\": \"GET\",\n          \"endpoint\": \"/api/v2/projects\",\n          \"description\": \"Retrieve all projects for authenticated user\",\n          \"query_parameters\": [\"status\", \"sort_by\", \"limit\", \"offset\"],\n          \"filters\": [\"active\", \"completed\", \"archived\", \"on_hold\"]\n        },\n        \"update_project\": {\n          \"method\": \"PUT\",\n          \"endpoint\": \"/api/v2/projects/{project_id}\",\n          \"description\": \"Update existing project details\",\n          \"updatable_fields\": [\"name\", \"description\", \"status\", \"budget\", \"end_date\"]\n        }\n      },\n      \"task_management\": {\n        \"create_task\": {\n          \"method\": \"POST\",\n          \"endpoint\": \"/api/v2/projects/{project_id}/tasks\",\n          \"description\": \"Add new task to specified project\",\n          \"required_fields\": [\"title\", \"description\", \"priority\"],\n          \"priority_levels\": [\"low\", \"medium\", \"high\", \"urgent\"]\n        },\n        \"assign_task\": {\n          \"method\": \"PATCH\",\n          \"endpoint\": \"/api/v2/tasks/{task_id}/assign\",\n          \"description\": \"Assign task to team member\",\n          \"required_fields\": [\"assignee_id\", \"due_date\"],\n          \"notification\": \"Automatic email notification sent to assignee\"\n        }\n      }\n    },\n    \"configuration_options\": {\n      \"database_settings\": {\n        \"connection_pool\": {\n          \"min_connections\": 5,\n          \"max_connections\": 20,\n          \"idle_timeout\": \"30 seconds\"\n        },\n        \"backup_settings\": {\n          \"automatic_backup\": true,\n          \"backup_frequency\": \"Daily at 2:00 AM UTC\",\n          \"retention_period\": \"30 days\",\n          \"backup_location\": \"AWS S3 bucket or local storage\"\n        }\n      },\n      \"security_configuration\": {\n        \"jwt_settings\": {\n          \"token_expiry\": \"24 hours\",\n          \"refresh_token_expiry\": \"7 days\",\n          \"algorithm\": \"HS256\"\n        },\n        \"rate_limiting\": {\n          \"requests_per_minute\": 100,\n          \"burst_limit\": 200,\n          \"blocked_duration\": \"15 minutes\"\n        },\n        \"cors_settings\": {\n          \"allowed_origins\": [\"https://app.taskflow.com\", \"https://admin.taskflow.com\"],\n          \"allowed_methods\": [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\"],\n          \"credentials\": true\n        }\n      }\n    },\n    \"troubleshooting\": {\n      \"common_issues\": {\n        \"database_connection_failed\": {\n          \"symptoms\": [\"Connection timeout errors\", \"Unable to connect to database\"],\n          \"solutions\": [\n            \"Verify database credentials in .env file\",\n            \"Check if PostgreSQL service is running\",\n            \"Ensure database exists and user has proper permissions\",\n            \"Test connection using psql command line tool\"\n          ]\n        },\n        \"authentication_errors\": {\n          \"symptoms\": [\"401 Unauthorized responses\", \"Invalid token errors\"],\n          \"solutions\": [\n            \"Check JWT secret key configuration\",\n            \"Verify token hasn't expired\",\n            \"Ensure proper Authorization header format\",\n            \"Clear browser cache and cookies\"\n          ]\n        },\n        \"performance_issues\": {\n          \"symptoms\": [\"Slow API responses\", \"High memory usage\", \"Timeout errors\"],\n          \"solutions\": [\n            \"Enable database query optimization\",\n            \"Implement Redis caching for frequent queries\",\n            \"Monitor and optimize database indexes\",\n            \"Scale horizontally with load balancer\"\n          ]\n        }\n      }\n    },\n    \"support_resources\": {\n      \"documentation_links\": [\n        \"https://docs.taskflow.com/api-reference\",\n        \"https://docs.taskflow.com/getting-started\",\n        \"https://docs.taskflow.com/best-practices\"\n      ],\n      \"community_support\": [\n        \"GitHub Issues: https://github.com/taskflow/taskflow-api/issues\",\n        \"Discord Community: https://discord.gg/taskflow\",\n        \"Stack Overflow tag: taskflow-api\"\n      ],\n      \"contact_information\": {\n        \"technical_support\": \"support@taskflow.com\",\n        \"sales_inquiries\": \"sales@taskflow.com\",\n        \"business_hours\": \"Monday-Friday, 9:00 AM - 6:00 PM EST\"\n      }\n    }\n  }\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        200,
        280
      ],
      "id": "6ba13623-d42a-4785-9537-8022521f9397",
      "name": "Mock Project Data"
    },
    {
      "parameters": {
        "workflowId": {
          "__rl": true,
          "value": "lr4FCy9jvt89twbt",
          "mode": "list",
          "cachedResultName": "Tools - Report Generator"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "title": "={{ $json.title }}",
            "filename": "={{ $json.filename }}",
            "content": "={{ $json.content }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "filename",
              "displayName": "filename",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "title",
              "displayName": "title",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "content",
              "displayName": "content",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        },
        "options": {}
      },
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        420,
        -100
      ],
      "id": "0181fe75-a134-43f5-aa3d-8b33c4a08bc8",
      "name": "Generate Report 1"
    },
    {
      "parameters": {
        "workflowId": {
          "__rl": true,
          "value": "lr4FCy9jvt89twbt",
          "mode": "list",
          "cachedResultName": "Tools - Report Generator"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "title": "={{ $json.title }}",
            "filename": "={{ $json.filename }}",
            "content": "={{ $json.content }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "filename",
              "displayName": "filename",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "title",
              "displayName": "title",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "content",
              "displayName": "content",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        },
        "options": {}
      },
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        420,
        100
      ],
      "id": "2437b60c-a6a1-4d5f-9cb9-d1f25da5f808",
      "name": "Generate Report 2"
    },
    {
      "parameters": {
        "workflowId": {
          "__rl": true,
          "value": "lr4FCy9jvt89twbt",
          "mode": "list",
          "cachedResultName": "Tools - Report Generator"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "title": "={{ $json.title }}",
            "filename": "={{ $json.filename }}",
            "content": "={{ $json.content }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "filename",
              "displayName": "filename",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "title",
              "displayName": "title",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "content",
              "displayName": "content",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        },
        "options": {}
      },
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        420,
        280
      ],
      "id": "a4f69396-d7b2-4d4e-99ca-1194d1ff97df",
      "name": "Generate Report 3"
    }
  ],
  "pinData": {},
  "connections": {
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "Mock SEO Report",
            "type": "main",
            "index": 0
          },
          {
            "node": "Mock Recipe",
            "type": "main",
            "index": 0
          },
          {
            "node": "Mock Project Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mock SEO Report": {
      "main": [
        [
          {
            "node": "Generate Report 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mock Recipe": {
      "main": [
        [
          {
            "node": "Generate Report 1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mock Project Data": {
      "main": [
        [
          {
            "node": "Generate Report 3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "6108b1b3-101f-48a6-b19a-e334acc08afb",
  "meta": {
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a"
  },
  "id": "hxQH8WTuPlGTfMm5",
  "tags": []
}
```


Prompt: Build a workflow for: Tools   Report Generator

Response:
# Workflow Architecture

**Purpose**: General Automation

**Key Components**:
- Total Nodes: 8
- Node Types: @n8n/n8n-nodes-langchain.agent, n8n-nodes-base.set, @n8n/n8n-nodes-langchain.lmChatOpenAi, n8n-nodes-base.executeWorkflowTrigger, n8n-nodes-base.convertToFile, n8n-nodes-base.html, n8n-nodes-base.stickyNote, n8n-nodes-base.code

**Logic Flow**:
1. **Trigger**: n8n-nodes-base.executeWorkflowTrigger - Initiates the workflow

## Complete Workflow JSON

```json
{
  "name": "Tools - Report Generator",
  "nodes": [
    {
      "parameters": {
        "operation": "toBinary",
        "sourceProperty": "base64",
        "options": {
          "fileName": "={{$('Start').item.json.filename + \".html\"}}",
          "mimeType": "={{ $json.mimetype }}"
        }
      },
      "type": "n8n-nodes-base.convertToFile",
      "typeVersion": 1.1,
      "position": [
        1000,
        -80
      ],
      "id": "6041b412-c030-4e83-86ab-3e8b68988398",
      "name": "convert_to_html_file"
    },
    {
      "parameters": {
        "jsCode": "return [\n  {\n    json: {\n      base64: Buffer.from($input.all()[0].json.html).toString('base64'),\n      mimetype: \"text/html\"\n    }\n  }\n];\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        780,
        -80
      ],
      "id": "04d67343-1344-48ca-a599-918e5b7688d9",
      "name": "convert_to_base64"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {
          "temperature": 0
        }
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        -80,
        120
      ],
      "id": "fb451a32-3a49-4247-91f7-2f52db48d040",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "id": "RAj3VxCHt0rIwBTk",
          "name": "OpenAI"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Convert the following JSON data to HTML format:\n\n{{ JSON.stringify($json.content) }}\n# TRANSFORMATION REQUIREMENTS\n\n**Structure Conversion:**\n- Transform each JSON key into a semantic HTML section with appropriate heading level\n- Maintain logical hierarchy: top-level keys become h2, nested keys become h3, etc.\n- Preserve the original data organization and relationships\n\n**Content Formatting:**\n- Text strings → <p> paragraphs (split on line breaks if needed)\n- Arrays → <ul> unordered lists with <li> items\n- Objects → Nested <section> elements with subheadings\n- URLs → Proper <a> tags with href attributes\n- Important terms → <strong> tags for emphasis\n\n**HTML Requirements:**\n- Wrap everything in <article aria-label=\"Report Content\">\n- Include <header> with <h1> for the main title\n- Use <section aria-labelledby=\"id\"> for each major section\n- Generate unique kebab-case IDs for all headings\n- Ensure proper heading hierarchy (h1 → h2 → h3, no skipping)\n\n**Output Specifications:**\n- Return ONLY the article content (no DOCTYPE, html, head, body tags)\n- No CSS styling or class attributes\n- Valid HTML5 that can be directly inserted into a template\n- Proper HTML entity encoding for special characters\n\nGenerate the complete HTML article content now.\n",
        "options": {
          "systemMessage": "=You are a specialized JSON-to-HTML converter that transforms structured data into semantic HTML article content. Your output must be consistent, valid, and directly insertable into web templates.\n\n# PRIMARY FUNCTION\nTransform JSON data into clean HTML wrapped in an <article> tag with proper semantic structure, accessibility features, and consistent formatting.\n\n# STRICT OUTPUT REQUIREMENTS\n- Output ONLY content between <article> and </article> tags\n- NO DOCTYPE, html, head, body, or any wrapper tags\n- NO CSS styles or class attributes\n- NO JavaScript or script tags\n- Must be valid HTML5 that passes validation\n\n# JSON INTERPRETATION RULES\n1. **Object Keys** → Section headings (h2, h3, h4 based on nesting depth)\n2. **String Values** → Paragraph content in <p> tags\n3. **Arrays** → Unordered lists (<ul><li>) unless context suggests ordered lists\n4. **Nested Objects** → Subsections with appropriate heading hierarchy\n5. **URLs** → Convert to proper <a> tags with href and descriptive text\n6. **Empty/Null Values** → Skip entirely, do not create empty sections\n\n# HTML STRUCTURE HIERARCHY\n```\n<article aria-label=\"Report Content\">\n  <header>\n    <h1>[Main Title]</h1>\n  </header>\n  \n  <section aria-labelledby=\"id-1\">\n    <h2 id=\"id-1\">[Section Title]</h2>\n    <section aria-labelledby=\"id-1-1\">\n      <h3 id=\"id-1-1\">[Subsection Title]</h3>\n      <p>[Content]</p>\n      <ul>\n        <li>[List item]</li>\n      </ul>\n    </section>\n  </section>\n</article>\n```\n\n# MANDATORY FORMATTING RULES\n1. **IDs**: Generate kebab-case IDs for all headings (h1-h6)\n2. **ARIA**: Include aria-labelledby for all sections referencing heading IDs\n3. **Text Processing**: \n   - Escape HTML entities (&amp;, &lt;, &gt;, &quot;)\n   - Convert line breaks to separate <p> tags\n   - Wrap standalone text in <p> tags\n4. **Links**: Auto-detect URLs and wrap in <a href=\"url\" title=\"descriptive-title\">text</a>\n5. **Emphasis**: Use <strong> for important terms, <em> for emphasis\n\n# ERROR HANDLING\n- If JSON is malformed: Output error message in <p> tag within article\n- If empty JSON: Output <article><p>No content available</p></article>\n- Skip any keys with null/undefined values\n- Handle special characters properly with HTML entities\n\n# CONSISTENCY REQUIREMENTS\n- Always start with <article aria-label=\"Report Content\">\n- Always include <header> with <h1> for main title\n- Use consistent ID naming: section-1, section-2, subsection-1-1, etc.\n- Maintain proper heading hierarchy (don't skip levels)\n- End with closing </article> tag\n\nProcess the JSON systematically and output only the HTML article content.\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2,
      "position": [
        -20,
        -80
      ],
      "id": "4f39c987-d009-4f6f-9a2e-d93a6a23e0f2",
      "name": "Formatter",
      "executeOnce": true
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "654e6696-7705-4021-87df-1edf19bbe439",
              "name": "html",
              "value": "={{ $json.html }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        560,
        -80
      ],
      "id": "d61c1ee0-6d2e-491f-86da-99901e029d0d",
      "name": "get_html_output",
      "notes": ".replace('html', '').replaceAll(\"```\", '').replaceAll(\"\\n\", \"\") "
    },
    {
      "parameters": {
        "html": "<!DOCTYPE html>\n<html lang=\"de\">\n<head>\n  <meta charset=\"UTF-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n  <title>{{ $('Start').item.json.title }}</title>\n  <style>\n    * {\n      box-sizing: border-box;\n      margin: 0;\n      padding: 0;\n    }\n\n    body {\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', system-ui, sans-serif;\n      line-height: 1.7;\n      color: #1a1a1a;\n      background-color: #fafafa;\n      font-size: 16px;\n      font-weight: 400;\n    }\n\n    article {\n      max-width: 800px;\n      margin: 40px auto;\n      background: #ffffff;\n      border: 1px solid #e5e5e5;\n      border-radius: 8px;\n      overflow: hidden;\n    }\n\n    header {\n      background: #ffffff;\n      border-bottom: 1px solid #e5e5e5;\n      padding: 48px 40px 32px 40px;\n      text-align: center;\n    }\n\n    h1 {\n      font-size: 32px;\n      font-weight: 600;\n      color: #0a0a0a;\n      letter-spacing: -0.02em;\n      margin: 0;\n    }\n\n    h2 {\n      font-size: 20px;\n      font-weight: 600;\n      color: #0a0a0a;\n      margin: 48px 0 16px 0;\n      padding: 0 40px;\n      letter-spacing: -0.01em;\n    }\n\n    h2:first-of-type {\n      margin-top: 32px;\n    }\n\n    h3 {\n      font-size: 16px;\n      font-weight: 600;\n      color: #333333;\n      margin: 32px 0 12px 0;\n      padding: 0 40px;\n    }\n\n    section {\n      margin-bottom: 0;\n    }\n\n    section > section {\n      margin: 24px 0;\n      padding: 0 40px;\n    }\n\n    p {\n      margin: 12px 0;\n      padding: 0 40px;\n      color: #4a4a4a;\n      line-height: 1.6;\n    }\n\n    ul {\n      margin: 16px 0;\n      padding: 0 40px 0 64px;\n      list-style: none;\n    }\n\n    li {\n      margin: 8px 0;\n      color: #4a4a4a;\n      line-height: 1.6;\n      position: relative;\n    }\n\n    li::before {\n      content: \"•\";\n      color: #999999;\n      position: absolute;\n      left: -16px;\n      font-weight: 600;\n    }\n\n    a {\n      color: #0066cc;\n      text-decoration: none;\n      font-weight: 500;\n    }\n\n    a:hover {\n      color: #0052a3;\n      text-decoration: underline;\n    }\n\n    strong {\n      color: #1a1a1a;\n      font-weight: 600;\n    }\n\n\n    /* Last section styling */\n    section:last-child {\n      padding-bottom: 40px;\n    }\n\n    /* Responsive design */\n    @media (max-width: 768px) {\n      body {\n        font-size: 15px;\n      }\n      \n      article {\n        margin: 20px;\n        border-radius: 6px;\n      }\n      \n      header {\n        padding: 32px 24px 24px 24px;\n      }\n      \n      h1 {\n        font-size: 28px;\n      }\n      \n      h2 {\n        font-size: 18px;\n        padding: 0 24px;\n        margin: 32px 0 12px 0;\n      }\n      \n      h3 {\n        font-size: 15px;\n        padding: 0 24px;\n        margin: 24px 0 8px 0;\n      }\n      \n      p {\n        padding: 0 24px;\n      }\n      \n      ul {\n        padding: 0 24px 0 48px;\n      }\n      \n      section > section {\n        padding: 0 24px;\n      }\n      \n      section:not(:last-child) {\n        padding-bottom: 24px;\n      }\n      \n      section:last-child {\n        padding-bottom: 32px;\n      }\n    }\n\n    @media (max-width: 480px) {\n      article {\n        margin: 16px;\n      }\n      \n      header {\n        padding: 24px 20px 20px 20px;\n      }\n      \n      h1 {\n        font-size: 24px;\n      }\n      \n      h2, h3, p {\n        padding-left: 20px;\n        padding-right: 20px;\n      }\n      \n      ul {\n        padding: 0 20px 0 40px;\n      }\n      \n      section > section {\n        padding: 0 20px;\n      }\n    }\n  </style>\n</head>\n<body>\n{{ $json.output }}\n</body>\n</html>"
      },
      "type": "n8n-nodes-base.html",
      "typeVersion": 1.2,
      "position": [
        340,
        -80
      ],
      "id": "f21c55b8-273e-4cd8-a386-0e03126daac0",
      "name": "generate_html_report"
    },
    {
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "filename"
            },
            {
              "name": "title"
            },
            {
              "name": "content",
              "type": "any"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1.1,
      "position": [
        -340,
        -80
      ],
      "id": "8e77f839-6bc5-456f-87bc-580631ba08c5",
      "name": "Start"
    },
    {
      "parameters": {
        "content": "## Workflow Instructions\n#### Requirements\nTo use this workflow, you will need an OpenAI API Key.\n\n### Demo\nYou can find a a tutorial [here](https://www.youtube.com/@Marvomatic).\n\n\n### Support & Contact\nDeveloped by **Marvomatic**\n- [Website](https://marvomatic.com)\n- [TikTok](https://www.tiktok.com/@marvomatic)\n- [YouTube](https://www.youtube.com/@marvomatic)\n\n\nFor business inquiries, email: [hello@marvomatic.com](mailto:hello@marvomatic.com)",
        "height": 380,
        "width": 760
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        400,
        100
      ],
      "id": "56463b9f-9c6b-4137-8a49-e0c905238872",
      "name": "Sticky Note5"
    }
  ],
  "pinData": {},
  "connections": {
    "convert_to_html_file": {
      "main": [
        []
      ]
    },
    "convert_to_base64": {
      "main": [
        [
          {
            "node": "convert_to_html_file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Formatter",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Formatter": {
      "main": [
        [
          {
            "node": "generate_html_report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "get_html_output": {
      "main": [
        [
          {
            "node": "convert_to_base64",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "generate_html_report": {
      "main": [
        [
          {
            "node": "get_html_output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start": {
      "main": [
        [
          {
            "node": "Formatter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "556b940d-a96f-40d9-b72d-d69b5482d56f",
  "meta": {
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a"
  },
  "id": "lr4FCy9jvt89twbt",
  "tags": []
}
```


Prompt: Create an n8n automation that handles general automation

Response:
# Workflow Architecture

**Purpose**: General Automation

**Key Components**:
- Total Nodes: 7
- Node Types: @n8n/n8n-nodes-langchain.agent, @n8n/n8n-nodes-langchain.memoryBufferWindow, @n8n/n8n-nodes-langchain.lmChatOpenAi, @n8n/n8n-nodes-langchain.toolWorkflow, n8n-nodes-base.googleBigQueryTool, n8n-nodes-base.stickyNote, @n8n/n8n-nodes-langchain.chatTrigger

**Logic Flow**:
1. **Trigger**: @n8n/n8n-nodes-langchain.chatTrigger - Initiates the workflow

## Complete Workflow JSON

```json
{
  "name": "SEO Data Analyst",
  "nodes": [
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.1,
      "position": [
        80,
        0
      ],
      "id": "e68f379c-160b-40e1-99ca-26eb326961a8",
      "name": "When chat message received",
      "webhookId": "78186b53-b072-4a0f-aaed-a585fe9e1b45"
    },
    {
      "parameters": {
        "contextWindowLength": 10
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        480,
        220
      ],
      "id": "01365ff6-8b71-4e2b-8f41-1b4e11bdf3bc",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4.1-mini",
          "mode": "list",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {
          "temperature": 0
        }
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        320,
        220
      ],
      "id": "f117fbdb-6cc7-40e8-a9cb-a15815449599",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "id": "RAj3VxCHt0rIwBTk",
          "name": "OpenAI"
        }
      }
    },
    {
      "parameters": {
        "projectId": {
          "__rl": true,
          "value": "automations-451008",
          "mode": "list",
          "cachedResultName": "automations",
          "cachedResultUrl": ""
        },
        "sqlQuery": "{{ $fromAI('sql_statement') }}",
        "options": {
          "returnAsNumbers": true
        }
      },
      "type": "n8n-nodes-base.googleBigQueryTool",
      "typeVersion": 2.1,
      "position": [
        660,
        220
      ],
      "id": "6d8fb936-0f44-4896-a00d-6beb80007152",
      "name": "Execute BigQuery Statements",
      "credentials": {
        "googleBigQueryOAuth2Api": {
          "id": "9x33JaSI9N1JQ0NB",
          "name": "Google BigQuery account"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Always execute the BigQuery SQL Query to get the correct data from the databases. Please anwswer then the following questions:\n{{ $json.chatInput }}",
        "options": {
          "systemMessage": "=You are an **AI SEO Data Analyst** with access to two powerful tools:\n\n- **Website Agent:** Can scrape and analyze any web page, extracting the title, meta description, a summary, and performing n-gram analysis of the content.\n- **Google BigQuery Tool:** Can query the table `add-your-table-name-here` containing Google Search Console data.\n\nYour **primary goal** is to help users identify **keywords that should be better integrated into their website content** to improve SEO performance.\n\n---\n\n#### **Your Workflow for Every User Question:**\n\n1. **Analyze** the user's question and determine if it relates to website content, search performance data, or both.\n2. **If the question involves a specific URL or page:**\n   - Use the Website Agent to scrape and analyze the page.\n   - Extract and return:\n     - Title\n     - Meta description\n     - Summary of the content\n     - N-gram analysis (highlighting most frequent 1-3 word phrases)\n3. **If the question involves search performance or keywords:**\n   - Generate the appropriate SQL query using the table and schema below.\n   - Execute the SQL query using the Google BigQuery tool.\n   - Format the results into a clear, user-friendly response.\n4. **For keyword integration analysis:**\n   - Use BigQuery to identify high-impression or high-click keywords that are underrepresented in the website content (as revealed by the n-gram analysis).\n   - Suggest which keywords should be better integrated into the page or site.\n5. **Return** a combined, actionable answer to the user, including:\n   - Website content analysis (title, meta, summary, n-grams)\n   - Search Console data (top queries, missing keywords, etc.)\n   - Clear recommendations for keyword integration\n\n---\n\n#### **Available Data:**\n\n**BigQuery Table:** `add-your-table-name-here`\n\n**Schema:**\n- `data_date` (DATE): Date of the data entry\n- `url` (STRING): URL of the page\n- `query` (STRING): Search query (keyword)\n- `is_anonymized_query` (BOOLEAN): True if the query is anonymized\n- `is_anonymized_discover` (BOOLEAN): True if the discover data is anonymized\n- `country` (STRING): Country code\n- `search_type` (STRING): Type of search (web, image, video)\n- `device` (STRING): Device type (desktop, mobile, tablet)\n- `impressions` (INTEGER): Number of times the result was shown\n- `clicks` (INTEGER): Number of times the result was clicked\n- `sum_position` (INTEGER): Sum of positions for the result\n\n**Default filters:**  \nAlways set `is_anonymized_query` and `is_anonymized_discover` to false in your SQL queries.\n\n---\n\n#### **SQL Query Guidelines:**\n\n- Use the exact table name: `add-your-table-name-here`\n- For time-based questions, use the `data_date` column with BigQuery date functions\n- For \"top\" or \"best performing\" results, order by clicks (highest first)\n- Use appropriate aggregations (SUM, COUNT, AVG) when grouping data\n- Always include proper WHERE clauses for date ranges and filters\n\n---\n\n#### **Result Formatting Guidelines:**\n\n- **For lists/tables:** Present as clean tables with clear headers\n- **For single values:** Provide a short narrative explanation\n- **For comparisons:** Clearly explain the difference or trend\n- **For keyword integration:** Clearly list keywords that are high-performing in Search Console but underused in the page content, and recommend integrating them\n- **Always:** Use non-technical language that any business user can understand\n- **Never:** Show raw SQL queries or technical database output to the user\n\n---\n\n#### **Examples:**\n\n**User:** \"Analyze https:domain.com/slug and tell me which keywords from Search Console should be added to the page.\"\n\n**→ Workflow:**\n- Scrape and analyze `https:domain.com/slug` (title, meta, summary, n-grams)\n- Query BigQuery for top queries for `https:domain.com/slug`\n- Compare n-grams to top queries\n- Return:\n\n> **Page Analysis:**  \n> - Title: \"10 SEO Tips for 2024\"  \n> - Meta Description: \"Boost your rankings with these actionable SEO tips.\"  \n> - Summary: \"This article covers the most effective SEO strategies for 2024...\"  \n> - Top n-grams: \"SEO tips\", \"search engine\", \"content optimization\"\n>\n> **Search Console Data:**  \n> | Keyword         | Clicks | Impressions |\n> |-----------------|--------|-------------|\n> | \"SEO checklist\" | 120    | 2,000       |\n> | \"SEO audit\"     | 90     | 1,500       |\n>\n> **Recommendation:**  \n> The keywords \"SEO checklist\" and \"SEO audit\" are driving significant impressions but are not prominent in your page content. Consider integrating these keywords naturally into your article to improve relevance and rankings.\n\n---\n\n#### **Important:**\n\n- Always use the correct tool for each part of the workflow\n- Never show SQL code to the user\n- Always format results in a business-friendly way\n- If a question is unclear, ask one clarifying question before proceeding\n\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2,
      "position": [
        420,
        0
      ],
      "id": "796b093c-edc8-49fc-b047-f8e0ca6db13e",
      "name": "SEO Data Analyst"
    },
    {
      "parameters": {
        "description": "Call this tool when a website needs to be optimized. The input should be the url.",
        "workflowId": {
          "__rl": true,
          "value": "4DiQ75K8cdqHbobH",
          "mode": "list",
          "cachedResultName": "Tool - Website Agent"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {},
          "matchingColumns": [],
          "schema": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        840,
        220
      ],
      "id": "e9bb3469-7e15-451d-8e6c-31c00a794466",
      "name": "Crawl URL"
    },
    {
      "parameters": {
        "content": "## Workflow Instructions\n#### Requirements\nTo use this workflow, you will need accounts and API access for the following services:\n- **BigQuery**\n- **Serper**\n- **OpenAI**\n#### Getting Started\n1. Set up the Bulk Data Export you can find a tutorial [here](https://youtu.be/DlhXvS2Hsj4?si=Pyxci25i-zBO4A5U).\n2. Configure your API credentials for Serper Dev and OpenAI within n8n. You can find an example [here](https://youtu.be/SFI-cyoKnKs?si=RXrK-O_KSpKP-i4m).\n3. Import the workflows into your n8n instance.\n4. Update any required variables or nodes in the workflow to point to your credentials and API keys.\n5. Update the System and User Prompt with the correct BigQuery table names. \n\n#### Support & Contact\nDeveloped by **Marvomatic**\n- [Website](https://marvomatic.com)\n- [TikTok](https://www.tiktok.com/@marvomatic)\n- [YouTube](https://www.youtube.com/@marvomatic)\n\nFor business inquiries, email: [hello@marvomatic.com](mailto:hello@marvomatic.com)",
        "height": 520,
        "width": 760
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1000,
        -100
      ],
      "id": "a08cb5c9-1521-4816-9ae6-8fa9c3914016",
      "name": "Sticky Note5"
    }
  ],
  "pinData": {},
  "connections": {
    "When chat message received": {
      "main": [
        [
          {
            "node": "SEO Data Analyst",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "SEO Data Analyst",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "SEO Data Analyst",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Execute BigQuery Statements": {
      "ai_tool": [
        [
          {
            "node": "SEO Data Analyst",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Crawl URL": {
      "ai_tool": [
        [
          {
            "node": "SEO Data Analyst",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "df36d629-37e6-4745-a930-49d08b1e8db3",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a"
  },
  "id": "N5qSw2wVcptJIeQe",
  "tags": []
}
```


Prompt: Show me an n8n workflow for tool   serper crawl url

Response:
# Workflow Architecture

**Purpose**: General Automation

**Key Components**:
- Total Nodes: 3
- Node Types: n8n-nodes-base.set, n8n-nodes-base.executeWorkflowTrigger, n8n-nodes-base.httpRequest

**Logic Flow**:
1. **Trigger**: n8n-nodes-base.executeWorkflowTrigger - Initiates the workflow

## Complete Workflow JSON

```json
{
  "name": "Tool - Serper Crawl URL",
  "nodes": [
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "7320f474-4ba6-47b7-9ce7-82529cbb12ff",
              "name": "title",
              "value": "={{ $json.metadata.title }}",
              "type": "string"
            },
            {
              "id": "a047ca1d-04e0-493b-9d88-eddc4ec4478c",
              "name": "description",
              "value": "={{ $json.metadata.description }}",
              "type": "string"
            },
            {
              "id": "607f18e4-364c-4594-8821-3800b28d3c9b",
              "name": "markdown",
              "value": "={{ $json.markdown }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        280,
        0
      ],
      "id": "635191a6-85dc-439d-8616-ceabb5294a71",
      "name": "Get Metadata"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://scrape.serper.dev",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "url",
              "value": "={{ $json.query }}"
            },
            {
              "name": "includeMarkdown",
              "value": "true"
            }
          ]
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        60,
        0
      ],
      "id": "b53e65c6-0b22-4b89-b718-32143058205e",
      "name": "Serper",
      "credentials": {
        "httpHeaderAuth": {
          "id": "9PtnIrGtPxKAKD1J",
          "name": "Serper Demo"
        }
      }
    },
    {
      "parameters": {
        "inputSource": "passthrough"
      },
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1.1,
      "position": [
        -160,
        0
      ],
      "id": "59fec696-d611-4a2d-b35b-ea3a7e7e7957",
      "name": "When Executed by Another Workflow"
    }
  ],
  "pinData": {},
  "connections": {
    "Get Metadata": {
      "main": [
        []
      ]
    },
    "Serper": {
      "main": [
        [
          {
            "node": "Get Metadata",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When Executed by Another Workflow": {
      "main": [
        [
          {
            "node": "Serper",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "c8caef1a-c775-4584-832c-84dd6865aea5",
  "meta": {
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a"
  },
  "id": "RkFq0paD5YLLof2K",
  "tags": []
}
```


Prompt: Design a workflow using @n8n/n8n-nodes-langchain.agent, @n8n/n8n-nodes-langchain.toolWorkflow, @n8n/n8n-nodes-langchain.lmChatOpenAi to tool   website agent

Response:
# Workflow Architecture

**Purpose**: General Automation

**Key Components**:
- Total Nodes: 4
- Node Types: @n8n/n8n-nodes-langchain.agent, @n8n/n8n-nodes-langchain.toolWorkflow, @n8n/n8n-nodes-langchain.lmChatOpenAi, n8n-nodes-base.executeWorkflowTrigger

**Logic Flow**:
1. **Trigger**: n8n-nodes-base.executeWorkflowTrigger - Initiates the workflow

## Complete Workflow JSON

```json
{
  "name": "Tool - Website Agent",
  "nodes": [
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.query }}",
        "options": {
          "systemMessage": "=### System Prompt for n8n AI Agent: Website Analyzer\n\nYou are an AI Agent designed to analyze web pages.  \nWhen the user says something similiar to, \"analyze the following page\" and provides a URL, follow these steps:\n\n1. **Scrape the web page at the provided URL using the available Tool.**\n2. **Extract and return the following information:**\n   - **Title:** The main title of the page.\n   - **Description:** The meta description or a brief summary if no meta description is available.\n   - **Summary:** A concise summary of the main content of the page.\n   - **N-gram Analysis:**  \n     - **Guidelines for N-gram Analysis:**\n       - Only analyze the main textual content of the page (ignore navigation, ads, and boilerplate).\n       - Remove all common stop words (such as \"the\", \"and\", \"is\", etc.) from the analysis.\n       - Normalize text by converting to lowercase and removing punctuation.\n       - For each n-gram type, list the top 10 most frequent items.\n       - Present results as lists, ordered by frequency (most frequent first).\n       - For bigrams and trigrams, do not include n-grams that contain only stop words.\n       - If the page has very little text, return as many n-grams as possible and note the limitation.\n\n     - **Unigram:** List of the most frequent single words (excluding stop words).\n     - **Bigram:** List of the most frequent two-word combinations (excluding those with only stop words).\n     - **Trigram:** List of the most frequent three-word combinations (excluding those with only stop words).\n\n**Output your results in a clear, structured format.**  \nIf any information is missing or cannot be found, state this explicitly.\n\n---\n\n#### Example Output\n\n**Title:** [Page Title]  \n**Description:** [Meta Description or brief summary]  \n**Summary:** [Concise summary of main content]  \n**N-gram Analysis:**  \n- **Unigram:** [word1, word2, ...]  \n- **Bigram:** [word1 word2, word2 word3, ...]  \n- **Trigram:** [word1 word2 word3, word2 word3 word4, ...]"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2,
      "position": [
        220,
        0
      ],
      "id": "3c621351-ad1f-4652-a2c8-0fe0db3a094a",
      "name": "Scrape Agent"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        200,
        200
      ],
      "id": "e01072a7-f096-4ea2-b238-da6362e9fd3d",
      "name": "GPT-4.1-mini",
      "credentials": {
        "openAiApi": {
          "id": "RAj3VxCHt0rIwBTk",
          "name": "OpenAI"
        }
      }
    },
    {
      "parameters": {
        "inputSource": "passthrough"
      },
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1.1,
      "position": [
        0,
        0
      ],
      "id": "4d03f030-1eef-4c0c-8055-2f0f11096f0b",
      "name": "When Executed by Another Workflow"
    },
    {
      "parameters": {
        "description": "Call this tool to scrape websites by providing a URL and return the prepared data.",
        "workflowId": {
          "__rl": true,
          "value": "RkFq0paD5YLLof2K",
          "mode": "list",
          "cachedResultName": "Tool - Serper Crawl URL"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {},
          "matchingColumns": [],
          "schema": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        420,
        220
      ],
      "id": "af549453-a56e-4ca6-bffe-a1b074234d07",
      "name": "Call Serper"
    }
  ],
  "pinData": {},
  "connections": {
    "GPT-4.1-mini": {
      "ai_languageModel": [
        [
          {
            "node": "Scrape Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "When Executed by Another Workflow": {
      "main": [
        [
          {
            "node": "Scrape Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call Serper": {
      "ai_tool": [
        [
          {
            "node": "Scrape Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "4d9d630a-3d6f-4a6b-83ea-8607cec1d98b",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a"
  },
  "id": "4DiQ75K8cdqHbobH",
  "tags": []
}
```