Solve image captchas in Puppeteer / Node.js today — reCAPTCHA, hCaptcha & Turnstile flows are planned previews — Last Updated: August 29, 2026
CaptchaKings provides fast, headless-friendly server-side captcha recognition for Puppeteer and Node.js web automation bots without risky client-side solver extensions:
📋 Status: Live today via the API: image/text captchas ($0.80 per 1,000, ~1.2s median) plus GeeTest, Tencent, xCaptcha, MTCaptcha and Amazon WAF ($1.00 per 1,000) — measured numbers at /benchmarks. reCAPTCHA, hCaptcha and Cloudflare Turnstile are planned, not yet available — see /supported-captchas.
The popular plugin runs solving logic inside the automated browser. That leaves a detectable footprint, breaks whenever Google ships a reCAPTCHA update, and struggles with Enterprise score-based challenges. A server-side solving API decouples you from the cat-and-mouse game: your bot just asks for a token and injects it — the same technique used by large-scale scraping teams.
npm install puppeteer axios
# Recommended companion:
npm install puppeteer-extra puppeteer-extra-plugin-stealth
This flow goes live when reCAPTCHA support launches — see /recaptcha-solver. The image-captcha flow below works today.
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
const axios = require('axios');
puppeteer.use(StealthPlugin());
const API_KEY = 'ck_your_api_key_here';
const PAGE_URL = 'https://example.com/register';
async function solveRecaptchaV2(sitekey, pageUrl) {
const { data } = await axios.post('https://captchakings.com/api', {
api_key: API_KEY,
captcha_type: 'recaptcha_v2',
sitekey: sitekey,
page_url: pageUrl
});
if (!data.token) throw new Error('Solve failed: ' + JSON.stringify(data));
return data.token; // valid g-recaptcha-response (planned flow)
}
(async () => {
const browser = await puppeteer.launch({ headless: 'new' });
const page = await browser.newPage();
await page.goto(PAGE_URL, { waitUntil: 'networkidle2' });
// 1. Extract the sitekey
const sitekey = await page.$eval('[data-sitekey]', el => el.dataset.sitekey);
// 2. Solve server-side
const token = await solveRecaptchaV2(sitekey, PAGE_URL);
// 3. Inject + submit
await page.evaluate((t) => {
document.getElementById('g-recaptcha-response').innerHTML = t;
}, token);
await Promise.all([
page.waitForNavigation({ waitUntil: 'networkidle2' }),
page.click('button[type=submit]')
]);
console.log('Passed:', page.url());
await browser.close();
})();
const el = await page.$('#captcha-img');
await el.screenshot({ path: 'captcha.png' });
const FormData = require('form-data');
const fs = require('fs');
const form = new FormData();
form.append('captcha', fs.createReadStream('captcha.png'));
form.append('api_key', API_KEY);
const { data } = await axios.post('https://captchakings.com/api/process.php', form, {
headers: form.getHeaders()
});
console.log('Answer:', data.prediction, '| confidence:', data.confidence);
Flat pay-as-you-go rates — $0.80 per 1,000 image/text solves and $1.00 per 1,000 token solves. No volume tiers, no subscription.
| Monthly Volume | Type | Approx. Cost |
|---|---|---|
| 10,000 solves | Image / text OCR | $8.00 |
| 10,000 solves | Token types (GeeTest, Tencent, xCaptcha, MTCaptcha, Amazon WAF) | $10.00 |
| 100,000 solves | Image / text OCR | $80.00 |
| 100,000 solves | Token types | $100.00 |
| reCAPTCHA / hCaptcha / Turnstile | Planned — see the support matrix | |
| Testing | Any live type | $0 — free $0.50 signup balance |
Yes — it's the recommended pairing. Stealth masks automation signals while CaptchaKings clears the challenge server-side.
Yes. The API is stateless and handles high concurrency, so puppeteer-cluster workers can request tokens in parallel without rate issues on paid plans.
Report it via the API for an automatic refund, then request a new token — failed solves are never billed. Note: the reCAPTCHA token flow is planned, not yet live — see /supported-captchas and /recaptcha-solver.
🎁 Free $0.50 balance — test the live image-captcha flow today, on us. Create your API key →