Skip to main content

Confirm

Are you sure?

Integrations

URLpipe in Airtable

Paste a URL into a record; the title, description, image and a screenshot fill themselves in.

By · Last updated: September 2026

TL;DR

In Airtable, an automation triggered when a record gets a URL can call URLpipe from a Run a script action: fetch posts to https://urlpipe.dev/meta with the key from input.secret(), and table.updateRecordAsync writes the title, description and image back. A screenshot link comes from the X-Result-Url header.

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

Setup

Build the automation

  1. 1
    In a Links table, have fields URL (URL), Title, Description (long text), Image (URL) and Screenshot (URL).
  2. 2
    Create an automation with the trigger When a record matches conditions: URL is not empty.
  3. 3
    Add the action Run a script. Under input variables, add recordId (the trigger record's ID) and url (its URL field).
  4. 4
    In the script editor's Secrets tab, add a secret named urlpipe_api_key with a project API key.
  5. 5
    Paste the script below, test it, and turn the automation on.
Run a script
const { recordId, url } = input.config();
const headers = {
  Authorization: `Bearer ${input.secret("urlpipe_api_key")}`,
  "Content-Type": "application/json",
};

// 1. Title, description and image
const metaRes = await fetch("https://urlpipe.dev/meta", {
  method: "POST",
  headers,
  body: JSON.stringify({ url, sync: true }),
});
if (!metaRes.ok) throw new Error(`URLpipe /meta ${metaRes.status}: ${await metaRes.text()}`);
const meta = await metaRes.json();

// 2. A first-screen screenshot, as a link that needs no key
const shotRes = await fetch("https://urlpipe.dev/screenshot", {
  method: "POST",
  headers,
  body: JSON.stringify({
    url,
    sync: true,
    screenshot_options: { full_page: false, format: "webp" },
    page_options: { block_cookie_banners: true },
  }),
});

const table = base.getTable("Links");
await table.updateRecordAsync(recordId, {
  Title: meta.title ?? "",
  Description: meta.description ?? "",
  Image: meta.main_image_url ?? null,
  Screenshot: shotRes.ok ? shotRes.headers.get("X-Result-Url") : null,
});

Timing

Why it works inside Airtable's limits

An automation script has a time budget — 30 seconds for each fetch, and a limit on the script as a whole — and this one makes two calls. /meta typically answers in 6–11 seconds and a viewport screenshot in 4–8, so both fit. Don't add a Lighthouse audit to the same script: it usually takes 15–20 seconds on its own. Send it async instead, with report_to pointing at an automation whose trigger is When webhook received, and labels carrying the record ID.

The screenshot link is valid for 30 days. To keep the image in the base for good, write it to an attachment field instead — Screenshot: [{ url: … }] — and Airtable copies the file into its own storage.

Limits

What it costs, and what it doesn't do

  • Each record costs 6 credits: 5 for metadata and 1 for the screenshot. A URL that appears in two records inside seven days is a free cache hit the second time.
  • Importing a thousand rows at once triggers a thousand runs. The API allows 60 requests a minute per project, so some runs will fail with rate_limited; re-run those, or import in smaller batches.
  • This is a script in your base, not a marketplace extension.

FAQ

Frequently asked questions

Where do I store the URLpipe key in Airtable?
In the Run a script action's Secrets tab (or Builder Hub), read with input.secret("urlpipe_api_key"). Keep it out of the script text.
Can the script run a Lighthouse audit too?
Better not in the same script: an audit usually takes 15–20 seconds. Send it async with report_to set to a When webhook received automation.
How long does the screenshot link work?
30 days. Write it to an attachment field to have Airtable keep its own copy.
What does the metadata call return?
Title, description, language, main image, favicon, author, feed URL and publication date. Any of them can be null.

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.