Skip to main content

Integrations

URLpipe in Google Sheets

A column of URLs in, their titles, descriptions and performance scores out.

By · Last updated: September 2026

TL;DR

Google Sheets calls URLpipe through Apps Script: UrlFetchApp posts JSON to an endpoint such as https://urlpipe.dev/meta with your key from Script Properties. A custom function like =URLPIPE_META(A2) returns the title and description into the row; slower Lighthouse audits run from a menu item instead.

Free plan, no credit card. 1,000 credits a month.

Step 1

Add the script

In your sheet, open Extensions → Apps Script. Under Project Settings → Script Properties, add URLPIPE_API_KEY with a project API key. Then replace the editor's contents with:

Code.gs
const URLPIPE = "https://urlpipe.dev";

function urlpipe_(path, body) {
  const key = PropertiesService.getScriptProperties().getProperty("URLPIPE_API_KEY");
  const res = UrlFetchApp.fetch(URLPIPE + path, {
    method: "post",
    contentType: "application/json",
    headers: { Authorization: "Bearer " + key },
    payload: JSON.stringify(Object.assign({ sync: true }, body)),
    muteHttpExceptions: true,
  });
  const text = res.getContentText();
  if (res.getResponseCode() !== 200) {
    throw new Error("URLpipe " + res.getResponseCode() + ": " + text);
  }
  return JSON.parse(text);
}

/**
 * Title, description and image of a page, across three cells.
 * @param {string} url The page's address.
 * @customfunction
 */
function URLPIPE_META(url) {
  if (!url) return "";
  const m = urlpipe_("/meta", { url: url });
  return [[m.title, m.description, m.image ? m.image.url : null]];
}

/** Adds a menu that fills column E with mobile performance scores. */
function onOpen() {
  SpreadsheetApp.getUi().createMenu("URLpipe")
    .addItem("Lighthouse scores into column E", "fillLighthouse")
    .addToUi();
}

function fillLighthouse() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1).getValues();
  rows.forEach(function (row, i) {
    if (!row[0]) return;
    const audit = urlpipe_("/lighthouse", { url: row[0], device: "mobile" });
    const score = audit.categories.performance.score;
    sheet.getRange(i + 2, 5).setValue(score === null ? "" : Math.round(score * 100));
  });
}

Step 2

Use it

  • Put URLs in column A, and in B2 type =URLPIPE_META(A2). The title, description and image URL fill B, C and D of that row. Drag it down the column.
  • Reload the sheet to see the URLpipe menu, and choose Lighthouse scores into column E to fill column E with 0–100 performance scores. The first run asks you to authorize the script.

Why two shapes? A custom function must return within 30 seconds, which a metadata call does comfortably. A Lighthouse audit usually takes 15–20 seconds per page, so a column of them runs from a menu, where Apps Script allows minutes rather than seconds, and writes each score as it lands.

Cost

Recalculation is free

Sheets re-runs custom functions when it sees fit — on open, on edits, when you copy a column. Each re-run is a request to URLpipe, and a repeat of the same URL inside seven days is served from the cache for nothing. So the sheet costs what its distinct URLs cost: 1 credit per page for metadata, 2 per audit.

A sheet of 150 URLs with metadata and a mobile audit is 450 credits — that fits inside the Free plan's 1,000 credits, at list price.

Limits

What it doesn't do

  • The API allows 60 requests a minute and 15 per 10 seconds per project. Dragging a formula down a thousand rows fires them all at once; expect some cells to show a rate_limited error until they recalculate.
  • The Free plan runs 1 request at a time, so parallel recalculation queues. See pricing for the parallel limit of each plan.
  • This is a script you own, not an add-on: there is no URLpipe listing in the Workspace Marketplace.

FAQ

Frequently asked questions

Yes. Custom functions may use UrlFetchApp, as long as they return within 30 seconds. /meta does; a column of Lighthouse audits runs better from a menu item.

Connect it in five minutes.

Free plan, no card. Confirm your email and your API key is live — you'll be making real requests in minutes.