-
-
Save darinalleman/b4cc60bed013cbd7a46b286640ea1c94 to your computer and use it in GitHub Desktop.
function writeZestimateToSheet() { | |
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); | |
var sheets = spreadsheet.getSheets(); | |
var zillowSheet = sheets.find(sheet => sheet.getSheetName() == 'Zillow'); | |
if (zillowSheet) { | |
var html = UrlFetchApp.fetch('https://www.zillow.com/homes/%%%%%%%%%_zpid/').getContentText(); | |
const divRegex = /(<div class="zestimate-value">)(\$)(\d{1,3})(,\d{3})*(<\/div>)/g; | |
const moneyRegex = /(\$)(\d{1,3})(,\d{3})*/g; | |
var div = html.match(divRegex); | |
var zestimate; | |
if (div && div[0]) { | |
zestimate = div[0].match(moneyRegex)[0]; | |
if (zestimate) { | |
var row = []; | |
row[0] = zestimate; | |
row[1] = new Date(); | |
zillowSheet.appendRow(row); | |
MailApp.sendEmail('me@email.com', 'Zestimate Update', 'As of '.concat(row[1].toDateString().concat(' the Zestimate of your home was ').concat(row[0]))); | |
} | |
else { | |
throw new Error("Zestimate not found"); | |
} | |
} | |
else { | |
throw new Error("Zestimate div not found on page"); | |
} | |
} | |
else { | |
throw new Error("Could not find Zillow sheet"); | |
} | |
} |
@darinalleman How would you modify this script to do more than one Zpid?
@benito334 I suppose it depends on the integration you're looking for. Using this script below, just put your zpid's in the zillowIds array and it'll add it in another column on the Zillow sheet.
function writeZestimateToSheet() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheets = spreadsheet.getSheets();
var zillowSheet = sheets.find(sheet => sheet.getSheetName() == 'Zillow');
var balanceHistory = sheets.find(sheet => sheet.getSheetName() == 'Balance History');
if (zillowSheet && balanceHistory) {
var zillowIds = ['51946308','51919001', '84074482'];
var row = [];
for (i = 0; i < zillowIds.length; i++) {
if (zillowIds[i] != undefined){
var html = UrlFetchApp.fetch('https://www.zillow.com/homes/' + zillowIds[i] + '_zpid/').getContentText();
const divRegex = /(<div class="zestimate-value">)(\$)(\d{1,3})(,\d{3})*(<\/div>)/g;
const moneyRegex = /(\$)(\d{1,3})(,\d{3})*/g;
var div = html.match(divRegex);
var zestimate;
if (div && div[0]) {
zestimate = div[0].match(moneyRegex)[0];
if (zestimate) {
try {
var today = new Date();
var lastSunday = new Date();
lastSunday.setDate(today.getDate() - today.getDay());
let rowIndex = (i * 2);
row[rowIndex] = zestimate;
row[rowIndex + 1] = today;
} catch(error) {
throw new Error('Setting values failed');
}
}
else {
throw new Error("Zestimate not found");
}
}
else {
throw new Error("Zestimate div not found on page");
}
}
Utilities.sleep(10000);//wait 10 seconds before doing the next request, zillow doesn't like requests too fast
}
zillowSheet.appendRow(row);
}
else {
throw new Error("Could not find Zillow sheet");
}
}
@darinalleman That worked perfect. Thanks!
I have run into a problem. I added 20 ZPIDs to @benito334 script. It runs successfully 70% when run from script editor. The error when failing is "Zestimate div not found on page." Curiously, when I setup a time trigger or When Open trigger it fails 100%. I even ran with just 1 ZPID. When triggered execution, its an instant failure.
I have run into a problem. I added 20 ZPIDs to @benito334 script. It runs successfully 70% when run from script editor. The error when failing is "Zestimate div not found on page." Curiously, when I setup a time trigger or When Open trigger it fails 100%. I even ran with just 1 ZPID. When triggered execution, its an instant failure.
@rbuentello - mine is failing sort of randomly it seems too. I've debugged it a bit and found that it has to do with Zillow's "Are you a robot" checks. Sometimes Zillow shows the captcha and sometimes it does not. Definitely a bummer!
Yep. Experiencing the same issue. Unfortunately something I can't fix. Like I said in the comment above, the "Are you a robot" check will always fail because, well, this is a robot. Nothing I can do.
Not that I'm aware of at this point.
zpid
on line 6 (it's the 9 digit number at the end of the URL here: https://www.zillow.com/homedetails/1600-Pennsylvania-Ave-NW-Washington-DC-20006/84074482_zpid/, so you'd put 84074482 in where I have the %%% holder).I've found that for some reason it won't work if you run it too quickly in succession, so if you get the "Zestimate div not found on page" error, wait a minute and try again.