📋 Measure Core Web Vitals of Your Websites with Google Sheets

1. Overview

\[ \begin{array}{l} \textbf{Google Sheets can be used to track and analyze Core Web Vitals --} \\ \text{such as Largest Contentful Paint (LCP), First Input Delay (FID), and Cumulative Layout Shift (CLS).} \\ \textbf{By using the PageSpeed Insights API with Apps Script --} \\ \text{you can automate the collection of performance metrics for multiple websites.} \end{array} \]

2. Core Steps

\[ \begin{array}{ll} \textbf{Step 1:} & \text{Create a Google Sheet with a list of website URLs in Column A.} \\ \textbf{Step 2:} & \text{Get a free API key from Google Cloud for PageSpeed Insights.} \\ \textbf{Step 3:} & \text{Open the Script Editor (Extensions $\rightarrow$ Apps Script).} \\ \textbf{Step 4:} & \text{Write a script to call the PageSpeed Insights API and parse metrics.} \\ \textbf{Step 5:} & \text{Run the script, store results in the sheet, and update regularly.} \end{array} \]

3. Sample Google Apps Script


// Replace with your API key
var API_KEY = 'YOUR_API_KEY_HERE';

function measureCoreWebVitals() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var urls = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1).getValues();

  for (var i = 0; i < urls.length; i++) {
    var url = urls[i][0];
    if (url) {
      var apiUrl = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=" + encodeURIComponent(url) + "&key=" + API_KEY;
      var response = UrlFetchApp.fetch(apiUrl);
      var data = JSON.parse(response.getContentText());
      
      try {
        var lcp = data.loadingExperience.metrics.LARGEST_CONTENTFUL_PAINT_MS.percentile;
        var fid = data.loadingExperience.metrics.FIRST_INPUT_DELAY_MS.percentile;
        var cls = data.loadingExperience.metrics.CUMULATIVE_LAYOUT_SHIFT_SCORE.percentile;
        
        sheet.getRange(i + 2, 2).setValue(lcp);
        sheet.getRange(i + 2, 3).setValue(fid);
        sheet.getRange(i + 2, 4).setValue(cls);
      } catch (e) {
        sheet.getRange(i + 2, 2).setValue("Error");
        sheet.getRange(i + 2, 3).setValue("Error");
        sheet.getRange(i + 2, 4).setValue("Error");
      }
    }
  }
}

4. Important Notes

\[ \begin{array}{l} \text{• Core Web Vitals include LCP, FID, and CLS, measured in milliseconds or score units.} \\ \text{• You need a Google Cloud API key with PageSpeed Insights enabled.} \\ \text{• API quotas apply; avoid sending too many requests at once.} \\ \text{• Ensure URLs include https:// for correct measurement.} \end{array} \]

5. Conceptual Flow (in LaTeX)

The process can be described as:

\[ \text{Website URLs in Sheet} \xrightarrow{\text{Apps Script + PageSpeed API}} \text{Core Web Vitals Data} \]

Where: \[ \text{Core Web Vitals} = \{ \text{LCP}, \text{FID}, \text{CLS} \} \]