Last active
November 19, 2025 20:47
-
-
Save abfo/954d12d73651c2203e91442d2b50a94f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var apiKey = ''; | |
| var monitorUrl = ''; | |
| var originUrl = ''; | |
| function monitor() { | |
| // CRUX | |
| var allCrux = callCrux(null, originUrl); | |
| var desktopCrux = callCrux('DESKTOP', originUrl); | |
| var mobileCrux = callCrux('MOBILE', originUrl); | |
| // Pagespeed Insights | |
| var desktop = callPageSpeed('desktop', monitorUrl); | |
| var mobile = callPageSpeed('mobile', monitorUrl); | |
| var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); | |
| var sheet = spreadsheet.getSheetByName('results'); | |
| sheet.appendRow([ | |
| Utilities.formatDate(new Date(), 'GMT', 'yyyy-MM-dd'), | |
| desktop.lighthouseResult.categories.performance.score * 100, | |
| desktopCrux.lcp == -1 ? (allCrux.lcp == -1 ? ' ' :allCrux.lcp) : desktopCrux.lcp, | |
| desktopCrux.inp == -1 ? (allCrux.inp == -1 ? ' ' :allCrux.inp) : desktopCrux.inp, | |
| desktopCrux.cls == -1 ? (allCrux.cls == -1 ? ' ' :allCrux.cls) : desktopCrux.cls, | |
| mobile.lighthouseResult.categories.performance.score * 100, | |
| mobileCrux.lcp == -1 ? (allCrux.lcp == -1 ? ' ' :allCrux.lcp) : mobileCrux.lcp, | |
| mobileCrux.inp == -1 ? (allCrux.inp == -1 ? ' ' :allCrux.inp) : mobileCrux.inp, | |
| mobileCrux.cls == -1 ? (allCrux.cls == -1 ? ' ' :allCrux.cls) : mobileCrux.cls | |
| ]); | |
| // much more available, i.e. desktop.pageStats.numberResources | |
| } | |
| function callCrux(strategy, origin) { | |
| var lcp = -1; | |
| var inp = -1; | |
| var cls = -1; | |
| var cruxUrl = 'https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=' + apiKey; | |
| var payload = { | |
| "origin": origin, | |
| "metrics": [ | |
| "largest_contentful_paint", | |
| "cumulative_layout_shift", | |
| "interaction_to_next_paint" | |
| ] | |
| }; | |
| if (strategy) { | |
| payload["formFactor"] = strategy; | |
| } | |
| var options = { | |
| method: 'post', | |
| contentType: 'application/json', | |
| payload: JSON.stringify(payload), | |
| }; | |
| try { | |
| var response = UrlFetchApp.fetch(cruxUrl, options); | |
| var json = JSON.parse(response.getContentText()); | |
| if ('largest_contentful_paint' in json.record.metrics) { | |
| lcp = parseFloat(json.record.metrics.largest_contentful_paint.percentiles.p75) / 1000.0; | |
| } | |
| if ('cumulative_layout_shift' in json.record.metrics) { | |
| cls = parseFloat(json.record.metrics.cumulative_layout_shift.percentiles.p75); | |
| } | |
| if ('interaction_to_next_paint' in json.record.metrics) { | |
| inp = parseFloat(json.record.metrics.interaction_to_next_paint.percentiles.p75) / 1000.0; | |
| } | |
| } catch { | |
| } | |
| return { "cls":cls, "inp":inp, "lcp":lcp }; | |
| } | |
| function callPageSpeed(strategy, url) { | |
| var pageSpeedUrl = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=' + url + '&key=' + apiKey + '&strategy=' + strategy; | |
| var response = UrlFetchApp.fetch(pageSpeedUrl); | |
| var json = response.getContentText(); | |
| return JSON.parse(json); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment