AutomationFlowsEmail & Gmail › Analyze Real Estate RSS Deals with Groq, Google Sheets and Gmail

Analyze Real Estate RSS Deals with Groq, Google Sheets and Gmail

ByWeblineIndia @weblineindia on n8n.io

This workflow acts as a 24/7 digital real estate scout. It automatically monitors multiple RSS news feeds, filters out stories you have already seen, uses Groq-powered AI to score the investment potential of new articles and saves high-value opportunities to a Google Sheet while…

Event trigger★★★★☆ complexityAI-powered20 nodesGoogle SheetsRSS Feed ReadChain LlmGroq ChatGmail
Email & Gmail Trigger: Event Nodes: 20 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Chainllm → 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": "3U7pW3593x28j8ba",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Real Estate News RSS to AI Deal Opportunity Analyzer",
  "tags": [],
  "nodes": [
    {
      "id": "1e97b559-39c1-4dcb-aee2-9d4710b7f790",
      "name": "RSS Sources",
      "type": "n8n-nodes-base.code",
      "position": [
        -880,
        560
      ],
      "parameters": {
        "jsCode": "return [\n  { json: { url: \"https://news.google.com/rss/search?q=Ahmedabad+real+estate+price+drop\" }},\n  { json: { url: \"https://news.google.com/rss/search?q=Ahmedabad+new+project+launch\" }}\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "755aca7a-7210-448c-8173-fc2358e8910d",
      "name": "Fetch Existing Deals (Sheet)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1104,
        560
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/15iRwvgg3VawFKgfyMfcvyGSCk6ABu5yL7uluHNl9F8Y/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "15iRwvgg3VawFKgfyMfcvyGSCk6ABu5yL7uluHNl9F8Y"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "executeOnce": false,
      "typeVersion": 4.7,
      "alwaysOutputData": true
    },
    {
      "id": "01157f4c-cb2e-489c-9ad5-8eacd3d99266",
      "name": "Fetch RSS News Feed",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        -416,
        608
      ],
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "219b27b2-ca7a-4edb-b114-828fb93f2e4c",
      "name": "Filter New Articles",
      "type": "n8n-nodes-base.code",
      "position": [
        -112,
        432
      ],
      "parameters": {
        "jsCode": "// 1. REACH BACK: Get every row from your initial Google Sheets node\n// Use the exact name of your node here (case sensitive)\nconst existingRows = $(\"Fetch Existing Deals (Sheet)\").all();\n\n// 2. MAP: Create a simple list of just the links we already have\nconst processedLinks = existingRows.map(row => row.json.Link);\n\n// 3. FILTER: Compare the current 70 RSS items against that list\nreturn $input.all().filter(item => {\n  // We only keep it if the link is NOT found in processedLinks\n  return !processedLinks.includes(item.json.link);\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "50c8fbe5-8a92-4b04-88e4-a990c5a93085",
      "name": "Process Articles Loop",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        112,
        432
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "8a5cc693-d62e-4eb5-a905-de102bdddbeb",
      "name": "Throttle API Calls",
      "type": "n8n-nodes-base.wait",
      "position": [
        336,
        224
      ],
      "parameters": {
        "unit": "seconds",
        "amount": 3
      },
      "typeVersion": 1
    },
    {
      "id": "0e2299d9-9a01-4f10-9d95-ca4b8fe73726",
      "name": "Analyze Deal Opportunity",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        640,
        224
      ],
      "parameters": {
        "prompt": "=Role: Real Estate Analyst. Task: Analyze the provided RSS news and evaluate Whether it signals opportunity Send summarized opportunity provide output as json in two points score(1 to 10) and reason. Format:{ \"Score\": int, \"Reason\": string  } News:   {{ $json.contentSnippet }}"
      },
      "typeVersion": 1
    },
    {
      "id": "5f811220-c98d-457b-81ca-ac21fec34c77",
      "name": "Groq LLM Engine",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        640,
        448
      ],
      "parameters": {
        "model": "openai/gpt-oss-120b",
        "options": {}
      },
      "credentials": {
        "groqApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "754bddda-1a93-4672-ab82-dda5030b6992",
      "name": "Parse AI Response JSON",
      "type": "n8n-nodes-base.code",
      "position": [
        992,
        224
      ],
      "parameters": {
        "jsCode": "const text = $json.text || \"\";\nconst match = text.match(/\\{[\\s\\S]*\\}/);\nif (!match) return { json: { Score: 0, Reason: \"No response\" }};\nconst data = JSON.parse(match[0]);\nreturn { json: data };"
      },
      "typeVersion": 2
    },
    {
      "id": "6b474c9a-ef00-47d7-bd2d-a4576cb94f48",
      "name": "Filter High Opportunity (Score \u2265 8)",
      "type": "n8n-nodes-base.if",
      "position": [
        1632,
        224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "72a88916-7c18-4eba-869a-ec18e957a452",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $json.Score }}",
              "rightValue": 8
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "eda85e8c-02fe-4250-9a3f-e5ebed760e65",
      "name": "Save High-Value Deals (Sheet)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1888,
        384
      ],
      "parameters": {
        "columns": {
          "value": {
            "Link": "={{ $json.link }}",
            "Title": "={{ $json.title }}",
            "Reason": "={{ $json.Reason }}",
            "PubDate": "={{ $json.pubDate }}"
          },
          "schema": [
            {
              "id": "PubDate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "PubDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Reason",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/15iRwvgg3VawFKgfyMfcvyGSCk6ABu5yL7uluHNl9F8Y/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "15iRwvgg3VawFKgfyMfcvyGSCk6ABu5yL7uluHNl9F8Y",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/15iRwvgg3VawFKgfyMfcvyGSCk6ABu5yL7uluHNl9F8Y/edit?usp=drivesdk",
          "cachedResultName": "Real Estate News RSS to AI Deal Opportunity Analyzer (RSS + AI + Email)"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.7
    },
    {
      "id": "099b218e-55cf-4fbe-865f-d3cfa4c406b4",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1344,
        -624
      ],
      "parameters": {
        "width": 1056,
        "height": 640,
        "content": "## Workflow Overview: Real Estate Deal Opportunity Analyzer\n\nThis workflow automates the discovery and evaluation of real estate opportunities using RSS news feeds defined in a JavaScript node. It filters out previously processed articles, analyzes only new entries with AI and identifies high-potential deals. The workflow then stores qualified opportunities and sends email alerts, ensuring continuous monitoring, reduced manual effort and faster, data-driven decision-making.\n\n## How it works\n\nThe workflow is triggered  and starts with **RSS source** node, where RSS sources are defined in a JavaScript node. Each URL is processed in a loop and passed to **Fetch RSS News Feed** to collect articles. The results are checked against **Fetch Existing Deals (Sheet)** and **Filter New Articles** removes previously processed links. Each new article is then processed through **Process Articles Loop**, with **Throttle API Calls** controlling request rate.\n**The Analyze Deal Opportunity (LLM)** node evaluates each article using Groq (openai/gpt-oss-120b), returning a score and reason. After parsing via **Parse AI Response JSON**, the **Format & Enrich Deal Data** node structures and enriches the output by combining AI insights with RSS data. Only high-potential deals (Score \u2265 8) then pass through **Filter High Opportunity**, are stored in **Save High-Value Deals (Sheet)** and finally sent via the **Send Deal Alert Email** node.\n\n## Setup steps\n\n**Fetch Existing Deals (Sheet)**: Connect your Google Sheet for deduplication.\n**RSS Source**: Define RSS URLs inside the JS node.\n**Fetch RSS News Feed**: Use {{ $json.url }} to read each feed.\n**Fetch New Articles**: Filters incoming RSS articles by removing links that already exist in the Google Sheet.\n**Throttle API Calls**: Set delay (2\u20135 sec) to avoid rate limits.\n**Analyze Deal Opportunity (LLM)**: Configure Groq API and maintain JSON output format.\n**Parse AI Response JSON**: Extracts and parses the JSON response from the AI output, returning structured fields like score and reason.\n**Format & Enrich Deal Data**: Formats and enriches AI output by combining it with RSS data into a structured, standardized format.\n**Filter High Opportunity**: Adjust score threshold if needed.\n**Save High-Value Deals (Sheet)**: Map Title, Link, Score, Reason and Date correctly.\n**Send Deal Alert Email**: Configure Gmail and map recipient + deal details."
      },
      "typeVersion": 1
    },
    {
      "id": "5a0476a5-ce64-47ce-9302-96efece7f9af",
      "name": "Loop Over Sources",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -656,
        560
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "22ad7e6d-5968-43ca-a12f-9ea23b6cd612",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1344,
        432
      ],
      "parameters": {
        "color": 7,
        "width": 1088,
        "height": 368,
        "content": "## RSS Source Setup & Ingestion \nInitialize workflow by defining multiple RSS feed URLs for real estate queries. Fetch latest news articles and retrieve existing records from Google Sheets to prepare for comparison and downstream processing."
      },
      "typeVersion": 1
    },
    {
      "id": "2df05f89-aced-4d32-abce-d72d2b56eeee",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -144,
        208
      ],
      "parameters": {
        "color": 7,
        "width": 608,
        "height": 368,
        "content": "## Filtering, Looping & Rate Control\nIterate through filtered articles using batch processing. \nApply rate limiting to control execution speed, \nprevent API overload and ensure smooth,\n reliable AI processing for each news item."
      },
      "typeVersion": 1
    },
    {
      "id": "15bd9edd-cb0b-4e68-a796-922e51893516",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        608,
        96
      ],
      "parameters": {
        "color": 7,
        "width": 816,
        "height": 480,
        "content": "## AI Analysis & Response Structuring\nAnalyze each news article using AI to evaluate deal potential. Convert the raw AI response into structured JSON format with defined fields like score and reasoning for consistent downstream processing. A Set node is used to further format and enrich the data by combining AI insights with RSS fields (such as title, link and publication date)."
      },
      "typeVersion": 1
    },
    {
      "id": "fc25f2b7-c6ad-4101-81d8-669e250f9271",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1584,
        96
      ],
      "parameters": {
        "color": 7,
        "width": 672,
        "height": 480,
        "content": "## Opportunity Filtering, Storage & Alerting\nFilter articles based on high opportunity scores, then store selected results in Google Sheets. This enables tracking of promising deals and supports further actions like alerts or notifications."
      },
      "typeVersion": 1
    },
    {
      "id": "140bc9ba-e8ad-4f35-a044-2bf34d9c5368",
      "name": "Format & Enrich Deal Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1200,
        224
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "e56820a7-1dbd-411b-b7f8-2af777ee2a19",
              "name": "title",
              "type": "string",
              "value": "={{ $('Process Articles Loop').item.json.title }}"
            },
            {
              "id": "b9d519e1-7ab6-4cdd-aaeb-62a9e48b602f",
              "name": "link",
              "type": "string",
              "value": "={{ $('Process Articles Loop').item.json.link }}"
            },
            {
              "id": "2631dce0-aaf8-465e-b25a-e95d456ff4d4",
              "name": "pubDate",
              "type": "string",
              "value": "={{ $('Process Articles Loop').item.json.pubDate }}"
            },
            {
              "id": "8506ebd8-d9a4-4fa6-8cac-27567c0a28f8",
              "name": "contentSnippet",
              "type": "string",
              "value": "={{ $('Process Articles Loop').item.json.contentSnippet }}"
            },
            {
              "id": "d0b86bbd-fe97-4cb8-9735-885e40094e57",
              "name": "Score",
              "type": "number",
              "value": "={{ $json.Score }}"
            },
            {
              "id": "39a02b61-c76f-4f16-899e-c07039273ec2",
              "name": "Reason",
              "type": "string",
              "value": "={{ $json.Reason }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "a6edf454-bc43-463d-a75d-4866b8dc65a0",
      "name": "Send Deal Alert Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2080,
        384
      ],
      "parameters": {
        "message": "=Hi,\n\nA new real estate opportunity has been identified based on recent news analysis:\n\nTitle: {{ $('Fetch RSS News Feed').item.json.title }}.\nReason: {{ $json.Reason }}.\nPublished On: {{ $('Fetch RSS News Feed').item.json.pubDate }}.\nYou can view the full article here: {{ $('Process Articles Loop').item.json.link }}",
        "options": {},
        "subject": "High-Potential Real Estate Deal Alert"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "5ee8ad58-21e9-4388-8e56-39a4a550c453",
      "name": "Start Workflow",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1296,
        560
      ],
      "parameters": {},
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "0d0fc1ff-7dae-400b-a55f-3d706be416f3",
  "connections": {
    "RSS Sources": {
      "main": [
        [
          {
            "node": "Loop Over Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Workflow": {
      "main": [
        [
          {
            "node": "Fetch Existing Deals (Sheet)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Groq LLM Engine": {
      "ai_languageModel": [
        [
          {
            "node": "Analyze Deal Opportunity",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Sources": {
      "main": [
        [
          {
            "node": "Filter New Articles",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Fetch RSS News Feed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Throttle API Calls": {
      "main": [
        [
          {
            "node": "Analyze Deal Opportunity",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch RSS News Feed": {
      "main": [
        [
          {
            "node": "Loop Over Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter New Articles": {
      "main": [
        [
          {
            "node": "Process Articles Loop",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Articles Loop": {
      "main": [
        [],
        [
          {
            "node": "Throttle API Calls",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Deal Alert Email": {
      "main": [
        [
          {
            "node": "Process Articles Loop",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Response JSON": {
      "main": [
        [
          {
            "node": "Format & Enrich Deal Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze Deal Opportunity": {
      "main": [
        [
          {
            "node": "Parse AI Response JSON",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format & Enrich Deal Data": {
      "main": [
        [
          {
            "node": "Filter High Opportunity (Score \u2265 8)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Existing Deals (Sheet)": {
      "main": [
        [
          {
            "node": "RSS Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save High-Value Deals (Sheet)": {
      "main": [
        [
          {
            "node": "Send Deal Alert Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter High Opportunity (Score \u2265 8)": {
      "main": [
        [
          {
            "node": "Save High-Value Deals (Sheet)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Process Articles Loop",
            "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 acts as a 24/7 digital real estate scout. It automatically monitors multiple RSS news feeds, filters out stories you have already seen, uses Groq-powered AI to score the investment potential of new articles and saves high-value opportunities to a Google Sheet while…

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

More Email & Gmail workflows → · Browse all categories →

Related workflows

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

Email & Gmail

This workflow is a high-precision financial intelligence engine that monitors macroeconomic news to identify high-impact trading opportunities. It retrieves real-time data via SerpAPI, processes it th

Google Sheets, HTTP Request, Chain Llm +3
Email & Gmail

This workflow is a comprehensive automation engine that bridges the gap between raw client data and expert-level financial advice. Upon receiving a new onboarding form from Google Sheets, the system f

Chain Llm, Output Parser Structured, Google Sheets +4
Email & Gmail

This template is ideal for HR teams, startup founders, operations leads, remote-first companies, and freelancers managing onboarding manually or across multiple tools.

Google Sheets Trigger, Jira, HubSpot Trigger +7
Email & Gmail

This template automates the complete hiring pipeline for digital agencies managing applications across multiple job roles. When a candidate submits a Google Form with their CV, the system scores it wi

OpenRouter Chat, Output Parser Structured, Google Sheets +6
Email & Gmail

🎦💌Advanced YouTube RSS Feed Buddy for Your Favorite Channels. Uses formTrigger, httpRequest, stickyNote, lmChatOpenAi. Event-driven trigger; 41 nodes.

Form Trigger, HTTP Request, OpenAI Chat +4