I’m excited to implement the script as outlined in the instruction below.
I believe I’ve followed the steps closely and accurately, but I get this error (you can also see where I’ve added my ZPID and ZWSID). I haven’t altered the script at all. If someone can get it working with my two IDs, and then shoot me the script to copy and paste in, that would be awesome. Or I’m open to some less intensive hand-holding as well.
@randy - May I kindly tap your expertise for some insight on what might be going on? I am positive that both the ZWSID and ZPID are copied into the script correctly. Is the script currently working for others correctly?
I’ve set up a manual account for now, but it would be great to have this working for me. Thanks so much.
Really sorry I didn’t get to this earlier. I saw it and it slipped down my inbox.
Your post in a different thread reminded me.
I tested the script and it still works for me with my credentials. I tried entering your credentials and saw the same error. Effectively, with your credentials, I get a null response at this line: 90: root = document.getRootElement();
When I used my zwsid and your zpid, the script worked… so I think the issue is your zwsid. Perhaps you didn’t enter that into the script properly or didn’t complete activation?
Thanks, @randy! Really appreciate your looking taking a look. I am positive I entered my zwisid correctly and as it was emailed to me. Here is how I signed up for it… should I check off more boxes (as a possible fix)?
You can see that for my company URL I used the spreadsheet that would be making the query. I’m skeptical this makes a difference though because I am able to enter queries (like the one I shared above) directly into the browser and their API still reports out.
I don’t have a lot more to offer here other than the fact that I did it a long time ago and it is still working for me. If you can’t fetch the property data via a URL request in the browser (i.e. because the zwsid or zpid are invalid) then the script won’t work. Getting those IDs functional is definitely the first step.
I was going to uncheck all four in the hopes that might help… or check off all four, as another attempt. But now I get an error when saving changes to the API Detail panel.
I have been trying to get this to work and have signed up for three different API accounts in the process, still without any success. All three API keys result in “Error: this account is not authorized to execute this API call” when making the API call from the script (e.g., https://www.zillow.com/webservice/GetZestimate.htm?zws-id=XXXXXXXXXXXXXX_YYYYY&zpid=01234567).
It seems that Zillow has changed their APIs recently, including their registration/management process.
I created three accounts because I wasn’t able to figure out how to manage the API subscriptions for my original account. Does anyone have a link to the page shown above by @randy or @Adam_B? I can’t seem to get there.
For anyone else trying this, here are the combinations that I tried:
Profile Summary API only (seems to be the same as @Adam_B)
All three boxes checked - Directory API, Profile Summary API, Reviews API (note that my registration screen was different from the screenshots shown above and did not have the “Mortgage API” option)…but since I can’t access the management page, I can’t get a screenshot of the page without creating yet another account.
I’d really love to get this setup, if anyone has any pointers on how to get a valid API key, I’d appreciate it.
I did some research on this today, @spk and @Adam_B…
There seem to be a couple of issues:
I think the Zillow API calls have changed since I wrote the original script. I was calling a GetZestimate.htm API which appears to have been replaced by a GetSearchResults.htm API call. I’m not sure if my (old) credentials grandfathered access to the old API, but it still works for me. (I am unable to call that old API with some new credentials that I created today.)
Further complicating things, it looks like Zillow is making changes to how API keys are registered and the whole system appears to be down now. I found some notes here.
One cool note about the new GetSearchResults.htm API is that it allows you to embed a normal address in the request URL (see the notes in the link). This is much more natural than needing to go clumsily round up ZPID codes from their site and embed those in your scripts. Hopefully they will get this running and we can update the scripts to use the new API with natural language addresses.
In the past week, they began sharing access to a new API via this page. I put in a request as a developer. I’ll let you know if they grant my request. Will be interesting to see a) if they do, but also b) if they allow access broadly to individuals (as “developers”) who want to monitor their assets.
After creating new credentials today, @Adam_B, I saw that the old API call didn’t work for the first time. That the old API call worked on my old credentials confused me in that I couldn’t replicate the issue you were having with new credentials.
See my note on what may be going on now that I have dug deeper.
No problem, Randy. Thanks for continuing to slog through this issue. Hopefully the new API eventually works for us – I will stand by for more. If individuals are granted developer access for test, I’m game!
In the context of the request, I received the following information from a Senior Business Development Consultant at Zillow regarding access to the older web services (that the Github project depends on):
Zillow has intentionally closed off those datasets and has migrated the new Zestimates dataset to Bridge. The terms of use for the Zestimate data is below, but there have been substantial changes to the use cases that fall within the terms of use. Terms of Use.
I requested and seem to have been granted an access key to the new API but have not yet been able to make a successful request and I need to move on to other tasks. Will try again later in the week.
The error reporting is difficult for me to parse but the issue with my Bridge API calls may be that my access to the API hasn’t been fully approved yet.
I followed up with Zillow on my API access request. After I answered some questions about our use scenario, Zillow sent this response:
Thank you for sending those answers. We apologize, however at this time we are unable to approve your requested access as your use case falls outside of our Terms of Use. We are not allowing any derivative works based off of Zillow API at this time. It is intended to be an as-is display metric, not used as a part of any other calculation. Also, we do not allow any storing of the data.
Their rationale for not granting access feel strained.
“Not allowing any derivative works” means that they want the end result of the API request to be the Zestimate. In this case, though a user’s spreadsheet will contain discrete Zillow valuation line items, Zillow is objecting to possibility that the user will roll the Zestimate(s) into a net worth calculation.
As for “storing of the data”, Zillow is objecting to recording the Zestimate in a spreadsheet. I would have guessed that this restriction is more targeted at buffering responses from their database.
I will try to appeal, but I’m not crossing my fingers.
I pulled down the GitHub project listing since the code doesn’t work anymore and the API it depended on is no longer supported.
In the absence of a broadly-accessible API, Zestimates are readily available via the customer-facing website at https://www.zillow.com/homes/ZZZZ_zpid/ where ZZZZ is replaced with the 8-digit Zillow Property ID (zpid). The Zestimate is typically within this element: <div class="zestimate-value">$500,000<\/div>
You’ll want to review the ToS when using values from their Zillow’s service.
The interest in this functionality is compelling and we will continue to think on alternatives to offer this functionality in a sustainable way.
Thanks, @randy, for the follow-up with Zillow and reporting back. I agree that their rationale seems strained (nice adjective - gonna steal it ) … fingers crossed for a more favorable response to any appeal you may lodge.
I’m not sure how screen-scraping would work but I have an idea of what you’re referring to. Hopefully something will pan out. Also, wondering if Redfin has a similar API that might work for us…?
For now, I’ll happily manually refresh my manual asset accounts… not a huge deal at all.
There seem to be some well-documented Google Sheets web-scraping hacks using the IMPORTXML() function. Your xpath_query parameter may look something like: //div[contains(@class, 'zestimate-value')].