房地产投资分析: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)可能需要您自行付费。
相关工作流推荐
AHIJSfA
使用 Apify 和 Tavily 进行 Indeed 职位抓取与 AI 筛选及公司研究
If
Set
Wait
+10
23 节点Adrian Bent
Lead Generation
自动化潜在客户跟进系统 - 验证、邮件和消息来自Follow Up Boss的新潜在客户
使用Follow Up Boss、Gmail、Twilio和WhatsApp消息的自动化潜在客户跟进
If
Set
Code
+9
24 节点Fabian Perez
Facebook页面评论管理机器人:回复、删除、封禁和通知
AI驱动的Facebook评论管理:自动回复、删除、封禁和通知
If
Set
Code
+18
59 节点SpaGreen Creative
Social Media
我的冷邮件生成器
使用Anthropic、GPT-4和谷歌表格生成个性化冷邮件
If
Set
Code
+10
24 节点Bhuvanesh R
Lead Nurturing
使用APIFY和ChatGPT抓取并总结Google Maps企业信息
使用 APIFY + GPT-4O 抓取并总结 Google Maps 企业信息到表格
Wait
Google Sheets
Apify
+5
16 节点Jaures NYA
Lead Generation
使用 OpenAI 自动标记和分析 Google Sheets 中的客户反馈
在 Google Sheets 中批量处理客户反馈,进行情感和情绪分析
Set
Code
Merge
+6
24 节点Parhum Khoshbakht
Market Research
工作流信息
难度等级
中级
节点数量12
分类-
节点类型7
作者
Fabian Perez
@fabianprzHi 👋 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 上查看 →
分享此工作流