Migrate from Screenshotlayer to ScreenshotAPI
Replace Screenshotlayer with ScreenshotAPI. Modern features, better pricing, and no monthly subscription. Complete migration guide with code examples.
Last updated: 2026-03-25
Try ScreenshotAPI free
5 free credits. No credit card required.
Screenshotlayer is one of the older screenshot APIs, but it has fallen behind modern alternatives in features, rendering quality, and pricing flexibility. If you are using Screenshotlayer and encountering limitations, migrating to ScreenshotAPI gives you modern Chromium rendering, dark mode support, WebP output, SPA waiting strategies, and credit-based pricing.
Feature Comparison
| Feature | Screenshotlayer | ScreenshotAPI |
|---|---|---|
| Pricing | $19.99-$99.99/month | $20-$750 one-time (credits) |
| Credits expire | Monthly | Never |
| Rendering engine | Older WebKit | Modern Chromium |
| Output formats | PNG, JPEG | PNG, JPEG, WebP |
| Full-page screenshots | Yes | Yes |
| Dark mode | No | Yes |
| SPA support | Basic | waitForSelector, networkidle |
| WebP support | No | Yes |
| HTTPS on free tier | No | Yes |
| Custom viewport | Yes | Yes |
| Wait for content | Basic delay | Selector + networkidle + delay |
| SDKs | PHP, Python | JS, Python, Go, Ruby, PHP, cURL |
Parameter Mapping
| Screenshotlayer | ScreenshotAPI | Notes |
|---|---|---|
access_key=xxx (query param) | x-api-key: xxx (header) | Auth method changed |
url | url | Same |
viewport=1440x900 | width=1440&height=900 | Separate params |
fullpage=1 | fullPage=true | Different format |
format=PNG | type=png | Lowercase, renamed |
quality=80 | quality=80 | Same |
delay=5 (seconds) | delay=5000 (milliseconds) | Unit changed |
force=1 | N/A | Not needed |
css_url=... | N/A | Not yet supported |
accept_lang=en | N/A | Not yet supported |
Before: Screenshotlayer (JavaScript)
javascriptconst ACCESS_KEY = 'your_screenshotlayer_key'; async function takeScreenshot(url) { const params = new URLSearchParams({ access_key: ACCESS_KEY, url, viewport: '1440x900', format: 'PNG', fullpage: '0', }); const response = await fetch( `https://api.screenshotlayer.com/api/capture?${params}` ); return Buffer.from(await response.arrayBuffer()); }
After: ScreenshotAPI (JavaScript)
javascriptasync function takeScreenshot(url) { const params = new URLSearchParams({ url, width: '1440', height: '900', type: 'png', waitUntil: 'networkidle' }); const response = await fetch( `https://screenshotapi.to/api/v1/screenshot?${params}`, { headers: { 'x-api-key': process.env.SCREENSHOT_API_KEY } } ); if (!response.ok) throw new Error(`Screenshot failed: ${response.status}`); return Buffer.from(await response.arrayBuffer()); }
Before: Screenshotlayer (PHP)
php$params = http_build_query([ 'access_key' => 'your_screenshotlayer_key', 'url' => 'https://example.com', 'viewport' => '1440x900', 'format' => 'PNG', ]); $image = file_get_contents("https://api.screenshotlayer.com/api/capture?{$params}"); file_put_contents('screenshot.png', $image);
After: ScreenshotAPI (PHP)
php$params = http_build_query([ 'url' => 'https://example.com', 'width' => 1440, 'height' => 900, 'type' => 'png', ]); $ch = curl_init("https://screenshotapi.to/api/v1/screenshot?{$params}"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['x-api-key: sk_live_your_api_key'], ]); $image = curl_exec($ch); curl_close($ch); file_put_contents('screenshot.png', $image);
Before: Screenshotlayer (Python)
pythonimport requests params = { "access_key": "your_screenshotlayer_key", "url": "https://example.com", "viewport": "1440x900", "format": "PNG", } response = requests.get("https://api.screenshotlayer.com/api/capture", params=params) with open("screenshot.png", "wb") as f: f.write(response.content)
After: ScreenshotAPI (Python)
pythonimport requests response = requests.get( "https://screenshotapi.to/api/v1/screenshot", params={ "url": "https://example.com", "width": 1440, "height": 900, "type": "png", "waitUntil": "networkidle", }, headers={"x-api-key": "sk_live_your_api_key"}, ) with open("screenshot.png", "wb") as f: f.write(response.content)
New Features Available After Migration
After switching, you gain access to features Screenshotlayer does not offer:
Dark mode
javascriptconst params = new URLSearchParams({ url: 'https://github.com', width: '1440', height: '900', colorScheme: 'dark', type: 'png' });
WebP output (smaller files)
javascriptconst params = new URLSearchParams({ url: 'https://example.com', width: '1440', height: '900', type: 'webp', quality: '85' });
SPA support with selector waiting
javascriptconst params = new URLSearchParams({ url: 'https://myreactapp.com', width: '1440', height: '900', waitForSelector: '#content-loaded', waitUntil: 'networkidle', type: 'png' });
Migration Steps
- Sign up at screenshotapi.to for 5 free credits
- Update endpoint:
api.screenshotlayer.com/api/capture→screenshotapi.to/api/v1/screenshot - Update auth: Move from
access_keyquery param tox-api-keyheader - Update params:
viewport→width+height,format→type,fullpage→fullPage - Update delay: Convert seconds to milliseconds
- Test: Compare screenshot output visually
- Cancel Screenshotlayer subscription
Next Steps
- Browse the API documentation for all available parameters
- See the best screenshot APIs for a broader comparison
- Check pricing for the right credit package
- Try the cURL guide for quick testing
Frequently asked questions
Why switch from Screenshotlayer?
Screenshotlayer uses subscription pricing starting at $19.99/month, offers only basic screenshot features, has no dark mode support, and is part of a 100+ API ecosystem with limited focus on screenshot quality. ScreenshotAPI offers credit-based pricing, modern features, and SDKs for all major languages.
Is the migration difficult?
No. Both are REST APIs. You update the endpoint URL, switch from access_key query parameter to x-api-key header, and rename a few parameters. Most migrations take under 30 minutes.
Does ScreenshotAPI have a free tier like Screenshotlayer?
ScreenshotAPI provides 5 free credits on signup. Screenshotlayer offers 100 free screenshots per month on its free tier, but with significant limitations (low resolution, limited format options, no HTTPS capture on free plan).
Will my screenshots look better?
Likely yes. ScreenshotAPI uses modern Chromium for rendering with full CSS Grid, Flexbox, and web font support. Screenshotlayer's rendering engine may not support the latest CSS features.
Related resources
Start capturing screenshots today
Create a free account and get 5 credits to try the API. No credit card required. Pay only for what you use.