# Responsive Website Screenshot Generator (`notarobot/make-me-page-screenshot`) Actor

Generate clean full-page or viewport screenshots of public websites across desktop, tablet, iPhone, iPad, Pixel, and Galaxy presets. Hide cookie banners and overlays, wait for lazy-loaded content, and export PNG, JPEG, PDF, or ZIP for responsive QA, SEO, competitor research, and automated workflows.

- **URL**: https://apify.com/notarobot/make-me-page-screenshot.md
- **Developed by:** [Vadym Zabiiaka](https://apify.com/notarobot) (community)
- **Categories:** SEO tools, Developer tools, Automation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 standard screenshot captures

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

Generate clean full-page or viewport screenshots of public websites across desktop, tablet, iPhone, iPad, Pixel, and Galaxy presets. Use the visual form with no browser setup, or automate the same workflow through the Apify API, schedules, and integrations.

Use it for responsive QA, SEO evidence, competitor research, landing-page archives, and automated workflows.

### Why use this website screenshot generator?

- **Responsive device presets:** Capture 10 desktop, tablet, and mobile layouts, including iPhone, iPad, Pixel, and Galaxy targets.
- **Lazy-loaded content handling:** The Actor scrolls full pages, waits for page height to stabilize, and lets images settle before capture.
- **Cleaner screenshots:** Cookie and consent alerts are hidden by default. You can also hide overlays or provide custom CSS selectors.
- **Flexible capture controls:** Choose full-page or viewport-only mode, PNG or JPEG, light or dark color scheme, an extra delay, or a print-ready PDF.
- **Download-ready outputs:** Get individual artifacts, structured Dataset rows, an optional ZIP archive, and run metadata with warnings and failures.
- **Built for automation:** Run from Apify Console or connect the Actor to API clients, schedules, webhooks, n8n, Make, Zapier, or Google Sheets workflows.

### How to generate responsive website screenshots

1. Add one or more public HTTP or HTTPS URLs.
2. Choose the target devices and capture options. By default, every URL is captured as `desktop-1440`, `tablet`, and `iphone-15`.
3. Start the run, then open an individual artifact or download the ZIP archive.

Each URL-target combination produces one requested artifact. For example, two URLs with the three default targets request six screenshots.

### Input example

```json
{
  "startUrls": [
    { "url": "https://apify.com/notarobot" }
  ],
  "targets": ["desktop-1440", "tablet", "iphone-15"],
  "format": "png",
  "fullPage": true,
  "hideCookieAlerts": true,
  "hideOverlays": false,
  "autoDomReady": false,
  "zipOutput": true
}
```

### Output

Every requested artifact creates a Dataset row with status, source URL, target, duration, warnings, and a successful download link. PNG, JPEG, and PDF files are stored individually in the run key-value store.

When `zipOutput` is enabled, successful artifacts are also packaged with `metadata.json`. The `OUTPUT` record summarizes successful, failed, and skipped jobs plus billing counts.

```json
{
  "status": "succeeded",
  "url": "https://apify.com/notarobot",
  "target": "iphone-15",
  "artifactKind": "image",
  "filename": "20260728-120000-01-apify-com-notarobot-iphone-15.png",
  "artifactUrl": "https://api.apify.com/v2/key-value-stores/...",
  "durationMs": 8421,
  "warnings": []
}
```

### Pricing and limits

The Actor uses pay-per-event pricing. A `capture` event is charged only for a successfully generated artifact; failed and skipped captures are not charged. Enabling `autoDomReady` adds one extra event per successful artifact because it waits for a quiet DOM period.

A single run can request up to 30 files: `startUrls.length * targets.length <= 30`. For example, 10 URLs with the three default targets produce 30 requested screenshots. See the Pricing tab for current event prices.

### Tips and limitations

- Disable **Full page** when you only need the initial viewport.
- Enable `autoDomReady` for JS-heavy pages that continue changing after load.
- Use **Hide CSS selectors** when automatic cookie or overlay cleanup does not cover a page element.
- Only public HTTP and HTTPS pages are supported. Login-protected pages, aggressive bot protection, and unusually long or continuously loading pages may not capture completely.

### FAQ

#### Which targets and formats are supported?

Choose from 10 desktop, tablet, iPhone, iPad, Pixel, and Galaxy presets. Screenshots can be PNG or JPEG; add `print-pdf` for PDF output. Successful files can also be downloaded together as a ZIP archive.

#### Can I automate recurring screenshot runs?

Yes. Use Apify schedules, API clients, webhooks, or no-code integrations to run the same saved configuration repeatedly.

#### Where can I get help?

Open the **Issues** tab on this Actor page and include the affected URL, target, and relevant run details.

# Actor input Schema

## `startUrls` (type: `array`):

Public HTTP or HTTPS URLs to capture.

## `targets` (type: `array`):

Responsive screenshot targets and optional print PDF output.

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

Screenshot image format. PDF targets always produce PDF.

## `quality` (type: `integer`):

JPEG quality from 1 to 100. Ignored for PNG screenshots and PDF output.

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

Capture the full page instead of only the initial viewport.

## `hideCookieAlerts` (type: `boolean`):

Hide common cookie, consent, and GDPR banners before capture.

## `hideOverlays` (type: `boolean`):

Hide common popups, chat widgets, modals, and sticky overlays.

## `hideSelectors` (type: `string`):

Optional comma-separated CSS selectors to hide before capture.

## `delay` (type: `number`):

Seconds to wait after scrolling and before capture.

## `colorScheme` (type: `string`):

Optional browser color scheme emulation.

## `autoDomReady` (type: `boolean`):

Wait for a DOM quiet period. This is slower and charged as an additional capture event.

## `zipOutput` (type: `boolean`):

Store a ZIP archive containing all successful artifacts plus metadata.json.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://apify.com/notarobot"
    }
  ],
  "targets": [
    "desktop-1440",
    "tablet",
    "iphone-15"
  ],
  "format": "png",
  "quality": 90,
  "fullPage": true,
  "hideCookieAlerts": true,
  "hideOverlays": false,
  "delay": 2,
  "autoDomReady": false,
  "zipOutput": true
}
```

# Actor output Schema

## `results` (type: `string`):

One row per requested screenshot artifact, including success, failure, skipped status, artifact URL, duration, and warnings.

## `artifacts` (type: `string`):

Key-value store records for generated PNG, JPEG, and PDF files.

## `archives` (type: `string`):

Key-value store records for ZIP archives when zipOutput is enabled.

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

Run-level OUTPUT record with totals, billing counts, generated file counts, failures, skipped jobs, and ZIP metadata.

# 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 = {
    "startUrls": [
        {
            "url": "https://apify.com/notarobot"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("notarobot/make-me-page-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 = { "startUrls": [{ "url": "https://apify.com/notarobot" }] }

# Run the Actor and wait for it to finish
run = client.actor("notarobot/make-me-page-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 '{
  "startUrls": [
    {
      "url": "https://apify.com/notarobot"
    }
  ]
}' |
apify call notarobot/make-me-page-screenshot --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,notarobot/make-me-page-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/8Bg6mjz6M2kXAdY1x/builds/vPGVfGQdltk378Qhm/openapi.json
