CAPSOLVER
Blog
# How to Solve reCAPTCHA v2/v3 Using CapSolver and n8n: Build Your Own Captcha-Solving API & Scrape Websites

How to Solve reCAPTCHA v2/v3 Using CapSolver and n8n

Logo of CapSolver

Lucas Mitchell

Automation Engineer

10-Mar-2026

If you've ever tried to automate web interactions, you've almost certainly run into reCAPTCHA โ€” Google's challenge system that blocks bots from accessing websites. Whether you're building scrapers, testing web applications, or automating repetitive tasks, reCAPTCHA can bring your entire workflow to a halt.

But what if you could build your own reCAPTCHA-solving API โ€” one that receives a captcha challenge and returns a valid solution, all without writing a single line of traditional code?

In this guide, you'll learn how to combine n8n (a visual workflow automation tool) with CapSolver (an AI-powered captcha solving service) to create powerful API endpoints that solve reCAPTCHA v2, v2 Invisible, and v3 challenges on demand.

What you'll build:

  • A reCAPTCHA v2 solver API
  • A reCAPTCHA v2 Invisible solver API
  • A reCAPTCHA v3 solver API
  • Real-world scraping examples that solve captchas, submit tokens to websites, and verify the results

What is reCAPTCHA?

reCAPTCHA is Google's bot detection system used by millions of websites. There are three main versions you'll encounter:

Feature reCAPTCHA v2 reCAPTCHA v2 Invisible reCAPTCHA v3
User interaction Checkbox ("I'm not a robot") + image challenges No visible checkbox โ€” triggers automatically No interaction at all
How it works User must click and possibly solve image puzzles Runs in the background, only shows challenges if suspicious Assigns a score (0.0 to 1.0) based on behavior
Visibility Always visible on the page Hidden until triggered Completely invisible
Common use case Login forms, sign-ups Form submissions, checkout pages Continuous monitoring, scoring user actions
Site key visible? Yes Yes Yes

Understanding which version a website uses is critical โ€” each one requires slightly different parameters when solving.


Prerequisites

Before getting started, make sure you have the following:

  1. An n8n instance โ€” Either self-hosted or n8n Cloud
  2. A CapSolver account โ€” Sign up here and get your API key
  3. The CapSolver n8n node โ€” Already available as an official node in n8n (no installation needed)
  4. CapSolver browser extension (optional but recommended) โ€” For identifying captcha parameters on target websites

Important: Make sure you have sufficient balance in your CapSolver account. reCAPTCHA solving tasks consume credits based on the captcha type.


Setting Up CapSolver in n8n

CapSolver is available as an official integration in n8n โ€” no community node installation required. You can find it directly in the node panel when building your workflows.

Since it's an official integration, you need to create a credential in n8n so that the CapSolver node can authenticate with your account.

Step 1: Open the Credentials Page

Go to your n8n instance and navigate to Settings โ†’ Credentials. You'll see all your configured credentials here.

n8n credentials page showing CapSolver account

Step 2: Create the CapSolver Credential

  1. Click Create credential (top right)
  2. Search for "CapSolver" and select CapSolver API
  3. Enter your API Key โ€” copy it directly from the CapSolver Dashboard
  4. Leave Allowed HTTP Request Domains set to All (default)
  5. Click Save

n8n will automatically test the connection. You should see a green "Connection tested successfully" banner confirming your API key is valid.

CapSolver credential configuration with successful connection test

Important: Every CapSolver node in your workflows will reference this credential. You only need to create it once โ€” all your solver workflows will share the same credential.

Now you're ready to build your solver workflows!


How to Identify reCAPTCHA Parameters

Before you can solve a reCAPTCHA, you need to know its parameters โ€” specifically the websiteURL and websiteKey (also called the site key). The easiest way to find these is using the CapSolver Browser Extension.

Step 1: Install the CapSolver Extension

Download and install the CapSolver extension from the Chrome Web Store or Firefox Add-ons.

Step 2: Open the CAPTCHA Detector

  1. Navigate to the target website
  2. Press F12 to open Developer Tools
  3. Find the "CapSolver Captcha Detector" tab in DevTools
CapSolver Captcha Detector tab in DevTools

Step 3: Trigger the CAPTCHA

With the detector panel open, interact with the page to trigger the reCAPTCHA. The extension will automatically detect and display all relevant parameters:

  • Website URL โ€” The page URL hosting the CAPTCHA
  • Website Key (Site Key) โ€” The public key identifier for the captcha
  • pageAction โ€” The specific action being verified (v3)
  • isInvisible โ€” Whether it's an invisible reCAPTCHA
  • isEnterprise โ€” Whether it uses reCAPTCHA Enterprise
  • apiDomain โ€” The API endpoint being used (e.g., recaptcha.net)
Detected reCAPTCHA parameters in CapSolver extension

Tip: The extension generates a JSON output showing exactly how to format these parameters for your solving request. This saves you from having to manually inspect the page source.

For a detailed guide on identifying captcha parameters, check out the official CapSolver documentation.


Workflow 1: reCAPTCHA v2 Solver API

This workflow creates a POST API endpoint that accepts reCAPTCHA v2 parameters and returns a solved token.

reCAPTCHA v2 solver workflow in n8n

How It Works

The workflow consists of three nodes:

  1. Webhook โ€” Receives incoming POST requests with captcha parameters
  2. CapSolver reCAPTCHA v2 โ€” Sends the challenge to CapSolver and waits for a solution
  3. Respond to Webhook โ€” Returns the solution as a JSON response

Node Configuration

1. Webhook Node

Setting Value
HTTP Method POST
Path solver-recaptcha-v2
Response Mode Response Node

This creates an endpoint at: https://your-n8n-instance.com/webhook/solver-recaptcha-v2

2. CapSolver reCAPTCHA v2 Node

Parameter Value Description
Type ReCaptchaV2TaskProxyLess Select in n8n based on the target site (see available types below)
Website URL {{ $json.body.websiteURL }} The URL of the page with the captcha
Website Key {{ $json.body.websiteKey }} The reCAPTCHA site key
Page Action {{ $json.body.pageAction || '' }} (Optional) The action parameter
Enterprise Payload {{ $json.body.enterprisePayload || '' }} (Optional) For Enterprise reCAPTCHA
Is Invisible {{ $json.body.isInvisible || false }} (Optional) Set to true for invisible
Is Session {{ $json.body.isSession || false }} (Optional) Session-based solving
API Domain {{ $json.body.apiDomain || '' }} (Optional) Custom API domain

Available types for reCAPTCHA v2 (select in n8n dashboard):

Type When to use
ReCaptchaV2TaskProxyLess Standard reCAPTCHA v2 โ€” works for most sites (no proxy needed)
ReCaptchaV2EnterpriseTask reCAPTCHA Enterprise โ€” requires a proxy (ip:port:user:pass)
ReCaptchaV2EnterpriseTaskProxyLess reCAPTCHA Enterprise without proxy

Select the correct type directly in the n8n node configuration. If you choose a type that requires a proxy (e.g., ReCaptchaV2EnterpriseTask), a proxy field will appear โ€” enter your proxy in ip:port:user:pass format. Use the CapSolver extension to detect if the site uses Enterprise reCAPTCHA. Also select your CapSolver credentials in this node.

3. Respond to Webhook Node

Setting Value
Respond With JSON
Response Body {{ JSON.stringify($json.data) }}

This returns the full CapSolver response, including the gRecaptchaResponse token.

Test It

Send a POST request to your webhook endpoint:

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/solver-recaptcha-v2 \
  -H "Content-Type: application/json" \
  -d '{
    "websiteURL": "https://example.com/login",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
  }'

Expected Response:

json Copy
{
  "taskId": "abc123...",
  "solution": {
    "gRecaptchaResponse": "03AGdBq24PBCb..."
  },
  "status": "ready"
}

Import This Workflow

Copy the JSON below and import it into n8n via Menu โ†’ Import from JSON:

Click to expand workflow JSON
json Copy
{
  "name": "reCaptcha V2 Solver API",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "solver-recaptcha-v2",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [-192, 0],
      "id": "24f7cce0-bcbd-4134-958b-aa0c4528415c",
      "name": "Webhook",
      "webhookId": "784376f0-b5c9-492f-8ed2-07b63cd6e3fe"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.body.websiteURL }}",
        "websiteKey": "={{ $json.body.websiteKey }}",
        "optional": {
          "pageAction": "={{ $json.body.pageAction || '' }}",
          "enterprisePayload": "={{ $json.body.enterprisePayload || '' }}",
          "isInvisible": "={{ $json.body.isInvisible || false }}",
          "isSession": "={{ $json.body.isSession || false }}",
          "apiDomain": "={{ $json.body.apiDomain || '' }}"
        }
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [112, 0],
      "id": "c10b2f8f-e03a-4f50-b359-34b7b49f8aae",
      "name": "reCAPTCHA v2",
      "credentials": {
        "capSolverApi": {
          "id": "sLg2YDZd7WtYJJJ4",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json.data) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [400, 0],
      "id": "34762c43-31a7-4a7a-ba29-29d1dad15ed0",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "reCAPTCHA v2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "reCAPTCHA v2": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1"
  }
}

Workflow 2: reCAPTCHA v2 Invisible Solver API

reCAPTCHA v2 Invisible works just like standard v2, except the captcha runs in the background without showing a checkbox. The key difference in your solver configuration is setting isInvisible: true.

reCAPTCHA v2 Invisible solver workflow in n8n

How It Works

The workflow has the same three-node structure:

  1. Webhook โ€” Receives POST requests at /solve-recaptcha-v2-invisible
  2. CapSolver reCAPTCHA v2 Invisible โ€” Solves with isInvisible flag enabled
  3. Respond to Webhook โ€” Returns a clean JSON response with the solution token

Node Configuration

1. Webhook Node

Setting Value
HTTP Method POST
Path solve-recaptcha-v2-invisible
Response Mode Response Node

2. CapSolver reCAPTCHA v2 Invisible Node

Parameter Value Description
Type ReCaptchaV2TaskProxyLess Select in n8n based on the target site (see available types below)
Website URL {{ $json.body.websiteURL }} The URL of the page with the captcha
Website Key {{ $json.body.websiteKey }} The reCAPTCHA site key
Is Invisible true (hardcoded) Always true for this endpoint
Page Action {{ $json.body.pageAction || '' }} (Optional) The action parameter
Enterprise Payload {{ $json.body.enterprisePayload || '' }} (Optional) For Enterprise reCAPTCHA
Is Session {{ $json.body.isSession || false }} (Optional) Session-based solving
API Domain {{ $json.body.apiDomain || '' }} (Optional) Custom API domain

Available types for reCAPTCHA v2 Invisible (select in n8n dashboard):

Type When to use
ReCaptchaV2TaskProxyLess Standard invisible reCAPTCHA โ€” works for most sites (no proxy needed)
ReCaptchaV2EnterpriseTask Invisible Enterprise reCAPTCHA โ€” requires a proxy (ip:port:user:pass)
ReCaptchaV2EnterpriseTaskProxyLess Invisible Enterprise reCAPTCHA without proxy

Key difference: Unlike the v2 workflow, isInvisible is hardcoded to true here since this endpoint is specifically for invisible captchas. Select the correct type directly in the n8n node โ€” if you choose a type that requires a proxy, a proxy field will appear where you enter it in ip:port:user:pass format.

3. Respond to Webhook Node

This node returns a cleaner, structured response:

Copy
{{ JSON.stringify({
  success: true,
  solution: $json.data.solution.gRecaptchaResponse,
  taskId: $json.data.taskId
}) }}

Test It

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/solve-recaptcha-v2-invisible \
  -H "Content-Type: application/json" \
  -d '{
    "websiteURL": "https://example.com/checkout",
    "websiteKey": "6LcR_RsTAAAAACZftBu5aP9K0JWKZ4Oks-Oq_kTb"
  }'

Expected Response:

json Copy
{
  "success": true,
  "solution": "03AGdBq24PBCb...",
  "taskId": "abc123..."
}

Import This Workflow

Click to expand workflow JSON
json Copy
{
  "name": "reCaptcha V2 Invisible Solver API",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "solve-recaptcha-v2-invisible",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [-208, 0],
      "id": "f23b73b5-f1a9-41a9-92ff-8abf2b1ba8d7",
      "name": "Webhook",
      "webhookId": "cefac56f-b556-4a54-979d-f964d446852a"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.body.websiteURL }}",
        "websiteKey": "={{ $json.body.websiteKey }}",
        "optional": {
          "isInvisible": true,
          "pageAction": "={{ $json.body.pageAction || '' }}",
          "enterprisePayload": "={{ $json.body.enterprisePayload || '' }}",
          "isSession": "={{ $json.body.isSession || false }}",
          "apiDomain": "={{ $json.body.apiDomain || '' }}"
        }
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [112, 0],
      "id": "1774078e-d0dc-40a1-849d-336cc7444353",
      "name": "reCAPTCHA v2 Invisible",
      "credentials": {
        "capSolverApi": {
          "id": "sLg2YDZd7WtYJJJ4",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify({ success: true, solution: $json.data.solution.gRecaptchaResponse, taskId: $json.data.taskId }) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [400, 0],
      "id": "eb168812-e50f-4af4-abbf-69d80b23718a",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "reCAPTCHA v2 Invisible",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "reCAPTCHA v2 Invisible": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

Workflow 3: reCAPTCHA v3 Solver API

reCAPTCHA v3 is different from v2 because it doesn't present any challenge to the user. Instead, it assigns a score between 0.0 (likely a bot) and 1.0 (likely a human) based on user behavior. Websites set their own threshold โ€” for example, a score above 0.5 might be required to proceed.

When solving reCAPTCHA v3, the key additional parameter is the pageAction โ€” a string that identifies what action the user is performing (e.g., login, submit, homepage). This must match the action configured on the target website.

reCAPTCHA v3 solver workflow in n8n

How It Works

The workflow has the same three-node structure as v2:

  1. Webhook โ€” Receives POST requests at /solve-recaptcha-v3
  2. CapSolver reCAPTCHA v3 โ€” Solves with operation set to reCAPTCHA v3
  3. Respond to Webhook โ€” Returns the full CapSolver response as JSON

Node Configuration

1. Webhook Node

Setting Value
HTTP Method POST
Path solve-recaptcha-v3
Response Mode Response Node

2. CapSolver reCAPTCHA v3 Node

Parameter Value Description
Operation reCAPTCHA v3 Must be explicitly set โ€” different from v2
Type ReCaptchaV3TaskProxyLess Select in n8n based on the target site (see available types below)
Website URL {{ $json.body.websiteURL }} The URL of the page with the captcha
Website Key {{ $json.body.websiteKey }} The reCAPTCHA site key
Page Action {{ $json.body.pageAction }} Required โ€” must match the site's action
Enterprise Payload {{ $json.body.enterprisePayload || '' }} (Optional) For Enterprise reCAPTCHA
Is Session {{ $json.body.isSession || false }} (Optional) Session-based solving
API Domain {{ $json.body.apiDomain || '' }} (Optional) Custom API domain

Available types for reCAPTCHA v3 (select in n8n dashboard):

Type When to use
ReCaptchaV3TaskProxyLess Standard reCAPTCHA v3 โ€” works for most sites (no proxy needed)
ReCaptchaV3EnterpriseTask reCAPTCHA v3 Enterprise โ€” requires a proxy (ip:port:user:pass)
ReCaptchaV3EnterpriseTaskProxyLess reCAPTCHA v3 Enterprise without proxy

Important: The operation field must be set to reCAPTCHA v3 in the CapSolver node. If you leave it on the default (v2), the solving will fail or return an unusable token. Also, pageAction is required for v3 โ€” unlike v2 where it's optional. Select the correct type directly in the n8n node โ€” if you choose a type that requires a proxy, a proxy field will appear where you enter it in ip:port:user:pass format.

3. Respond to Webhook Node

Setting Value
Respond With JSON
Response Body {{ JSON.stringify($json.data) }}

Test It

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/solve-recaptcha-v3 \
  -H "Content-Type: application/json" \
  -d '{
    "websiteURL": "https://example.com/login",
    "websiteKey": "6LdKlZEpAAAAAAOQjzC2v_d36tWxCl6dWsozdSy9",
    "pageAction": "login"
  }'

Expected Response:

json Copy
{
  "taskId": "abc123...",
  "solution": {
    "gRecaptchaResponse": "03AGdBq24PBCb..."
  },
  "status": "ready"
}

Import This Workflow

Click to expand workflow JSON
json Copy
{
  "name": "reCaptcha V3 Solver API",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "solve-recaptcha-v3",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [416, 0],
      "id": "8e978abb-184a-4e24-bd81-a97e3a154d73",
      "name": "Webhook",
      "webhookId": "784376f0-b5c9-492f-8ed2-07b63cd6e3fe"
    },
    {
      "parameters": {
        "operation": "reCAPTCHA v3",
        "websiteURL": "={{ $json.body.websiteURL }}",
        "websiteKey": "={{ $json.body.websiteKey }}",
        "optional": {
          "pageAction": "={{ $json.body.pageAction }}",
          "enterprisePayload": "={{ $json.body.enterprisePayload || '' }}",
          "isSession": "={{ $json.body.isSession || false }}",
          "apiDomain": "={{ $json.body.apiDomain || '' }}"
        }
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [720, 0],
      "id": "25608e91-677b-4375-86e2-e2bcb6618aff",
      "name": "reCAPTCHA v3",
      "credentials": {
        "capSolverApi": {
          "id": "sLg2YDZd7WtYJJJ4",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json.data) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [1008, 0],
      "id": "cc59af4f-926f-4ae4-844e-d87a8ecc0131",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "reCAPTCHA v3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "reCAPTCHA v3": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

API Parameter Reference

All three API solver endpoints accept the same set of optional parameters through the CapSolver node. Here's a consolidated view:

Parameter v2 v2 Invisible v3 Description
websiteURL Required Required Required The URL of the page hosting the captcha
websiteKey Required Required Required The reCAPTCHA site key
pageAction Optional Optional Required The action name configured on the site (e.g., login, submit)
enterprisePayload Optional Optional Optional Additional payload for reCAPTCHA Enterprise
isInvisible Optional true (hardcoded) โ€” Whether the captcha is invisible
isSession Optional Optional Optional Enable session-based solving
apiDomain Optional Optional Optional Custom API domain (e.g., recaptcha.net)

Tip: You can identify all of these parameters automatically using the CapSolver Browser Extension. The extension's CAPTCHA Detector tab shows exactly which parameters the target site requires.


Real-World Examples: Submitting Tokens to Websites

So far, the API workflows above show how to get a solved captcha token. But what do you actually do with it?

In real-world automation, solving the captcha is only half the job. You need to submit the token to the target website โ€” exactly as a browser would โ€” to unlock the data or action behind the captcha.

Here's the general pattern:

  1. Solve the captcha โ†’ Get the gRecaptchaResponse token from CapSolver
  2. Submit the token โ†’ Send it to the target website via an HTTP Request (usually as a g-recaptcha-response form field or URL parameter)
  3. Verify the response โ†’ Check if the website accepted the token and returned the expected data
  4. Process the result โ†’ Extract the data you need

The following examples demonstrate this full cycle using Google's official reCAPTCHA demo sites.


Example 1: Solving & Submitting reCAPTCHA v2

Example: Google reCAPTCHA v2 Demo

reCAPTCHA v2 scraping workflow in n8n

Workflow Flow

Copy
Manual Trigger โ†’ CapSolver reCAPTCHA v2 โ†’ HTTP POST Request โ†’ IF (check success) โ†’ Edit Fields (extract data)

How It Works

  1. Manual Trigger โ€” Starts the workflow manually (click "Execute workflow"). You can replace this with any trigger โ€” Webhook, Schedule, App Event, etc.
  2. CapSolver reCAPTCHA v2 โ€” Solves the captcha for the demo page:
    • Website URL: https://www.google.com/recaptcha/api2/demo
    • Website Key: 6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-
  3. HTTP POST Request โ€” Submits the solved token to the same URL as a form POST:
    • The token is sent in the g-recaptcha-response form field
    • This is exactly what a browser does when you click "Submit" after solving the captcha
  4. IF Node โ€” Checks if the response HTML contains "recaptcha-success", meaning the captcha was accepted
  5. Edit Fields โ€” Extracts the data you need from the response. In a real scenario, this is where you'd parse the HTML using the HTML node to pull out specific elements (e.g., user data, product listings, form results) and map them to your output fields

Key concept: Every website handles token submission differently. In this demo, the token goes in a g-recaptcha-response form field via POST โ€” but other sites may expect it as a URL parameter, in a JSON body, or through a completely different endpoint. Always inspect the site's actual form submission (using DevTools Network tab) to see exactly how the token needs to be sent.

Click to expand workflow JSON
json Copy
{
  "name": "ReCaptcha V2 Solver",
  "nodes": [
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [-208, 0],
      "id": "4955f040-9cec-4696-8f59-88590e617b43",
      "name": "When clicking 'Execute workflow'"
    },
    {
      "parameters": {
        "websiteURL": "https://www.google.com/recaptcha/api2/demo",
        "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [208, 0],
      "id": "c6f9940e-dc06-42d3-bbff-0c6bc1a7b057",
      "name": "reCAPTCHA v2",
      "credentials": {
        "capSolverApi": {
          "id": "sLg2YDZd7WtYJJJ4",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://www.google.com/recaptcha/api2/demo",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "accept",
              "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8"
            },
            {
              "name": "accept-language",
              "value": "es-ES,es;q=0.7"
            },
            {
              "name": "cache-control",
              "value": "no-cache"
            },
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "origin",
              "value": "https://www.google.com"
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=0, i"
            },
            {
              "name": "referer",
              "value": "https://www.google.com/recaptcha/api2/demo"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not:A-Brand\";v=\"99\", \"Brave\";v=\"145\", \"Chromium\";v=\"145\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?0"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Windows\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "document"
            },
            {
              "name": "sec-fetch-mode",
              "value": "navigate"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "sec-fetch-user",
              "value": "?1"
            },
            {
              "name": "sec-gpc",
              "value": "1"
            },
            {
              "name": "upgrade-insecure-requests",
              "value": "1"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [416, 0],
      "id": "cb54fdc1-19b8-48b4-bdee-a978e02d33fc",
      "name": "HTTP Request"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "26963d7d-fbe0-473b-af6d-febafebd3019",
              "leftValue": "={{ $json.data }}",
              "rightValue": "recaptcha-success",
              "operator": {
                "type": "string",
                "operation": "contains"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [624, 0],
      "id": "72eeeaae-7472-4a61-8730-aa1c6fa0edaf",
      "name": "If"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "a2397a11-4145-4111-b5be-b01bf8e9ffae",
              "name": "status",
              "value": "valid",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [800, -16],
      "id": "4b7fea40-bbe2-4e61-92f7-d00e77d3f85b",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "7ba46f6f-2925-4baf-a68e-5fc1f143c10e",
              "name": "status",
              "value": "invalid",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [800, 192],
      "id": "7afcadb6-bac4-4008-9fc9-17e23b125c76",
      "name": "Edit Fields1"
    }
  ],
  "connections": {
    "reCAPTCHA v2": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking 'Execute workflow'": {
      "main": [
        [
          {
            "node": "reCAPTCHA v2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

Example 2: Solving & Submitting reCAPTCHA v2 Invisible

Example: reCAPTCHA v2 Invisible Demo

reCAPTCHA v2 Invisible scraping workflow in n8n

Workflow Flow

Copy
Manual Trigger โ†’ CapSolver reCAPTCHA v2 Invisible โ†’ HTTP POST Request โ†’ IF (check "Success!") โ†’ Edit Fields (extract data)

How It Works

  1. Manual Trigger โ€” Starts the workflow. You can replace this with a Webhook, Schedule, or any other trigger to automate the process.
  2. CapSolver reCAPTCHA v2 Invisible โ€” Solves the invisible captcha:
    • Website URL: https://recaptcha-demo.appspot.com/recaptcha-v2-invisible.php
    • Website Key: 6LcmDCcUAAAAAL5QmnMvDFnfPTP4iCUYRk2MwC0-
    • Is Invisible: true
  3. HTTP POST Request โ€” Submits the token along with the form's other fields:
    • ex-a: foo (example form field)
    • ex-b: bar (example form field)
    • g-recaptcha-response: the solved token
  4. IF Node โ€” Checks if the response contains "Success!"
  5. Edit Fields โ€” Extracts the data from the response. After the site accepts your token, the HTML response contains the protected content โ€” use the HTML node to parse specific elements or Edit Fields to map the data you need

Key concept: Real forms often have additional fields beyond just the captcha token. You need to include all required form fields in your HTTP Request โ€” not just g-recaptcha-response. Inspect the form to find what fields are expected.

Click to expand workflow JSON
json Copy
{
  "name": "ReCaptcha V2 Invisible Solver",
  "nodes": [
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [-208, 0],
      "id": "fee1e6e4-8891-472c-9e1e-ed5f959e6ade",
      "name": "When clicking 'Execute workflow'"
    },
    {
      "parameters": {
        "websiteURL": "https://recaptcha-demo.appspot.com/recaptcha-v2-invisible.php",
        "websiteKey": "6LcmDCcUAAAAAL5QmnMvDFnfPTP4iCUYRk2MwC0-",
        "optional": {
          "isInvisible": true
        }
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [112, 0],
      "id": "34090a6e-7a8b-4194-8939-a17aa6a0d091",
      "name": "reCAPTCHA v2 Invisible",
      "credentials": {
        "capSolverApi": {
          "id": "sLg2YDZd7WtYJJJ4",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://recaptcha-demo.appspot.com/recaptcha-v2-invisible.php",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "accept",
              "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8"
            },
            {
              "name": "accept-language",
              "value": "es-ES,es;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache"
            },
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "origin",
              "value": "https://recaptcha-demo.appspot.com"
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=0, i"
            },
            {
              "name": "referer",
              "value": "https://recaptcha-demo.appspot.com/recaptcha-v2-invisible.php"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not:A-Brand\";v=\"99\", \"Brave\";v=\"145\", \"Chromium\";v=\"145\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?0"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Windows\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "document"
            },
            {
              "name": "sec-fetch-mode",
              "value": "navigate"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "sec-fetch-user",
              "value": "?1"
            },
            {
              "name": "sec-gpc",
              "value": "1"
            },
            {
              "name": "upgrade-insecure-requests",
              "value": "1"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "ex-a",
              "value": "foo"
            },
            {
              "name": "ex-b",
              "value": "bar"
            },
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [400, 0],
      "id": "d15d7274-b8ba-4f38-8702-ae9baeb9c6c8",
      "name": "HTTP Request"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "9ab97a06-eea2-44e7-b4b7-3f9bf4217378",
              "leftValue": "={{ $json.data }}",
              "rightValue": "Success!",
              "operator": {
                "type": "string",
                "operation": "contains"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [704, 0],
      "id": "fd8163d6-6357-4fe3-8ce7-dd82e4068e28",
      "name": "If"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "8fd59323-1554-45cc-9e38-510006ec6de1",
              "name": "status",
              "value": "valid",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [1008, -96],
      "id": "4643c947-4d5a-4322-a683-fdea734a4ac8",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "780281be-fd00-46ac-8cdb-3ec57cce0ad2",
              "name": "status",
              "value": "invalid",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [1008, 160],
      "id": "f260cfcb-426b-472b-87ad-196570c91bd7",
      "name": "Edit Fields1"
    }
  ],
  "connections": {
    "When clicking 'Execute workflow'": {
      "main": [
        [
          {
            "node": "reCAPTCHA v2 Invisible",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "reCAPTCHA v2 Invisible": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

Example 3: Solving & Submitting reCAPTCHA v3

Example: reCAPTCHA v3 Demo โ€” Request Scores

reCAPTCHA v3 scraping workflow in n8n

Workflow Flow

Copy
Manual Trigger โ†’ CapSolver reCAPTCHA v3 โ†’ HTTP GET Request (verify) โ†’ IF (check success) โ†’ Edit Fields (extract data)

How It Works

  1. Manual Trigger โ€” Starts the workflow. Swap this for a Webhook, Schedule, or any trigger that fits your use case.
  2. CapSolver reCAPTCHA v3 โ€” Solves the v3 captcha:
    • Operation: reCAPTCHA v3 (must be explicitly selected)
    • Website URL: https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php
    • Website Key: 6LdKlZEpAAAAAAOQjzC2v_d36tWxCl6dWsozdSy9
    • Page Action: examples/v3scores
  3. HTTP GET Request โ€” Submits the token to the verification endpoint:
    • URL: https://recaptcha-demo.appspot.com/recaptcha-v3-verify.php?action=examples/v3scores&token={{ $json.data.solution.gRecaptchaResponse }}
    • The token is passed as a URL query parameter instead of a form field
  4. IF Node โ€” Checks if the JSON response has success: true
  5. Edit Fields โ€” Extracts the data from the JSON response. For v3, this includes the score, action, challenge_ts, and hostname โ€” all useful fields to capture for your records or downstream processing

Key differences with v3:

  • The CapSolver node operation must be set to reCAPTCHA v3
  • You must provide the pageAction parameter (e.g., examples/v3scores)
  • The token is often submitted via URL parameters (GET) rather than form POST
  • The verification response is typically JSON with a success boolean and a score
Click to expand workflow JSON
json Copy
{
  "name": "ReCaptcha V3 Solver",
  "nodes": [
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [-208, 0],
      "id": "1ae3c7b4-7f2e-48a0-a624-d12f2061838a",
      "name": "When clicking 'Execute workflow'"
    },
    {
      "parameters": {
        "operation": "reCAPTCHA v3",
        "websiteURL": "https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php",
        "websiteKey": "6LdKlZEpAAAAAAOQjzC2v_d36tWxCl6dWsozdSy9",
        "optional": {
          "pageAction": "examples/v3scores"
        }
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [112, 0],
      "id": "f4b5142b-5e3f-4689-9814-505630695b5b",
      "name": "reCAPTCHA v3",
      "credentials": {
        "capSolverApi": {
          "id": "sLg2YDZd7WtYJJJ4",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "url": "=https://recaptcha-demo.appspot.com/recaptcha-v3-verify.php?action=examples/v3scores&token={{ $json.data.solution.gRecaptchaResponse }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "accept",
              "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8"
            },
            {
              "name": "accept-language",
              "value": "es-ES,es;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache"
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=0, i"
            },
            {
              "name": "referer",
              "value": "https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not:A-Brand\";v=\"99\", \"Brave\";v=\"145\", \"Chromium\";v=\"145\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?0"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Windows\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "document"
            },
            {
              "name": "sec-fetch-mode",
              "value": "navigate"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "sec-fetch-user",
              "value": "?1"
            },
            {
              "name": "sec-gpc",
              "value": "1"
            },
            {
              "name": "upgrade-insecure-requests",
              "value": "1"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [400, 0],
      "id": "09d39698-5a68-48b7-834b-8235bb9c52a6",
      "name": "HTTP Request"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "8e8316a9-c22e-415e-a6a0-6fe540c84ff8",
              "leftValue": "={{ $json.success }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [704, 0],
      "id": "8f4a193d-fd29-40bc-829f-b891c443d66c",
      "name": "If"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "8422eb0d-08fc-4fc8-9045-4078ff353e61",
              "name": "status",
              "value": "valid",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [1008, -96],
      "id": "9b078aad-be74-4e00-b54d-e5fbb85fc58b",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "b86b2a4b-e2d4-48f2-b7a6-ba92aac6fa96",
              "name": "status",
              "value": "invalid",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [1008, 160],
      "id": "a468b0f4-114c-4565-b199-68cb175a543e",
      "name": "Edit Fields1"
    }
  ],
  "connections": {
    "When clicking 'Execute workflow'": {
      "main": [
        [
          {
            "node": "reCAPTCHA v3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "reCAPTCHA v3": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

Applying This Pattern to Any Website

These examples use demo sites, but the pattern works for any reCAPTCHA-protected website. To adapt it:

  1. Identify the captcha parameters using the CapSolver extension (website URL, site key, type, pageAction)
  2. Inspect the form submission โ€” Use your browser's DevTools Network tab to see what request the form sends when submitted (URL, method, headers, body fields)
  3. Replicate the request in n8n โ€” Configure the HTTP Request node to match the form submission exactly, inserting the solved token in the g-recaptcha-response field
  4. Add validation โ€” Use an IF node to check the response and confirm the data was unlocked
  5. Extract the data โ€” Once the site accepts the token, parse the response to extract the data you need. Use the HTML node for HTML responses or Edit Fields for JSON responses

Note: These examples use Manual Trigger for simplicity, but you can replace it with any trigger node โ€” Webhook (to build an API), Schedule (to run every hour), App Event (to react to Telegram messages), or any other. See Ways to Trigger Your Workflows for all options.


Ways to Trigger Your Workflows

The examples in this guide use Manual Trigger (for scraping workflows) and Webhook (for API workflows), but n8n offers many more ways to start a workflow. You can swap the trigger node to match your use case:

Trigger Description Best for
Trigger manually Click "Execute workflow" in n8n Testing and one-off runs
On a schedule Runs every day, hour, or custom interval (cron) Recurring scraping jobs (e.g., check a site every hour)
On webhook call Runs on receiving an HTTP request Building APIs that other services can call
On app event Runs when something happens in Telegram, Notion, Airtable, etc. Reacting to events (e.g., new Telegram message triggers a solve)
On form submission Generates a web form in n8n and passes responses to the workflow Letting users submit captcha parameters through a form
When executed by another workflow Called by the Execute Workflow node from a different workflow Modular architecture โ€” keep your solver as a reusable sub-workflow
On chat message Runs when a user sends a chat message (AI nodes) Chatbot integrations that need to solve captchas on demand
Other ways Workflow errors, file changes, etc. Advanced automation triggers
n8n trigger options

For example, to run your scraping workflow every hour, simply replace the Manual Trigger with a Schedule Trigger node and set the interval to 1 hour. The rest of the workflow stays exactly the same.


Storing and Exporting Scraped Data

Once your workflow solves a captcha and retrieves data from the target website, you'll want to store or export that data. n8n provides built-in data transformation and output nodes for this.

Data Transformation

Before saving, you can transform the scraped data using n8n's built-in nodes:

Node Description
Merge Combine data from multiple sources (e.g., merge results from v2 and v3 scrapers)
Summarize Sum, count, max, etc. across items
Convert to File Convert JSON data to CSV, Excel, or other binary formats
Extract from File Convert binary data to JSON
HTML Parse and extract data from HTML responses
XML Convert between JSON and XML
Rename Keys Rename fields to match your desired output format
Sort Reorder items before exporting
n8n data transformation nodes

Output Destinations

After the IF node validates the response, you can add any of these nodes to save the data:

Destination How
Google Sheets Append rows to a spreadsheet โ€” great for tracking results over time
Excel / CSV file Use the Convert to File node to generate .xlsx or .csv, then save with the Write Binary File node or upload to Google Drive
Database (MySQL, PostgreSQL, MongoDB) Insert directly into a database table for structured storage
Airtable / Notion Send data to your project management tools
Google Drive / S3 Upload files to cloud storage
Telegram / Slack / Email Send notifications with the scraped data
Local JSON file Write results to a .json file on disk

Example: Adding Google Sheets output to the v2 scraping workflow

Copy
Manual Trigger โ†’ CapSolver v2 โ†’ HTTP POST โ†’ IF (check success) โ†’ Google Sheets (append row)

Simply add a Google Sheets node after the IF node's "true" output. Map the fields you want to save (e.g., status, token, timestamp) and each successful scrape automatically adds a row to your spreadsheet.

Tip: You can combine multiple outputs โ€” for example, save to Google Sheets and send a Telegram notification at the same time by connecting both nodes to the IF node's "true" output.


Troubleshooting

"ERROR_KEY_DOES_NOT_EXIST" or Invalid API Key

Symptom CapSolver node fails with an API key error
Cause Your API key is incorrect or not configured
Fix Double-check your API key in Settings โ†’ Credentials.

"ERROR_ZERO_BALANCE"

Symptom Task creation fails with a balance error
Cause Your CapSolver account has no credits
Fix Top up your balance at the CapSolver Dashboard

Wrong or Expired Token

Symptom The returned gRecaptchaResponse token is rejected by the target website
Cause reCAPTCHA tokens expire after ~120 seconds
Fix Use the token immediately after receiving it.

Token Not Accepted by the Website

Symptom CapSolver returns a token successfully, but the target website still rejects it
Cause Some websites have additional anti-bot protections beyond reCAPTCHA, or require specific parameters (Enterprise, cookies, headers) that weren't included
Fix Double-check that you're submitting the token exactly as the site expects (correct field name, method, and endpoint). Make sure all required parameters are set (check with the CapSolver extension). If the token is still not accepted, contact the CapSolver support team for assistance โ€” they can help diagnose site-specific issues

reCAPTCHA Enterprise Not Solving

Symptom Standard solving doesn't work on some sites
Cause The site uses reCAPTCHA Enterprise, which requires additional parameters
Fix Use the CapSolver extension to check if isEnterprise is true. If so, include the enterprisePayload parameter in your request

Timeout or Slow Response

Symptom The webhook takes too long or times out
Cause Captcha solving can take 10-30 seconds depending on complexity and load
Fix Increase the webhook timeout in n8n settings. Consider adding retry logic for production use cases

Best Practices

  1. Use tokens immediately โ€” reCAPTCHA tokens expire quickly (~120 seconds). Send the token to the target website as soon as you receive it from your solver API.

  2. Verify parameters with the extension โ€” Always use the CapSolver browser extension to confirm the correct websiteKey, captcha type, and additional parameters before configuring your workflow.

  3. Keep your API key secure โ€” Never expose your CapSolver API key in client-side code. These n8n workflows keep your key server-side, which is the recommended approach.

  4. Monitor your balance โ€” Set up balance alerts in the CapSolver dashboard to avoid unexpected workflow failures due to insufficient credits.

  5. Add error handling โ€” For production workflows, add an IF node after the CapSolver node to check for errors and handle them gracefully (e.g., retry, notify, or log the failure).


Conclusion

You've learned how to build reCAPTCHA-solving APIs and complete scraping workflows using n8n and CapSolver โ€” no traditional coding required.

In this guide, we covered:

  • API solver endpoints for reCAPTCHA v2, v2 Invisible, and v3 using webhook-based workflows
  • Real-world scraping examples showing how to submit solved tokens to target websites and verify the results
  • How to identify captcha parameters using the CapSolver browser extension
  • Best practices for token handling, error management, and production use

The key takeaway: solving the captcha is only half the job โ€” you also need to submit the token to the target website to unlock the protected data. The scraping examples show you exactly how to do this for each reCAPTCHA type.


Ready to get started? Sign up for CapSolver and use bonus code n8n for an extra 8% bonus on your first recharge!

CapSolver bonus code banner


Frequently Asked Questions

What captcha types does CapSolver support in n8n?

CapSolver's n8n node supports reCAPTCHA v2, reCAPTCHA v2 Invisible, reCAPTCHA v3, and more. Check the n8n CapSolver integration page for the full list.

How much does it cost to solve a reCAPTCHA?

Pricing varies by captcha type. reCAPTCHA v2 typically costs around $1-3 per 1,000 solves. Check the CapSolver pricing page for current rates.

How long does it take to solve a reCAPTCHA?

Most reCAPTCHA v2 challenges are solved in 5-20 seconds. reCAPTCHA v3 is typically faster since there's no image challenge involved.

Can I use these workflows with n8n Cloud?

Yes! These workflows work with both self-hosted n8n and n8n Cloud. The CapSolver node is already available as an official integration โ€” just add your API credentials.

How do I find the reCAPTCHA site key for a website?

The easiest method is using the CapSolver browser extension โ€” open DevTools, go to the "CapSolver Captcha Detector" tab, and trigger the captcha. The extension will display all parameters automatically. Alternatively, you can search the page source for data-sitekey or render= in the reCAPTCHA script URL.

What's the difference between reCAPTCHA v2 and v2 Invisible?

Both use the same underlying technology, but v2 shows a visible checkbox ("I'm not a robot") while v2 Invisible runs in the background without any visible widget. When solving, the only difference is setting isInvisible: true.

Can I solve reCAPTCHA Enterprise with these workflows?

Yes. Use the CapSolver extension to detect if a site uses Enterprise reCAPTCHA. If it does, include the enterprisePayload parameter in your API request to the v2 solver workflow.

What happens if CapSolver fails to solve a captcha?

The CapSolver node will return an error. For production workflows, it's recommended to add error handling (e.g., an IF node to check for errors and a retry mechanism or notification).

Compliance Disclaimer: The information provided on this blog is for informational purposes only. CapSolver is committed to compliance with all applicable laws and regulations. The use of the CapSolver network for illegal, fraudulent, or abusive activities is strictly prohibited and will be investigated. Our captcha-solving solutions enhance user experience while ensuring 100% compliance in helping solve captcha difficulties during public data crawling. We encourage responsible use of our services. For more information, please visit our Terms of Service and Privacy Policy.

More