Skip to main content
Integrate Skyvern with N8N, the open-source workflow automation platform, to build self-hosted automation workflows with browser-based tasks.

Overview

N8N is a powerful open-source alternative to tools like Zapier and Make. The Skyvern N8N integration allows you to:
  • Build custom browser automation workflows
  • Self-host your entire automation stack
  • Combine 400+ N8N nodes with browser automation
  • Create complex, multi-step web scraping pipelines
  • Automate repetitive web-based tasks

Prerequisites

Installation

The Skyvern node is available through N8N’s community nodes.
1

Install the Skyvern node

In N8N:
  1. Go to Settings > Community Nodes
  2. Click Install
  3. Search for n8n-nodes-skyvern
  4. Click Install
Or via CLI if self-hosting:
npm install n8n-nodes-skyvern
2

Get your Skyvern API key

  1. Log in to app.skyvern.com
  2. Navigate to Settings
  3. Copy your API key
3

Create a credential

  1. In N8N, go to Credentials
  2. Click Add Credential
  3. Search for Skyvern API
  4. Enter your API key
  5. Save the credential

Setup

1

Create a new workflow

  1. Click Add Workflow
  2. Add a trigger node (e.g., Schedule, Webhook, Manual)
2

Add Skyvern node

  1. Click + to add a node
  2. Search for Skyvern
  3. Select the Skyvern node
  4. Choose your saved credential
3

Configure the operation

Choose from:
  • Run Task: Execute a browser automation task
  • Get Task: Retrieve status and results of a task
4

Set parameters

For Run Task:
  • URL: Starting URL for the task
  • Navigation Goal: Natural language instructions
  • Navigation Payload: Form data (optional)
  • Extraction Schema: JSON schema for data extraction (optional)
5

Test and activate

Execute the workflow to test, then activate it.

Example Workflows

Example 1: Daily Price Monitoring

Monitor competitor prices and save to a database.
┌─────────────┐     ┌────────────┐     ┌──────────┐     ┌──────────┐
│   Schedule  │────▶│  Skyvern   │────▶│   Wait   │────▶│ Postgres │
│   (Daily)   │     │  Run Task  │     │ 2 minutes│     │   Insert │
└─────────────┘     └────────────┘     └──────────┘     └──────────┘


                                       ┌────────────┐
                                       │  Skyvern   │
                                       │  Get Task  │
                                       └────────────┘
Configuration:
  1. Schedule Trigger: Set to run daily at 9 AM
  2. Skyvern - Run Task:
    • URL: https://competitor-site.com/products
    • Navigation Goal: “Navigate to the pricing page and extract all product prices”
    • Extraction Schema:
    {
      "products": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "name": {"type": "string"},
            "price": {"type": "number"},
            "currency": {"type": "string"}
          }
        }
      }
    }
    
  3. Wait: 2 minutes
  4. Skyvern - Get Task: Use {{ $json.task_id }} from Run Task
  5. Postgres: Insert extracted products

Example 2: Webhook-Triggered Form Submission

Automatic form submissions when triggered via webhook.
┌─────────────┐     ┌────────────┐     ┌──────────┐     ┌──────────┐
│   Webhook   │────▶│  Skyvern   │────▶│   Wait   │────▶│  Skyvern │
│             │     │  Run Task  │     │          │     │ Get Task │
└─────────────┘     └────────────┘     └──────────┘     └──────────┘

                    ┌──────────────────────────────────────────┘

              ┌──────────┐
              │   Slack  │
              │  Notify  │
              └──────────┘
Configuration:
  1. Webhook Trigger: Receive POST requests
  2. Skyvern - Run Task:
    • URL: {{ $json.body.form_url }}
    • Navigation Goal: “Fill out and submit the contact form”
    • Navigation Payload:
    {
      "name": "{{ $json.body.name }}",
      "email": "{{ $json.body.email }}",
      "message": "{{ $json.body.message }}"
    }
    
  3. Wait: 90 seconds
  4. Skyvern - Get Task: Retrieve results
  5. Slack: Send notification with status

Example 3: Bulk Data Extraction

Process multiple URLs from a spreadsheet.
┌─────────────┐     ┌────────────┐     ┌──────────┐     ┌──────────┐
│   Manual    │────▶│   Airtable │────▶│Split Out │────▶│ Skyvern  │
│   Trigger   │     │   Read     │     │   Items  │     │ Run Task │
└─────────────┘     └────────────┘     └──────────┘     └──────────┘


                                                        ┌──────────┐
                                                        │   Wait   │
                                                        └──────────┘


                                                        ┌──────────┐
                                                        │ Skyvern  │
                                                        │ Get Task │
                                                        └──────────┘


                                                        ┌──────────┐
                                                        │ Airtable │
                                                        │  Update  │
                                                        └──────────┘

Operations

Run Task

Executes a browser automation task. Parameters:
ParameterTypeRequiredDescription
URLstringYesStarting URL for the task
Navigation GoalstringYesNatural language instructions
Navigation PayloadobjectNoForm data to submit
Extraction SchemaobjectNoJSON schema for data extraction
Webhook URLstringNoURL to receive completion notification
Max Steps OverridenumberNoMaximum steps before timeout
Output:
{
  "task_id": "tsk_abc123",
  "status": "created",
  "request": {
    "url": "https://example.com",
    "navigation_goal": "..."
  }
}

Get Task

Retrieves task status and results. Parameters:
ParameterTypeRequiredDescription
Task IDstringYesID from Run Task operation
Output:
{
  "task_id": "tsk_abc123",
  "status": "completed",
  "extracted_information": {
    "products": [
      {"name": "Product A", "price": 29.99}
    ]
  },
  "recording_url": "https://app.skyvern.com/tasks/tsk_abc123",
  "failure_reason": null
}

Using Expressions

N8N’s expression system makes workflows dynamic.

Reference Previous Nodes

// Get task ID from previous Skyvern node
{{ $('Skyvern - Run Task').item.json.task_id }}

// Use webhook data
{{ $json.body.url }}

// Access item index in loop
{{ $itemIndex }}

Conditional Logic

// Check task status
{{ $json.status === 'completed' }}

// Use if-else
{{ $json.extracted_information ? 'Success' : 'Failed' }}

Format Data

// Format as JSON
{{ JSON.stringify($json) }}

// Parse JSON string
{{ JSON.parse($json.payload) }}

Tips and Best Practices

Use Execute Workflow trigger: For reusable Skyvern workflows, create sub-workflows that can be called from multiple parent workflows.
Self-hosting considerations: If self-hosting N8N and Skyvern, ensure network connectivity between services.
  • Add error workflows: Use N8N’s error workflow feature to handle failures
  • Use proper wait times: Add Wait nodes after Run Task before calling Get Task
  • Leverage N8N’s debugging: Use the execution view to debug failed runs
  • Store task IDs: Use Set node to store task IDs for later reference
  • Batch operations wisely: Use Split In Batches node for large datasets

Common Issues

Node not found after installation

  • Restart your N8N instance
  • Check that the package installed successfully
  • Verify you’re using N8N v0.200.0 or higher

Authentication fails

  • Ensure API key is from app.skyvern.com
  • Check for extra spaces in the API key
  • Try creating a new credential

Task data not available in next node

  • Verify the previous Skyvern node executed successfully
  • Check the expression syntax: {{ $json.task_id }}
  • Use “Click to view” to inspect actual data structure

Task never completes

  • Increase wait time between Run Task and Get Task
  • Check the recording URL to see where the task got stuck
  • Test the task manually in Skyvern dashboard first

Advanced Techniques

Polling for Task Completion

Instead of fixed wait times, poll until complete:
  1. After Run Task, add a Loop Over Items node
  2. Inside loop:
    • Wait (30 seconds)
    • Skyvern - Get Task
    • IF node: Check if status is “completed” or “failed”
    • If not complete, continue loop
    • If complete, break and continue workflow

Error Recovery

  1. Add error workflow at workflow level
  2. In error workflow:
    • Check if error is from Skyvern node
    • Log error details
    • Optionally retry task
    • Send alert

Webhook Completion

For long tasks, use webhooks instead of polling:
  1. Add Webhook node, set to “Wait for webhook call”
  2. Copy the production webhook URL
  3. In Skyvern - Run Task, set Webhook URL parameter
  4. Skyvern will POST results when done
  5. Continue workflow after webhook receives data

Support

For N8N integration support:

Next Steps

Task Parameters

Configure your automation tasks effectively

Data Extraction

Extract structured data from websites

Monitoring Tasks

Track and debug task execution

Webhooks

Get instant task completion notifications

Build docs developers (and LLMs) love