n8n Screenshot API — Automate Captures with Workflows
An n8n screenshot API setup takes about ten minutes and gives you something most no-code tools can't: full control over every parameter, branching logic, and the option to run everything on your own server. If you've been looking at automation platforms for capturing website screenshots at scale, n8n's HTTP Request node paired with ScreenshotRun handles it without installing a single npm package.
Most screenshot workflows start simple. Grab a page, save the image, move on. But the moment you need conditional logic, error handling that actually works, or batch processing through a list of 200 URLs, you need a tool that thinks in workflows, not just triggers and actions.
Why use n8n for screenshot automation
The frustration usually starts the same way. You've got a list of URLs, you need screenshots, and you don't want to babysit a script. Zapier can do it, but every step in a Zap counts as a task against your plan. At 500 screenshots a month through a five-step workflow, that's 2,500 tasks. Adds up fast.
n8n flips the pricing model. The self-hosted Community edition is free with unlimited executions. The cloud plans bill by execution volume rather than per step, which is significantly cheaper for screenshot-heavy automations. ScreenshotRun's pricing stays flat regardless of which platform sends the HTTP request.
There's also a privacy advantage: self-hosted n8n keeps your API keys and URLs entirely on your infrastructure. More on that in the self-hosted vs cloud section below.
The Split In Batches node processes URL lists sequentially without inter-step delays, which keeps batch jobs moving faster than platforms that add overhead between each step.
How to connect ScreenshotRun API to n8n
You'll need a ScreenshotRun API key. Grab one from the dashboard for free, no credit card required.
Step 1. Open n8n and create a new workflow. Add a Manual Trigger node (or Schedule Trigger if you want it running automatically).
Step 2. Add an HTTP Request node. Set the method to GET and paste this URL:
https://api.screenshotrun.com/v1/screenshots/capture?url=https://example.com&format=png&width=1280&full_page=true
Step 3. Set up authentication. Go to the Authentication section and select Generic Credential Type, then choose Header Auth. Create a new credential with:
- Header Name:
Authorization - Header Value:
Bearer YOUR_API_KEY
Don't use the "Bearer Auth" option in n8n's generic credentials. It sometimes fails to send the header correctly. The Header Auth approach works reliably every time.
Step 4. In the HTTP Request node settings, set Response Format to File so n8n treats the response as binary image data. This lets you pass the screenshot directly to storage nodes like Google Drive or S3.
Step 5. Click "Execute Node" to test. You should see the screenshot appear as binary data in the output panel. A 401 error means your API key is wrong. A 400 usually means a malformed URL parameter.
That's your base n8n HTTP Request screenshot setup.
n8n screenshot API parameters reference
All parameters go into the URL query string. You can either append them directly to the URL or use the "Query Parameters" section in the HTTP Request node. The query parameter fields are easier to manage when you're injecting dynamic values from previous nodes.
| Parameter | Type | Default | How it works in n8n |
|---|---|---|---|
url | string | — | Target page URL. Use expressions like {{ $json.url }} for dynamic values |
format | string | png | Output as png, jpeg, webp, avif, or pdf |
width | integer | 1280 | Viewport width in pixels |
height | integer | 720 | Viewport height in pixels |
full_page | boolean | false | Capture the entire scrollable page, not just the viewport |
device | string | desktop | Switch between desktop, mobile, or tablet emulation |
dark_mode | boolean | false | Activate dark color scheme on sites that support it |
block_cookies | boolean | false | Remove GDPR consent popups before capture |
block_ads | boolean | false | Strip ad banners and tracking scripts |
block_chats | boolean | false | Hide live chat widgets from the screenshot |
delay | integer | 0 | Wait N milliseconds before taking the screenshot |
selector | string | — | Target a specific CSS element to crop the capture |
resize_width | integer | — | Scale the output image to an exact pixel width |
webhook_url | string | — | Send finished screenshot to a webhook endpoint (great for async pipelines) |
css | string | — | Inject custom CSS before capture |
js | string | — | Run custom JavaScript before capture |
The complete API reference documents over 40 options including geolocation, proxy, stealth mode, and PDF margin controls.
n8n screenshot workflow examples
These four setups take advantage of features specific to n8n: scheduled triggers, batch processing, code nodes for logic, and webhook receivers.
1. Scheduled competitor monitoring with Slack alerts
This workflow fires every morning at 8 AM, captures your competitors' homepages, and drops the screenshots into a Slack channel.
Build it with five nodes: Schedule Trigger (set to daily at 08:00) → Set node (define an array of competitor URLs) → Split In Batches (process one URL at a time) → HTTP Request (call ScreenshotRun API with {{ $json.url }}&format=png&width=1440&block_cookies=true&block_ads=true) → Slack node (upload the binary image to your channel).
We ran this with five competitor URLs and the whole thing finished in under 30 seconds. Set it up once, and you'll know about a competitor's homepage redesign the morning it launches.
This pattern works well for ongoing competitor monitoring and website change detection.
2. Google Sheets URL list to batch screenshots in Google Drive
Your team maintains a spreadsheet of client websites, prospect URLs, or pages that need visual documentation. This automation reads every row, captures full-page screenshots, and saves them to a shared Drive folder.
The node chain: Schedule Trigger → Google Sheets node (read all rows from your URL column) → Split In Batches (batch size of 3 to stay within rate limits) → HTTP Request (ScreenshotRun API with full_page=true) → Google Drive node (upload binary data, name the file using {{ $json.domain }}_{{ $now.format('yyyy-MM-dd') }}.png).
The Split In Batches node is what makes this practical. Without it, n8n would fire all requests simultaneously and you'd hit rate limits on any plan. Batch size of 3 with a 2-second wait between batches keeps things smooth. For processing large URL lists, check the bulk screenshot guide for more patterns.
3. Webhook-triggered screenshot with conditional dark/light mode
This setup uses n8n's branching to adapt parameters on the fly. A Webhook node accepts incoming POST requests with a JSON body containing url and an optional theme field. After the webhook, an IF node checks whether {{ $json.theme }} equals "dark". The true branch sends the request to ScreenshotRun with dark_mode=true. The false branch sends it without.
Both branches connect to the same downstream node that stores or sends the result. You could trigger this webhook from a CMS publishing hook, a CI/CD pipeline, a chatbot command, or even a simple cURL call.
If we're being honest, this is where n8n pulls ahead. Conditional branching in a screenshot workflow sounds niche until you need it. In n8n, a single workflow with an IF node covers what might otherwise require separate automations in tools without native branching support.
4. Website change detection with pixel comparison
This is the most advanced setup on this page, and it shows what's possible when you combine n8n's Code node with screenshot automation. The idea: capture a screenshot, compare it to yesterday's version, and alert you only when something actually changed.
Start with a Schedule Trigger set to daily. The HTTP Request node captures today's screenshot in your preferred format, then a Read Binary File node loads yesterday's version from disk or S3. A Code node runs JavaScript to compare the two.
In the Code node, compute a simple hash of both binary buffers:
const crypto = require('crypto');
const todayHash = crypto.createHash('md5').update($binary.data).digest('hex');
const yesterdayHash = crypto.createHash('md5').update($binary.yesterday).digest('hex');
if (todayHash !== yesterdayHash) {
return [{ json: { changed: true, url: $json.url, capturedAt: new Date().toISOString() } }];
}
return [{ json: { changed: false } }];
An IF node after the Code node filters on changed === true, and only then fires a Slack message or email. No more inbox noise from unchanged pages. Getting an alert that actually means something, instead of a daily screenshot you have to eyeball yourself, is worth the 20 minutes to set this up.
Self-hosted vs cloud n8n for screenshot workflows
Here's the catch: this decision affects cost, privacy, and reliability, and it's worth thinking through before you build out complex automations.
Self-hosted n8n (the Community edition) is completely free. You run it on your own server, Docker container, or even a Raspberry Pi. Unlimited workflows, unlimited executions. The tradeoff: you handle updates, backups, and uptime yourself. A basic VPS with 1 GB of RAM runs n8n comfortably for screenshot workloads since the actual rendering happens on ScreenshotRun's servers, not yours.
Cloud n8n starts at €20/month for the Starter plan with 2,500 executions. You don't manage infrastructure, and you get a visual editor accessible from anywhere. For teams without a DevOps person, cloud is the obvious choice.
The privacy angle matters more than most people realize. When you self-host, your ScreenshotRun API key, the URLs you're capturing, and the automation logic never leave your network. If you're taking screenshots of internal tools, staging environments, or pages behind authentication, that's a meaningful security benefit. Cloud n8n stores your credentials encrypted, but self-hosting eliminates the question entirely.
For most n8n screenshot API jobs, we'd suggest starting with cloud to prototype, then moving to self-hosted once the pipeline is stable and you want to cut costs or tighten security.
n8n vs Zapier for screenshot workflows
Both platforms connect to the ScreenshotRun API through standard HTTP requests, so the n8n screenshot API setup and Zapier setup look nearly identical at the HTTP level. The differences come down to pricing, flexibility, and what you're comfortable with.
| n8n + ScreenshotRun | Zapier + ScreenshotRun | |
|---|---|---|
| Pricing model | Free (self-hosted) or from €20/month | From $19.99/month (Starter) |
| Billing unit | Per workflow execution | Per task (each step counts) |
| Branching logic | IF/Switch nodes, native | Paths (paid plans only) |
| Batch processing | Split In Batches node | Looping (limited) |
| Code execution | JavaScript + Python Code nodes | Code by Zapier (limited) |
| Self-hosting | Yes, free | No |
| Webhook receiver | Built-in Webhook node | Catch Hook trigger |
| Setup complexity | Moderate | Low |
If you want the fastest possible setup with minimal technical knowledge, Zapier wins. If you need batch processing, conditional logic, self-hosting, or you're running high-volume screenshot automations without wanting per-step billing, n8n is the better fit.
Some teams use both. Zapier handles simple trigger-action flows (new form submission → screenshot → email), while n8n runs the heavier batch and monitoring jobs. The API doesn't care where the HTTP request comes from, so mixing platforms for different screenshot workflow needs works fine.
Why the HTTP Request node beats a dedicated n8n screenshot package
Look, you might wonder why there's no dedicated n8n community node for ScreenshotRun. A dedicated node would lock you into whatever parameters its maintainer chose to expose. The HTTP Request node gives you access to all 40+ API parameters the moment they go live, with no dependency on third-party package updates.
Your n8n screenshot setup also ends up looking exactly like the cURL command in our docs. If you later want to move the automation to Python or Node.js, the API call is identical. One less abstraction layer to debug when something goes wrong.
For a side-by-side look at how different screenshot APIs handle pricing and parameters, see our screenshot API comparison. Prefer Make.com's visual scenario builder over n8n's canvas? The Make.com integration covers the same API with Make-specific workflows.
Start using the n8n screenshot API today
The free tier includes 200 monthly captures, enough to build and test every automation on this page. Grab your API key, paste the endpoint into an HTTP Request node, and your first n8n screenshot workflow can be running in ten minutes.
Get Your Free API Key