房地产投资分析:Zillow房产抓取器与AI评分到Google Sheets

中级

这是一个自动化工作流,包含 12 个节点。主要使用 Set、GoogleSheets、Apify、SplitInBatches、OpenAi 等节点。 使用GPT-4o分析房地产投资潜力:Zillow房产数据到Google Sheets

前置要求
  • Google Sheets API 凭证
  • OpenAI API Key

分类

未分类
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "pYD1J1Xed3QsjdAG",
  "meta": {
    "instanceId": "e4d0e159d8908850b6af510bbd50decb04ea0c219fce7fbb97f383f3499aaad7",
    "templateCredsSetupCompleted": true
  },
  "name": "房地产投资分析:Zillow 房产抓取器与 AI 评分到 Google Sheets",
  "tags": [
    {
      "id": "7cd4GMBDcwH0ENjJ",
      "name": "Data Scraper",
      "createdAt": "2025-10-07T21:31:29.904Z",
      "updatedAt": "2025-10-07T21:31:29.904Z"
    }
  ],
  "nodes": [
    {
      "id": "214c6129-834c-46a1-9a58-0e3bad219bc1",
      "name": "启动 Zillow 抓取器",
      "type": "@apify/n8n-nodes-apify.apifyTrigger",
      "position": [
        144,
        192
      ],
      "webhookId": "3b0f8adc-9fd1-44f1-8fdd-4dc87a5bf253",
      "parameters": {
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "l7auNT3I30CssRrvO"
        },
        "authentication": "apifyOAuth2Api"
      },
      "credentials": {
        "apifyOAuth2Api": {
          "id": "LuIyRwcAoRhOMNOb",
          "name": "Apify account 3"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8c9824bb-7699-4304-8e02-333a867b9fb8",
      "name": "清理和格式化数据",
      "type": "n8n-nodes-base.set",
      "position": [
        672,
        192
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "81922c2a-f21f-47f4-9b76-2bd67b42e9db",
              "name": "Picture",
              "type": "string",
              "value": "={{ $json.desktopWebHdpImageLink }}"
            },
            {
              "id": "a825b416-bafa-47e2-b11f-e3dc04cf072a",
              "name": "Price",
              "type": "string",
              "value": "={{ $json.price }}"
            },
            {
              "id": "8f3887fb-ca68-40c5-858e-30c221f2cb5d",
              "name": "Virtual Tour URL",
              "type": "string",
              "value": "={{ $json.resoFacts.virtualTour }}"
            },
            {
              "id": "d54c8a72-9c54-4143-ac93-5c9cfd17b442",
              "name": "propertyURL",
              "type": "string",
              "value": "=https://www.zillow.com/{{ $json.hdpUrl }}"
            },
            {
              "id": "3a4f5b51-66c4-41b6-a8d8-8fc7262aa7b2",
              "name": "MLS ID#",
              "type": "string",
              "value": "={{ $json.mlsid }}"
            },
            {
              "id": "37a7ea64-7d23-44ed-8445-4edce293b56d",
              "name": "Google Maps URL",
              "type": "string",
              "value": "=https://www.google.com/maps/place/{{ $json.address.streetAddress }}/"
            },
            {
              "id": "b13b982a-05d0-46d7-a17f-f174689cd07b",
              "name": "Address",
              "type": "string",
              "value": "={{ $json.address.streetAddress }}"
            },
            {
              "id": "727e22b7-0e6b-4191-a789-9b89cbcae3d0",
              "name": "city",
              "type": "string",
              "value": "={{ $json.address.city }}"
            },
            {
              "id": "ac05a8ee-0696-4bd9-9b0c-90dbdd27655c",
              "name": "County",
              "type": "string",
              "value": "={{ $json.adTargets.cnty }}"
            },
            {
              "id": "1eb478f7-530d-4833-98d5-268bbbf385b4",
              "name": "zipcode",
              "type": "string",
              "value": "={{ $json.address.zipcode }}"
            },
            {
              "id": "66f82f5f-00c4-44d9-8d96-7514796cddf3",
              "name": "yearBuilt",
              "type": "string",
              "value": "={{ $json.yearBuilt }}"
            },
            {
              "id": "38c54122-916c-448e-9912-acae3903b97f",
              "name": "homeType",
              "type": "string",
              "value": "={{ $json.homeType }}"
            },
            {
              "id": "a0f6c7c4-9f09-4177-89d5-4fde36ab2454",
              "name": "Home Status",
              "type": "string",
              "value": "={{ $json.homeStatus }}"
            },
            {
              "id": "9c87bbac-6dbe-4ee7-93ab-972703fa0596",
              "name": "Bedrooms",
              "type": "string",
              "value": "={{ $json.bedrooms }}"
            },
            {
              "id": "bf5d091b-e0fd-4ed3-b309-f0a8f1ec706b",
              "name": "Bathrooms",
              "type": "string",
              "value": "={{ $json.bathrooms }}"
            },
            {
              "id": "ac92120a-ea05-446d-b3cf-e730be0a0c78",
              "name": "Lot Size",
              "type": "string",
              "value": "={{ $json.resoFacts.lotSize }}"
            },
            {
              "id": "3a101b77-4854-457b-abca-8bc30a16b400",
              "name": "Living area",
              "type": "string",
              "value": "={{ $json.resoFacts.livingArea }}"
            },
            {
              "id": "ef392fc5-a258-4c10-9dca-f99a26d1cf15",
              "name": "Date on Market",
              "type": "string",
              "value": "={{ new Date($json.resoFacts.onMarketDate).toLocaleDateString('en-US') }}"
            },
            {
              "id": "89da5f9c-32f6-4dcd-a756-e4b36e68d5f7",
              "name": "Rent Zestimate",
              "type": "string",
              "value": "={{ $json.rentZestimate }}"
            },
            {
              "id": "9bc21ae7-8f97-46c9-adac-ff1180506c53",
              "name": "Zestimate",
              "type": "string",
              "value": "={{ $json.zestimate }}"
            },
            {
              "id": "03682393-99de-473f-a2be-4f66e323261c",
              "name": "Last Price sold",
              "type": "string",
              "value": "=Date: {{ $json.priceHistory[1].date }} for ${{ $json.priceHistory[1].price }}"
            },
            {
              "id": "33ff8911-edcd-450c-808c-8aeb744cf3b1",
              "name": "Tax Assessed Value",
              "type": "string",
              "value": "={{ $json.resoFacts.taxAssessedValue }}"
            },
            {
              "id": "c03cf63e-b6f1-4afc-9200-c0f39759307f",
              "name": "Tax Annual Amount",
              "type": "string",
              "value": "={{ $json.resoFacts.taxAnnualAmount }}"
            },
            {
              "id": "42bc8b65-dd1a-40ba-9203-1ee3ba8694fb",
              "name": "Price per Sqrf",
              "type": "string",
              "value": "={{ $json.resoFacts.pricePerSquareFoot }}"
            },
            {
              "id": "a5bf4e2d-5217-4709-a7ae-33fee7b9d706",
              "name": "GRM",
              "type": "string",
              "value": "={{ Math.round($json.price / ($json.rentZestimate * 12) * 100) / 100 }}"
            },
            {
              "id": "3da2bf63-420f-44d7-8125-b985d9adb157",
              "name": "NDI 50 rule",
              "type": "string",
              "value": "={{ Math.round((($json.rentZestimate * 12) * 0.5) / $json.price * 100 * 100) / 100 }}"
            },
            {
              "id": "aefe3687-fc23-47f0-aa2c-356a163f47e7",
              "name": "15 year Fixed Rate Bucket",
              "type": "string",
              "value": "={{ $json.mortgageZHLRates.fifteenYearFixedBucket.rate }} Sources: {{ $json.mortgageZHLRates.fifteenYearFixedBucket.rateSource }}"
            },
            {
              "id": "4b06371d-b0fa-4f08-b367-6245a92d7749",
              "name": "30 year Fixed Rate Bucket",
              "type": "string",
              "value": "={{ $json.mortgageZHLRates.thirtyYearFixedBucket.rate }}  Source:{{ $json.mortgageZHLRates.thirtyYearFixedBucket.rateSource }}"
            },
            {
              "id": "07693eed-526c-44e3-9cfb-5c7c3cf774fe",
              "name": "Agent Name",
              "type": "string",
              "value": "={{ $json.attributionInfo.agentName }}"
            },
            {
              "id": "e82b5238-0bb8-4c95-b816-66849bb0b02d",
              "name": "Agent Phone #",
              "type": "string",
              "value": "={{ $json.attributionInfo.agentPhoneNumber }}"
            },
            {
              "id": "67f44ded-da93-42c4-b4c1-d04076d2fc59",
              "name": "Broker Name",
              "type": "string",
              "value": "={{ $json.attributionInfo.brokerName }}"
            },
            {
              "id": "d288fb24-2dc2-432a-8f69-b813f2a85ac2",
              "name": "Broker Phone #",
              "type": "string",
              "value": "={{ $json.attributionInfo.brokerPhoneNumber }}"
            },
            {
              "id": "922c4c8a-3523-4a8f-a07b-9392b9f8689f",
              "name": "Co Agent",
              "type": "string",
              "value": "={{ $json.attributionInfo.coAgentName }}"
            },
            {
              "id": "2c693926-284d-4180-8819-adfb3ac55ec7",
              "name": "Co Agent Phone #",
              "type": "string",
              "value": "={{ $json.attributionInfo.coAgentNumber }}"
            },
            {
              "id": "a302b76a-20b9-405a-adb6-e4dcba8c7381",
              "name": "HOA monthly fee",
              "type": "string",
              "value": "={{ $json.resoFacts.feesAndDues[0].fee }}"
            },
            {
              "id": "3c091532-81b4-49a8-88ec-0ed9d462bcc7",
              "name": "HOA name",
              "type": "string",
              "value": "={{ $json.resoFacts.feesAndDues[0].name }}"
            },
            {
              "id": "0b648acc-2c99-4447-ba5c-b8fce19cbd1b",
              "name": "HOA Phon e#",
              "type": "string",
              "value": "={{ $json.resoFacts.feesAndDues[0].phone }}"
            },
            {
              "id": "a54d0ada-2941-4b35-95bb-2d1caefc0be1",
              "name": "Pets allowed",
              "type": "string",
              "value": "={{ $json.resoFacts.hasPetsAllowed }}"
            },
            {
              "id": "6a037339-465b-4d65-815d-e70dd27e45b7",
              "name": "Pet Fees",
              "type": "string",
              "value": "={{ $json.resoFacts.feesAndDues[2].fee }}"
            },
            {
              "id": "0ad3773b-571f-4c2a-b7b2-02c85202e776",
              "name": "School 1",
              "type": "string",
              "value": "={{ $json.schools[0].name }}"
            },
            {
              "id": "5c92cf78-f456-4c8a-8dc2-6abbd9893d59",
              "name": "School 2",
              "type": "string",
              "value": "={{ $json.schools[1].name }} "
            },
            {
              "id": "da87734d-c67a-4a51-9f66-4af6349e1797",
              "name": "School 3",
              "type": "string",
              "value": "={{ $json.schools[2].name }}"
            },
            {
              "id": "b5c76f30-6bea-4312-b31a-f390361d1abe",
              "name": "Rating 1",
              "type": "string",
              "value": "={{ $json.schools[0].rating }}"
            },
            {
              "id": "12053f64-44bd-4213-9fe2-d1e6429cf8c2",
              "name": "Rating 2",
              "type": "string",
              "value": "= {{ $json.schools[1].rating }}"
            },
            {
              "id": "259ff015-be0c-4faa-b7da-1d8cec6b5710",
              "name": "Rating 3",
              "type": "string",
              "value": "={{ $json.schools[2].rating }}"
            },
            {
              "id": "21ce8ddf-312c-41f6-a7f4-756b8b58bd74",
              "name": "Description",
              "type": "string",
              "value": "={{ $json.description }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "f9b3948c-d50e-4091-aea5-cc028fc822bb",
      "name": "处理每个房产",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1424,
        -32
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "95c2f8d0-93f9-4c64-9070-738d43e54dea",
      "name": "AI 评分:投资潜力",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1712,
        384
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "GPT-4O-MINI"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "You are an intelligent Real Estate investement analizer"
            },
            {
              "content": "Analyze this property as a real estate investment screening tool. Score 1-100.\nCRITICAL FILTERS (Auto-fail below 50 if ANY are true):\n\nNegative monthly cash flow → Max score 45\nCap rate below 4% → Max score 40\nGRM above 15 → Max score 45\nDSCR below 1.0 → Max score 40\nPrice > 110% of Zestimate → Max score 50\n\nCalculate (assume 20% down, 30-year at 6.274% if rate not provided):\n\nMonthly cash flow: rent - (mortgage + HOA + tax/12 + insurance $100 + maintenance 1%)\nCap rate: (annual rent - annual operating expenses) / price × 100\nGRM: price / annual rent\nDSCR: monthly rent / monthly mortgage payment\nHOA as % of rent (red flag if >25%)\n\nScoring (out of 100):\n\nCash flow positive +$200/month: 30 pts (scale down proportionally, 0 pts if negative)\nCap rate ≥6%: 25 pts (scale: 6%=25pts, 5%=15pts, 4%=5pts, <4%=0pts)\nGRM ≤12: 15 pts (scale: <10=15pts, 12=10pts, 15=5pts, >15=0pts)\nDSCR ≥1.25: 15 pts (scale: >1.25=15pts, 1.0=5pts, <1.0=0pts)\nPrice ≤ Zestimate: 10 pts\nSchools avg ≥7: 5 pts\n\nMissing Data Penalty:\n\nMissing price or rent → Score 0, return \"0\"\nMissing HOA → Assume $0 but cap max score at 70\nMissing tax → Estimate 1.2% of price\nMissing Zestimate → Skip that 10pt section\n\nOutput:\nReturn only the final score as an integer (1-100). No text, no explanation.\nExample: 42\n"
            },
            {
              "content": "=Analyze this property data:\n\n\nPrice- ${{ $json.Price }}\n\nYear built-{{ $json.yearBuilt }}\n\n#number if bathrooms- {{ $json.Bathrooms }}\n\n#number if bedrooms- {{ $json.Bedrooms }}\n\nHometype- {{ $json.homeType }}\n\nHOA Fee-  ${{ $json['HOA monthly fee'] }}\n\nLot Size- {{ $json['Lot Size'] }}\n\nLiving Area Sqft- {{ $json['Living area'] }}\n\nDate on Market- {{ $json['Date on Market'] }}\n\nPrice per Sqft- ${{ $json['Price per Sqrf'] }}\n\nAnnual Tax- ${{ $json['Tax Annual Amount'] }}\n\nTotal Assessed Value- ${{ $json['Tax Assessed Value'] }}\n\nRent Estimate by Zillow- ${{ $json['Rent Zestimate'] }}\n\nPrice Estimate by Zillow-  ${{ $json.Zestimate }}\n\nNear Schools- 1){{ $json['School 1'] }} Rate:{{ $json['Rating 1'] }}\n              2){{ $json['School 2'] }} Rate:{{ $json['Rating 2'] }}\n              3){{ $json['School 3'] }} Rate:{{ $json['Rating 3'] }}\n\n15 year Fixed Rate-  %{{ $json['15 year Fixed Rate Bucket'] }}\n\n30 year Fixed Rate-  %{{ $json['30 year Fixed Rate Bucket'] }}\n\nGRM Calculated ( infinity = nothing )-  {{ $json.GRM }}\n\n50% Rule ( 0 = Notfound) - {{ $json['NDI 50 rule'] }}\n\nPets Allowed?-  {{ $json['Pets allowed'] }}\n\nOther Fees- {{ $json['Pet Fees'] }}\n\nDescription- {{ $json.Description }}"
            },
            {
              "role": "assistant",
              "content": "85"
            },
            {
              "role": "assistant",
              "content": "73"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "QQLtNJqnBjgggpPA",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "f49bab12-4ba0-49c3-95fc-beb1f2c4d578",
      "name": "更新 Google Sheets 数据库",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1184,
        336
      ],
      "parameters": {
        "columns": {
          "value": {
            "GRM": "={{ $('Process Each Property').item.json.GRM }}",
            "URL": "={{ $('Process Each Property').item.json.propertyURL }}",
            "Rate": "={{ $json.message.content }}",
            "city": "={{ $('Process Each Property').item.json.city }}",
            "Price": "={{ $('Process Each Property').item.json.Price }}",
            "County": "={{ $('Process Each Property').item.json.County }}",
            "Address": "={{ $('Process Each Property').item.json.Address }}",
            "HOA fee": "={{ $('Process Each Property').item.json[\"HOA monthly fee\"] }}",
            "MLS ID#": "={{ $('Process Each Property').item.json[\"MLS ID#\"] }}",
            "Picture": "={{ $('Process Each Property').item.json.Picture }}",
            "zipcode": "={{ $('Process Each Property').item.json.zipcode }}",
            "HOA name": "={{ $('Process Each Property').item.json[\"HOA name\"] }}",
            "Pets Fee": "={{ $('Process Each Property').item.json[\"Pet Fees\"] }}",
            "bedrooms": "={{ $('Process Each Property').item.json.Bedrooms }}",
            "homeType": "={{ $('Process Each Property').item.json.homeType }}",
            "AgentName": "={{ $('Process Each Property').item.json[\"Agent Name\"] }}",
            "bathrooms": "={{ $('Process Each Property').item.json.Bathrooms }}",
            "yearBuilt": "={{ $('Process Each Property').item.json.yearBuilt }}",
            "BrokerName": "={{ $('Process Each Property').item.json[\"Broker Name\"] }}",
            "HOA Phone#": "={{ $('Process Each Property').item.json[\"HOA Phon e#\"] }}",
            "homeStatus": "={{ $('Process Each Property').item.json[\"Home Status\"] }}",
            " Annual Tax": "={{ $('Process Each Property').item.json[\"Tax Annual Amount\"] }}",
            "Description": "={{ $('Process Each Property').item.json.Description }}",
            "Co-AgentName": "={{ $('Process Each Property').item.json[\"Co Agent\"] }}",
            "NOI 50% Rule": "={{ $('Process Each Property').item.json[\"NDI 50 rule\"] }}",
            "Pets allowed": "={{ $('Process Each Property').item.json[\"Pets allowed\"] }}",
            "lotSize Sqft": "={{ \n  Number($('Process Each Property').item.json[\"Lot Size\"]) < 20 \n    ? Number($('Process Each Property').item.json[\"Lot Size\"]) * 43560 \n    : Number($('Process Each Property').item.json[\"Lot Size\"]) \n}}\n",
            "pricePerSqft": "={{ $('Process Each Property').item.json[\"Price per Sqrf\"] }}",
            "Agent Phone #": "={{ $('Process Each Property').item.json[\"Co Agent Phone #\"] }}",
            "RentZestimate": "={{ $('Process Each Property').item.json[\"Rent Zestimate\"] }}",
            " BrokerPhone #": "={{ $('Process Each Property').item.json[\"Broker Phone #\"] }}",
            "Date on Market": "={{ $('Process Each Property').item.json[\"Date on Market\"] }}",
            "Google Maps URL": "={{ $('Process Each Property').item.json[\"Google Maps URL\"] }}",
            "Co-Agent Phone #": "={{ $('Process Each Property').item.json[\"Co Agent Phone #\"] }}",
            "Living Area Sqft": "={{ $('Process Each Property').item.json[\"Living area\"] }}",
            "Price Zestimate ": "={{ $('Process Each Property').item.json.Zestimate }}",
            "Virtual Tour URL": "={{ $('Process Each Property').item.json[\"Virtual Tour URL\"] }}",
            "Tax Assessed Value": "={{ $('Process Each Property').item.json[\"Tax Assessed Value\"] }}",
            "Near Schools + rating": "=1) {{ $('Process Each Property').item.json['School 1'] }} Rate - {{ $('Process Each Property').item.json['Rating 1'] }}\n\n2) {{ $('Process Each Property').item.json['School 2'] }} Rate -  {{ $('Process Each Property').item.json['Rating 2'] }}\n \n3) {{ $('Process Each Property').item.json['School 3'] }} Rate - {{ $('Process Each Property').item.json['Rating 3'] }}",
            "Last Price + Date Sold": "={{ $('Process Each Property').item.json[\"Last Price sold\"] }}",
            "15 year Fixed Rate Bucket": "={{ $('Process Each Property').item.json[\"15 year Fixed Rate Bucket\"] }}",
            "30 year Fixed Rate Bucket": "={{ $('Process Each Property').item.json[\"30 year Fixed Rate Bucket\"] }}"
          },
          "schema": [
            {
              "id": "STATUS",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "STATUS",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Picture",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Picture",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Rate",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Rate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Virtual Tour URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Virtual Tour URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "MLS ID#",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "MLS ID#",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Google Maps URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Google Maps URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "city",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "city",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "County",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "County",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "zipcode",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "zipcode",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "yearBuilt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "yearBuilt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "homeType",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "homeType",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "homeStatus",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "homeStatus",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "bedrooms",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "bedrooms",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "bathrooms",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "bathrooms",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "lotSize Sqft",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "lotSize Sqft",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Living Area Sqft",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Living Area Sqft",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date on Market",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Date on Market",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "RentZestimate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "RentZestimate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Price Zestimate ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Price Zestimate ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Price + Date Sold",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Last Price + Date Sold",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tax Assessed Value",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Tax Assessed Value",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": " Annual Tax",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": " Annual Tax",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "pricePerSqft",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "pricePerSqft",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "GRM",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "GRM",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "NOI 50% Rule",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "NOI 50% Rule",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "15 year Fixed Rate Bucket",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "15 year Fixed Rate Bucket",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "30 year Fixed Rate Bucket",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "30 year Fixed Rate Bucket",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "AgentName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "AgentName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Agent Phone #",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Agent Phone #",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "BrokerName",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "BrokerName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": " BrokerPhone #",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": " BrokerPhone #",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Co-AgentName",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Co-AgentName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Co-Agent Phone #",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Co-Agent Phone #",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "HOA fee",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "HOA fee",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "HOA name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "HOA name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "HOA Phone#",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "HOA Phone#",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Pets allowed",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Pets allowed",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Pets Fee",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Pets Fee",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Near Schools + rating",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Near Schools + rating",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Description",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "URL"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1YGwCNhatkOLMR49pYHXSYJoGcg22qLS6O8aCYO7jpfM/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1YGwCNhatkOLMR49pYHXSYJoGcg22qLS6O8aCYO7jpfM",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1YGwCNhatkOLMR49pYHXSYJoGcg22qLS6O8aCYO7jpfM/edit?usp=drivesdk",
          "cachedResultName": "Property Database"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "wbnaHNLqBQ8lBdpB",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "df151b4d-ebbf-42b1-adec-06f0821c5598",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        -48
      ],
      "parameters": {
        "color": 4,
        "width": 480,
        "height": 624,
        "content": "# 🟩 步骤 1:Zillow 数据提取"
      },
      "typeVersion": 1
    },
    {
      "id": "22743f36-d1e9-4597-9890-be29448788ae",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1472,
        112
      ],
      "parameters": {
        "color": 5,
        "width": 544,
        "height": 464,
        "content": "# 🟦 步骤 2:AI 投资评分"
      },
      "typeVersion": 1
    },
    {
      "id": "8e29afbc-2ec8-4166-b024-31d7df25f1a7",
      "name": "便签4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        112
      ],
      "parameters": {
        "color": 7,
        "width": 576,
        "height": 464,
        "content": "# 🟨 步骤 3:Google Sheets 数据存储"
      },
      "typeVersion": 1
    },
    {
      "id": "0ca5dc6a-075f-46c9-94b5-16caab3dc3ad",
      "name": "便签5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        -656
      ],
      "parameters": {
        "color": 6,
        "width": 1920,
        "height": 592,
        "content": "# Zillow 房产抓取器与 AI 评分到 Google Sheets"
      },
      "typeVersion": 1
    },
    {
      "id": "e50095df-e436-4937-b3ce-f7a1b30d8c25",
      "name": "便签 6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        -48
      ],
      "parameters": {
        "color": 3,
        "width": 1136,
        "height": 144,
        "content": "# 处理每个房产"
      },
      "typeVersion": 1
    },
    {
      "id": "a9827e50-75da-43af-ac15-44dc1e591d52",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        -48
      ],
      "parameters": {
        "width": 272,
        "height": 624,
        "content": "# 清理和格式化数据"
      },
      "typeVersion": 1
    },
    {
      "id": "1edbc36b-b65d-4989-a30e-37dba5d19814",
      "name": "提取单个房产数据",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        352,
        192
      ],
      "parameters": {
        "memory": 8192,
        "actorId": {
          "__rl": true,
          "mode": "id",
          "value": "=ENK9p4RZHg0iVso52"
        },
        "operation": "Run actor and get dataset",
        "customBody": "={\n  \"propertyStatus\": \"FOR_SALE\",\n  \"searchResultsDatasetId\": \"{{ $json.resource.defaultDatasetId }}\",\n  \"startUrls\": [],\n  \"addresses\": [],\n  \"extractBuildingUnits\": \"disabled\"\n}",
        "authentication": "apifyOAuth2Api"
      },
      "credentials": {
        "apifyOAuth2Api": {
          "id": "NMQM4eCSJFqTtRMu",
          "name": "Apify account 2"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "ce159dfb-3f09-4491-ab71-1158999379b7",
  "connections": {
    "Clean & Format Data": {
      "main": [
        [
          {
            "node": "Process Each Property",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Zillow Scraper": {
      "main": [
        [
          {
            "node": "Extract Individual Property Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Each Property": {
      "main": [
        [],
        [
          {
            "node": "AI Scoring: Investment Potential",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Google Sheets Database": {
      "main": [
        [
          {
            "node": "Process Each Property",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Scoring: Investment Potential": {
      "main": [
        [
          {
            "node": "Update Google Sheets Database",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Individual Property Data": {
      "main": [
        [
          {
            "node": "Clean & Format Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

这是一个中级难度的通用自动化工作流。适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量12
分类-
节点类型7
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Fabian Perez

Fabian Perez

@fabianprz

Hi 👋 I’m Fabian — I build automations with n8n that make business easier. I love connecting with other creators, so if you have questions or ideas, drop them below — happy to help!

外部链接
在 n8n.io 上查看 →

分享此工作流