AutomationFlowsAI & RAG › Track Government Grants with Openrouter Ai, RSS Feeds, Google Sheets & Gmail

Track Government Grants with Openrouter Ai, RSS Feeds, Google Sheets & Gmail

ByTsubasa Shukuwa @tsubasa-shukuwa on n8n.io

This workflow automatically fetches the latest public grant information from the Ministry of Health, Labour and Welfare (MHLW) RSS feed. It uses AI to summarize and structure each grant post into a clear format, stores the results in Google Sheets, and sends a formatted HTML…

Cron / scheduled trigger★★★★☆ complexityAI-powered21 nodesRSS Feed ReadText ClassifierAgentOpenRouter ChatOutput Parser StructuredGoogle SheetsGmail
AI & RAG Trigger: Cron / scheduled Nodes: 21 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Gmail 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": "Xfowxya7kKDiUr5y",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "AI-Powered Government Grant Tracker (RSS \u2192 AI \u2192 Google Sheets \u2192 Email)",
  "tags": [],
  "nodes": [
    {
      "id": "9be1ad43-b4b0-4223-a9a2-631a134484cd",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -864,
        272
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ffd925ae-7676-4c30-be79-2878a4aa62d6",
      "name": "Note: Schedule",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -992,
        64
      ],
      "parameters": {
        "content": "$23F0 Schedule\n$2022 Entry point of the workflow.\n$2022 Set how often this flow runs (hourly, daily, weekly, etc.)."
      },
      "typeVersion": 1
    },
    {
      "id": "90dce3e8-d660-4411-902f-13b176333222",
      "name": "RSS Feed Reader",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        -624,
        272
      ],
      "parameters": {
        "url": "https://www.mhlw.go.jp/stf/news.rdf",
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "cfd7041d-fbde-42f6-89b0-b39460c6776c",
      "name": "Note: RSS",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -704,
        64
      ],
      "parameters": {
        "content": "$D83D$DCF0 RSS Feed\n$2022 Fetch grant-related updates from MHLW RSS.\n$2022 You may add more RSS feeds if needed."
      },
      "typeVersion": 1
    },
    {
      "id": "c85d5656-0343-4e6a-8104-013424368c31",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -368,
        272
      ],
      "parameters": {
        "options": {},
        "batchSize": 10
      },
      "typeVersion": 3
    },
    {
      "id": "0fedea6b-8217-4189-8cb2-25b15c29a1c9",
      "name": "Note: Loop",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        64
      ],
      "parameters": {
        "content": "$D83D$DD01 Batching\n$2022 Process feed items in batches.\n$2022 Helps with stability and API rate limits."
      },
      "typeVersion": 1
    },
    {
      "id": "6f1a0649-c2bf-44f3-8243-585fee01414b",
      "name": "Text Classifier",
      "type": "@n8n/n8n-nodes-langchain.textClassifier",
      "position": [
        -32,
        272
      ],
      "parameters": {
        "options": {
          "fallback": "Other"
        },
        "inputText": "={{ $json.title + ' ' + ($json.contentSnippet || '') }}",
        "categories": {
          "categories": [
            {
              "category": "Grant/Subsidy",
              "description": "Grants, subsidies, public calls"
            },
            {
              "category": "Labor-related",
              "description": "Labor safety, regulations, press, stats"
            },
            {
              "category": "Other",
              "description": "Does not fit above categories"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "0dd41ed9-0f12-429a-906f-a78384891402",
      "name": "Note: Classifier",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        528
      ],
      "parameters": {
        "content": "$D83C$DFF7$FE0F AI Classification\n$2022 Categorize each item by title/summary.\n$2022 Used for filtering or routing later."
      },
      "typeVersion": 1
    },
    {
      "id": "0f563981-9c30-4f89-945c-6a446e364103",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        400,
        256
      ],
      "parameters": {
        "text": "={{ $json }}",
        "options": {
          "systemMessage": "You are an expert at summarizing and structuring information about public grants.\n\nFrom the given RSS item fields, extract and return a JSON object with the keys below:\n1. title $2013 grant title\n2. summary $2013 brief summary (~100 chars)\n3. deadline $2013 application deadline (or 'Unknown')\n4. amount $2013 grant amount (or 'Unknown')\n5. target $2013 target audience / eligible organizations\n6. url $2013 original URL\n7. published_date $2013 published date\n\nReturn ONLY valid JSON."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3
    },
    {
      "id": "2b53adec-a2da-4f65-96f2-0585a4f81a2a",
      "name": "Note: Agent",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        256
      ],
      "parameters": {
        "content": "$D83E$DD16 AI Extraction\n$2022 Convert each feed item into a consistent JSON structure.\n$2022 Extract deadline/amount/target/URL/published date."
      },
      "typeVersion": 1
    },
    {
      "id": "ef62fda4-b56d-4869-a3de-5a5ad9843390",
      "name": "OpenRouter Chat Model (for Agent)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        256,
        480
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f6ce135e-2002-4d32-8620-6304f3ce73be",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        592,
        464
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"title\": \"SME Productivity Enhancement Subsidy (Round 3)\",\n  \"summary\": \"Supports SMEs' investment in digitalization and efficiency improvements.\",\n  \"deadline\": \"2025-11-29\",\n  \"amount\": \"Up to 10M JPY ($2264 2/3)\",\n  \"target\": \"SMEs / small businesses\",\n  \"url\": \"https://example.go.jp/subsidy/2025/productivity3\",\n  \"published_date\": \"2025-11-01\"\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "3621d5ed-6ed4-4287-99b1-d44e26036184",
      "name": "Note: Parser",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        512,
        592
      ],
      "parameters": {
        "content": "$D83E$DDE9 Output Parser\n$2022 Provides an example schema to keep keys consistent.\n$2022 Helps prevent malformed JSON."
      },
      "typeVersion": 1
    },
    {
      "id": "966724ab-6925-42c3-94b4-b13d6af7fb3f",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -32,
        64
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "\u30bf\u30a4\u30c8\u30eb",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "\u30bf\u30a4\u30c8\u30eb",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "\u9805\u76ee",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "\u9805\u76ee",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "\u9805\u76ee\uff12",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "\u9805\u76ee\uff12",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "\u9805\u76ee\uff13",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "\u9805\u76ee\uff13",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "\u9805\u76ee\uff14",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "\u9805\u76ee\uff14",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Title"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1s-xgCvMeTWaDGCDtE2n3NM3pztOFF9mvI_9X0scLDkE/edit#gid=0",
          "cachedResultName": "Grants"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1s-xgCvMeTWaDGCDtE2n3NM3pztOFF9mvI_9X0scLDkE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1s-xgCvMeTWaDGCDtE2n3NM3pztOFF9mvI_9X0scLDkE/edit#gid=0",
          "cachedResultName": "Grant DB (replace Spreadsheet ID if needed)"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "164fd4a8-9910-4a79-8a35-6d3a1c0f37a4",
      "name": "Note: Sheets",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -128,
        -160
      ],
      "parameters": {
        "content": "$D83D$DCCA Google Sheets Upsert\n$2022 Append or update rows keyed by Title.\n$2022 Adjust column headers to your sheet."
      },
      "typeVersion": 1
    },
    {
      "id": "b8db7ba6-0e8d-4171-a279-b474f3ba8ae0",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        224,
        64
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "6db518c4-f00c-4b58-b3f5-75c12e04b1f3",
      "name": "Note: Aggregate",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        144,
        -160
      ],
      "parameters": {
        "content": "$D83D$DCE6 Aggregate\n$2022 Combine newly processed items for reporting.\n$2022 Pass a single payload downstream."
      },
      "typeVersion": 1
    },
    {
      "id": "c952b25c-6120-4023-8f1d-93af54f05f25",
      "name": "Code in JavaScript",
      "type": "n8n-nodes-base.code",
      "position": [
        496,
        64
      ],
      "parameters": {
        "jsCode": "const items = $input.item.json.data;\nlet html = `\n<html>\n<head>\n<style>\n  body { font-family: sans-serif; }\n  table { border-collapse: collapse; width: 100%; }\n  th, td { border: 1px solid #dddddd; text-align: left; padding: 8px; }\n  th { background-color: #f2f2f2; }\n</style>\n</head>\n<body>\n  <h2>New Grants Found</h2>\n  <table>\n    <tr>\n      <th>Title</th><th>Summary</th><th>URL</th><th>Deadline</th><th>Amount</th><th>Target</th><th>Published</th>\n    </tr>\n`;\nfor (const item of items) {\n  html += `\n    <tr>\n      <td>${item['Title'] ?? ''}</td>\n      <td>${item['Summary'] ?? ''}</td>\n      <td><a href=\"${item['URL'] ?? '#'}\">${item['URL'] ?? ''}</a></td>\n      <td>${item['Deadline'] ?? ''}</td>\n      <td>${item['Amount'] ?? ''}</td>\n      <td>${item['Target'] ?? ''}</td>\n      <td>${item['Published'] ?? ''}</td>\n    </tr>\n  `;\n}\nhtml += `\n  </table>\n</body>\n</html>\n`;\nreturn { html_body: html };\n"
      },
      "typeVersion": 2
    },
    {
      "id": "0e919d3f-c1b1-4bac-bffb-6fee0e940d68",
      "name": "Note: HTML",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        416,
        -160
      ],
      "parameters": {
        "content": "$D83E$DDF1 HTML Builder\n$2022 Generate an HTML table for the email body.\n$2022 Customize columns and styles as needed."
      },
      "typeVersion": 1
    },
    {
      "id": "a54b9677-d86c-4cdb-8ae8-594d78fa416d",
      "name": "Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        800,
        64
      ],
      "parameters": {
        "sendTo": "you@example.com",
        "message": "={{ $json.html_body }}",
        "options": {},
        "subject": "New Grants Detected"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "f493550a-3865-4862-9fe1-4e300c37711c",
      "name": "Note: Gmail",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        704,
        -160
      ],
      "parameters": {
        "content": "$2709$FE0F Gmail\n$2022 Send the HTML summary to your recipients.\n$2022 Replace 'sendTo' and subject per environment."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "779997b6-160c-4bf4-9e2e-8c2cd6531632",
  "connections": {
    "AI Agent": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Text Classifier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS Feed Reader": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Text Classifier": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "RSS Feed Reader",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model (for Agent)": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "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 automatically fetches the latest public grant information from the Ministry of Health, Labour and Welfare (MHLW) RSS feed. It uses AI to summarize and structure each grant post into a clear format, stores the results in Google Sheets, and sends a formatted HTML…

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

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

V2 (2026) available! An intelligent, fully automated news aggregation system that collects articles from multiple sources (RSS feeds + Google Search), uses AI to classify and summarize the most import

N8N Nodes Serpapi, Text Classifier, Output Parser Structured +6
AI & RAG

How it works: Daily Trigger: Every morning at 8 AM, the workflow is automatically triggered. Fetch Trending Topics: The workflow collects trending topics from external sources, such as news RSS feeds

RSS Feed Read, Reddit, Google Sheets +5
AI & RAG

This n8n template demonstrates how to use AI to fully automate the generation and scheduling of X (formerly Twitter) content based on a specific, predefined persona.

OpenRouter Chat, Agent, Output Parser Structured +4
AI & RAG

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Google Sheets, Agent, OpenRouter Chat +2
AI & RAG

We’ve released Version 4 of our AI Powered Blog Automation workflow. We heard your complains and made a complete redesign built for serious content creators.

RSS Feed Read, OpenAI Chat, Text Classifier +6