Immobilier

Intermédiaire

Ceci est unMarket Research, AI Summarizationworkflow d'automatisation du domainecontenant 8 nœuds.Utilise principalement des nœuds comme Code, Telegram, ScheduleTrigger, ScrapegraphAi. Envoyer automatiquement des listes immobilières Zillow vers Telegram avec ScrapeGraphAI

Prérequis
  • Token Bot Telegram
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "cmnzMjCOzadRrYT9",
  "meta": {
    "instanceId": "521567c5f495f323b77849c4cfd0c9f4f2396c986e324e0e66c8425b6f124744",
    "templateCredsSetupCompleted": true
  },
  "name": "Real estate",
  "tags": [],
  "nodes": [
    {
      "id": "6a1fbe16-eb98-4106-b88a-9a069ac78a15",
      "name": "Déclencheur planifié",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        700,
        820
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "0c1aa147-5e3f-4a59-9f0f-2a115f03ffb7",
      "name": "ScrapegraphAI",
      "type": "n8n-nodes-scrapegraphai.scrapegraphAi",
      "position": [
        1380,
        820
      ],
      "parameters": {
        "userPrompt": "Extract real estate listings from this site. Use the following schema for response { \"address\": \"123 Main St, Columbus, OH 43215\", \"price\": \"$450,000\", \"beds\": \"3\", \"baths\": \"2\", \"sqft\": \"1,850\", \"lot_size\": \"0.25 acres\", \"year_built\": \"1995\", \"property_type\": \"Single Family\", \"listing_url\": \"https://www.zillow.com/homedetails/123-Main-St...\" }",
        "websiteUrl": "https://www.zillow.com/homes/?category=SEMANTIC&searchQueryState=%7B%22filterState%22%3A%7B%22isRecentlySold%22%3A%7B%22value%22%3Afalse%7D%2C%22isPreMarketPreForeclosure%22%3A%7B%22value%22%3Afalse%7D%2C%22isPreMarketForeclosure%22%3A%7B%22value%22%3Afalse%7D%2C%22isForRent%22%3A%7B%22value%22%3Afalse%7D%2C%22isForSaleByAgent%22%3A%7B%22value%22%3Atrue%7D%2C%22isForSaleByOwner%22%3A%7B%22value%22%3Atrue%7D%2C%22isAuction%22%3A%7B%22value%22%3Atrue%7D%2C%22isComingSoon%22%3A%7B%22value%22%3Atrue%7D%2C%22isForSaleForeclosure%22%3A%7B%22value%22%3Atrue%7D%2C%22isNewConstruction%22%3A%7B%22value%22%3Atrue%7D%2C%22sortSelection%22%3A%7B%22value%22%3A%22globalrelevanceex%22%7D%7D%2C%22regionSelection%22%3A%5B%7B%22regionId%22%3A44%7D%5D%2C%22usersSearchTerm%22%3A%22Ohio%22%7D"
      },
      "credentials": {
        "scrapegraphAIApi": {
          "id": "",
          "name": ""
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b9523259-cabb-41a4-9e55-9a106c4abc28",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "notes": "Hey this is where \nyou \nformat results ",
      "position": [
        2140,
        820
      ],
      "parameters": {
        "jsCode": "// Get the input data\nconst inputData = $input.all()[0].json;\n// Extract listings array from result - FIXED: use real_estate_listings\nconst listings = inputData.result.real_estate_listings || inputData.result.listings || inputData.result.properties || inputData.listings || [];\n\nfunction formatForTelegram(listing) {\n  const {\n    address,\n    price,\n    beds,\n    baths,\n    sqft,\n    lot_size,\n    year_built,\n    year_bult, // Note: there's a typo in your data (year_bult instead of year_built)\n    property_type,\n    listing_url\n  } = listing;\n\n  // Handle null/undefined values\n  const safeAddress = address || 'Address not available';\n  const safePrice = price || 'Price not listed';\n  const safeBeds = beds || 'N/A';\n  const safeBaths = baths || 'N/A';\n  const safeSqft = sqft || 'N/A';\n  const safeLotSize = lot_size && lot_size !== '[null]' ? lot_size : null;\n  // Handle both year_built and year_bult (typo in data)\n  const safeYearBuilt = (year_built || year_bult) && (year_built || year_bult) !== 'N/A' ? (year_built || year_bult) : null;\n  const safePropertyType = property_type || 'Property';\n  const safeUrl = listing_url || '#';\n\n  let message = `🏠 **NEW ${safePropertyType.toUpperCase()} LISTING**\n\n📍 **Address:** ${safeAddress}\n💰 **Price:** ${safePrice}\n🛏️ **Beds:** ${safeBeds} | 🚿 **Baths:** ${safeBaths}\n📐 **Size:** ${safeSqft} sqft`;\n\n  // Add optional fields if available\n  if (safeLotSize) {\n    message += `\\n🌱 **Lot Size:** ${safeLotSize}`;\n  }\n  \n  if (safeYearBuilt) {\n    message += `\\n🗓️ **Year Built:** ${safeYearBuilt}`;\n  }\n\n  message += `\\n\\n🔗 [View Full Details](${safeUrl})\n\n━━━━━━━━━━━━━━━━━━━━━━\n🕐 Listed: ${new Date().toLocaleString()}`;\n\n  return message;\n}\n\n// Debug log\nconsole.log(`Found ${listings.length} listings`);\n\n// Return each listing as separate execution with formatted Telegram text\nreturn listings.map(listing => ({\n  json: {\n    text: formatForTelegram(listing),\n    // Keep original data for reference if needed\n    address: listing.address,\n    price: listing.price,\n    beds: listing.beds,\n    baths: listing.baths,\n    sqft: listing.sqft,\n    lot_size: listing.lot_size,\n    year_built: listing.year_built || listing.year_bult, // Handle typo\n    property_type: listing.property_type,\n    listing_url: listing.listing_url\n  }\n}));"
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "19302435-3112-4136-a8a3-95ff5da1c8ef",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1180,
        460
      ],
      "parameters": {
        "color": 5,
        "width": 574.9363634768473,
        "height": 530.4701664623029,
        "content": "# Step 2: ScrapeGraphAI Node 🤖\n\nThis is the core node which will scrape the website that you want.\n\n## How to Use\n- Simply mention the website URL\n- Describe what you want to extract in natural language\n\n## Example\n- **Website**: `https://www.example.com`\n- **Instruction**: \"Extract all article titles and URLs from this news site\""
      },
      "typeVersion": 1
    },
    {
      "id": "0e801cc4-a853-4fb1-a0c6-330943996f63",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1920,
        460
      ],
      "parameters": {
        "color": 5,
        "width": 574.9363634768473,
        "height": 530.4701664623029,
        "content": "# Step 3: Format the response 🧱\n\nThis node will format the results for sheets.\n\n## What it does\n- Prepares data for Telegram compatibility\n- Each listing is formatted in beautiful message\n- Maintains all important metadata\n- Easy to filter and analyze data"
      },
      "typeVersion": 1
    },
    {
      "id": "76a1aff0-92cc-4bb0-84ec-525ed7a0cdf2",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        460,
        460
      ],
      "parameters": {
        "color": 5,
        "width": 574.9363634768473,
        "height": 530.4701664623029,
        "content": "# Step 1: Trigger ⏱️\n\nThis trigger will invoke the workflow on the mentioned time.\n\n## Configuration Options\n- You can mention your custom time for trigger\n- Or even choose a different trigger"
      },
      "typeVersion": 1
    },
    {
      "id": "151eaaf9-a11f-42dc-8f08-3d4e6c7a5a03",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2680,
        460
      ],
      "parameters": {
        "color": 5,
        "width": 574.9363634768473,
        "height": 530.4701664623029,
        "content": "# Step 4:Telegram Node 📧\nThis node will send the listings to your given channel or chat\n\n## What it does\n- Connects to your Telegram account\n- Sends the message using the created bot \n\n\n## Configuration\n- Create a bot using @botfather in Telegram\n- Add the given api key in config\n- Add your chat/channel username in config\n"
      },
      "typeVersion": 1
    },
    {
      "id": "37d06314-47d4-4705-a52e-501caff0817f",
      "name": "Telegram",
      "type": "n8n-nodes-base.telegram",
      "maxTries": 5,
      "position": [
        2920,
        820
      ],
      "parameters": {
        "text": "={{ $json.text }}",
        "chatId": "@housingprices",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "",
          "name": ""
        }
      },
      "executeOnce": false,
      "retryOnFail": true,
      "typeVersion": 1.2,
      "alwaysOutputData": false,
      "waitBetweenTries": 5000
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "6a32d4c5-dad4-442c-a6d6-19743b661a8c",
  "connections": {
    "b9523259-cabb-41a4-9e55-9a106c4abc28": {
      "main": [
        [
          {
            "node": "37d06314-47d4-4705-a52e-501caff0817f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "37d06314-47d4-4705-a52e-501caff0817f": {
      "main": [
        []
      ]
    },
    "0c1aa147-5e3f-4a59-9f0f-2a115f03ffb7": {
      "main": [
        [
          {
            "node": "b9523259-cabb-41a4-9e55-9a106c4abc28",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "0c1aa147-5e3f-4a59-9f0f-2a115f03ffb7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Intermédiaire - Étude de marché, Résumé IA

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds8
Catégorie2
Types de nœuds5
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34