AutomationFlowsWeb Scraping › AI Newsletter Builder: Crawl Sites with Dumpling Ai, Summarize with Gpt-4o

AI Newsletter Builder: Crawl Sites with Dumpling Ai, Summarize with Gpt-4o

ByYang @yang on n8n.io

This workflow is built for newsletter writers, marketers, content creators, or anyone who curates and summarizes web articles. It’s especially helpful for virtual assistants and founders who need to quickly turn web content into digestible, branded newsletters using AI.

Event trigger★★★★☆ complexityAI-powered10 nodesGoogle SheetsHTTP RequestOpenAIGmail
Web Scraping Trigger: Event Nodes: 10 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #4030 — we link there as the canonical source.

This workflow follows the Gmail → Google Sheets 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
{
  "id": "HlVn82cNQLDWx73K",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "AI Newsletter Builder: Crawl Sites with Dumpling AI, Summarize with GPT-4o",
  "tags": [],
  "nodes": [
    {
      "id": "b607052f-8712-4cce-977e-6216da30a144",
      "name": "Start Workflow Manually",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -800,
        -160
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5bf110b3-a678-4a34-a4c9-3a87ab22774f",
      "name": "Get Website URLs from Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -580,
        -160
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/10AQk_0kG8d0fa7gwbm0W8f9CyMZ9syPGksQoMNBkut4/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/10AQk_0kG8d0fa7gwbm0W8f9CyMZ9syPGksQoMNBkut4/edit?usp=drivesdk",
          "cachedResultName": "sites"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "a996f64a-bb61-493d-90ca-dce9d465fd58",
      "name": "Crawl and Extract Site Content with Dumpling AI",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -360,
        -160
      ],
      "parameters": {
        "url": "https://app.dumplingai.com/api/v1/crawl",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"url\": \"{{ $json.websites }}\", \n  \"limit\": \"5\",\n  \"depth\": \"2\", \n  \"format\": \"text\"\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "01d0b913-cfdc-4144-8556-d5c18221cf7c",
      "name": "Split Extracted Results into Individual Items",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -140,
        -160
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "results"
      },
      "typeVersion": 1
    },
    {
      "id": "9d69abfa-c867-4fbc-83a2-58723f3c4dfb",
      "name": "Map Title, URL, and Page Text",
      "type": "n8n-nodes-base.set",
      "position": [
        80,
        -160
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "51ae9a51-06f4-46b1-979e-578eb5dc361c",
              "name": "metadata.title",
              "type": "string",
              "value": "={{ $json.metadata.title }}"
            },
            {
              "id": "2f16ef6f-cc2f-4a4d-a5e7-3cdde3465398",
              "name": "content",
              "type": "string",
              "value": "={{ $json.content }}"
            },
            {
              "id": "31ac95b7-beeb-4b3b-8e52-ed75027ae379",
              "name": "metadata.original_url",
              "type": "string",
              "value": "={{ $json.metadata.original_url }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "eaaa909d-92df-4837-a474-d533577c5621",
      "name": " Combine Articles into Single Prompt Format",
      "type": "n8n-nodes-base.code",
      "position": [
        300,
        -160
      ],
      "parameters": {
        "jsCode": "let output = '';\nitems.forEach((item, index) => {\n  const title = item.json.metadata?.title || 'No title';\n  const url = item.json.metadata?.original_url || 'No URL';\n  const content = item.json.content || 'No content';\n\n  output += `${index + 1}. ${title}\\n${url}\\n${content}\\n\\n`;\n});\n\nreturn [{ json: { aggregatedArticles: output } }];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "b2691018-fa64-4a55-a5e9-e68733ab9a7a",
      "name": " Generate HTML Newsletter with Subject Using GPT-4o",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        520,
        -160
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "GPT-4O"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are a newsletter assistant that creates a compelling subject line and summarizes a list of articles in engaging, well-structured HTML format.\n\nInstructions:\n\n1. Read the list of articles. Each article includes a title, content, and original URL.\n2. First, generate a short, catchy subject line for the newsletter based on the overall theme of the articles.\n3. Then, for each article:\n   - Write the title inside an <h3> tag.\n   - Summarize the article in 2 to 3 engaging sentences inside a <p> tag.\n   - Below the summary, write: \u201cTo read more, click the link:\u201d and include the original URL as a clickable link inside another <p> tag.\n   - Add a <br/> to separate entries.\n\nReturn the result in this JSON format:\n\n{\n  \"subject\": \"[Newsletter subject line]\",\n  \"body\": \"[HTML body with all the articles]\"\n}\n\nOnly output the JSON. Do not explain anything else.\n\n\n\nHere is the input:{{ $json.aggregatedArticles }}\n\n"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "c1266ac2-e2c0-4258-be9d-08c1ae6f3727",
      "name": "Send Newsletter via Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        896,
        -160
      ],
      "parameters": {
        "sendTo": "",
        "message": "={{ $json.message.content.body }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "={{ $json.message.content.subject }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "25e0a2b5-5c27-4176-b9d8-4e91d15d86cc",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        -360
      ],
      "parameters": {
        "width": 680,
        "height": 200,
        "content": "### \ud83c\udf10 Get Website Content Using Dumpling AI\n\nThis section starts with a manual trigger, then fetches a list of website URLs from a connected Google Sheet. Each URL is sent to Dumpling AI\u2019s crawl endpoint, which extracts readable content up to a set depth. The response is an array of article-like results. These are then split one by one for individual processing. The `Set` node maps key fields such as the original URL, article title, and cleaned content for each page.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9ca5931f-6637-4371-8830-d73801381276",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        300,
        -360
      ],
      "parameters": {
        "color": 4,
        "width": 660,
        "height": 220,
        "content": "### \ud83e\udde0 Summarize and Email AI-Generated Newsletter\n\nAfter extracting and mapping each article\u2019s data, the `Code` node formats all the articles into a readable string prompt. GPT-4o is used to create a newsletter-style HTML body and catchy subject line based on the content. Finally, the result is sent using the Gmail node, delivering a ready-to-send AI-generated newsletter straight to the recipient\u2019s inbox.\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "a86325fc-4f26-4052-8883-ec983049f51d",
  "connections": {
    "Start Workflow Manually": {
      "main": [
        [
          {
            "node": "Get Website URLs from Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Map Title, URL, and Page Text": {
      "main": [
        [
          {
            "node": " Combine Articles into Single Prompt Format",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Website URLs from Google Sheet": {
      "main": [
        [
          {
            "node": "Crawl and Extract Site Content with Dumpling AI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    " Combine Articles into Single Prompt Format": {
      "main": [
        [
          {
            "node": " Generate HTML Newsletter with Subject Using GPT-4o",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Extracted Results into Individual Items": {
      "main": [
        [
          {
            "node": "Map Title, URL, and Page Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Crawl and Extract Site Content with Dumpling AI": {
      "main": [
        [
          {
            "node": "Split Extracted Results into Individual Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    " Generate HTML Newsletter with Subject Using GPT-4o": {
      "main": [
        [
          {
            "node": "Send Newsletter via Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

This workflow is built for newsletter writers, marketers, content creators, or anyone who curates and summarizes web articles. It’s especially helpful for virtual assistants and founders who need to quickly turn web content into digestible, branded newsletters using AI.

Source: https://n8n.io/workflows/4030/ — original creator credit. Request a take-down →

More Web Scraping workflows → · Browse all categories →

Related workflows

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

Web Scraping

This workflow is Part 2 of the HR Client Acquisition system and builds on the lead discovery pipeline from the previous workflow:

Google Sheets, HTTP Request, OpenAI +2
Web Scraping

End-to-end lead pipeline (discovery → enrichment → outreach) Google Search–based LinkedIn discovery (safe approach) Batch processing with controlled loops AI-generated cold emails and follow-ups Googl

HTTP Request, Google Sheets, Google Gemini +1
Web Scraping

Product - SERP Analysis (Serper + Firecrawl). Uses formTrigger, httpRequest, googleSheets, openAi. Event-driven trigger; 40 nodes.

Form Trigger, HTTP Request, Google Sheets +1
Web Scraping

Product - SERP Analysis (Serper & Crawl4AI). Uses formTrigger, httpRequest, googleSheets, openAi. Event-driven trigger; 39 nodes.

Form Trigger, HTTP Request, Google Sheets +1
Web Scraping

Product - SERP Analysis (SerpAPI + Crawl4AI). Uses formTrigger, httpRequest, googleSheets, openAi. Event-driven trigger; 38 nodes.

Form Trigger, HTTP Request, Google Sheets +1