Apify + Google Sheets: Zillow deals scored fast
Copying Zillow listing data into a spreadsheet sounds simple until you do it every day. Then it turns into broken columns, missing fields, and “which one is the latest?” confusion.
Real estate investors feel this fast. A market analyst buried in comps does too. So does the agency team asked to “just bring me 30 good leads by Friday.” This Zillow deal scoring automation turns messy listing research into a clean sheet with a consistent investment score.
You’ll learn what the workflow does, what you need to run it, and how the pieces fit together so you can adapt it to your buy box.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Apify + Google Sheets: Zillow deals scored fast
flowchart LR
subgraph sg0["Start Zillow Scraper Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Start Zillow Scraper", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Clean & Format Data", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Process Each Property", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "AI Scoring: Investment Poten..", pos: "b", h: 48 }
n4@{ icon: "mdi:database", form: "rounded", label: "Update Google Sheets Database", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Extract Individual Property ..", pos: "b", h: 48 }
n1 --> n2
n0 --> n5
n2 --> n3
n4 --> n2
n3 --> n4
n5 --> n1
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n3 ai
class n5 decision
class n4 database
Why This Matters: Zillow Research Gets Messy Fast
When your “deal pipeline” lives in browser tabs and half-filled spreadsheets, you’re not really comparing properties. You’re hunting for context. One listing has a price but no description copied over. Another has the description but the address is missing, so now you can’t dedupe it later. Then you re-check Zillow because something changed, and suddenly you don’t trust your own sheet. Honestly, the worst part is the mental load: you spend your attention on cleanup instead of on what matters, which is deciding fast and following up.
It adds up fast. Here’s where the friction usually shows up.
- You waste about 10 minutes per property just copying fields, fixing formatting, and re-checking missing info.
- Listings without consistent fields can’t be scored fairly, so “best deal” becomes a gut feeling and a loud opinion.
- Updates are painful, which means your sheet drifts out of date the moment you stop babysitting it.
- When multiple people touch the same spreadsheet, duplicates creep in and nobody wants to be the one to clean it.
What You’ll Build: Zillow Listings to a Scored Google Sheet
This workflow creates a repeatable pipeline for Zillow deal research. It starts by running an Apify Actor that pulls live property details (price, location, and core listing details) and returns them in a structured format. n8n then normalizes the results so every row follows the same naming and structure, which is what makes the sheet trustworthy later. Next, it loops through each property and asks OpenAI for an investment potential score from 1 to 10. There’s an important guardrail: listings missing required fields are skipped automatically, so the AI doesn’t “guess” based on incomplete data. Finally, the workflow appends or updates your Google Sheet so you end up with a central database you can filter, sort, and share.
It begins with Apify collecting the raw listing set, then n8n cleans it into consistent fields. After that, OpenAI scores only the complete records. The finished rows land in Google Sheets, ready for comparison and follow-up.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you evaluate 30 Zillow listings every weekday. Manually, if you spend about 10 minutes per listing to copy details, clean the row, and write a quick “deal note,” that’s roughly 5 hours a day. With this workflow, you trigger the Apify pull in a minute, then let n8n batch through the records and score them automatically. You’ll still review the top picks, but the busywork drops to a quick scan and a couple of follow-ups.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Apify for running the Zillow scraping Actor
- Google Sheets to store and share scored listings
- OpenAI API key (get it from your OpenAI dashboard)
Skill level: Beginner. You’ll connect accounts, paste in keys, and adjust a few fields to match your sheet.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
Apify starts the Zillow crawl. The workflow triggers an Apify run that collects property records from Zillow based on your configured search or Actor setup.
Fields are normalized into “sheet-ready” columns. n8n maps the raw Apify output into consistent names (price, address/location, key features, description), so every record behaves the same when you sort or filter.
Listings are processed in batches and scored by AI. n8n loops through the properties, checks required fields, and then uses an OpenAI chat model to assign an investment potential score from 1 to 10 with a short rationale you can read.
Results are written into Google Sheets. Each valid property becomes a row in your spreadsheet, so your database stays current and usable for comparisons, follow-up, and reporting.
You can easily modify the scoring prompt to fit your buy box, or change which fields are “required” so fewer listings get skipped. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Apify Trigger
This workflow starts when the Apify actor completes, using the Initiate Zillow Crawl trigger.
- Add the Initiate Zillow Crawl node and select your Apify actor in Actor ID (value is
[YOUR_ID]in the template). - Credential Required: Connect your
apifyOAuth2Apicredentials in Initiate Zillow Crawl. - Confirm the trigger outputs a dataset reference used by downstream nodes.
[YOUR_ID] with your real Apify actor ID, or the trigger will not fire correctly.Step 2: Connect Apify Data Retrieval
The trigger feeds into Retrieve Property Details, which runs an Apify actor and pulls the dataset for property listings.
- Add Retrieve Property Details and set Operation to
Run actor and get dataset. - Set Memory to
8192. - Set Custom Body to
={ "propertyStatus": "FOR_SALE", "searchResultsDatasetId": "{{ $json.resource.defaultDatasetId }}", "startUrls": [], "addresses": [], "extractBuildingUnits": "disabled" }. - Credential Required: Connect your
apifyOAuth2Apicredentials in Retrieve Property Details.
Step 3: Set Up Listing Normalization and Iteration
Normalize Listing Fields reshapes the Apify response into consistent fields, then Iterate Property Records batches each property for scoring.
- Add Normalize Listing Fields and map key fields like Picture to
{{ $json.desktopWebHdpImageLink }}and Price to{{ $json.price }}. - Set propertyURL to
=https://www.zillow.com/{{ $json.hdpUrl }}and Google Maps URL to=https://www.google.com/maps/place/{{ $json.address.streetAddress }}/. - Ensure calculated fields like GRM use
{{ Math.round($json.price / ($json.rentZestimate * 12) * 100) / 100 }}and Date on Market uses{{ new Date($json.resoFacts.onMarketDate).toLocaleDateString('en-US') }}. - Add Iterate Property Records after Normalize Listing Fields to process items one at a time.
Step 4: Set Up AI Scoring
AI Investment Rating evaluates each property and returns a numeric score.
- Add AI Investment Rating after Iterate Property Records to score each batch item.
- Select the model
gpt-4o-miniin Model. - Keep the system and user messages intact, especially the property data line that starts with
=Analyze this property data:and references fields like{{ $json.Price }},{{ $json['HOA monthly fee'] }}, and{{ $json['Price per Sqrf'] }}. - Credential Required: Connect your
openAiApicredentials in AI Investment Rating.
Step 5: Configure Google Sheets Output
Append Sheet Records writes the normalized data and AI rating to Google Sheets.
- Add Append Sheet Records after AI Investment Rating.
- Set Operation to
appendOrUpdate. - Select Document ID as
[YOUR_ID]and Sheet Name asgid=0(Sheet1). - Map columns like Rate to
{{ $json.message.content }}and URL to{{ $('Iterate Property Records').item.json.propertyURL }}. - Keep the matching column URL so updates are applied consistently.
- Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Append Sheet Records.
Step 6: Test and Activate Your Workflow
Run a manual test to confirm the full pipeline from Apify trigger to Google Sheets output.
- Click Execute Workflow and trigger Initiate Zillow Crawl to simulate a dataset completion.
- Verify that Retrieve Property Details returns data and Normalize Listing Fields outputs structured fields.
- Confirm AI Investment Rating returns a numeric score and Append Sheet Records writes a new row with the score.
- Once validated, toggle the workflow to Active for production use.
Troubleshooting Tips
- Apify credentials can expire or your Actor token may not have access to the right workspace. If pulls suddenly return nothing, check your Apify token and Actor permissions in Apify first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Quick Answers
About 30 minutes if your Apify, OpenAI, and Google Sheets accounts are ready.
No. You’ll mostly connect credentials and paste in the right Actor/config details. The “work” is deciding what fields you require and what your scoring prompt should care about.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API usage costs, which are usually a few cents per batch depending on prompt length.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you should. Most people tweak the “AI Investment Rating” prompt to match their buy box (rent-to-price, neighborhood class, rehab tolerance), then adjust the “Normalize Listing Fields” step so the sheet includes the columns they actually filter by. You can also change the required-field check so the workflow skips fewer listings, but keep at least price and location as mandatory or the scores get noisy.
Usually it’s an expired token or the Actor run is failing in Apify. Regenerate your Apify API key, update it in n8n, then confirm the Actor runs successfully inside Apify with the same input. If it runs but returns empty data, your search parameters may be too narrow, or Zillow’s available fields for that pull changed and your normalization step needs an update.
Most teams run batches of 20–200 listings at a time comfortably, and the main limiter is how quickly you want to call OpenAI plus your n8n execution limits. On self-hosted n8n there’s no execution cap, but your server resources still matter. If you expect thousands of listings a day, add stricter filters in Apify so you only score what you’d realistically consider.
Often, yes. n8n handles batching, conditional “skip if incomplete,” and more complex logic without turning every extra step into a pricing upgrade. It’s also easier to keep the workflow reliable when you’re processing lots of items, because you can control the loop and error handling. Zapier or Make can still work if you’re pulling a tiny list and doing minimal processing, but they tend to get awkward when you need guardrails. If you want help choosing, Talk to an automation expert.
A clean, scored property sheet changes how fast you can move. Set it up once, then spend your time on decisions and outreach instead of spreadsheet cleanup.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.