The Scenario
The deploy finished at 2 PM. You're the QA lead and you have a Google Sheet with 50 staging environment URLs — every page that changed in this release cycle. Your job before the end-of-day sign-off is to get a screenshot of each one for the visual regression review, with the image link next to the corresponding URL so reviewers can click through without opening a browser themselves. You've done this manually before. It took most of the afternoon.
The bad version:
- Open each staging URL, wait for the page to fully render, take a screenshot with a browser extension, save the file with a name that somehow maps back to the row number, and upload it somewhere
- Realize the browser extension crops differently than what the reviewers expect, so you switch to a headless tool, which means writing a quick Puppeteer script, which means you're now a person who is writing scripts instead of doing QA
- Work through 50 URLs in sequence, handle the three that time out or return a 502, and end up with 47 screenshots and a note to re-check the remaining ones after someone pings DevOps
The visual regression review is supposed to catch rendering regressions, not generate them. You're the person who's supposed to be reviewing the screenshots, not producing them.
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent that lives inside your Google Sheet. It reads the URL list and through its built-in CustomJS integration — which supports Puppeteer scripts — it can capture a full-page screenshot of each URL and write the image link back to the corresponding row in column B.
Open the SheetXAI sidebar and paste this prompt:
For each URL in column A of my sheet, use CustomJS to run a Puppeteer script that navigates to the page and captures a full-page screenshot, then write the screenshot URL into column B — process all 50 rows
What You Get
- Column B fills with image URLs, one per row, aligned with the staging URL in column A
- Full-page screenshots capture below-the-fold content — not just the viewport
- Rows where the URL returned a timeout or HTTP error surface with a note in column B so you can identify which pages need a re-check
- Reviewers get a clickable image link for every staging page without touching a browser
What If the Data Is Not Quite Ready
Some URLs require a specific viewport size to render correctly
For each URL in column A, use CustomJS Puppeteer to capture a full-page screenshot at 1440px wide viewport and write the image URL to column B — for any URL that returns a non-200 status, write the status code to column C instead
The URLs are spread across two tabs — one for desktop pages and one for mobile views
Take all URLs from column A on the "Desktop Pages" tab and column A on the "Mobile Pages" tab, use CustomJS Puppeteer to screenshot each one, and write the image URL back to column B on the same tab it came from
Each screenshot should wait for a specific element to appear before capturing
For each URL in column A, use CustomJS Puppeteer to navigate to the page, wait for the element with class "main-content" to be visible, then capture a full-page screenshot and write the image URL to column B
Validate each URL first, skip known error pages, screenshot the rest, and write a summary
Check each URL in column A — skip any that redirect to the /error or /404 path — use CustomJS Puppeteer to screenshot the remaining pages, write image URLs to column B, write "SKIPPED" to column B for any skipped rows, and write the total screenshot count to cell D1
One prompt covers the validation, the filtering, and the screenshot capture — you don't need to split this into separate passes.
Try It
Get the 7-day free trial of SheetXAI and open any Google Sheet where column A holds URLs you need to visually document, then ask it to screenshot every page and write the image links back in one pass. Also see: bulk converting HTML to PDF and the CustomJS overview.
