Extraer datos de bienes raíces de Zillow a Google Sheets usando Scrape.do

Intermedio

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

Requisitos previos
  • Pueden requerirse credenciales de autenticación para la API de destino
  • Credenciales de API de Google Sheets
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "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
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿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.

Información del flujo de trabajo
Nivel de dificultad
Intermedio
Número de nodos6
Categoría2
Tipos de nodos5
Descripción de la dificultad

Adecuado para usuarios con experiencia intermedia, flujos de trabajo de complejidad media con 6-15 nodos

Autor

Hello, 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.

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34