AutomationFlowsAI & RAG › Automate Real Estate Marketing with Llama Ai, Vapi Calls & Gmail Campaigns

Automate Real Estate Marketing with Llama Ai, Vapi Calls & Gmail Campaigns

ByOneclick AI Squad @oneclick-ai on n8n.io

This automated n8n workflow streamlines real estate marketing by combining voice campaigns and email outreach with AI-powered lead generation. The system monitors real estate offers, generates personalized promotional content using AI, creates targeted email campaigns, and…

Event trigger★★★★☆ complexityAI-powered23 nodesOllama ChatGoogle Sheets TriggerGoogle SheetsHTTP RequestAgentGmail
AI & RAG Trigger: Event Nodes: 23 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #6630 — 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": "winYQ758rQnKUEwz",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Smart Real Estate Marketing via Email & Calls with AI Lead Generation",
  "tags": [],
  "nodes": [
    {
      "id": "c41e4b49-9c64-44c7-941f-b855d1c156b9",
      "name": "Llama 3.2 - Promo Content Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOllama",
      "position": [
        768,
        640
      ],
      "parameters": {
        "model": "llama3.2-16000:latest",
        "options": {}
      },
      "credentials": {
        "ollamaApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "360ef908-8473-420f-ad04-288a804cd56d",
      "name": "Watch Real Estate Offer Sheet",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        240,
        370
      ],
      "parameters": {
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": 1574728929
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "1kRRDSoJNzVQAUbunYzAk-KUBcMjhuUw0PydGjLbbEVg"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7459aa86-67c4-417b-b20f-4693e564884d",
      "name": "Get Client Contact List",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        460,
        370
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "1kRRDSoJNzVQAUbunYzAk-KUBcMjhuUw0PydGjLbbEVg"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "70fe474a-74fd-44c4-88e2-37d40805fe1d",
      "name": "Trigger Voice Campaign via VAPI",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        720,
        -20
      ],
      "parameters": {
        "url": "https://api.vapi.ai/call",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"assistantId\": \"add_id_here\",\n  \"phoneNumberId\": \"add_phone_number_id_here\",\n  \"customers\": [\n    {\n      \"number\": \"add_vapi_agent_phonenumber_here\"\n    }\n  ]\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "add_authorization_token_here"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "05c2d036-974b-4d8d-a1d3-de241e0ad2c8",
      "name": "Generate Promo Content with Llama",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        680,
        420
      ],
      "parameters": {
        "text": "=You are an expert real estate sales copywriter. Based on the provided property offer, craft a persuasive and emotionally engaging promotional message for WhatsApp or Email that drives immediate action and lead generation through calls or clicks.\n\n\ud83c\udfaf Objective:\nDrive lead inquiries and bookings by showcasing value, urgency, and exclusivity in an impactful, action-focused message.\n\n\ud83d\udccc Format Guidelines:\n\nMax 150 words\n\nShort, crisp lines (WhatsApp/email friendly)\n\nAdd 3\u20135 real-estate-relevant emojis for appeal\n\nUse a warm, enthusiastic, benefit-driven tone\n\nBold hooks, emotional appeal, urgency & CTA\n\nUse <ul> lists for features and benefits\n\n\ud83d\udccb Offer Data:\n\nProject Name: {{ $json.title }}\n\nLocation: {{ $json.location }}\n\nDiscount: {{ $json.discount }}\n\nValid Till: {{ $json.validity }}\n\nInclusions: {{ $json.products_included }}\n\nOriginal Price: {{ $json.original_price }}\n\nOffer Price: {{ $json.discounted_price }}\n\nFreebie/Bonus: {{ $json.bonus }}\n\nContact Action: {{ $json.cta }}\n\n\ud83d\udce2 Message Structure:\n\nCatchy Headline with 1\u20132 emojis + {{ $json.title }} or location hook\n\nEmotional intro (e.g., \u201cYour dream home awaits\u201d / \u201cInvest smart, live better\u201d)\n\nMention original price vs offer price + discount clearly\n\nFeature list in <ul> \u2013 highlight rooms, view, amenities\n\nBenefit list in <ul> \u2013 ROI, lifestyle, security, location perks\n\nHighlight {{ $json.bonus }} as exclusive gift \ud83c\udf81\n\nCreate urgency \u2013 {{ $json.validity }} + \u201climited units\u201d with \u23f3\n\nEnd with high-energy CTA + contact/call prompt: {{ $json.cta }}\n\n\ud83e\uddfe Sample Output Format:\n\n\ud83c\udfe1 LIMITED DEAL IN {{ $json.location }}! \ud83c\udf07\n\nLooking for your dream property? This is the sign you've been waiting for!\n\n\ud83d\udcb0 Just {{ $json.discounted_price }} ({{ $json.discount }} OFF {{ $json.original_price }})!\n\n\u2728 What You Get:\n\n<ul> <li>3BHK Spacious Apartment with Balcony View</li> <li>Modern Kitchen, Smart Layout, Prime Location</li> </ul>\n\ud83d\udd11 Why It's Perfect:\n\n<ul> <li>\u2714\ufe0f Excellent ROI & Growing Area</li> <li>\u2714\ufe0f Secure Gated Community with Top Amenities</li> <li>\u2714\ufe0f Ideal for Families or Investors</li> </ul>\n\ud83c\udf81 Bonus: {{ $json.bonus }} included exclusively!\n\n\u23f3 Hurry! Offer valid till {{ $json.validity }}. Limited units available!\n\n\ud83d\udcde {{ $json.cta }} now to book your site visit or get full details!",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "c60a67d2-c2e9-4cda-99a3-998acaeefaf7",
      "name": "Delay to Sync Data",
      "type": "n8n-nodes-base.wait",
      "position": [
        1056,
        520
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "33e6da41-1d90-448b-99bf-6e504799951c",
      "name": "Create Personalized Email Template",
      "type": "n8n-nodes-base.code",
      "position": [
        1276,
        520
      ],
      "parameters": {
        "jsCode": "const emails = items.map(item => item.json.Emial);\nreturn [\n  {\n    json: {\n      allEmails: emails.join(\", \"),\n      output : $('Generate Promo Content with Llama').first().json.output\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "3f4f7f36-dfc0-4dd0-aae6-629aa036811f",
      "name": "Email Promo to Clients (Gmail)",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1496,
        520
      ],
      "parameters": {
        "sendTo": "={{ $json.allEmails }}",
        "message": "={{ $json.output }}",
        "options": {},
        "subject": "Offer",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "683c5242-cd5b-4797-a260-f7be9aad0c2f",
      "name": "Receive Lead Data from VAPI",
      "type": "n8n-nodes-base.webhook",
      "position": [
        240,
        1100
      ],
      "parameters": {
        "path": "60d5fdeb-b5d8-4e71-90d0-182acc695404",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "6bee22d4-c599-42ca-a98e-c80e6a3e3283",
      "name": "Delay for Lead Parsing",
      "type": "n8n-nodes-base.wait",
      "position": [
        500,
        1100
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "37dceb9f-374d-43d6-8f4d-46ff4040e43d",
      "name": "Save Lead to CRM Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        760,
        1100
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name ": "={{ $json.body.message.toolCallList[0].function.arguments.name }}",
            "Company name": "={{ $json.body.message.toolCallList[0].function.arguments.company_name }}",
            "Company size": "={{ $json.body.message.toolCallList[0].function.arguments.company_size }}"
          },
          "schema": [
            {
              "id": "Name ",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Name ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Company name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company size",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Company size",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "Name "
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "1DCq5a_I2KyD0Tt5Z_TqluZOM1sq6KI05PaxmVVI7J4o"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "b1e6b857-f0b2-4e6f-a8fb-23e7d8ef4f81",
      "name": "Send Acknowledgement to VAPI",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1000,
        1100
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "0f0056d4-5d72-4b41-bf9d-5b4b3522fde0",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        200,
        220
      ],
      "parameters": {
        "color": 3,
        "width": 160,
        "height": 340,
        "content": "Triggers when a new offer is added/updated in Sheet 1. Starts the marketing campaign.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "aeb5d09d-bca4-404c-9bd0-df7546f93fbd",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        920
      ],
      "parameters": {
        "color": 4,
        "width": 160,
        "height": 340,
        "content": "Sends success response back to VAPI confirming lead was saved.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3082042c-8524-4637-b708-ed3395776d6e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        920
      ],
      "parameters": {
        "width": 160,
        "height": 340,
        "content": "Adds qualified leads to Google Sheet CRM for future follow-up.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9bba9391-3b55-4dd1-b992-d85b2fa2afa5",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        460,
        920
      ],
      "parameters": {
        "color": 3,
        "width": 160,
        "height": 340,
        "content": "Brief wait to ensure VAPI lead payload is fully captured and parsed.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a6dc7a3e-a3d3-4e03-969f-279416c03683",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        220,
        920
      ],
      "parameters": {
        "color": 5,
        "width": 160,
        "height": 340,
        "content": "Captures lead info from VAPI voice call form (name, contact, interest, etc.).\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "1be66d0b-e30b-48fb-834c-77581862fdc9",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        680,
        -220
      ],
      "parameters": {
        "width": 180,
        "height": 340,
        "content": "Initiates automated voice call to clients with key offer details using VAPI API.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "60edd47d-5e4e-4118-aa61-36c25957b2bb",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1020,
        360
      ],
      "parameters": {
        "color": 2,
        "width": 160,
        "height": 340,
        "content": "Adds a pause to ensure all prior operations (API, sheets, AI) are complete.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "93662cd4-dac8-407a-b43f-0ef436030660",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1240,
        360
      ],
      "parameters": {
        "color": 5,
        "width": 160,
        "height": 340,
        "content": "Formats the AI output into HTML/text email ready for sending to clients.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b8e0d638-0f9b-4110-aae7-38c138ca92b0",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1480,
        380
      ],
      "parameters": {
        "color": 4,
        "width": 160,
        "height": 340,
        "content": "Sends the personalized offer campaign to each client using Gmail or SMTP.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "491498cf-4b34-4952-8030-0efd609fa112",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        680,
        240
      ],
      "parameters": {
        "color": 6,
        "width": 300,
        "height": 340,
        "content": "Uses AI to create personalized marketing content based on updated offer.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "12b91ddf-12b4-4933-a75d-f31b64c0a977",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        420,
        220
      ],
      "parameters": {
        "color": 4,
        "width": 160,
        "height": 340,
        "content": "Fetches email/phone info from Sheet 2 to target clients for this offer.\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1f7cc259-cf7c-4710-99f6-881706d55882",
  "connections": {
    "Delay to Sync Data": {
      "main": [
        [
          {
            "node": "Create Personalized Email Template",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delay for Lead Parsing": {
      "main": [
        [
          {
            "node": "Save Lead to CRM Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Lead to CRM Sheet": {
      "main": [
        [
          {
            "node": "Send Acknowledgement to VAPI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Client Contact List": {
      "main": [
        [
          {
            "node": "Trigger Voice Campaign via VAPI",
            "type": "main",
            "index": 0
          },
          {
            "node": "Generate Promo Content with Llama",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive Lead Data from VAPI": {
      "main": [
        [
          {
            "node": "Delay for Lead Parsing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Watch Real Estate Offer Sheet": {
      "main": [
        [
          {
            "node": "Get Client Contact List",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Llama 3.2 - Promo Content Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Promo Content with Llama",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Generate Promo Content with Llama": {
      "main": [
        [
          {
            "node": "Delay to Sync Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Personalized Email Template": {
      "main": [
        [
          {
            "node": "Email Promo to Clients (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 automated n8n workflow streamlines real estate marketing by combining voice campaigns and email outreach with AI-powered lead generation. The system monitors real estate offers, generates personalized promotional content using AI, creates targeted email campaigns, and…

Source: https://n8n.io/workflows/6630/ — 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

This workflow is designed for marketers, content creators, agencies, and solo founders who want to publish long‑form posts with visuals on autopilot using n8n and AI agents. ​

Tool Http Request, Agent, HTTP Request +27
AI & RAG

Logistics teams spend hours manually validating shipment data, checking compliance, generating freight documents, and emailing stakeholders. Errors in HSN codes, weights, or carrier details can lead t

Google Sheets Trigger, OpenAI Chat, Output Parser Structured +6
AI & RAG

Transform YouTube comments into actionable insights with automated AI analysis and professional email reports.

Agent, OpenAI Chat, YouTube +4
AI & RAG

This workflow is designed for marketers, content creators, agency owners, and solopreneurs who want to automate LinkedIn content creation using AI. It helps turn Google Sheets entries into complete Li

Google Sheets Trigger, @Tavily/N8N Nodes Tavily, Google Sheets +7
AI & RAG

This workflow automates the collection and analysis of YouTube comments from a video and sends a summary report via email, using Google Sheets, the YouTube API, OpenAI (GPT-4o), and Gmail.

Agent, OpenAI Chat, YouTube +4