# Screenshot API: Turn Web Page URLs into Images and PDFs

> Screenshot API for public URLs: get PNG, JPEG, PDF or small thumbnails with cookie banners hidden. One row per URL with a file link. No login needed.

URL: https://cliqtomedia.com/actors/screenshot-api/

Category: AI-ready content & documents · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto

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.

## How to use it: 3 steps

1. **Follow us on Apify.** The 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 Start.** No 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 results.** When 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.

## 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.

## 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`).

## Data fields

- `url` (string): URL as given in the input.
- `finalUrl` (string): URL after redirects; null when the page did not load.
- `status` (string): success when a file was saved; failed otherwise (see errorCode).
- `statusCode` (integer): HTTP status of the main page, e.g. 200 or 404.
- `format` (string): Output format of this run.
- `fileUrl` (string): Public link to the saved file (image or PDF) in the run key-value store.
- `imageUrl` (string): Same as fileUrl for PNG/JPEG (used for the preview column); null for PDF.
- `kvsKey` (string): Key of the file in the run key-value store, e.g. shot-0001-apify.com.png.
- `contentType` (string): image/png, image/jpeg or application/pdf.
- `bytes` (integer): File size in bytes.
- `width` (integer): Image width in pixels (CSS width × pixel density); null for PDF.
- `height` (integer): Image height in pixels; null for PDF.
- `pageHeight` (integer): Full scrollable page height in CSS pixels at capture time. Null for viewport-only image shots, where it is not measured to save time.
- `truncated` (boolean): True when a very long page was cut at the maximum height.
- `pdfPages` (integer): Number of PDF pages; null for images.
- `title` (string): Page <title>.
- `viewport` (string): Device preset: desktop, full-hd, tablet, mobile or custom.
- `viewportWidth` (integer): Viewport width in CSS pixels.
- `viewportHeight` (integer): Viewport height in CSS pixels.
- `deviceScaleFactor` (number): Pixel density used: 1 or 2 usually, fractional (e.g. 0.25) for thumbnails.
- `thumbnailWidth` (integer): Requested thumbnail width in pixels; null for a full-size image.
- `fullPage` (boolean): True for a full-page image.
- `cookieBanner` (object): Cookie consent handling: detected (pop-up shown), cmp (consent manager name), handled (rejected/closed). Null when hiding is off or the page failed.
- `warnings` (array): Non-fatal notes, e.g. the page was cut or a load event was late.
- `loadTimeMs` (integer): Time from navigation start to capture, in milliseconds.
- `fetchedAt` (string): Capture time (ISO 8601, UTC).
- `errorCode` (string): INVALID_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.
- `error` (string): Plain-English error message; null on success.

## Input settings

- `urls` (array, required): Public web pages to capture, one per line (up to 200 per run). "example.com" is read as https://example.com. Pages behind a login, private or internal addresses are not captured.
- `format` (string): PNG gives a lossless image, JPEG a smaller image, PDF a printable document with selectable text.
- `fullPage` (boolean): Capture the whole scrollable page instead of only the first screen. Slower and billed as a full-page add-on. Ignored for PDF (a PDF always contains the whole page).
- `viewport` (string): Desktop 1280×800 (fast default), Full HD 1920×1080, Tablet 768×1024 and Mobile 390×844 (tablet and mobile use a phone/tablet browser and 2× pixel density). Custom uses the width and height below.
- `viewportWidth` (integer): Viewport width when Device is "Custom size".
- `viewportHeight` (integer): Viewport height when Device is "Custom size".
- `deviceScaleFactor` (integer): 1 = normal, 2 = retina. Leave empty to use the device default (1 for desktop, 2 for tablet/mobile). Ignored when Thumbnail width is set.
- `thumbnailWidth` (integer): Return a small preview image of this width instead of a full-size one, e.g. 320 for link previews. The browser renders it at that size directly, so files are tiny. PNG and JPEG only; must not be wider than the viewport.
- `waitFor` (string): When to take the capture. "Page load" suits most sites; "Network idle" waits for late requests (up to 10 s, extra-wait add-on); "Element appears" waits for the CSS selector below.
- `waitForSelector` (string): Used when "Wait until" is "Element appears", e.g. #main or .product-grid. If it never appears, the row fails with SELECTOR_NOT_FOUND.
- `delayMs` (integer): Additional wait before the capture, for animations or slow widgets. Any value above 0 adds the extra-wait add-on ($0.002 per captured page).
- `navigationTimeoutSecs` (integer): How long to wait for the page to start loading before the row fails with NAVIGATION_TIMEOUT. Leave empty for automatic: 15 seconds until 3 pages are captured, then 30 seconds, and pages that missed the 15 seconds are tried again with 30.
- `scrollToLoadLazyContent` (boolean): Scroll through the page before a full-page screenshot so lazy-loaded images appear.
- `hideCookieBanners` (boolean): Reject cookie consent pop-ups automatically (opt-out) and hide remaining consent banners.
- `blockAds` (boolean): Block ads and tracking scripts using EasyList / uBlock Origin filter lists. On by default: heavy news and shop pages load several times faster and the shot shows the content, not ad slots. Turn off to capture the page exactly as visitors see it, ads included.
- `hideSelectors` (array): Extra elements to hide before the capture, e.g. chat widgets or sticky headers: #intercom-container, .newsletter-popup.
- `maxFullPageHeight` (integer): Very long pages are cut at this height (the row gets truncated: true). Images are also limited to 16,000 device pixels, i.e. 8,000 px at 2× density.
- `jpegQuality` (integer): 1–100, used only for JPEG.
- `pdfFormat` (string): Paper size for PDF output.
- `pdfLandscape` (boolean): Landscape page orientation for PDF.
- `pdfPrintBackground` (boolean): Include background colours and images in the PDF.
- `pdfUseScreenMedia` (boolean): Render the PDF with the on-screen styles instead of the site's print styles.

## 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

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Link preview images | `thumbnailWidth: 320` | 320 px wide PNG | `fileUrl`, `width`, `height` | Show it next to the link in your app |
| Screenshot API for your backend | `urls`, default settings | 1280 × 800 PNG | `fileUrl`, `statusCode`, `title` | Save the file to your storage |
| Mobile check | `viewport: "mobile"` | 780 × 1688 PNG (390 × 844 at 2×) | `fileUrl`, `width` | Compare with the desktop shot |
| Full-page archive | `fullPage: true` | whole-page PNG | `fileUrl`, `pageHeight`, `truncated` | Schedule it every week |
| Page to PDF | `format: "pdf"` | A4 PDF with text | `fileUrl`, `pdfPages`, `bytes` | Keep with your documents |
| Smaller files | `format: "jpeg"`, `jpegQuality: 70` | JPEG | `fileUrl`, `bytes` | Reports, e-mails |

## Tips

- 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



- 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.

## Sample 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
}
```

## Similar tools

- [Website Screenshot & PDF Generator: Full Page & Mobile](https://cliqtomedia.com/actors/website-screenshot-pdf/)
- [RSS & Atom Feed Reader / Monitor](https://cliqtomedia.com/actors/rss-atom-feed-reader-monitor/)
- [WordPress Posts & Pages Scraper](https://cliqtomedia.com/actors/wordpress-posts-pages-scraper/)
- [News Article Extractor: RSS, URLs & Clean Text](https://cliqtomedia.com/actors/news-article-extractor/)
- [PDF & Image to Text OCR for AI Agents - No Login](https://cliqtomedia.com/actors/pdf-text-ocr/)
- [RAG Web Search: Google Results as Clean Markdown](https://cliqtomedia.com/actors/rag-web-search/)
