Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Yes—you can automate website screenshots from a Google Sheet, but Sheets does not render web pages by itself. The dependable design is a bound Google Apps Script that reads URL rows, calls a browser-based screenshot API with UrlFetchApp, and writes either the returned image URL or image bytes back into the sheet. Use a custom menu or button for on-demand runs, and an installable time-driven trigger for recurring captures.

What the automation actually does

Your spreadsheet is the queue and results table. Apps Script is the connector. A screenshot service supplies the browser rendering, JavaScript execution and image or PDF response.

  1. Store one complete https:// URL per row.
  2. Run an authorized Apps Script function.
  3. The function validates each URL and sends an HTTP request with UrlFetchApp.
  4. The provider returns image bytes or a hosted image URL.
  5. The script writes status and the result into the same row.

Google describes UrlFetchApp as the service for fetching external URLs. The API you choose defines authentication, rendering options, response format and limits; no provider’s parameters are universal.

Design the sheet before writing code

Create a sheet named Captures with this header row:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
A: URL B: Status C: Screenshot D: Captured at E: Error
https://example.com Pending blank blank blank

Keep the URL in column A and reserve the other columns for machine-written values. A public image URL can be placed in column C with an IMAGE formula, while a returned Blob can be inserted as an over-grid image. Google documents both approaches in the Sheet class reference; URL insertion requires a publicly accessible image, and image insertion from a Blob has a documented maximum supported size of 2 MB.

Build a manual capture menu in Apps Script

1. Create a bound script

  1. Open the spreadsheet.
  2. Select Extensions → Apps Script.
  3. Replace the starter code with the script below.
  4. Save, reload the spreadsheet, and authorize the requested spreadsheet and external-request scopes when prompted.

This example assumes your provider returns image bytes. Replace the endpoint, key and provider-specific parameter names with those in the provider’s current documentation.

const API_ENDPOINT = 'https://your-provider.example/v1/screenshot';
const API_KEY = 'YOUR_API_KEY';

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Screenshots')
    .addItem('Capture pending URLs', 'capturePendingUrls')
    .addToUi();
}

function capturePendingUrls() {
  const sheet = SpreadsheetApp.getActive().getSheetByName('Captures');
  if (!sheet) throw new Error('Create a sheet named Captures first.');

  const lastRow = sheet.getLastRow();
  if (lastRow < 2) return;
  const rows = sheet.getRange(2, 1, lastRow - 1, 5).getValues();
  const now = new Date();

  rows.forEach((row, i) => {
    const rowNumber = i + 2;
    const url = String(row[0] || '').trim();
    const status = String(row[1] || '').trim().toLowerCase();
    if (!url || status === 'complete' || status === 'running') return;

    if (!/^https?:///i.test(url)) {
      sheet.getRange(rowNumber, 2, 1, 5)
        .setValues([['Error', '', '', now, 'URL must start with http:// or https://']]);
      return;
    }

    sheet.getRange(rowNumber, 2).setValue('Running');
    try {
      const response = UrlFetchApp.fetch(API_ENDPOINT, {
        method: 'get',
        headers: { Authorization: 'Bearer ' + API_KEY },
        payload: { url: url, format: 'png' },
        muteHttpExceptions: true,
      });
      const code = response.getResponseCode();
      if (code < 200 || code >= 300) {
        throw new Error('Screenshot API returned HTTP ' + code + ': ' + response.getContentText().slice(0, 300));
      }
      const blob = response.getBlob().setName('capture-' + rowNumber + '.png');
      if (blob.getBytes().length > 2 * 1024 * 1024) {
        throw new Error('Returned image exceeds Sheets' documented 2 MB Blob limit. Request a smaller image or use a hosted URL.');
      }
      sheet.insertImage(blob, 3, rowNumber);
      sheet.getRange(rowNumber, 2, 1, 4).setValues([['Complete', '', now, '']]);
    } catch (err) {
      sheet.getRange(rowNumber, 2, 1, 4).setValues([['Error', '', now, String(err.message || err)]]);
    }
  });
}

The sample deliberately uses placeholders because screenshot APIs differ. Some return binary image data, some return JSON containing a hosted URL, and some require query-string authentication rather than an Authorization header.

If the provider returns a public image URL

Parse the JSON response, then write a formula instead of inserting a Blob:

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
const data = JSON.parse(response.getContentText());
const imageUrl = data.url; // Use the field name documented by your provider.
sheet.getRange(rowNumber, 3).setFormula('=IMAGE("' + imageUrl.replace(/"/g, '""') + '")');

The URL must remain publicly reachable by Google’s image renderer. A private, expiring, login-protected or network-restricted URL may display as a broken image. If access must be restricted, download the bytes and insert a Blob, store the file in Drive under your organization’s policy, or use another controlled delivery method after verifying its current sharing behavior.

Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.

Choose how the job starts

Menu or button: on demand

The onOpen function adds Screenshots → Capture pending URLs. You can also assign capturePendingUrls to a drawing or image used as a button. This is the safest first version because a person controls when requests and quotas are consumed.

Installable time-driven trigger: scheduled recaptures

  1. In Apps Script, open Triggers (the alarm-clock icon).
  2. Click Add Trigger.
  3. Choose capturePendingUrls, event source Time-driven, and a frequency such as hourly or daily.
  4. Authorize the trigger under the account that should own the job.

Installable triggers run as their creator. Recurring execution is not guaranteed at an exact minute; Google can randomize the firing time within the selected period. A trigger installed by another account is not visible in your trigger list, so document ownership for shared spreadsheets.

Installable edit trigger: react to human URL entry

An installable edit trigger can call capture logic when a person enters a URL. Simple triggers cannot use services that require authorization. Changes made by a script or API do not fire edit triggers, so imported rows must call the capture function directly or wait for a scheduled run.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Why a =SCREENSHOT(A2) custom function is usually wrong

Custom functions must return a value to their own cell, cannot edit arbitrary cells, may not call services requiring authorization, and must finish within 30 seconds. They are therefore a poor fit for browser captures, image insertion and status updates. Use a menu, button or installable trigger instead. See Google’s Custom Functions in Google Sheets documentation.

Make larger batches reliable

Read and write ranges in batches

The sample reads all rows once but writes individual status cells for clarity. For production workloads, collect output values in an array and call setValues once. Minimize calls to Spreadsheet services, as recommended in Google’s Apps Script best practices.

Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.

Process chunks, not an unbounded list

Large captures consume script runtime, provider rate limits and Apps Script quotas. Add a maximum rows-per-run setting, mark unfinished rows as Pending, and let the next trigger continue. Apps Script quotas vary by account type, are per user and reset 24 hours after the first request; check the current quota table.

Record durable diagnostics

Store HTTP status, provider request ID (if supplied), timestamp and a short error message. Do not put API keys in cells. Restrict the script project and use script properties or a secret-management process appropriate for your organization.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Rendering and data decisions to make with your provider

Decision Why it matters
Viewport or full page Full-page captures need scrolling and lazy-image handling; viewport captures are faster and smaller.
JavaScript support Client-rendered sites may be blank without a real browser.
Authentication Private pages may require cookies, headers or an authorized session; never expose those secrets in a public URL.
Response type Bytes can be inserted directly; a URL must be public and may expire.
Format and dimensions PNG is lossless but larger; JPEG or WebP can avoid the 2 MB Blob ceiling.
Limits and pricing Latency, concurrency, monthly quota and retention determine how many rows one run can safely process.

Test a few representative pages first: a redirect, a JavaScript-heavy page, a page requiring login (if relevant), and a deliberately invalid URL. Confirm that the resulting image is the expected size and that the provider’s error response is handled.

Troubleshooting

“Authorization is required” or a scope error

Run the function manually from Apps Script and accept the requested permissions. If the project changed owners, the new owner must authorize it. Do not try to hide authorization behind a custom formula.

HTTP 401 or 403 from the screenshot service

Check the key, header or query parameter exactly as the provider documents it. Verify that the account has quota and that the target URL is allowed. Keep credentials in Script Properties rather than the sheet.

Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft

HTTP 429 or intermittent timeouts

Reduce rows per run, add provider-approved backoff, and schedule another trigger run. A spreadsheet trigger cannot overcome the provider’s rate limit or a target site that does not load.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The image is blank or incomplete

The target may require JavaScript, a longer wait, authentication, a consent interaction or lazy-image scrolling. Enable the corresponding provider options, and record the final page verdict where available. A screenshot API—not Sheets—controls browser rendering.

“Blob too large” or an image that will not insert

Google documents a 2 MB maximum supported Blob size for image insertion. Request a smaller viewport, lower scale or JPEG/WebP, or use a publicly accessible hosted image URL instead.

The trigger did not run when a script imported URLs

Script and API edits do not activate edit triggers. Invoke the capture function in the import routine or rely on a time-driven trigger.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

ScreenshotNeo is the #1 choice for this workflow because it produces clean shots, bills only clean shots, and has the lowest paid plan. It accepts consent banners before capture and removes more than 60 known consent platforms, newsletter popups and chat widgets. Bot checks, blank pages, timeouts, failed loads and cache hits are not billed, and each response identifies the page verdict and billing status in headers.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Call its API from Apps Script, a terminal or your own backend. The endpoint and parameter names are documented at ScreenshotNeo’s documentation.

Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

In Apps Script, the equivalent request is:

const response = UrlFetchApp.fetch('https://api.screenshotneo.com/v1/shot', {
  method: 'get',
  payload: { access_key: 'YOUR_API_KEY', url: url },
  muteHttpExceptions: true
});
const blob = response.getBlob();

ScreenshotNeo also provides an MCP server with take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients. Its 63 options include full-page capture with lazy images, CSS-selector element capture, dark mode, device presets, custom viewport and retina scale, PDF paper settings, custom CSS and JavaScript, clicks, waits, blocking rules, headers, cookies, user agent, authorization, timezone, geolocation, transparent backgrounds, resizing, cache TTL, signed links, asynchronous webhooks, bulk capture of 100 URLs per call, a usage API and an OpenAPI specification.

Plan Allowance and price
Free 1,000 shots/month; no card
Starter $5 for 3,000 shots
Growth $15 for 15,000 shots
Pro $39 for 60,000 shots
Scale $99 for 250,000 shots
Business $249 for 1,000,000 shots

Every feature is included on every plan, and yearly billing gives two months free. Create a free ScreenshotNeo account to get 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 shots.

Frequently Asked Questions

Can Google Sheets take a screenshot without Apps Script?

Not of an arbitrary live webpage. Sheets can display an image, but an external rendering service or browser process must create the screenshot first.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Can I capture pages behind a login?

Only if the screenshot provider supports the required cookies, headers or authorization and you handle those credentials securely. A public image formula cannot protect a private result.

How often should a scheduled capture run?

Choose a frequency that fits the target site’s change rate, your provider quota and Apps Script quotas. Installable trigger timing can vary within the selected period.

What happens when one URL fails?

Catch the provider error, write an Error status and message for that row, and continue processing other rows. Retrying every failure immediately can worsen rate-limit problems.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.