- per hosted screenshot
- $0.05
- largest width and height
- 10,000 px
- capture options
- 19
- captures in parallel
- 3
- free credits to start
- 2
Features
Everything a screenshot API should handle
Built for the messy real web: cookie walls, lazy loading, dark modes and pages that never quite stop loading.
Full page or exact viewport
Capture just the visible viewport or the whole scrollable page, at any size up to 10,000 pixels.
widthheightfullPageHosted on a global CDN
Stored captures get a permanent, ready to share link with unlimited bandwidth. No bucket to set up.
storageCookie banners cleared
Consent popups, cookie walls and chat widgets are removed before the shot, from OneTrust and Didomi to Intercom and HubSpot.
automaticLight, dark or auto
Render the page in the color scheme you need, for every site that supports a dark mode.
themeModeWait for the right moment
Capture on load, DOM ready, network idle or first commit, then add up to 60 seconds of extra wait.
takeScreenshotWhenwaitBeforeScreenshotLazy images and videos loaded
The page is scrolled end to end so lazy content loads, videos show a real frame, and broken ones fall back to their poster.
automaticInject your own JS and CSS
Hide elements, open a menu or restyle the page right before the capture, even on sites with a strict security policy.
scriptstylesbypassCSPAny device and locale
Set the user agent, touch support and locale to see the page as a phone or as a visitor from another country.
userAgenthasTouchlocaleCustom headers and referer
Send cookies, authorization headers or a referer to capture pages that sit behind your own login.
extraHTTPHeadersrefererFull control of the browser
Switch off JavaScript, service workers, animations or the network for a clean and predictable render.
allowJsallowServiceWorkersallowAnimationsofflineBase64 when you skip hosting
Turn storage off and get the image straight in the response for a quarter of a credit.
storage: falseA dashboard for every capture
See the status and preview of every screenshot, download it or copy its link, and manage credits and your token.
dashboard
Banners and widgets removed automatically before every capture
- OneTrust
- Didomi
- CookieYes
- iubenda
- Osano
- Termly
- TrustArc
- Quantcast
- Intercom
- Drift
- HubSpot
- Crisp
- Tawk.to
- Zoho SalesIQ
- LiveChat
- Help Scout
How it works
From sign in to first screenshot in three steps
- 1
Sign in with Google
Create your account in one click. It starts with 2 free credits.
- 2
Copy your API token
Find it on your Account page, and regenerate it whenever you need a new one.
- 3
Send a URL
POST the page address and your token. The answer carries the hosted link and the image itself.
Under the hood
What happens in one capture
Every request runs the same six steps in a real browser, and the whole job is capped at two minutes. If anything fails, the credits go back to your account.
- 1
Open a real browser
A fresh Chromium tab starts with your viewport, color scheme, user agent, locale, touch support and headers.
widthheightthemeModeuserAgent - 2
Load the page
The page loads until the moment you pick, from the first commit to network idle, with a one minute limit.
takeScreenshotWhenreferer - 3
Wake lazy content
It scrolls from top to bottom so lazy images load, plays each video for a frame and swaps broken ones for their poster.
automatic - 4
Clean up the page
Cookie banners, consent popups and chat widgets are hidden, full screen overlays removed and scrolling unlocked.
automatic - 5
Apply your touches
Your script and styles run, the extra wait you asked for passes, and late banners are cleared once more before the shot.
scriptstyleswaitBeforeScreenshot - 6
Capture and host
A PNG of the viewport or the full page is uploaded to the CDN and sent back as a link and as base64.
fullPagestorage
The API
One endpoint. One JSON body.
Send the URL, your token and any options. The response gives you a hosted PNG link and the image as base64.
- Works from any language that can send JSON
- Open to calls from any origin
- The same success, code, message and data envelope on every answer
- Clear errors for missing fields, low credits and busy accounts
- Credits come back automatically when a capture fails
curl -X POST https://url2image.modulify.website/api/screenshots/create \
-H "Content-Type: application/json" \
-d '{
"url": "example.com",
"token": "YOUR_API_TOKEN",
"options": { "width": 1440, "height": 900, "fullPage": true }
}'{
"success": true,
"code": 200,
"message": "Screenshot was generated.",
"data": {
"scrUrl": "https://.../screenshots/.../8f3c2a91d4e5b6c7.png",
"scrBase64": "iVBORw0KGgoAAAANSUhEUgAA..."
}
}For the details people
19 options, every one of them optional
Sensible defaults out of the box, and a switch for everything when a page needs special care.
storagedefault truebooleanHost the image on the CDN and return its link. Set it to false to get the image only as base64, for 0.25 credits.fullPagedefault falsebooleanCapture the whole scrollable page instead of just the viewport.widthdefault 1080numberViewport width in pixels, up to 10000.heightdefault 720numberViewport height in pixels, up to 10000.hasTouchdefault falsebooleanPresent the browser as a touch device.themeModedefault "auto""auto" | "light" | "dark" | "no-preference"The color scheme the page sees, for sites with a dark mode.takeScreenshotWhendefault "load""load" | "domcontentloaded" | "networkidle" | "commit"Which loading step to wait for before capturing.waitBeforeScreenshotdefault 0numberExtra time to wait before the capture, in milliseconds, up to 60000.allowAnimationsdefault truebooleanSet it to false to freeze CSS animations and transitions during the capture.allowJsdefault truebooleanRun the page JavaScript.allowServiceWorkersdefault truebooleanLet the page register service workers.bypassCSPdefault falsebooleanIgnore the page Content Security Policy, which some custom scripts and styles need.offlinedefault falsebooleanLoad the page with the network switched off.userAgentdefault Browser defaultstringA custom user agent, for example a mobile browser.localedefault Browser defaultstringThe language and region the page sees, such as en-US or de-DE.headersdefault NoneobjectExtra request headers sent with every request of the page, up to 50.refererdefault NonestringThe referer sent with the page request.scriptdefault NonestringJavaScript added to the page right before the capture.stylesdefault NonestringCSS added to the page right before the capture.
Pricing
Pay for what you capture
20 credits cost $1. Buy between 20 and 5,000 at a time and spend them whenever you like.
500
- You pay
- $25.00
- Hosted screenshots
- 500
- Or without storage
- 2,000
Hosted screenshot
$0.05
PNG on the CDN with a shareable link and unlimited bandwidth.
Without storage
$0.0125
The image comes back as base64 only, nothing is hosted.
To get started
Free
Added to every new account when you first sign in.
- Every capture option included
- Credits returned when a capture fails
- Secure card payments with Stripe
- No subscription and no monthly minimum
Questions
Frequently asked questions
Do I need my own image hosting?
What happens when a capture fails?
Can I get the image without hosting it?
How many captures can run at once?
Which browser takes the screenshots?
Can I capture pages behind a login?
How do I pay?
Is there a free trial?
Something else? Email support@azwedo.com
Your first 2 screenshots are on us
Sign in with Google, copy your token and send your first URL. No card needed to start.