Extraer datos de bienes raíces de Zillow a Google Sheets usando Scrape.do
Este es unContent Creation, Multimodal AIflujo de automatización del dominio deautomatización que contiene 6 nodos.Utiliza principalmente nodos como If, Code, HttpRequest, GoogleSheets, ManualTrigger. Usar Scrape.do para extraer datos de propiedades de Zillow a Google Sheets
- •Pueden requerirse credenciales de autenticación para la API de destino
- •Credenciales de API de Google Sheets
Nodos utilizados (6)
Categoría
{
"meta": {
"instanceId": "02e782574ebb30fbddb2c3fd832c946466d718819d25f6fe4b920124ff3fc2c1",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "1562d037-9fa3-488f-a5e5-5aceaba3d3a1",
"name": "Al hacer clic en 'Probar flujo de trabajo'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-160,
-160
],
"parameters": {},
"typeVersion": 1
},
{
"id": "873e06bf-4862-4d40-9b77-f08f1cf889c3",
"name": "Leer URLs de Zillow desde Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
64,
-160
],
"parameters": {
"options": {
"returnFirstMatch": false
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1D2cU-NoW4ubx_IQ6piRRO3_d0Fx7jzdpWxKkBqEq7HU/edit#gid=0",
"cachedResultName": "URLs"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1D2cU-NoW4ubx_IQ6piRRO3_d0Fx7jzdpWxKkBqEq7HU",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1D2cU-NoW4ubx_IQ6piRRO3_d0Fx7jzdpWxKkBqEq7HU/edit?usp=drivesdk",
"cachedResultName": "outcome"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "mXr7C0bnwDQsB9Pd",
"name": "VisaTrack Sheets"
}
},
"typeVersion": 4.5
},
{
"id": "9dc0d92a-e56f-4b83-9dc5-986507a17eaf",
"name": "Extraer datos de URL de Zillow vía Scrape.do",
"type": "n8n-nodes-base.httpRequest",
"position": [
288,
-160
],
"parameters": {
"url": "={{ \"https://api.scrape.do/?url=\" + encodeURIComponent($json.URLs) + \"&super=true\" }}",
"options": {
"timeout": 120000,
"redirect": {
"redirect": {
"followRedirects": false
}
}
},
"authentication": "genericCredentialType",
"genericAuthType": "httpQueryAuth"
},
"credentials": {
"httpQueryAuth": {
"id": "HvTIKFnwg8rzo3iP",
"name": "Query Auth account 2"
}
},
"typeVersion": 4.2
},
{
"id": "a7cabb4d-1b33-46c4-a9e0-e70fe70e2ec2",
"name": "Analizar datos de Zillow",
"type": "n8n-nodes-base.code",
"position": [
512,
-160
],
"parameters": {
"jsCode": "// Parse HTML and extract Zillow property data\nconst item = $input.first();\n\n// Get HTML from Scrape.do response\nconst html = item.json.data || item.json.body || item.json;\n\n// Skip if no HTML content\nif (!html || typeof html !== 'string') {\n return [];\n}\n\n// Get the original URL\nconst originalUrl = $('Read Zillow URLs from Google Sheets').first().json.URLs || 'N/A';\n\n// Extract Price - improved regex\nlet price = 'N/A';\n// Try multiple patterns\nconst pricePattern1 = html.match(/data-testid=\"price\"[^>]*>\\s*\\$?([0-9,]+)\\s*</)\nconst pricePattern2 = html.match(/\"price\"[^}]*\"value\"\\s*:\\s*\"?\\$?([0-9,]+)\"?/)\nconst pricePattern3 = html.match(/\\$([0-9]{3},[0-9]{3}(?:,[0-9]{3})?)(?!\\d)/)\n\nif (pricePattern1) {\n price = '$' + pricePattern1[1].trim();\n} else if (pricePattern2) {\n price = '$' + pricePattern2[1].trim();\n} else if (pricePattern3) {\n price = pricePattern3[0].trim();\n}\n\n// Extract Address, City, and State\nlet street = 'N/A';\nlet city = 'N/A';\nlet state = 'N/A';\n\nconst addressMatch = html.match(/(\\d+\\s+[^,]+),\\s*([^,]+),\\s*(\\w{2})\\s+\\d{5}/);\nif (addressMatch) {\n street = addressMatch[1].trim();\n city = addressMatch[2].trim();\n state = addressMatch[3].trim();\n}\n\n// Extract Days on Zillow\nlet daysOnZillow = 'N/A';\nconst daysMatch = html.match(/(\\d+)\\s+days?\\s*on\\s+Zillow/i);\nif (daysMatch) {\n daysOnZillow = daysMatch[1];\n}\n\n// Extract Zestimate\nlet zestimate = 'N/A';\nconst zestimateMatch = html.match(/\\$[\\d,]+(?=\\s*Zestimate)/);\nif (zestimateMatch) {\n zestimate = zestimateMatch[0];\n}\n\n// Return ONLY structured data\nreturn [{\n json: {\n URL: originalUrl,\n Price: price,\n Address: street,\n City: city,\n State: state,\n 'Days on Zillow': daysOnZillow,\n Zestimate: zestimate,\n 'Scraped At': new Date().toISOString()\n }\n}];"
},
"typeVersion": 2
},
{
"id": "436fbea1-b770-4ef3-8995-c79c6adf46a1",
"name": "Escribir resultados en Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
720,
-160
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "data",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "data",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2048497939,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1D2cU-NoW4ubx_IQ6piRRO3_d0Fx7jzdpWxKkBqEq7HU/edit#gid=2048497939",
"cachedResultName": "Outcome"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1D2cU-NoW4ubx_IQ6piRRO3_d0Fx7jzdpWxKkBqEq7HU",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1D2cU-NoW4ubx_IQ6piRRO3_d0Fx7jzdpWxKkBqEq7HU/edit?usp=drivesdk",
"cachedResultName": "outcome"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "mXr7C0bnwDQsB9Pd",
"name": "VisaTrack Sheets"
}
},
"typeVersion": 4.5
},
{
"id": "00a73a1f-faf5-421e-abc4-a75b2b132c4a",
"name": "Verificar si la extracción fue exitosa",
"type": "n8n-nodes-base.if",
"position": [
288,
32
],
"parameters": {
"options": {},
"conditions": {
"string": [
{
"value1": "={{ $json.statusCode }}",
"value2": "200",
"operation": "equals"
}
]
}
},
"typeVersion": 2
}
],
"pinData": {},
"connections": {
"a7cabb4d-1b33-46c4-a9e0-e70fe70e2ec2": {
"main": [
[
{
"node": "436fbea1-b770-4ef3-8995-c79c6adf46a1",
"type": "main",
"index": 0
}
]
]
},
"00a73a1f-faf5-421e-abc4-a75b2b132c4a": {
"main": [
[
{
"node": "a7cabb4d-1b33-46c4-a9e0-e70fe70e2ec2",
"type": "main",
"index": 0
}
]
]
},
"1562d037-9fa3-488f-a5e5-5aceaba3d3a1": {
"main": [
[
{
"node": "873e06bf-4862-4d40-9b77-f08f1cf889c3",
"type": "main",
"index": 0
}
]
]
},
"9dc0d92a-e56f-4b83-9dc5-986507a17eaf": {
"main": [
[
{
"node": "00a73a1f-faf5-421e-abc4-a75b2b132c4a",
"type": "main",
"index": 0
}
]
]
},
"873e06bf-4862-4d40-9b77-f08f1cf889c3": {
"main": [
[
{
"node": "9dc0d92a-e56f-4b83-9dc5-986507a17eaf",
"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 - Creación de contenido, IA Multimodal
¿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
Onur
@onurpolat05Hello, I'm Onur I've been working as a freelance software developer for about four years. In addition, I develop my own projects. For some time, I have been improving myself and providing various services related to AI and AI workflows. Both by writing low code and code. If you have any questions, don't hesitate to contact me.
Compartir este flujo de trabajo