Website Thumbnails
Link Previews and Directory Images
Generate visual thumbnails of any website for link previews, directories, bookmarking apps, and curated lists. Send a URL, get a crisp JPEG or PNG thumbnail back. JavaScript sites render fully. Cloudflare-protected sites work too.
Where thumbnails make a difference
Link directories
Show visual previews of listed websites. Users can see what a site looks like before clicking — increasing engagement and reducing bounce rates.
Bookmarking apps
Generate thumbnails when users save links. Visual bookmarks are easier to scan and find than text-only lists.
Link previews in chat
Generate rich link previews for messaging apps, forums, or social platforms. Show a visual snapshot alongside the page title and description.
Portfolio showcases
Automatically generate project thumbnails for portfolio sites, agency showcases, or design galleries without manually creating screenshots.
Generate thumbnails in bulk
import requests
urls = [
'https://stripe.com',
'https://linear.app',
'https://vercel.com',
'https://supabase.com',
]
def generate_thumbnail(url):
resp = requests.post('https://api.snaprender.dev/v1/screenshot',
headers={'Authorization': 'Bearer YOUR_KEY'},
json={
'url': url,
'width': 1280,
'height': 720,
'format': 'jpeg',
'quality': 80,
})
slug = url.replace('https://', '').replace('/', '_')
with open(f'thumbnails/{slug}.jpg', 'wb') as f:
f.write(resp.content)
return f'thumbnails/{slug}.jpg'
for url in urls:
path = generate_thumbnail(url)
print(f'Generated: {path}')const urls = [
'https://stripe.com',
'https://linear.app',
'https://vercel.com',
'https://supabase.com',
];
async function generateThumbnail(url) {
const res = await fetch('https://api.snaprender.dev/v1/screenshot', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
url,
width: 1280,
height: 720,
format: 'jpeg',
quality: 80,
}),
});
const buffer = Buffer.from(await res.arrayBuffer());
const slug = url.replace('https://', '').replace(/\//g, '_');
fs.writeFileSync(`thumbnails/${slug}.jpg`, buffer);
return `thumbnails/${slug}.jpg`;
}
// Generate all thumbnails in parallel
const results = await Promise.all(urls.map(generateThumbnail));
console.log('Generated:', results);Three steps to website thumbnails
Send the URL
POST the target URL to /v1/screenshot with your preferred viewport size and image format. Use JPEG for smaller file sizes or PNG for pixel-perfect quality.
Cache the thumbnail
Store generated thumbnails in your CDN or object storage (S3, R2, etc.). Use the URL as a cache key. Regenerate thumbnails on a schedule to keep them current.
Display in your app
Serve cached thumbnails in your directory listings, link previews, or bookmark views. Lazy-load images for optimal page performance.
Thumbnails at scale
Each thumbnail counts as one request. As low as $0.005 per thumbnail on the Growth plan.
Frequently asked questions
Send a URL to the /screenshot endpoint with your desired dimensions. SnapRender renders the page in a full headless browser (including JavaScript) and returns a PNG or JPEG image. Use the width/height parameters and CSS scaling to create thumbnails at any size.
Common thumbnail sizes are 320x240, 400x300, or 600x400 pixels. Capture at a larger viewport (1280x720) and resize on your end for the sharpest results, or set a smaller viewport directly in the API request for faster generation.
Yes. Use the clip parameter to capture a specific region, or use the selector parameter to screenshot a specific CSS element. For thumbnails, you typically want the above-the-fold hero section rather than the full page.
Typical generation time is 1-3 seconds per thumbnail. For high-traffic sites like link directories, generate thumbnails asynchronously and cache them. Regenerate on a schedule (weekly/monthly) to keep them fresh.
Yes. SnapRender uses a full headless browser, so React, Vue, Angular, and Next.js sites render completely before the screenshot is taken. You get a real visual representation of the page, not a blank shell.
Each thumbnail counts as one request. At $9/mo for 1,500 requests, that's $0.006 per thumbnail. The $29/mo plan (5,000 requests) brings it down to $0.0058. The free tier includes 100 thumbnails/month.
Every link deserves a preview.
Website thumbnails in one API call. Start free with 100 thumbnails/month.
Start Free — 100 requests/month