Clay's HTTP API enrichment column can call any JSON API once per row, and that is all you need for website screenshots. This page gives the exact column settings for the RenderScreenshot API. You get a screenshot link, the page title and the meta description per row, without spending credits twice on re-runs or on many contacts at one company. It is part of our integrations hub.
Last tested: 2026-10-18. We sent the same GET request that the column sends, with curl 8 and jq 1.7, against a local stub of our API that returns the documented JSON body and error envelope. We then read the field paths below from each response: two rows with the same site (the second came back as a cache hit for 0 credits), a bare domain (
invalid_url) and a page that timed out. The field names in Clay come from Clay's HTTP API documentation, checked in October 2026. We did not run the column in a Clay workspace, so this page has no Clay screenshots.
What you can build
- Personalized outreach images. A screenshot of the prospect's homepage goes into an email or a LinkedIn message tool through a merge field that holds the image link.
- Research input for AI columns. The page title and meta description are what the company says about itself. Feed them to a Claygent or AI column as context, with no extra scrape.
- List hygiene. Rows whose website fails with
navigation_failedorssl_errorare often parked or dead domains. Filter them out before you spend credits on email finders.
If the list lives in a base and not in Clay, the Airtable automation script writes the same capture into an attachment field.
Prerequisites
- A Clay table with a column that holds a full URL, such as
https://acme.com. If you only have a domain, add a formula column that putshttps://in front of it. - A RenderScreenshot API key that starts with
rs_live_. Create a free account to get one.
Step by step
- In the table, click Add column, then Add enrichment, and choose HTTP API.
- Set the method to GET and the API endpoint URL to
https://api.renderscreenshot.com/v1/screenshot. - Under Query string parameters, add the rows from the mapping table below. For
url, insert the column that holds the website. - Under Header fields, add
AuthorizationwithBearer rs_live_...andAcceptwithapplication/json. - Under Field paths to return, add
image.url,metadata.title,metadata.description,cache.hitandusage.credits. - Set Rate limiting as described below.
- Under the advanced options, add a Conditional run formula so that the column runs only when the website column is not empty.
- Run the column on the first 10 rows and check the results before you run the whole table.
Parameter mapping
| Clay field | Key | Value | Why |
|---|---|---|---|
| Query string | url |
(website column) | Must start with http:// or https:// |
| Query string | preset |
og_card |
1200 × 630, the size most email and social tools show well. See presets. |
| Query string | format |
jpeg |
Smaller files than the preset's PNG |
| Query string | quality |
80 |
JPEG quality, 1 to 100 |
| Query string | block_ads, block_cookies |
true |
Removes ads and consent banners before capture |
| Query string | cache_available |
true |
Re-runs and repeated domains cost 0 credits |
| Query string | cache_ttl |
2592000 |
Keeps the image link alive for 30 days |
| Header | Authorization |
Bearer rs_live_... |
Your API key |
| Header | Accept |
application/json |
Returns JSON with a link, not image bytes |
Every name here is a flat parameter of the GET endpoint. Booleans must be the word true; 1 or yes is ignored without an error. To get a full-page capture, add full_page = true.
What one row returns
With the field paths above, a row for https://example.com holds values like these:
| Field path | Example value |
|---|---|
image.url |
https://cdn.renderscreenshot.com/...jpg |
metadata.title |
Example Domain |
metadata.description |
null when the page has none |
cache.hit |
false for the first render, true for a reuse |
usage.credits |
1, or 0 for a reuse |
The image.url link needs no key, so you can pass it to any later tool in your Clay workflow.
Batch-safe settings
Clay can send requests for many rows at once. RenderScreenshot counts requests per minute for the whole account, with all of its keys together. Two settings keep a large run clean.
Rate limiting. In the column's Rate limiting fields, set Request limit to your plan's requests per minute and Duration (ms) to 60000. On the free plan that is 10 requests per 60000 ms. Answers in Clay's community forum report that the HTTP API column will not accept a pace slower than a fixed minimum. If Clay refuses your plan's pace, run the column on blocks of rows no larger than your per-minute limit, one block per minute, or move to a plan with a higher limit. See rate limits for each plan.
Cache reuse. cache_available=true makes the API return an earlier identical render for 0 credits. A table of 200 contacts at 40 companies then pays for 40 renders, not 200. A forced re-run of the whole column after a failure pays only for rows that never rendered. The caching reference explains the cache key: the same URL with the same options.
Errors and retries
When the API cannot return an image, it answers with an error status, and the response body names the reason in error.code, and error.retryable says if a second try can help.
| Code | What it usually means for a prospect list | Next step |
|---|---|---|
| invalid_url | The cell holds acme.com without a scheme |
Fix the formula column |
| navigation_failed | DNS or connection failure: often a dead domain | Treat as a data signal; re-run once |
| ssl_error | Invalid TLS certificate | Treat as a data signal |
| blocked | The site refuses automated browsers | Skip, or see bot protection |
| timeout | The page did not finish loading | Re-run the failed rows once |
| toomanyrequests | The account's minute was used | Lower the rate limit fields, then re-run the failed rows |
| insufficient_credits | Monthly credits are used | Stop the column until the reset |
A failed render uses no credit, so re-running failed rows costs only what then succeeds. The error codes reference lists the rest.
Limits and costs
- RenderScreenshot credits. One credit per new render; reuses and failures use none. The free plan gives 150 credits each month. See pricing.
- Clay credits. Clay's own pricing decides what an HTTP API column costs on your Clay plan. Check it before you run a large table.
- Link lifetime. The image link works until the cache entry expires: 30 days with the
cache_ttlabove. If a campaign sends emails later than that, re-run the column first; withcache_availablethe re-run renders again only where the old render has expired. Paid plans can also copy each render to your own bucket.
Troubleshooting
- The column returns a long block of odd characters. The
Accept: application/jsonheader is missing, so the API sent image bytes. - Every row fails with
missing_credentials. Check theAuthorizationheader: the wordBearer, one space, then the key. - Images show a cookie wall. Most banners go with
block_cookies. For stubborn ones, see blocking ads and cookie banners. - The wrong page appears for URLs with their own query string. Insert the column as the value of
urlin the query string fields, not inside the endpoint URL, so the whole target is sent as one encoded value.