Integrations/Airtable
Airtable

Airtable + ScreenshotDEV

Databases and structured content

Enrich Airtable records with screenshots using the Scripting Extension or Web API. Automatically capture website thumbnails for URL fields, build visual asset libraries, or create monitoring bases with automated captures.

Key features

  • ✓Scripting Extension with remoteFetchAsync()
  • ✓REST API with PATCH for record updates
  • ✓Attachment fields for storing screenshot images
  • ✓URL field → screenshot enrichment workflow
  • ✓Automation scripts with fetch() for triggers
  • ✓Batch update up to 10 records per API request
Step by step

How to set it up

Install, configure, and start capturing.

1

Add a Scripting Extension

In your Airtable base, click Extensions → Add an extension → Scripting. This gives you a JavaScript environment with HTTP access.

2

Write the capture script

Use remoteFetchAsync() to call the ScreenshotDEV API. This routes through Airtable's servers, avoiding CORS issues.

// In the Scripting Extension:
let table = base.getTable("Sites");
let query = await table.selectRecordsAsync({
  fields: ["URL", "Screenshot"]
});

for (let record of query.records) {
  let url = record.getCellValueAsString("URL");
  if (!url) continue;

  // Skip if screenshot already exists
  let existing = record.getCellValue("Screenshot");
  if (existing && existing.length > 0) continue;

  let response = await remoteFetchAsync(
    "https://api.screenshotdev.com/v1/screenshot"
    + "?url=" + encodeURIComponent(url)
    + "&access_key=ak_live_your_key"
    + "&format=png"
    + "&store=true",
    { method: "GET" }
  );

  let data = await response.json();

  // Update the attachment field
  await table.updateRecordAsync(record.id, {
    "Screenshot": [{ url: data.screenshot_url }]
  });
}
3

Run the script

Click Run in the Scripting Extension. It will iterate through your records, capture screenshots for each URL, and save them as attachments.

Full example

Airtable Scripting Extension — full example

// Enrich all records in the "Sites" table
// with screenshots from their URL field.
//
// Table structure:
//   - URL (URL field)
//   - Screenshot (Attachment field)
//   - Status (Single select)

let API_KEY = "ak_live_your_key";
let table = base.getTable("Sites");

let query = await table.selectRecordsAsync({
  fields: ["URL", "Screenshot", "Status"]
});

let updated = 0;

for (let record of query.records) {
  let url = record.getCellValueAsString("URL");
  if (!url) continue;

  // Skip records that already have a screenshot
  let existing = record.getCellValue("Screenshot");
  if (existing && existing.length > 0) continue;

  try {
    let response = await remoteFetchAsync(
      "https://api.screenshotdev.com/v1/screenshot"
      + "?url=" + encodeURIComponent(url)
      + "&access_key=" + API_KEY
      + "&format=png"
      + "&store=true"
      + "&width=1280"
      + "&block_ads=true",
      { method: "GET" }
    );

    let data = await response.json();

    await table.updateRecordAsync(record.id, {
      "Screenshot": [{
        url: data.screenshot_url,
        filename: "screenshot.png"
      }],
      "Status": { name: "Captured" }
    });

    updated++;

  } catch (e) {
    console.log("Failed: " + url + " — " + e.message);

    await table.updateRecordAsync(record.id, {
      "Status": { name: "Failed" }
    });
  }
}

output.text(updated + " screenshots captured.");

Pro tip: When updating attachment fields via PATCH, you replace the entire array. To add a new screenshot without removing existing ones, read the current attachments first, append your new one, and write the full array back.

Start with 100 free API calls →

No credit card required

Use cases

What people build with Airtable

Lead enrichment

Add a company URL to your CRM base and automatically capture their website as a visual reference for sales.

Visual asset library

Build a database of screenshots — competitor pages, design inspiration, or content references — all searchable in Airtable.

Content calendar

Capture published blog posts and social content as screenshots. Attach them to your content calendar entries.

Site monitoring base

Track a list of URLs with daily screenshots. Use Airtable views to filter by date or status.

FAQ

Airtable + ScreenshotDEV — Common questions

What's the difference between fetch() and remoteFetchAsync()?
fetch() works in Automation scripts (triggered by record changes, schedules, etc). remoteFetchAsync() works in the Scripting Extension (manual run from the sidebar) and routes through Airtable's servers to avoid CORS.
Can I use the Airtable REST API instead?
Yes. Use PATCH https://api.airtable.com/v0/{baseId}/{tableName}/{recordId} with an Authorization: Bearer header and a JSON body to update attachment fields from any external script.
How do attachment fields work?
Attachment fields accept an array of objects with a url property. Airtable downloads the image from the URL and hosts its own copy. The URLs you see in the API response are Airtable-hosted and expire after ~2 hours.
Can I trigger screenshots automatically?
Yes. Use Airtable Automations with a script action. The fetch() function is available in automation scripts, so you can trigger captures when records are created or updated.

Airtable + screenshots.
Ready in minutes.

100 free API calls per month. No credit card. No complex setup.

Airtable Integration — ScreenshotDEV