Zillow lets you save listings. It does not let you take them with you. Everything sits in a card layout that looks organised on screen and turns into a chore the moment you need that data somewhere else — a spreadsheet for outreach, a comparison table for a client, a list you can sort by price.
I built a small browser script to fix that. It adds a button to your saved homes page, scrolls until every listing has loaded, and then lets you export Zillow saved homes to CSV in a single click. CSV stands for comma-separated values: a plain-text spreadsheet format that Excel, Google Sheets, Numbers, and nearly every database tool can open without conversion.
The alternative was opening each property in a new tab, copying the price and address by hand, and pasting them into a sheet. That gets exhausting after about six listings, and it introduces typos that you only notice later.
There is a short video showing the script running end to end on a real saved list. It is embedded above.
What the Zillow saved homes export actually does
The script is a userscript — a small piece of JavaScript that runs inside your own browser on a specific website, installed through a manager extension rather than from an app store. It does three things in sequence.
First, it injects an Extract All button at the top of your saved homes page. Second, it scrolls the page automatically until every saved listing has loaded. Third, it reads the loaded listings and hands you a downloadable file.
The fields it collects
For each saved property, the script pulls:
- Price
- Address
- Beds
- Baths
- Square footage
- MLS information, where Zillow shows it (MLS is the Multiple Listing Service, the broker-run database most listings originate from, and the MLS number is the closest thing a property has to a unique ID)
- The direct link back to the property page
That last field matters more than people expect. A row of numbers with no link back to the source is hard to verify. With the URL in the sheet, anyone you send the file to can click through to the original listing.
Why the auto-scroll step exists
Zillow does not put all your saved homes into the page at once. It loads them in batches as you scroll, which is standard behaviour on listing sites and keeps the initial page fast. The practical consequence is that a script which reads the page immediately will only see the first handful of listings.
So the script scrolls first and reads second. It keeps scrolling until the list stops growing, then extracts. If you have 40 saved homes, you get 40 rows, not the 9 that happened to be visible when you clicked.
How to export Zillow saved homes to CSV
Four steps, and none of them involve installing anything on your computer beyond a browser extension.
Step one: install a userscript manager
Install Tampermonkey, the userscript manager, in Chrome, Edge, or Firefox. It is the piece that lets a script like this run on a page you visit. Installing the manager alone does nothing on its own — it is a container.
Step two: add the script
Open the Tampermonkey dashboard, create a new script, paste the code in, and save. The script is scoped to Zillow's saved homes URL, so it stays dormant everywhere else you browse.
Step three: open your saved homes and click Extract All
Log into Zillow as normal and open your saved homes page. The button appears at the top. Click it, then leave the tab alone while it scrolls. On a long list this takes a few seconds rather than being instant, because the script is waiting on Zillow to load each batch.
Step four: open the file
The download happens through the browser itself, using the same mechanism described in MDN's documentation on the Blob interface. The script builds the file in memory and hands it to your downloads folder. Nothing is uploaded anywhere.
Double-click the file and it opens in whatever spreadsheet program you use. The format follows the RFC 4180 specification for CSV files, which is why addresses containing commas do not break the columns.
Turning the export into a real estate lead list
A CSV on its own is just a file. The value shows up in what you do next.
From the exports I have run, the four common uses are: building a quick lead list for outreach, comparing several properties side by side on numbers rather than photos, sending a client a clean list instead of fourteen links, and feeding the rows into your own scripts or automation.
Google Sheets and Airtable
Both accept a CSV import directly. In Sheets, File then Import. In Airtable, create a new base from the file. Once the data is in either one, you can sort by price per square foot, filter to a zip code, or add your own columns for status and notes — the things Zillow will never let you add to its own interface.
When a spreadsheet stops being enough
If you are exporting the same list weekly and want to see what changed, a spreadsheet starts working against you. That is the point where the data belongs in SQLite or PostgreSQL with a date column, so you can ask which listings dropped in price since last month. Setting that up is part of the browser automation services I offer, and it is a different job from the extraction itself.
What breaks, and what you should know before running it
I would rather tell you the limits up front than have you discover them mid-task.
Zillow changes its layout. This script reads the rendered page. When Zillow restructures its saved homes markup, the selectors that find the price and address stop matching and the export comes back empty or missing columns. That is not a flaw in the approach, it is the cost of scraping a visual interface. Scripts like this need occasional maintenance.
It only sees what your account sees. You have to be logged in, and it exports your saved list. It is not a tool for pulling arbitrary listings across a city.
Very large lists take longer. The scroll step is bounded by how fast Zillow serves each batch, not by the script.
Terms of service are your call. Zillow publishes Zillow's own terms of use, and its robots.txt file states what it asks automated agents to do. I can describe how the extraction works technically. Whether running it fits the terms you agreed to, and what you then do with the data, is a decision you make — not something I can clear on your behalf.
The same approach works on other sites
Nothing about this is specific to real estate. The pattern is: a site shows you data you can already see, offers no export, and you need it in a spreadsheet. I have built the same shape of tool as Chrome extensions, as Tampermonkey userscripts like this one, as no-code macros in UI.Vision RPA for people who would rather not touch code at all, and as Python and Playwright bots when the job needs to run on a schedule without anyone watching.
If you have a site with a list you keep copying by hand, that is the job. You can commission a custom scraper for your own site through my Fiverr listing, and I will tell you honestly whether a browser script is enough or whether it needs a scheduled bot behind it.
For background on how I work and what I build, or for other scraping and automation write-ups, those pages cover more ground than this one does.
Common questions
Does this send my data anywhere?
No. There is no backend — no server of mine involved at any point. The script runs in your browser, builds the file locally, and downloads it. No API keys, no accounts, nothing to sign up for. An API, if you have not run into the term, is a formal data channel a company provides for programs to talk to it. This script does not use one, because Zillow does not offer a public one for saved homes.
Will it work on other Zillow pages?
It is scoped to the saved homes page. Search results and individual listings use different markup and would need their own version.
What if the export is missing rows?
Almost always the scroll did not finish. Re-run it and let the tab sit until scrolling stops on its own before checking the file.
Can you build one for a site I use?
Yes. That is most of what I do. Details on ordering a custom extraction script are on my hire page.