DEV Community

Custodia-Admin
Custodia-Admin

Posted on • Originally published at pagebolt.dev

How to Take Screenshots Automatically in n8n Workflows

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:

  1. Trigger: Webhook or schedule (e.g., "every morning at 9am")
  2. Navigate: Use HTTP Request node to call PageBolt API
  3. Get screenshot: Binary PNG response
  4. Store: Save to disk, S3, or database
  5. 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:

  1. Click + to add a node
  2. Search "HTTP Request"
  3. 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
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode

You can use n8n variables here:

{
  "url": "{{ $node.YourPreviousNode.json.pageUrl }}",
  "format": "png",
  "width": 1280,
  "height": 720
}
Enter fullscreen mode Exit fullscreen mode

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:

  1. Go to Options
  2. Enable Full Response
  3. 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:

  1. Schedule Trigger → "Every day at 9:00 AM"
  2. HTTP Request (PageBolt) → Screenshot competitor pricing
  3. Binary to File → Save as PNG
  4. 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
}
Enter fullscreen mode Exit fullscreen mode

Node 3 - Function Node (to prepare filename):

return {
  json: {
    filename: `competitor-pricing-${new Date().toISOString().split('T')[0]}.png`
  }
};
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode

Store with order ID:

return {
  json: {
    filename: `order-confirmation-{{ $node.TriggerNode.json.orderId }}.png`
  }
};
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode

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
    }
  };
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Template 3: Status Page Monitoring

Schedule (every 30 min)
  → HTTP Request to status page
  → If status changed:
    → PageBolt screenshot
    → S3 archive
    → Alert team
Enter fullscreen mode Exit fullscreen mode

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)