You can bulk screenshot URLs from Google Sheets by using Apps Script to read a column of links, send them to a website screenshot API, and write each result and status back to the matching row. Apps Script handles the spreadsheet and HTTP requests; the separate screenshot service renders each page in a browser. It is not a browser renderer by itself.
The workflow works from India, but the available evidence does not establish a particular provider’s India availability, pricing, data location, payment support, or latency. Check those details with the provider before relying on it.
How the workflow fits together
Use three components: Google Sheets as the queue and results table, Apps Script to validate rows and call an API, and a screenshot service to load web pages and return image files, URLs, or job references. The exact result depends on the service’s documented response format.
- Input: one website URL per row.
- Processing: Apps Script makes HTTP or HTTPS requests with
UrlFetchApp. - Output: a screenshot reference, status, and error detail written beside each input URL.
Google documents UrlFetchApp for communicating with other applications and fetching web resources: UrlFetchApp reference.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11#1 Best Overall
- PORTABLE SCANNER FOR USE ON-THE-GO — The fastest and lightest mobile single-sheet-fed compact document scanner in its class¹
- QUICK DOCUMENT SCANNING ― This Epson ultra-fast scanner scans a single page as quickly as 5.5 seconds²; Windows and Mac compatible
- VERSATILE PAPER HANDLING ― Portable scanner scans documents up to 8.5 x 72 in; Also easily digitizes receipts and ID cards to make accounting, bookkeeping, and organizing simpler
- INTUITIVE, HIGH-SPEED SOFTWARE — Epson ScanSmart Software³ is a smart tool allowing you to easily scan, review, and save; Stay organized easily with the help of this Epson scanner
- EASY SETUP — USB-powered connect to your computer for quick and simple scanning; No batteries or external power supply required to operate portable document scanner; Standard Connectivity: USB 2.0
Set up the sheet and script
Prepare the sheet
Create a tab named Shots with these headings in row 1:
| Column | Heading | Purpose |
|---|---|---|
| A | URL | One page to capture per row |
| B | Screenshot result | Image URL, file reference, or job ID returned by your provider |
| C | Status | For example, complete, invalid URL, or HTTP error |
| D | Details | Provider error or other diagnostic information |
| E | Attempted at | Timestamp for retries and auditability |
Use a provider API key stored in Apps Script Script Properties, not in a visible sheet cell. In the Apps Script editor, open Project Settings, enable Show “appsscript.json” manifest file in editor, then add the external-request scope to the manifest’s existing scopes if you manage scopes explicitly. Google documents script.external_request for URL Fetch requests.
Use this adapter-based Apps Script example
This runnable pattern batches sheet reads and writes and submits requests concurrently with fetchAll(). Because screenshot services differ in URL, authentication, payload, and response contract, the function named makeRequest_ is a clearly marked adapter: replace its endpoint and body with the chosen service’s documented single-shot request. The example expects a JSON response containing a screenshot URL in screenshot_url; change parseResult_ to match the provider. It does not assume that a private API response can be embedded directly in Sheets.
const SHEET_NAME = 'Shots';
const START_ROW = 2;
const CHUNK_SIZE = 20; // Tune to the provider's limits and observed response behavior.
function captureNextChunk() {
const sheet = SpreadsheetApp.getActive().getSheetByName(SHEET_NAME);
if (!sheet) throw new Error(`Sheet not found: ${SHEET_NAME}`);
const lastRow = sheet.getLastRow();
if (lastRow < START_ROW) return;
const props = PropertiesService.getScriptProperties();
const apiKey = props.getProperty('SCREENSHOT_API_KEY');
if (!apiKey) throw new Error('Set SCREENSHOT_API_KEY in Script Properties first.');
const nextRow = Math.max(START_ROW, Number(props.getProperty('NEXT_ROW') || START_ROW));
if (nextRow > lastRow) return;
const endRow = Math.min(lastRow, nextRow + CHUNK_SIZE - 1);
const count = endRow - nextRow + 1;
const inputs = sheet.getRange(nextRow, 1, count, 1).getDisplayValues();
const existing = sheet.getRange(nextRow, 2, count, 4).getValues();
const now = new Date();
const requests = [];
const requestRows = [];
const output = existing.map(row => row.slice());
inputs.forEach(([raw], i) => {
const url = String(raw || '').trim();
if (!url) {
output[i] = ['', 'Skipped', 'URL cell is blank', now];
return;
}
if (!/^https?:///i.test(url)) {
output[i] = ['', 'Invalid URL', 'Enter a URL beginning with http:// or https://', now];
return;
}
requests.push(makeRequest_(url, apiKey));
requestRows.push(i);
});
if (requests.length) {
const responses = UrlFetchApp.fetchAll(requests);
responses.forEach((response, j) => {
const i = requestRows[j];
const code = response.getResponseCode();
const text = response.getContentText();
if (code < 200 || code >= 300) {
output[i] = ['', 'HTTP error', `HTTP ${code}: ${text.slice(0, 500)}`, now];
return;
}
try {
const result = parseResult_(text);
output[i] = [result, 'Complete', '', now];
} catch (err) {
output[i] = ['', 'Response error', String(err), now];
}
});
}
// Write the four output columns in one range operation.
sheet.getRange(nextRow, 2, count, 4).setValues(output);
props.setProperty('NEXT_ROW', String(endRow + 1));
}
function makeRequest_(url, apiKey) {
// Replace this adapter with the selected provider's documented request format.
// Do not assume every service accepts this URL, query parameter, or auth header.
return {
url: 'https://YOUR_SCREENSHOT_PROVIDER_ENDPOINT',
method: 'post',
contentType: 'application/json',
headers: { Authorization: `Bearer ${apiKey}` },
payload: JSON.stringify({ url }),
muteHttpExceptions: true
};
}
function parseResult_(responseText) {
const data = JSON.parse(responseText);
if (!data.screenshot_url) {
throw new Error('Expected screenshot_url in provider response; adapt parseResult_ to its response contract.');
}
return data.screenshot_url;
}
Apps Script Range methods work with rectangular arrays. This example reads input and existing output in blocks, then writes a two-dimensional output array back at once, rather than making a spreadsheet call for each cell. See Google’s Range reference.
To test safely, add one or two URLs, set the endpoint adapter to the provider’s actual documented request, run captureNextChunk, and confirm the response parsing and row mapping before adding the rest of the list.
Rank #2
- FAST SPEEDS - Scans color and black and white documents a blazing speed up to 16ppm (1). Color scanning won’t slow you down as the color scan speed is the same as the black and white scan speed.
- ULTRA COMPACT – At less than 1 foot in length and only about 1. 5lbs in weight you can fit this device virtually anywhere (a bag, a purse, even a pocket).
- READY WHENEVER YOU ARE – The DS-640 mobile scanner is powered via an included micro USB 3. 0 cable allowing you to use it even where there is no outlet available. Plug it into you PC or laptop and you are ready to scan.
- WORKS YOUR WAY – Use the Brother free iPrint&Scan desktop app for scanning to multiple “Scan-to” destinations like PC, Network, cloud services, Email and OCR. (2) Supports Windows, Mac and Linux and TWAIN/WIA for PC/ICA for Mac/SANE drivers. (3)
- OPTIMIZE IMAGES AND TEXT – Automatic color detection/adjustment, image rotation (PC only), bleed through prevention/background removal, text enhancement, color drop to enhance scans. Software suite includes document management and OCR software. (4)
Choose synchronous requests or a batch job
One screenshot request per URL
fetchAll() sends multiple HTTP requests in one Apps Script call. It can reduce the script’s request orchestration overhead, but the service still processes individual captures and may impose rate limits or response-time limits. The chunk size in the example is a starting configuration, not a tested safe maximum; tune it to the provider’s documented limits and your response behavior.
Provider batch endpoint
A batch endpoint may accept many URLs and return a batch or job ID, after which the script must retrieve results through the provider’s documented workflow. One service’s documentation describes POST /api/v1/screenshot/batch accepting multiple URLs and returning a batch ID; that is a feature of that service, not a universal API contract. Check maximum URLs per batch, whether results are synchronous or asynchronous, result retention, and how individual failures are reported before adapting the script.
Keep results aligned
The sample keeps an index for every valid request and applies each response to the original row. If a batch response returns results in a different order or identifies them by URL or ID, map by that identifier rather than assuming positional order. Preserve the source URL and write each result’s status separately so one bad page does not obscure neighboring successes.
Handle images, links, and PDFs correctly
Some APIs return image bytes directly; others return a URL or an asynchronous job reference. Store a reference in the sheet when that is what the API returns. To show an image inside a cell, use a documented Sheets image method only with a URL that is publicly accessible; a private response or authenticated link may not load for the spreadsheet. Alternatively, save returned bytes to a controlled storage location and record its file reference, subject to the service and storage access rules.
If your objective is a PDF rather than image files, confirm that the selected service supports PDF output and learn its response and storage behavior. Do not treat an image URL, job ID, and binary image response as interchangeable values.
Rank #3
- FAST DOCUMENT SCANNING — Document scanner with feeder allows you to speed through stacks with a 50-sheet Auto Document Feeder (ADF); Efficient office scanner to help you scan more productively
- INTUITIVE, HIGH-SPEED SOFTWARE — Quickly scan with this desktop document scanner; Epson ScanSmart Software lets you easily preview scans, email files, upload to the cloud, and more; Plus, automatic file naming saves even more time
- SEAMLESS INTEGRATION — Easily incorporate your data into most document management software with the included TWAIN driver; Office document scanner integrates seamlessly with business workflows
- EASY SHARING — Duplex scanner allows you to scan straight to email or popular cloud storage2 services like Dropbox, Evernote, Google Drive, and OneDrive for simple storage and sharing
- SIMPLE FILE MANAGEMENT — Scanner allows the creation of searchable PDFs with Optical Character Recognition (OCR) and convert scans to editable Word or Excel files effortlessly; Designed for home and office document scanning
Make long runs resumable
Apps Script executions have a six-minute maximum runtime in Google’s quota documentation. The same documentation lists daily URL Fetch limits of 20,000 calls for consumer accounts and 100,000 for Workspace accounts; Google notes quotas can change, and they are documentation values rather than a guarantee for an individual account. See Apps Script quotas.
- Process a bounded chunk and save a progress marker, as
NEXT_ROWdoes. - For production use, consider storing per-row completion state instead of trusting only a single cursor; this makes recovery easier if a run stops between a request and the sheet write.
- Skip completed rows or add an explicit retry command so reruns do not unintentionally spend requests capturing already-finished URLs.
- Record attempt time and error state, then retry only transient failures after checking the provider’s rate limits.
- For very large lists, use a scheduled trigger to run successive chunks, and monitor execution failures rather than trying to complete everything in one run.
Apps Script URL Fetch requests originate from Google IP ranges. If target sites or your screenshot provider restrict inbound traffic, confirm that the relevant service permits requests from those ranges; see the UrlFetchApp reference.
India-specific checks before choosing a provider
The workflow itself does not require a special India-only implementation, but provider suitability cannot be inferred from the fact that its API exists. Before committing URLs or relying on the service, verify its current availability and payment support for India, pricing and currency, data handling and processing location, contractual terms, rate limits, and any latency requirements. For sensitive URLs, also check whether submitted page addresses, cookies, headers, or captured content are retained and who can access them.
When comparing screenshot APIs, check batch size, sync versus async handling, output format and retention, viewport and page-wait controls, rate limits, error semantics, privacy and geography, price/free tier, and India availability. Do not assume a single provider’s batch endpoint proves comparative speed or reliability.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server. Its one-request API returns a screenshot or PDF; the example below saves a WebP result for one URL. Adapt the URL as needed. See the ScreenshotNeo API documentation for request options.
Rank #4
- Scanner type: Document
- Connectivity technology: USB
- With Auto Scan Mode, the scanner automatically detects what you're scanning
- Digitize documents and images
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
For a spreadsheet workflow, use the same endpoint and credentials in an Apps Script adapter, and confirm the response format before mapping output into your sheet. ScreenshotNeo removes cookie banners, newsletter popups, and chat widgets before capture; bot checks, blank pages, and failed loads are not billed. Its MCP server lets AI agents take screenshots, and the Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up for ScreenshotNeo’s free plan.
Troubleshooting
Authorization or HTTP 401/403
Check that the API key is present in Script Properties, is sent in the exact header or parameter the service documents, and has not been revoked. Do not paste secrets into public sheet cells or logs.
HTTP 400 or invalid request
Confirm the endpoint, HTTP method, required URL encoding, field names, and whether the provider expects JSON or query parameters. Validate that each input is a complete http:// or https:// URL.
Script says the service is unavailable or external request is not authorized
Check the Apps Script manifest’s scopes if explicitly configured, including https://www.googleapis.com/auth/script.external_request, then authorize the script again. A consumer account or Workspace administrator policy may also affect use.
Script times out or stops partway through
Reduce the chunk size, use asynchronous batch jobs if the provider supports them, and save progress after each completed chunk. Keep an eye on execution logs and resume from the stored marker rather than restarting the entire list.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
HTTP 429 or provider rate limit
Slow request pacing, lower concurrency, or use the provider’s batch workflow if documented. Retry after the indicated interval when one is supplied; avoid immediate repeated retries that can worsen throttling.
Best Value
- OUR MOST ADVANCED SCANSNAP. Large touchscreen, fast 45ppm double-sided scanning, 100-sheet document feeder, Wi-Fi and USB connectivity, automatic optimizations, and support for cloud services. Upgraded replacement for the discontinued iX1600
- CUSTOMIZABLE. SHARABLE. Select personalized profiles from the touchscreen. Send to PC, Mac, mobile devices, and clouds. QUICK MENU lets you quickly scan-drag-drop to your favorite computer apps
- STABLE WIRELESS OR USB CONNECTION. Built-in Wi-Fi 6 for the fastest and most secure scanning. Connect to smart devices or cloud services without a computer. USB-C connection also available
- PHOTO AND DOCUMENT ORGANIZATION MADE EFFORTLESS. Easily manage, edit, and use scanned data from documents, receipts, photos, and business cards. Automatically optimize, name, and sort files
- AVOIDS PAPER JAMS AND DAMAGE. Features a brake roller system to feed paper smoothly, a multi-feed sensor that detects pages stuck together, and skew detection to prevent paper damage and data loss
Success status but no visible image
Inspect the actual response body and confirm that the provider returned the value expected by parseResult_. An authenticated or short-lived URL may not be accessible to Sheets’ image display feature; use an allowed public URL or store the returned file elsewhere under appropriate access controls.
Results appear beside the wrong URL
Ensure the script’s output range starts on the same row as the input range, and map asynchronous results by a stable URL or job identifier instead of relying on response order.
Sheets API quota response
This applies if you use the Sheets API rather than SpreadsheetApp. Google documents 300 read and 300 write requests per minute per project, and 60 of each per user per project; after a 429 response Google advises exponential backoff. See Sheets API usage limits. These are Sheets API quotas, distinct from Apps Script URL Fetch quotas.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →Frequently Asked Questions
Can Apps Script take the website screenshot without a screenshot service?
No. Apps Script can make HTTP requests and operate the sheet, but page rendering is performed by a separate screenshot service.
Can I insert a screenshot image directly into a Google Sheets cell?
Only when the image method and the returned image URL are compatible; in particular, URL-based insertion requires a publicly accessible URL. An authenticated API response may need a separate storage step.
Do the Apps Script quota figures guarantee the same capacity for every account in India?
No. They are Google documentation values for account classes, may change, and do not establish a specific user’s available quota or a provider’s India support.
Quick Recap
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.
Free tools Windows power users keep installed
One-click scans. No signup required.

