不動産投資分析: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": "Real Estate Investment Analysis: Zillow Property Scraper with AI Scoring to 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 シートのデータベースを更新",
      "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": "# 🟩 STEP 1: Zillow Data Extraction\n## This section starts the Apify Actor to scrape property listings from Zillow.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## It retrieves essential details such as price, location, and property features.\n**Ideal for investors or analysts who want fast, structured access to Zillow data.**"
      },
      "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": "# 🟦 STEP 2: AI Investment Scoring\n## n8n uses OpenAI to analyze each property’s details and assign an investment potential score (1–10).\n\n\n\n\n\n\n\n\n\n\n\n\n## This helps prioritize which listings are worth deeper research or immediate action."
      },
      "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": "# 🟨 STEP 3: Google Sheets Data Storage\n## The processed and scored results are automatically added to your Google Sheet database.\n\n\n\n\n\n\n\n\n\n\n\n\n## Each new run updates or appends data, keeping your property database current and organized"
      },
      "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 Property Scraper with AI Scoring to Google Sheets\n\n## This workflow automates real estate data collection and AI-based analysis using Apify, OpenAI, and Google Sheets.\n\nIt scrapes live property listings from Zillow, processes the data, and assigns an investment score for qualified properties — helping investors quickly identify high-potential listings.\n\nThe process begins by triggering an Apify Actor that extracts listing details such as price, location, and key features.\nn8n then formats and cleans the data before sending it to an AI model, which evaluates only properties containing the required data fields. Listings missing crucial information are automatically skipped to maintain data integrity.\nFinally, all valid and scored listings are updated or appended to a Google Sheets database for easy review and tracking.\n\nPerfect for real estate analysts, investors, or automation builders who want a fast and reliable way to rate properties with minimal manual effort.\n\n**Tools used: Apify, OpenAI, Google Sheets, n8n**\n\n(Disclaimer: This workflow uses community nodes and **requires valid API keys.** Ensure configuration before running.)\n\n\n![ ](https://media.licdn.com/dms/image/v2/D4E0BAQEJx3y3mzwQrg/company-logo_200_200/B4EZg8HGobHIAI-/0/1753355152288/apify_logo?e=2147483647&v=beta&t=7cvNZoQFcfHfs69bfwauevrpt_sJBXYCQaEfEaspIHQ)"
      },
      "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": "# Process Each Property"
      },
      "typeVersion": 1
    },
    {
      "id": "a9827e50-75da-43af-ac15-44dc1e591d52",
      "name": "付箋3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        -48
      ],
      "parameters": {
        "width": 272,
        "height": 624,
        "content": "# Clean & Format Data"
      },
      "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": {
    "8c9824bb-7699-4304-8e02-333a867b9fb8": {
      "main": [
        [
          {
            "node": "f9b3948c-d50e-4091-aea5-cc028fc822bb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "214c6129-834c-46a1-9a58-0e3bad219bc1": {
      "main": [
        [
          {
            "node": "1edbc36b-b65d-4989-a30e-37dba5d19814",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f9b3948c-d50e-4091-aea5-cc028fc822bb": {
      "main": [
        [],
        [
          {
            "node": "95c2f8d0-93f9-4c64-9070-738d43e54dea",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f49bab12-4ba0-49c3-95fc-beb1f2c4d578": {
      "main": [
        [
          {
            "node": "f9b3948c-d50e-4091-aea5-cc028fc822bb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "95c2f8d0-93f9-4c64-9070-738d43e54dea": {
      "main": [
        [
          {
            "node": "f49bab12-4ba0-49c3-95fc-beb1f2c4d578",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1edbc36b-b65d-4989-a30e-37dba5d19814": {
      "main": [
        [
          {
            "node": "8c9824bb-7699-4304-8e02-333a867b9fb8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

中級

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(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で表示

このワークフローを共有

カテゴリー

カテゴリー: 34