How to Take Screenshots Automatically in n8n Workflows
You're using n8n to automate business processes. You pipe APIs together, monitor price changes, capture form submissions. But everything you capture is text or JSON. You can't see what actually happened.
What if you could add screenshots to your workflow?
One HTTP Request node. One API call. Now your workflow captures visual proof.
The n8n + PageBolt Integration
n8n's HTTP Request node can call any API. PageBolt is an API. So you can screenshot any page in your workflow.
Here's the basic flow:
- Trigger: Webhook or schedule (e.g., "every morning at 9am")
- Navigate: Use HTTP Request node to call PageBolt API
- Get screenshot: Binary PNG response
- Store: Save to disk, S3, or database
- Continue: Pass screenshot metadata to next nodes in workflow
Setup: Configure PageBolt API in n8n
Step 1: Create HTTP Request Node
In n8n, add an HTTP Request node to your workflow:
- Click + to add a node
- Search "HTTP Request"
- Select HTTP Request
Step 2: Configure the Request
Set these values:
| Field | Value |
|---|---|
| Method | POST |
| URL | https://api.pagebolt.dev/v1/screenshot |
| Authentication | None (use Authorization header instead) |
Step 3: Add Headers
Click Headers and add:
Authorization: Bearer YOUR_PAGEBOLT_API_KEY
Content-Type: application/json
Get your API key from pagebolt.dev/dashboard.
Step 4: Add Request Body
In the Body section, set to JSON and add:
{
"url": "https://example.com/page",
"format": "png",
"width": 1280,
"height": 720
}
You can use n8n variables here:
{
"url": "{{ $node.YourPreviousNode.json.pageUrl }}",
"format": "png",
"width": 1280,
"height": 720
}
Step 5: Handle Binary Response
This is the key difference from normal API calls. PageBolt returns binary PNG data, not JSON.
In the HTTP Request node:
- Go to Options
- Enable Full Response
- The response body will be binary data
n8n will automatically create a Binary Data field called data. You can save this directly.
Real Example: Monitor Competitor Pricing
Here's a complete workflow that screenshots a competitor's pricing page every morning:
Nodes:
- Schedule Trigger → "Every day at 9:00 AM"
- HTTP Request (PageBolt) → Screenshot competitor pricing
- Binary to File → Save as PNG
- S3 Upload → Store in S3 bucket with timestamp
Configuration:
Node 1 - Schedule Trigger:
- Trigger type: "Schedule"
- Time: "09:00" (9 AM)
Node 2 - HTTP Request (PageBolt):
Method: POST
URL: https://api.pagebolt.dev/v1/screenshot
Headers:
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Body (JSON):
{
"url": "https://competitor.com/pricing",
"format": "png",
"fullPage": true,
"blockBanners": true
}
Node 3 - Function Node (to prepare filename):
return {
json: {
filename: `competitor-pricing-${new Date().toISOString().split('T')[0]}.png`
}
};
Node 4 - S3 Upload:
- Bucket:
your-screenshots-bucket - Key:
{{ $node.Function.json.filename }} - Binary data: Take from HTTP Request node's binary output
- Region: Your AWS region
Now you have dated screenshots of competitor pricing. Compare them over time to spot price changes.
Use Case: Capture Form Confirmations
After a form submission, capture proof:
{
"url": "{{ $node.FormSubmitted.json.confirmationPageUrl }}",
"format": "png",
"blockBanners": true,
"blockAds": true
}
Store with order ID:
return {
json: {
filename: `order-confirmation-{{ $node.TriggerNode.json.orderId }}.png`
}
};
Use Case: Visual Audit Trail
Log what a page looks like at each step of a process:
Workflow: Lead Qualification
├─ Visit lead's LinkedIn
├─ Screenshot (before)
├─ Check email deliverability
├─ Screenshot (after)
└─ Store both in audit bucket
Pass screenshots to a logging service:
{
"timestamp": "{{ now().toISO() }}",
"lead_id": "{{ $node.Input.json.leadId }}",
"screenshot_url": "s3://audit-bucket/{{ $node.Input.json.leadId }}-{{ now().toISO() }}.png",
"status": "completed"
}
Common Parameters
| Parameter | Example | Purpose |
|---|---|---|
| url | https://example.com |
Page to screenshot |
| format | png |
Always PNG for n8n |
| width | 1280 |
Viewport width |
| height | 720 |
Viewport height |
| fullPage | true |
Capture entire page (lazy-loaded content) |
| blockBanners | true |
Hide cookie consent popups |
| blockAds | true |
Remove advertisements |
| viewportDevice | iphone_14_pro |
Mobile emulation |
Error Handling in n8n
Add error handling for failed screenshots:
if ($node.HTTPRequest.json.statusCode !== 200) {
return {
json: {
error: "Screenshot failed",
statusCode: $node.HTTPRequest.json.statusCode,
retryable: $node.HTTPRequest.json.statusCode >= 500
}
};
}
Storing Screenshots
Option 1: Local Disk (for testing)
Use n8n's Write Binary File node:
- Path:
/screenshots/ - Filename:
{{ $node.Function.json.filename }}.png - Data: Binary data from HTTP Request
Option 2: AWS S3 (production)
Use AWS S3 node:
- Bucket: Your S3 bucket name
- Key (path):
screenshots/{{ $node.Function.json.filename }}.png - Binary data: From HTTP Request node
Option 3: Google Drive (team sharing)
Use Google Drive node:
- File name:
{{ $node.Function.json.filename }}.png - Binary data: From HTTP Request node
- Folder: Screenshot folder in shared Drive
Workflow Templates
Template 1: Daily Competitor Monitoring
Schedule (9 AM)
→ Loop through competitor URLs
→ HTTP Request (PageBolt)
→ S3 Upload
→ Send summary email
Template 2: Form Submission Capture
Webhook (form submitted)
→ Extract confirmation page URL
→ HTTP Request (PageBolt)
→ S3 Upload
→ Database: Log with order ID
→ Slack: Notify user
Template 3: Status Page Monitoring
Schedule (every 30 min)
→ HTTP Request to status page
→ If status changed:
→ PageBolt screenshot
→ S3 archive
→ Alert team
Pricing for n8n Workflows
| Plan | Requests/Month | Cost | Best For |
|---|---|---|---|
| Free | 100 | $0 | Testing workflows |
| Starter | 5,000 | $29 | Small monitoring |
| Growth | 25,000 | $79 | Production workflows |
| Scale | 100,000 | $199 | Enterprise automation |
Summary
Screenshots in n8n workflows:
- ✅ Add HTTP Request node calling PageBolt API
- ✅ Binary PNG response handled automatically
- ✅ Store to S3, Google Drive, or local disk
- ✅ Use in monitoring, auditing, verification
- ✅ 100+ requests/month free
Get started: Try PageBolt free — 100 requests/month, no credit card →
Top comments (0)