{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "1562d037-9fa3-488f-a5e5-5aceaba3d3a1",
      "name": "When clicking 'Test workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -160,
        -160
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "873e06bf-4862-4d40-9b77-f08f1cf889c3",
      "name": "Read Zillow URLs from 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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "9dc0d92a-e56f-4b83-9dc5-986507a17eaf",
      "name": "Scrape Zillow URL via 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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a7cabb4d-1b33-46c4-a9e0-e70fe70e2ec2",
      "name": "Parse Zillow Data",
      "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": "Write Results to 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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "00a73a1f-faf5-421e-abc4-a75b2b132c4a",
      "name": "Check if Scraping Succeeded",
      "type": "n8n-nodes-base.if",
      "position": [
        288,
        32
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.statusCode }}",
              "value2": "200",
              "operation": "equals"
            }
          ]
        }
      },
      "typeVersion": 2
    }
  ],
  "connections": {
    "Parse Zillow Data": {
      "main": [
        [
          {
            "node": "Write Results to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if Scraping Succeeded": {
      "main": [
        [
          {
            "node": "Parse Zillow Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking 'Test workflow'": {
      "main": [
        [
          {
            "node": "Read Zillow URLs from Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape Zillow URL via Scrape.do": {
      "main": [
        [
          {
            "node": "Check if Scraping Succeeded",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Zillow URLs from Google Sheets": {
      "main": [
        [
          {
            "node": "Scrape Zillow URL via Scrape.do",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}