Node.js CAPTCHA Solver for Puppeteer, Playwright and Plain JavaScript
Add capskip from npm, await the answer and move on. The typed, dependency-free client gets reCAPTCHA, text images, Turnstile and GeeTest v3 solved by an app on hardware you own, never billed per solve.
- npm install capskip
- Ships TypeScript types
- No per-solve meter
const solver = new CapSkip();
const token = await solver.recaptcha({
sitekey: '6Le-wvkS…',
url: 'example.com/signup'
});03AGdBq27…0.12s · $0.00Run npm install capskip and your project gains a Node.js CAPTCHA solver: pass it a reCAPTCHA, a Cloudflare Turnstile widget, a GeeTest v3 slide or a distorted text image, and the Promise resolves with a token or the recognized characters. The work happens inside the CapSkip desktop app, which you run on Windows (a home PC or a VPS); the package itself is a lean HTTP client for Node 18 and newer with zero runtime dependencies.
Because every method returns a Promise, the client reads like the rest of your async code. Await it inside Puppeteer and Playwright code, fetch-based crawlers or queue workers, or start dozens of solves at once and gather them with Promise.all. TypeScript definitions ship in the package, so this JavaScript CAPTCHA solver fits CommonJS, ESM and typed projects alike.
Parallelism costs nothing extra. There is no per-solve meter and no per-key rate limit, so a batch of two hundred is billed the same as a single call; what sets the ceiling is how much CPU and memory the solving machine has. Plans start at $35 a month for one device, with unlimited solving on every tier.
Your 2Captcha client can stay. If a Node project on the CapSkip machine already uses a 2Captcha or Anti-Captcha library, enable that service's emulator in the app, then hit its Add button for the hosts file. Its requests then resolve locally, with no balance to refill and not one line of code changed.
Why this npm CAPTCHA solver fits async Node code
Await one solve or a thousand
Each method returns a Promise. Await a single answer inline, or fan out with Promise.all and switch to Promise.allSettled when one failed challenge must not reject the rest.
Typed for TypeScript projects
Definitions for SolveResult and every options object come inside the package, so your editor autocompletes without an @types install. ES modules load the CommonJS build through Node interop.
One entry in your lockfile
The client is built only on the core http and https modules of Node 18 and newer, so adding it pulls nothing else into node_modules.
A proxy on each token solve
Give token solves a proxy with its type and URI, and the challenge is cleared from the IP that later submits the form. SOCKS5 and SOCKS5h are accepted, as are HTTP and HTTPS.
Sits beside any headless browser
The client never drives a browser. Puppeteer or Playwright reads the widget, CapSkip sends back the answer, and one page.evaluate call writes it where the form expects it.
Wider batches, same invoice
No fee per solve and no rate limit per key: parallel solves stop only where the solving PC runs out of processor time and RAM, so concurrency becomes a hardware decision.
Pick how your Node project reaches CapSkip
// npm install capskip
const { CapSkip } = require('capskip');
const solver = new CapSkip({ host: '127.0.0.1', port: 8080 });
(async () => {
const result = await solver.recaptcha(
'YOUR_SITEKEY',
'https://example.com/page-with-recaptcha',
);
console.log(result.code); // token, inject and submit
})();One client, one await: the token lands in result.code, ready to write into a page or post with fetch.
Let the extension clear widgets
No solving code at all: with the Chrome or Firefox extension installed and the app running, widgets clear in the page. Puppeteer and Playwright can also load it into the Chromium they launch.
The npm client and its siblings
One await per challenge from Node 18 or newer. Official clients for Python, PHP and .NET exist too, for the parts of your stack not written in JavaScript.
Local API for code you already run
Any Node HTTP client can call the app directly, and 2Captcha or Anti-Captcha libraries reach it unchanged through the built-in service emulation.
Try the client on a live reCAPTCHA page
Our demo hosts a real reCAPTCHA v2 widget. Point a few lines of Node at it, or open it in a browser where the extension is active, and see a token returned, all before your production code gets involved.
Three steps from npm install to a first token
-
Install the solver app
Install CapSkip on whichever Windows computer or VPS should carry the solving load. Your Node code can run there too, or on any other box with a network route to it. Get the Windows installer
-
Activate a plan or the trial
Choose a monthly plan, or try CapSkip free for 3 days with up to 500 solves and no card. The emailed credentials unlock the app on first sign-in. See plans and prices
-
Add capskip and await a solve
Install the package with npm, create one client for the app, and await a solve wherever a CAPTCHA stops your script, worker or browser session. Open the SDK guide
Metered solving APIs vs CapSkip inside a Node.js codebase
What changes for a Node codebase when solving moves from a metered remote API to an app on a machine you control.
| Feature | CapSkip | 2Captcha / CapSolver |
|---|---|---|
| How you pay | $35 a month and up, every solve included, no setup fee | Charged per thousand solves, pay as you go |
| Where challenges are solved | Inside CapSkip, on the Windows PC or server you run it on | On remote servers or by a human solving farm |
| Cost of a bigger Promise.all batch | Nothing extra: the limit is your CPU and memory | Each extra parallel solve is another charge |
| Monthly cost as volume grows | Fixed, whatever your solve count | Rises in line with volume |
| Challenge data | Never leaves the machine you control | Passed to a third party to solve |
| Node package | capskip on npm: typed, zero dependencies, plus API emulation | A vendor-specific client tied to their API |
| Image CAPTCHA turnaround | Around 0.1 seconds, no remote queue | Round trip and queue time on each solve |
Pricing
Stop paying per solve
Choose your license
Bronze License
$35/ month
Instant license activation
Billed monthly. Cancel from your account whenever you like.
Same features. More machines, more throughput.
Every machine solves as fast as its own CPU and memory allow. More machines run more threads at the same time, so Silver solves twice as many CAPTCHAs at once and Gold three times as many.
- Unlimited solving, no daily cap
- Unlimited threads, speed scales with your hardware
- 90% to 100% recognition accuracy
- Drop-in replacement for the major solving service APIs
- Works with almost any tool, no coding required
- REST API, SDKs and a browser extension
- Free training when a new CAPTCHA type appears
- Runs on your machine, nothing leaves it
Every CAPTCHA type CapSkip solves is on every license. See the coverage band
Just want to try it first?
Start with a free 3-day trial and solve 500 CAPTCHAs of any type on your own targets.
Related CAPTCHA solvers & guides
Solve CAPTCHA using JavaScript: from one await to a queue worker
Start with a single call. In a project on Node 18 or newer, add the package, point one CapSkip client at the app's host and port, and share it across modules. For reCAPTCHA or Turnstile, pass the sitekey and the page URL; for GeeTest v3, a gt value plus a newly issued challenge; for an image, a file path, URL or data URI. An hCaptcha takes the same pair as reCAPTCHA, its sitekey and the page URL.
Then fan out. Since every method returns a Promise, a crawler can start solves for many pages and await them together. Promise.allSettled is the safer collector, because one rejected solve comes back as a status instead of discarding the batch. CapSkip sets no thread cap, which makes the machine the limit. Image solves are light, but reCAPTCHA, Turnstile and GeeTest run real browser instances in the background, so budget 32 GB of RAM or more when many run side by side.
For long-running jobs, move solving into a queue worker so web requests never wait on a challenge; the BullMQ guide below shows one pattern. Set timeouts per type with headroom to spare. Image answers are near instant (about 0.1 seconds), while the browser-based types take longer: plan on 3 to 10 seconds for reCAPTCHA or Turnstile, and on about 7 to 12 for GeeTest.
Finally, spend tokens quickly. reCAPTCHA and Turnstile tokens expire within minutes, so submit as soon as the solve resolves, and send that request from the IP the proxy used. In a browser, set the hidden response field through page.evaluate; with fetch or undici, append the token to the form body.
Related guides: Puppeteer CAPTCHA solver · Cloudflare Turnstile in Node.js · BullMQ CAPTCHA worker
Which npm package do I install to solve CAPTCHAs?
Can I await solves inside Puppeteer or Playwright scripts?
Does the client work with fetch and no browser at all?
What does the Turnstile call return on a full Cloudflare challenge page?
How many solves can one Node process keep in flight?
Can I import capskip from an ES module or a TypeScript file?
How do I read an image CAPTCHA with JavaScript?
Will my existing 2Captcha npm code work against CapSkip?
Put a CAPTCHA answer behind every await
Install the app, add capskip to your package.json and await your first token. A flat monthly plan covers every solve your scripts, crawlers and workers make, at any batch size.
