Screenshot API: URL to PNG, JPEG or PDF, Fast, No Login icon

AI & documents · Coming soon

Screenshot API: Turn Web Page URLs into Images and PDFs

Send up to 200 links and get a picture or PDF of each page. Cookie pop-ups and ads are hidden for you. Each URL gets a file link and its HTTP status.

Built and tested. Prices will be shown after release.

Coming soon to the Apify StoreFollow us on Apify

What you get, for example

urlhttps://apify.com
finalUrlhttps://apify.com/
statusCode200

How it will work: 3 steps

  1. Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: https://apify.com in Website URLs. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Screenshot API turns public web page URLs into PNG, JPEG or PDF files, or small thumbnails. Each URL gets one JSON row with a link to the file, its size, the page title and the HTTP status. Cookie banners and ads are hidden for you. No login and no API key for the sites you capture.

  • Waits until the page has loaded (load by default; you can pick domcontentloaded, networkidle or a CSS selector).
  • Closes the cookie consent pop-up with the open-source Autoconsent rules (OneTrust, Cookiebot, Didomi, Sourcepoint and many more). It clicks "reject" when it can and hides what is left.
  • Blocks ads and trackers, so heavy pages load faster and the image shows the content.
  • Saves the first screen (default), the whole page, a small thumbnail or a PDF.
  • Stores the file in the run's Key-value store and writes one Dataset row with the file link.

Good for

  • Link previews and thumbnails for your app (thumbnailWidth: 320 gave 320 × 200 PNGs of about 9–34 KB in our tests).
  • Screenshots inside your own backend: call the API, get fileUrl, save or show the file.
  • Visual checks of your pages on desktop and mobile.
  • PDF copies of articles, policies or invoices pages.
  • Pages for AI agents and vision models to "look at".

Not a good fit

  • Pages behind a login. The Actor does not sign in, does not use your cookies and does not solve CAPTCHAs.
  • Some sites block cloud browsers (HTTP 401 or 403). You get an image of what the site shows, with a warning.
  • Local and private addresses (localhost, 192.168.x.x, 10.x.x.x and similar) are blocked.
  • No video or GIF recording.
  • Up to 200 URLs per run; about 80–100 first-screen shots fit in the default 300-second timeout.

Who uses it

App developers

Make link preview images and thumbnails from your own backend.

QA and design teams

Compare how a page looks on desktop and on mobile.

AI builders

Give a vision model a picture of a page to look at.

Price

Prices will be shown after release.

Questions

Can it take screenshots of pages behind a login?

No. It does not sign in or use your cookies. You get what a visitor sees.

Why does my picture show an error page?

Some sites block cloud browsers. You still get an image of what the site showed, plus a warning.

Can I get the whole page, not just the top?

Yes. Pick full page instead of the first screen.

Can I take mobile screenshots?

Yes. Choose a mobile screen size, or set your own width and height.

Is this a screenshot API or a browser tool?

Both. You call it like any API (HTTP request, JSON in, JSON out), and it renders each page in a real Chrome browser on Apify.

Do I pay for failed URLs?

No. Only saved files are charged, plus the small start fee.

How long are the files kept?

As long as your Apify plan keeps run storage. Download or copy the files if you need them longer.

Can I use my apify/screenshot-url input?

Yes. Its fields urls, waitUntil, delay, viewportWidth, scrollToBottom and selectorsToHide are accepted as they are; proxy is accepted but ignored (pages are opened directly). A networkidle2 wait or a delay above 0 adds the extra-wait add-on. Output names differ: use fileUrl (their screenshotUrl) and kvsKey (their screenshotKey).

Details

Step by step on Apify
  1. Open the Input tab.
  2. In Website URLs (urls), keep https://apify.com or paste your own URLs, one per line.
  3. Click Start.
  4. Open the Output tab. The Captures view shows a preview of each screenshot. Click the File link to open or download it.
Use cases
TaskInputYou getKey fieldsNext step
Link preview imagesthumbnailWidth: 320320 px wide PNGfileUrl, width, heightShow it next to the link in your app
Screenshot API for your backendurls, default settings1280 × 800 PNGfileUrl, statusCode, titleSave the file to your storage
Mobile checkviewport: "mobile"780 × 1688 PNG (390 × 844 at 2×)fileUrl, widthCompare with the desktop shot
Full-page archivefullPage: truewhole-page PNGfileUrl, pageHeight, truncatedSchedule it every week
Page to PDFformat: "pdf"A4 PDF with textfileUrl, pdfPages, bytesKeep with your documents
Smaller filesformat: "jpeg", jpegQuality: 70JPEGfileUrl, bytesReports, e-mails
Tips for better results
  • Use thumbnail mode for previews. Small files load fast in your app.
  • Save the file soon after the run. It lives in the run's storage.
  • Raise the run timeout for many full-page shots, or split the list.
Limits and good to know
  • Up to 200 URLs per run. Split larger lists into several runs
  • The default run timeout is 300 seconds. On real sites about 80–100 first-screen shots, or about 40 full pages or PDFs, fit in it. For more, raise the run timeout (for example to 900 s) or split the list. The Actor stops 25 seconds before the timeout and lists the URLs it did not reach
  • Each page has its own time limit, so one slow site cannot block the run
  • If many pages time out or fail, the run stops early with TOO_MANY_TIMEOUTS or TOO_MANY_FAILURES, so a list of dead sites does not run for long

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "url": "https://apify.com",
  "finalUrl": "https://apify.com/",
  "status": "success",
  "statusCode": 200,
  "format": "png",
  "fileUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/shot-0001-apify.com.png?signature=<signature>",
  "imageUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/shot-0001-apify.com.png?signature=<signature>",
  "kvsKey": "shot-0001-apify.com.png",
  "contentType": "image/png",
  "bytes": 142346,
  "width": 1280,
  "height": 800,
  "pageHeight": null,
  "truncated": false,
  "pdfPages": null,
  "title": "Apify: Marketplace of ready-to-run tools for AI",
  "viewport": "desktop",
  "viewportWidth": 1280,
  "viewportHeight": 800,
  "deviceScaleFactor": 1,
  "thumbnailWidth": null,
  "fullPage": false,
  "cookieBanner": { "detected": false, "cmp": null, "handled": false },
  "warnings": [],
  "loadTimeMs": 1517,
  "fetchedAt": "2026-10-15T18:03:39.340Z",
  "errorCode": null,
  "error": null
}
Data fields (28)
FieldTypeMeaning
urlstringURL as given in the input.
finalUrlstringURL after redirects; null when the page did not load.
statusstringsuccess when a file was saved; failed otherwise (see errorCode).
statusCodeintegerHTTP status of the main page, e.g. 200 or 404.
formatstringOutput format of this run.
fileUrlstringPublic link to the saved file (image or PDF) in the run key-value store.
imageUrlstringSame as fileUrl for PNG/JPEG (used for the preview column); null for PDF.
kvsKeystringKey of the file in the run key-value store, e.g. shot-0001-apify.com.png.
contentTypestringimage/png, image/jpeg or application/pdf.
bytesintegerFile size in bytes.
widthintegerImage width in pixels (CSS width × pixel density); null for PDF.
heightintegerImage height in pixels; null for PDF.
pageHeightintegerFull scrollable page height in CSS pixels at capture time. Null for viewport-only image shots, where it is not measured to save time.
truncatedbooleanTrue when a very long page was cut at the maximum height.
pdfPagesintegerNumber of PDF pages; null for images.
titlestringPage <title>.
viewportstringDevice preset: desktop, full-hd, tablet, mobile or custom.
viewportWidthintegerViewport width in CSS pixels.
viewportHeightintegerViewport height in CSS pixels.
deviceScaleFactornumberPixel density used: 1 or 2 usually, fractional (e.g. 0.25) for thumbnails.
thumbnailWidthintegerRequested thumbnail width in pixels; null for a full-size image.
fullPagebooleanTrue for a full-page image.
cookieBannerobjectCookie consent handling: detected (pop-up shown), cmp (consent manager name), handled (rejected/closed). Null when hiding is off or the page failed.
warningsarrayNon-fatal notes, e.g. the page was cut or a load event was late.
loadTimeMsintegerTime from navigation start to capture, in milliseconds.
fetchedAtstringCapture time (ISO 8601, UTC).
errorCodestringINVALID_URL, BLOCKED_URL, DNS_ERROR, CONNECTION_FAILED, NAVIGATION_TIMEOUT, SELECTOR_NOT_FOUND, NOT_A_WEB_PAGE, CAPTURE_FAILED or OUTPUT_TOO_LARGE; null on success.
errorstringPlain-English error message; null on success.
Input settings (22)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Website URLs requiredurlsarray["https://apify.com"]
Output formatformatstring"png"
Full pagefullPagebooleanfalse
Device / viewportviewportstring"desktop"
Custom width (px)viewportWidthinteger1280
Custom height (px)viewportHeightinteger800
Pixel densitydeviceScaleFactorinteger
Thumbnail width (px)thumbnailWidthinteger
Wait untilwaitForstring"load"
Element to wait for (CSS selector)waitForSelectorstring
Extra delay (ms)delayMsinteger0
Page load timeout (s)navigationTimeoutSecsinteger
Scroll to load lazy imagesscrollToLoadLazyContentbooleantrue
Hide cookie bannershideCookieBannersbooleantrue
Block ads and trackersblockAdsbooleantrue
Hide elements (CSS selectors)hideSelectorsarray
Max full-page height (px)maxFullPageHeightinteger15000
JPEG qualityjpegQualityinteger80
PDF paper sizepdfFormatstring"A4"
PDF landscapepdfLandscapebooleanfalse
PDF background graphicspdfPrintBackgroundbooleantrue
PDF looks like the screenpdfUseScreenMediabooleanfalse

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure