Bienes raíces
Este es unMarket Research, AI Summarizationflujo de automatización del dominio deautomatización que contiene 8 nodos.Utiliza principalmente nodos como Code, Telegram, ScheduleTrigger, ScrapegraphAi. Enviar automáticamente listados de bienes raíces de Zillow a Telegram usando ScrapeGraphAI
- •Bot Token de Telegram
Nodos utilizados (8)
{
"id": "cmnzMjCOzadRrYT9",
"meta": {
"instanceId": "521567c5f495f323b77849c4cfd0c9f4f2396c986e324e0e66c8425b6f124744",
"templateCredsSetupCompleted": true
},
"name": "Real estate",
"tags": [],
"nodes": [
{
"id": "6a1fbe16-eb98-4106-b88a-9a069ac78a15",
"name": "Disparador programado",
"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": "Código",
"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": "Nota adhesiva1",
"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": "Nota adhesiva2",
"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": "Nota adhesiva3",
"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": "Nota adhesiva",
"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": {
"Code": {
"main": [
[
{
"node": "37d06314-47d4-4705-a52e-501caff0817f",
"type": "main",
"index": 0
}
]
]
},
"37d06314-47d4-4705-a52e-501caff0817f": {
"main": [
[]
]
},
"0c1aa147-5e3f-4a59-9f0f-2a115f03ffb7": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "0c1aa147-5e3f-4a59-9f0f-2a115f03ffb7",
"type": "main",
"index": 0
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Intermedio - Investigación de mercado, Resumen de IA
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
vinci-king-01
@vinci-king-01Compartir este flujo de trabajo