// Constants var dateOffset = 4*60*60*24; // 4 days var rowOffset = 14; // number of rows between the price and date function getData(row, col){ var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ETF Comparisons"); var symbol = sheet.getRange(row, 3).getValue(); var endperiod = Math.round(sheet.getRange(17, col).getValue()/1000); var startperiod = endperiod - dateOffset; var xml_string = 'https://finance.yahoo.com/quote/'+symbol+'/history?period1='+ startperiod +'&period2='+endperiod+'&interval=1d&filter=history&frequency=1d'; var page = UrlFetchApp.fetch(xml_string); var doc = Xml.parse(page, true); // need to use old Xml pkg to parse badly formatted HTML var bodyHtml = doc.html.body.toXmlString(); var xml = XmlService.parse(bodyHtml); // finding the relevant row var root = xml.getRootElement(); var nodes = root.getDescendants(); var tbody = null; for (var i=0; i