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.
Install, configure, and start capturing.
In your Airtable base, click Extensions → Add an extension → Scripting. This gives you a JavaScript environment with HTTP access.
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 }]
});
}Click Run in the Scripting Extension. It will iterate through your records, capture screenshots for each URL, and save them as attachments.
// 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.
No credit card required
Add a company URL to your CRM base and automatically capture their website as a visual reference for sales.
Build a database of screenshots — competitor pages, design inspiration, or content references — all searchable in Airtable.
Capture published blog posts and social content as screenshots. Attach them to your content calendar entries.
Track a list of URLs with daily screenshots. Use Airtable views to filter by date or status.
100 free API calls per month. No credit card. No complex setup.