How to Use a Screenshot API in Google Sheets with the IMAGE Function
Google Sheets has a built-in IMAGE function that displays any publicly accessible image URL inside a cell. Combined with a screenshot API, this means you can embed live webpage screenshots directly into a spreadsheet — no scripts, no add-ons, no code.
This works today in any Google Sheets file, for free.
The Basic Formula
=IMAGE("https://hermesforge.dev/api/screenshot?url=https://example.com")
Paste that into any cell. Google Sheets will request the screenshot URL and display the result inside the cell.
To display a screenshot of a specific site:
=IMAGE("https://hermesforge.dev/api/screenshot?url=https://YOUR-SITE.com&width=1440&format=png")
The IMAGE function accepts any public URL that returns an image. Hermesforge's screenshot endpoint returns a PNG directly — no redirect, no wrapper, just the image bytes.
Practical Use Cases
Competitor Monitoring Sheet
Track how competitor homepages look over time. Set up a sheet with one row per competitor:
| Company | URL | Screenshot |
|---|---|---|
| Competitor A | https://competitor-a.com | =IMAGE("https://hermesforge.dev/api/screenshot?url=A2&width=1280") |
| Competitor B | https://competitor-b.com | =IMAGE("https://hermesforge.dev/api/screenshot?url=B2&width=1280") |
To use a cell reference (column B) as the URL parameter, concatenate it:
=IMAGE("https://hermesforge.dev/api/screenshot?url="&B2&"&width=1280&format=png")
When you open the sheet, Sheets fetches fresh screenshots. Visual changes in pricing pages, hero copy, or product offerings become immediately visible.
Pricing Page Tracker
For SaaS competitive analysis, track pricing pages across multiple products:
=IMAGE("https://hermesforge.dev/api/screenshot?url="&B2&"&width=1440&full_page=true&format=png")
full_page=true captures the entire page, not just the viewport — important for pricing pages where key information is often below the fold.
Link Preview Gallery
If you have a spreadsheet of URLs (articles, product pages, landing pages) and want to add visual previews:
Column A: URL list
Column B: =IMAGE("https://hermesforge.dev/api/screenshot?url="&A1&"&width=800&format=png", 1)
The second argument to IMAGE is the sizing mode:
- 1 = stretch to fit cell
- 2 = stretch to fit cell, maintain aspect ratio
- 3 = original size (often too large for a cell)
- 4 = custom size (add width/height arguments)
Mode 2 works best for screenshot previews.
OG Image Preview
If you're publishing content and want to preview how each URL will appear when shared on social media (Twitter/X card, LinkedIn preview), capture the OG image:
=IMAGE("https://hermesforge.dev/api/screenshot?url="&A1&"&width=1200&height=630")
1200×630 is the standard Open Graph image dimension. This lets you audit OG images across many URLs at once.
Adding an API Key for Higher Limits
The free tier (50 screenshots/day, no signup) works for personal use. For team spreadsheets that refresh frequently, add an API key:
=IMAGE("https://hermesforge.dev/api/screenshot?url="&B2&"&key=YOUR_API_KEY&width=1440")
Get a free API key at hermesforge.dev/api — verify your email, use the key in all your formulas.
For a spreadsheet shared with a team, put the API key in a named range or a dedicated cell:
- Put your API key in cell
E1(or a dedicated sheet) - Reference it in formulas:
=IMAGE("https://hermesforge.dev/api/screenshot?url="&B2&"&key="&$E$1&"&width=1440") - Update the key in one place when it changes
Controlling Cell Size
Screenshots are wide by default. To make them readable in Sheets:
- Set the column width to 300–400px (right-click column header → "Resize column")
- Set the row height to match the screenshot aspect ratio (300px wide × 200px tall = ~1:0.67)
- Use
IMAGE(..., 2)for aspect-ratio-preserving fit
For a standard 1440px-wide screenshot displayed in a 400px column: - Expected display height: ~280px for viewport-only, ~800px+ for full-page
Full-page screenshots are better displayed in larger cells or using IMAGE(..., 1) to stretch to fit.
Refresh Behavior
Google Sheets caches IMAGE function results. By default, it may not re-fetch the screenshot when you open the sheet.
To force a refresh:
- Add a &t= timestamp parameter: =IMAGE("...&t="&TODAY())
- TODAY() changes daily, breaking the cache and forcing a fresh screenshot each day
- For hourly refresh: =IMAGE("...&t="&TEXT(NOW(),"YYYY-MM-DD-HH")) — changes each hour
=IMAGE("https://hermesforge.dev/api/screenshot?url="&B2&"&width=1440&t="&TODAY())
This is the most practical formula for competitive monitoring — fresh screenshots every day, no manual action required.
Complete Template
Here's a ready-to-use competitive monitoring sheet structure:
| Row | A: Company | B: URL | C: Screenshot | D: Last Checked |
|---|---|---|---|---|
| 1 | Headers | |||
| 2 | Competitor A | https://... | =IMAGE("https://hermesforge.dev/api/screenshot?url="&B2&"&width=1280&t="&TODAY(), 2) |
=TODAY() |
| 3 | Competitor B | https://... | (same formula) | =TODAY() |
Resize column C to ~350px, row 2 onwards to ~250px. The sheet becomes a daily visual snapshot of your competitive landscape, updating automatically when opened.
Hermesforge Screenshot API: no signup required for 50 free screenshots/day. Get your API key for higher limits.