AutomationFlowsGeneral › Automated Animal Advocacy News Research & Weekly Digest Using Claude AI & Serper

Automated Animal Advocacy News Research & Weekly Digest Using Claude AI & Serper

ByOpen Paws @openpaws on n8n.io

This workflow is designed for animal advocacy organizations, activists, and campaigners who want to automatically receive a weekly email update summarizing the latest news and developments related to animal rights, welfare, vegetarianism, and veganism. It can also be easily…

Cron / scheduled trigger★★★★☆ complexityAI-powered11 nodesOpenRouter ChatChain LlmEmail Send
General Trigger: Cron / scheduled Nodes: 11 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Chainllm → Emailsend 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": "SWZk4x34IRwxhKzr",
  "name": "Weekly Animal Advocacy Brief",
  "tags": [],
  "nodes": [
    {
      "id": "b2a2dd9d-2bcf-4689-bfaf-099a1356188d",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        280,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtHour": 12
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fe98d44d-7ec8-419f-a7d5-064a240a88a1",
      "name": "OpenRouter Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        980,
        220
      ],
      "parameters": {
        "model": "anthropic/claude-sonnet-4",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0f3a7012-ce68-404b-b5c8-6394a11aedd5",
      "name": "Call Research Agent",
      "type": "n8n-nodes-base.executeWorkflow",
      "position": [
        760,
        0
      ],
      "parameters": {
        "options": {},
        "workflowId": {
          "__rl": true,
          "mode": "list",
          "value": "k053fXGjIF7dUIQZ",
          "cachedResultName": "\u267b\ufe0f \ud83e\udde9 \ud83d\udcda General Research Agent"
        },
        "workflowInputs": {
          "value": {
            "chatInput": "=Your job is to research news and updates strictly from the past week, only using the Serper API. You must set the time parameter as follows to ensure only past-week articles are retrieved:\n\n\"tbs\": \"qdr:w\" (past week)\n\nYou are searching for news and articles on the following topics, but **only as they relate to animal rights, animal welfare, vegetarianism, and veganism**:\n\n{{ $json.Topics }}\n\nAlso consider the additional context of the user's instructions for the type of information they want you to find:\n\n{{ $json['Custom Instructions'] }}\n\nThe current date and time is {{ $now }}.\n\n**Your final answer should:**\n- Be as long and detailed as possible.\n- Include every direct URL you find, using exactly the same URL string returned by the tools.\n- Never modify, shorten, omit, or \"clean up\" URLs in any way.\n- Clearly show all URLs, even if some are repeated across different findings.\n\n**Research requirements:**\n- Make multiple API calls to Serper if needed to get complete coverage.\n- Use scraping tools (text scraping, URL scraping) on the sites you find to extract additional details, but never modify or fabricate URLs.\n- If a website blocks scraping, acknowledge it and continue with the available data (this does not mean the tool is broken).\n\n**Prohibited behavior:**\n- Never say \"I don't have access to real-time news data or current internet content\" or any similar disclaimer, as you do have tools for real-time news retrieval.\n- Never guess or invent URLs.\n\n**IMPORTANT:** Always include every URL exactly as found by the tools, without any alterations.",
            "sessionId": "={{ (Math.random().toString(36).substring(2) + Date.now().toString(36)) }}"
          },
          "schema": [
            {
              "id": "chatInput",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "chatInput",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sessionId",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "sessionId",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        }
      },
      "retryOnFail": true,
      "typeVersion": 1.2,
      "waitBetweenTries": 5000
    },
    {
      "id": "543cb81a-7d48-4040-ba32-43c3eac8b407",
      "name": "Write HTML Report",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        980,
        0
      ],
      "parameters": {
        "text": "=Write an HTML formatted report on the latest updates relevant to the user based on the context provided and the user's request. \n\nRules for links:\n- You must ONLY use URLs explicitly provided in the context. \n- Do NOT invent, guess, or modify any URLs. If a link is missing or incomplete, state: \"Link not available.\"\n- Use the exact URL as it appears in the context without shortening, changing parameters, or cleaning them in any way.\n- When displaying a link, wrap it in an `<a href=\"URL\">` tag for presentation, but the URL must remain untouched.\n\nUser topics interested in:\n{{ $('Set Preferences').item.json.Topics }}\n\nUser instructions:\n{{ $('Set Preferences').item.json['Custom Instructions'] }}\n\nContext:\n{{ $json.output }}\n\nEXTREMELY IMPORTANT: Your response must be entirely valid HTML code and start directly with `<!DOCTYPE html>`. Do not include any backticks or code block formatting. \n\nCheck your response carefully to ensure:\n- Every hyperlink exactly matches a URL from the context.\n- There are no fabricated or missing URLs.\n- The HTML structure is correct and well-formed.",
        "batching": {},
        "promptType": "define"
      },
      "retryOnFail": true,
      "typeVersion": 1.7,
      "waitBetweenTries": 5000
    },
    {
      "id": "39295455-87b7-45c3-956d-3624a9b1f594",
      "name": "Set Preferences",
      "type": "n8n-nodes-base.set",
      "position": [
        500,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "8f4f5057-9dbf-4418-a2a8-e9ec0de3d678",
              "name": "Topics",
              "type": "string",
              "value": "Animal rights legal cases, undercover investigations in factory farming, corporate pledges to improve animal welfare, plant-based and cultivated meat innovations, veganism trends and campaigns, government policies affecting farmed animals."
            },
            {
              "id": "ef06b983-97ea-4581-b364-61f9781e13cf",
              "name": "Custom Instructions",
              "type": "string",
              "value": "Focus on high-impact, verifiable updates that matter for animal advocacy campaigns. Prioritize credible sources (NGOs, major news outlets, scientific publications). Summarize key events in clear, non-technical language, and highlight how they affect animal rights or vegan advocacy efforts."
            },
            {
              "id": "6f8950a4-8cbd-486e-b2eb-35a7102d9577",
              "name": "Recipient Email",
              "type": "string",
              "value": "user@example.com"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "76bd893d-a50a-412c-ac54-901b45bce7e3",
      "name": "Send email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1320,
        0
      ],
      "parameters": {
        "html": "={{ $json.text }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "Weekly Update from Open Paws",
        "toEmail": "={{ $('Set Preferences').item.json['Email Address'] }}",
        "fromEmail": "user@example.com"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "585d8c3f-0940-4b6b-86f4-42bba49faba2",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        140,
        -640
      ],
      "parameters": {
        "height": 600,
        "content": "# \u23f0 Schedule Node (Cron)\n\n**What it does:** Triggers the workflow every week.\n\n## Recommended settings:\n- **Mode:** Cron\n- **Day of Week:** Monday (or your choice)\n- **Hour:** 09:00 (or your preferred time)\n\n**Tip:**  \nFor a **daily version**, duplicate this workflow and set:\n- Schedule it **every day at 09:00**.\n- Set - `\"tbs\": \"qdr:d\"`in the \"Call Research Agent\" and \"Write HTML Report\" nodes\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7ad051d3-05ea-402d-aad1-aa151443e2bb",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        420,
        -640
      ],
      "parameters": {
        "height": 600,
        "content": "# \ud83e\udde9 Set Preferences\n- **Update Topics:** List of topics for research (e.g., factory farming expos\u00e9s, animal rights laws).\n- **Update Instructions:** How results should be summarized (e.g., \u201cFocus on advocacy actions and credible sources\u201d).\n- **Recipient Email:** Change this to where the email should be sent.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3f84cfea-d967-483b-92c2-9e95b87a0504",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        700,
        -640
      ],
      "parameters": {
        "height": 600,
        "content": "# \ud83d\udd0e Research Agent\n- Calls the **Multi-tool Research Agent subworkflow**:  \n  [Add this first](https://n8n.io/workflows/5588-multi-tool-research-agent-for-animal-advocacy-with-openrouter-serper-and-open-paws-db/).\n- Finds news using Serper + scraping tools (past week or day).\n- **Important:** Uses strict URL rules (no changes, no omissions).\n"
      },
      "typeVersion": 1
    },
    {
      "id": "94bd72d4-5192-496c-9662-24ef514ba714",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        980,
        -640
      ],
      "parameters": {
        "height": 600,
        "content": "# \ud83e\uddf1 Write HTML\n- Converts research output into a **valid HTML email**.\n- Starts with `<!DOCTYPE html>` (no code blocks).\n- **Includes all URLs exactly as found**, wrapped in `<a>` tags.\n- Missing links display as: **\"Link not available.\"**\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f8a10e24-f270-459d-8247-46f9bd1a4e92",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1260,
        -640
      ],
      "parameters": {
        "height": 600,
        "content": "# \u2709\ufe0f Send Email\n- Sends the final HTML report to **Recipient Email**.\n- Subject: `Animal Advocacy Weekly Brief \u2013 {{ $now }}`\n- Body: Uses HTML output from the previous node.\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1dbc091a-fbbe-425d-aaaf-ecc16a6363d0",
  "connections": {
    "Set Preferences": {
      "main": [
        [
          {
            "node": "Call Research Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Set Preferences",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Write HTML Report": {
      "main": [
        [
          {
            "node": "Send email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call Research Agent": {
      "main": [
        [
          {
            "node": "Write HTML Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Write HTML Report",
            "type": "ai_languageModel",
            "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 designed for animal advocacy organizations, activists, and campaigners who want to automatically receive a weekly email update summarizing the latest news and developments related to animal rights, welfare, vegetarianism, and veganism. It can also be easily…

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

More General workflows → · Browse all categories →

Related workflows

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

General

Schedule Removeduplicates. Uses scheduleTrigger, jira, lmChatOpenAi, outputParserStructured. Scheduled trigger; 27 nodes.

Jira, OpenAI Chat, Output Parser Structured +1
General

Schedule Removeduplicates. Uses scheduleTrigger, microsoftOutlook, lmChatOpenAi, outputParserStructured. Scheduled trigger; 12 nodes.

Microsoft Outlook, OpenAI Chat, Output Parser Structured +2
General

Amazon Product Price Tracker. Uses googleSheets, splitInBatches, httpRequest, emailSend. Scheduled trigger; 16 nodes.

Google Sheets, HTTP Request, Email Send
General

Datetime Googlecalendar. Uses dateTime, noOp, googleCalendar, emailSend. Scheduled trigger; 13 nodes.

Google Calendar, Email Send
General

Generate Weekly Energy Consumption Reports with API, Email and Google Drive. Uses httpRequest, convertToFile, emailSend, googleDrive. Scheduled trigger; 12 nodes.

HTTP Request, Email Send, Google Drive