Captcha Solving in n8n With the HTTP Request Node
Solve reCAPTCHA and Turnstile in n8n using only the built-in HTTP Request node — works on n8n Cloud — with timeouts, retries and error branches set up.
You can add captcha solving to an n8n workflow with nothing but the built-in HTTP Request node: one node sends the challenge to a solving API and waits for the token, and the next node submits that token with your request. No community node is needed, which matters because n8n's documentation says unverified community nodes are not available on n8n Cloud. This guide builds the workflow step by step, covers the settings that keep it reliable — timeouts, retries and error branches — and explains where captcha solving in n8n stops being the right tool. The short reference version is on our n8n integration page.
Why use the HTTP Request node instead of a community node
The HTTP Request node works everywhere n8n runs, and it keeps your workflow independent of any one solver's node. Several solver-specific nodes exist, and template marketplaces list workflows built on them, but each one ties the workflow to that provider and to self-hosting. n8n's community node installation docs state that unverified community nodes "aren't available on n8n cloud and require self-hosting n8n". A plain HTTP call to a solving API needs neither.
The workflow at a glance
A captcha step in n8n is four nodes in a row:
- Get the page (HTTP Request): fetch the page that contains the captcha.
- Extract the sitekey (HTML node or Code node): pull the
data-sitekeyvalue and the page URL. - Solve (HTTP Request): post the challenge to the solving API and wait for the token.
- Submit (HTTP Request): send the form or API call with the token attached.
The same shape works for reCAPTCHA, Cloudflare Turnstile and DataDome; only the request type and where the token goes change.
Step 1 and 2: get the page and extract the sitekey
Fetch the page with an HTTP Request node set to return text, then extract the sitekey with an HTML node using the CSS selector [data-sitekey] and the attribute data-sitekey. Turnstile widgets use the class cf-turnstile; reCAPTCHA uses g-recaptcha. Pass the page URL through alongside the sitekey — the solve needs both.
If the HTTP Request node gets a challenge page instead of your content, look at the response headers: Cloudflare marks challenge responses with cf-mitigated: challenge. That is a different problem from a captcha on a form, explained in our guide to Cloudflare's "Verifying you are human" page.
Step 3: configure the solve request
Add an HTTP Request node with these settings (names as they appear in the node, per n8n's HTTP Request documentation):
| Setting | Value |
|---|---|
| Method | POST |
| URL | https://api.captchano.com/v1/solve?wait=60 |
| Authentication | Generic Credential Type → Header Auth, name Authorization, value Bearer cn-YOUR_API_KEY |
| Send Body | On, Body Content Type: JSON |
| Options → Timeout | 75000 (milliseconds — longer than the 60-second wait) |
Use this JSON body, with expressions pulling values from the previous node:
{
"type": "turnstile",
"sitekey": "{{ $json.sitekey }}",
"url": "{{ $json.pageUrl }}"
}
Change type to recaptcha_v2 or recaptcha_v3 for reCAPTCHA. The ?wait=60 parameter makes the call block until the solve is ready, so the node outputs the finished result instead of a task to poll. The response looks like { "status": "ready", "solution": { "token": "...", "userAgent": "..." }, "cost": "..." }; the full shape and error codes are in the API reference.
Store the API key as an n8n credential, never as plain text in the body or URL, so it does not end up in exported workflows or execution logs.
Step 4: submit the token
Pass {{ $json.solution.token }} to the request the captcha protects, in the field the site expects: g-recaptcha-response for reCAPTCHA, cf-turnstile-response for Turnstile, usually as form fields in the same POST the browser would send. Open the site's form in your browser's developer tools once and copy exactly what it submits; guessing field names is the most common reason this step fails.
Send the submit request with the same User-Agent header the solve returned, and through the same proxy if you used one (HTTP Request → Options → Proxy). Tokens are judged against the session that submits them, which is the theme of why captcha tokens get rejected.
Make it reliable: timeouts, retries and error branches
Configure failure handling on the solve node rather than letting one failed solve stop the workflow. n8n's node settings give you three tools, documented in its node reference and rate-limit guide:
- Retry On Fail with Max Tries and Wait Between Tries (ms): retry a solve that timed out or hit a temporary capacity error. Two or three tries with a few seconds between them is plenty.
- On Error → Continue (using error output): route failed items to a branch that logs them, alerts you, or queues them for later instead of failing the whole run.
- Batching (HTTP Request → Options): when a workflow processes many items, limit how many solves start at once so you do not flood the target site.
Do not retry on errors that will never succeed — an invalid API key or an unsupported type. Check the error code in the response and send those straight to the error branch. Failed solves are not billed by CaptchaNo, so a retry costs time, not money.
Request the token late
Put the solve node directly before the submit node. Tokens expire — Google documents two minutes for reCAPTCHA — so a workflow that solves, then waits on other nodes, then submits will see expired tokens on slow runs. If a Wait node or a slow API sits between them, move the solve after it.
When n8n is not the right tool
n8n's HTTP Request node does not run a browser, so it cannot execute a page's JavaScript. That is fine for forms and APIs that accept a token in the request, but sites whose protection checks the browser environment on every page — or that need a click-through flow — are better handled by a real browser with Playwright or Puppeteer, with n8n triggering and collecting the results. And as with any automation, use it only where you are permitted to automate.
Frequently Asked Questions
Does n8n have a built-in captcha solver?
No. n8n has no native captcha node, but its built-in HTTP Request node can call any captcha solving API, which is all you need. Several providers publish community nodes, though n8n's documentation says unverified community nodes require self-hosting and are not available on n8n Cloud, so the HTTP Request approach is the portable one.
Can I solve captchas on n8n Cloud?
Yes, by calling a solving API from the built-in HTTP Request node, which is available on every n8n plan. What you cannot do on n8n Cloud is install unverified community nodes, so solver-specific nodes that are not verified will not work there. The workflow in this guide uses only built-in nodes.
How long should the HTTP Request timeout be for a captcha solve?
Set it longer than the solve's own wait. With CaptchaNo's wait parameter at 60 seconds, a node timeout of about 75,000 milliseconds gives the API time to return a finished result. A timeout shorter than the wait makes n8n abort calls that would have succeeded.
Where do I put the captcha token in the next request?
In the field the site's own form submits, usually g-recaptcha-response for reCAPTCHA and cf-turnstile-response for Turnstile, sent in the same POST request a browser would make. Inspect the form submission once in your browser's developer tools and copy its field names rather than guessing them.
Why is my token rejected even though the solve succeeded?
Usually the session does not match or the token is too old. Submit through the same proxy and with the same user agent the solve used, and put the solve node immediately before the submit node. Tokens are single-use, so a retried submission needs a fresh solve rather than the original token.
Add a solve step to your workflow
Start a free CaptchaNo trial, create an API key in the dashboard, and paste it into a Header Auth credential. The n8n agent guide covers using the same call from n8n's AI agent nodes.