# Website Screenshot API: Full Page & Mobile, Urlbox Alternative (`nebulacolors/website-screenshot`) Actor

Takes a screenshot of each URL you give in a real Chrome browser: the visible screen or the full page, PNG or JPEG, any window size, with cookie pop-ups hidden. Returns a link to each image with the page title. $0.003 per screenshot; failed pages are free.

- **URL**: https://apify.com/nebulacolors/website-screenshot.md
- **Developed by:** [Nebula Colors LLC](https://apify.com/nebulacolors) (community)
- **Categories:** Developer tools, Automation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 screenshot takens

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Website Screenshot API: Full Page & Mobile, Urlbox Alternative

Website screenshots of any URL in a real Chrome browser, the job ScreenshotOne and Urlbox do, for $3 per 1,000 screenshots, failed pages free, no monthly plan.

### Website screenshot use cases

- Check how a page looks on a laptop and on a phone.
- Keep a picture of a competitor's homepage or pricing page, today and next month.
- Make thumbnails for a list of sites.
- Give an AI agent a look at a page.

### What you get

Give it a list of URLs and get a screenshot of each page, taken in a real Chrome browser. Choose the visible screen or the full page, a laptop or phone window size, and PNG or JPEG. Cookie consent pop-ups are hidden by default. Each result has a link to the image, the page title and its final address. $0.003 per screenshot, and failed pages are free. It works for people and for AI agents through Apify's MCP server.

### How to take a full-page or mobile screenshot

| Field | What to put |
|---|---|
| URLs | The pages, one per line, like `https://example.com/`. Required. |
| Full page | Off: what fits in the window. On: the whole page, top to bottom. |
| Window width | In pixels. 1280 (default) for a laptop, 390 for a phone. |
| Window height | In pixels. Default 800. With Full page off, this is the picture's height. |
| Format | PNG (default, sharp) or JPEG (smaller). |
| Wait after loading | Extra seconds after the page loads, for animations and late images. Default 1. |
| Hide cookie pop-ups | On by default. Hides consent pop-ups from the common cookie tools (OneTrust, Cookiebot, Usercentrics and others). |
| Proxy | Off by default. Turn on Apify Proxy for a site that blocks cloud servers. |

Example:

```json
{
  "urls": ["https://crawlee.dev/", "https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Overview"],
  "fullPage": false,
  "width": 1280,
  "format": "png"
}
```

### Output

One row per URL. This one came from a test run on October 15, 2026 (the link is shortened here):

```json
{
  "type": "screenshot",
  "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Overview",
  "finalUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Overview",
  "title": "Overview of HTTP - HTTP | MDN",
  "screenshotUrl": "https://api.apify.com/v2/key-value-stores/<store>/records/screenshot-1-developer-mozilla-org-en-US-docs-Web-HTTP-Guides-Overview.png",
  "key": "screenshot-1-developer-mozilla-org-en-US-docs-Web-HTTP-Guides-Overview.png",
  "format": "png",
  "width": 1280,
  "height": 800,
  "fullPage": false,
  "bytes": 135200,
  "statusCode": 200,
  "takenAt": "2026-10-15T02:02:03.000Z"
}
```

- `screenshotUrl` opens the image. The images are also in the run's key-value store under `key`.
- For a full-page screenshot, `height` is the page's full height.
- A URL that failed (a 404, a page that didn't load, or one the site's robots.txt disallows) has `error` instead, and isn't charged.

The run's `SUMMARY` record counts the screenshots taken, the failures, and the URLs robots.txt kept out.

### Price

- $0.003 per screenshot, so $3 per 1,000.
- Failed pages and pages robots.txt disallows are free.
- You can set a maximum charge for a run. It stops when it's reached and keeps the screenshots it already took.

### Good to know

- **Time:** 3 pages took 33 seconds on Apify, browser start-up included. It takes 2 pages at a time, with a one-second pause before each.
- **Polite:** it reads each site's robots.txt and skips what it disallows.
- **Cookie pop-ups:** the hiding covers the common consent tools, not every custom banner. Turn it off if you want the page exactly as a first-time visitor sees it.
- **It doesn't log in.** Pages behind a login show the login page.
- **Full-page screenshots of very long pages** make very tall images. Lazy-loaded images further down may not appear unless you add a few seconds of wait.

### Use it from an AI agent

The Actor works through Apify's MCP server like any Store Actor. An agent can find it, read its input and call it. Only `urls` is required. A run of 1 to 3 URLs took about 30 seconds in our test, inside the MCP call's wait (up to 45 seconds). If a run takes longer, the call returns the run's status and dataset ID, and the agent reads the rows with `get-dataset-items`.

### FAQ

**How do I take a full-page screenshot of a website?** Add the URL and turn on Full page. You get the whole page, top to bottom, as a PNG or JPEG link.

**Can I get a mobile screenshot?** Set Window width to 390 for a phone. The default 1280 is a laptop.

**Are cookie pop-ups hidden?** Yes, by default.

**What does a failed page cost?** Nothing. You pay $0.003 only for screenshots taken.

### More tools from us

- [AI Brand Mention Checker](https://apify.com/nebulacolors/ai-visibility): is your brand named by ChatGPT and Gemini, and who comes first.
- [Google Ads Transparency Scraper](https://apify.com/nebulacolors/google-ads-transparency): every Google, YouTube and Display ad a competitor runs.
- [Website to Markdown Crawler](https://apify.com/nebulacolors/website-content-markdown): a whole site as clean Markdown for LLMs and RAG.
- [News & Blog Article Extractor](https://apify.com/nebulacolors/article-extractor): the newest articles from a site or RSS feed, as Markdown.
- [Image Downloader](https://apify.com/nebulacolors/image-downloader): every image on a page, full size, in one ZIP.

### Questions or problems

Open an issue on this Actor's Issues tab. I read them.

# Actor input Schema

## `urls` (type: `array`):

The pages to screenshot, one per line, like https://example.com/. One screenshot each.

## `fullPage` (type: `boolean`):

Off: what fits in the window. On: the whole page, top to bottom.

## `width` (type: `integer`):

Browser window width in pixels. 1280 for a laptop, 390 for a phone.

## `height` (type: `integer`):

Browser window height in pixels. With Full page off, this is the screenshot's height.

## `format` (type: `string`):

PNG is sharp and larger. JPEG is smaller.

## `waitSecs` (type: `integer`):

Extra time after the page loads, for animations and late images.

## `hideCookieBanners` (type: `boolean`):

Hides consent pop-ups from the common cookie tools (OneTrust, Cookiebot, Usercentrics and others) before the screenshot.

## `proxyConfiguration` (type: `object`):

Off by default. Turn on Apify Proxy for a site that blocks cloud servers.

## Actor input object example

```json
{
  "urls": [
    "https://crawlee.dev/"
  ],
  "fullPage": false,
  "width": 1280,
  "height": 800,
  "format": "png",
  "waitSecs": 1,
  "hideCookieBanners": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `screenshots` (type: `string`):

All rows as JSON: url, finalUrl, title, screenshotUrl (a link to the image), width, height, format and bytes. A failed URL has an error and no screenshot.

## `summary` (type: `string`):

How many screenshots were taken, how many failed and how many robots.txt kept out.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://crawlee.dev/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nebulacolors/website-screenshot").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "urls": ["https://crawlee.dev/"] }

# Run the Actor and wait for it to finish
run = client.actor("nebulacolors/website-screenshot").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://crawlee.dev/"
  ]
}' |
apify call nebulacolors/website-screenshot --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nebulacolors/website-screenshot"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8rKBf35tXBOy3GnEF/builds/Lo0roUaHIbpGbY1Fp/openapi.json
