C# CAPTCHA Solver for Async .NET Code, Selenium and Playwright
Reference one NuGet package, await a token or the text of an image CAPTCHA, and let CapSkip do the work on a Windows PC or server you control, with no meter on how often your .NET code asks.
- MIT-licensed NuGet SDK
- .NET Standard 2.0
- Flat monthly license
var solver = new CapSkip();
var token = await solver.ReCaptcha(
sitekey: "6Le-wvkS…",
url: "example.com/signup");03AGdBq27…0.12s · $0.00Adding a C# CAPTCHA solver to a .NET solution should feel like adding any other dependency, and with CapSkip it does: run dotnet add package CapSkip, create a CapSkipClient and await the answer. The package itself is a thin, MIT-licensed wrapper. The real work is done by the CapSkip desktop app, installed wherever you keep Windows (a workstation, a cloud VPS, a dedicated server), so challenges never travel to a remote solving farm.
Each CAPTCHA family gets its own awaitable method. RecaptchaAsync takes the checkbox, invisible, v3 and Enterprise flavors of Google's widget; TurnstileAsync handles Cloudflare widgets as well as full challenge pages; GeetestAsync accepts a fresh GeeTest v3 gt and challenge pair; AltchaAsync, CapyAsync, CaptchaFoxAsync, FriendlyCaptchaAsync and AmazonWafAsync cover the rest. When all you need is a CAPTCHA reader in C#, NormalAsync turns a distorted text image into characters in about 0.1 seconds.
Because the client targets .NET Standard 2.0, one reference serves a .NET 8 worker, a .NET Framework 4.6.1 WinForms utility and a Selenium test project alike. The license is a flat monthly subscription starting at $35, and a solution already wired to 2Captcha or CapSolver can keep that client: the CapSkip app answers it locally.
Two ways in, one engine. Start fresh with the NuGet SDK, or leave a working 2Captcha or CapSolver .NET client exactly as it is: switch on that service's emulator inside CapSkip and add it to the hosts file, and its requests get solved on your machine instead. Either path ends at the same unmetered license. Browse the API reference
What this .NET CAPTCHA solver gives your C# code
Task-based methods with cancellation
Every solve returns a Task of SolveResult and accepts a CancellationToken, so a stopping host or an aborted ASP.NET Core request can drop a pending solve cleanly.
One reference from Framework 4.6.1 to .NET 9
Compiled against .NET Standard 2.0, the same package loads in .NET 6 through 9, .NET Core 2.0 and later, and aging .NET Framework 4.6.1 desktop utilities.
Task.WhenAll at a flat price
Fan out fifty solves with Task.WhenAll or a SemaphoreSlim-throttled loop. The price stays the same, so concurrency is capped by the machine running CapSkip, not by your invoice.
CAPTCHA-trained OCR instead of Tesseract
NormalAsync accepts the image as a path on disk, a URL or base64 text and returns its characters in about 0.1 seconds. It reads thousands of warped CAPTCHA styles that general OCR stumbles on.
Selenium, Playwright for .NET, PuppeteerSharp
The SDK never drives your browser. Read the sitekey with FindElement or GetAttributeAsync, await the token, then inject it through IJavaScriptExecutor or EvaluateAsync before clicking submit.
Typed results and a typed exception tree
SolveResult exposes Code, UserAgent and the GeeTest Challenge, Validate and Seccode values as properties, while NetworkException, TimeoutException, ValidationException and ApiException all derive from CapSkipError.
Pick the route that matches your .NET project
// dotnet add package CapSkip
using CapSkip;
var solver = new CapSkipClient(host: "127.0.0.1", port: 8080);
var result = await solver.RecaptchaAsync(
"YOUR_SITEKEY",
"https://example.com/page-with-recaptcha");
Console.WriteLine(result.Code); // tokenAwait RecaptchaAsync with the site key and page URL; result.Code then holds the token your form post or browser session submits next.
Extension for hands-on browser work
Stepping through a sign-up or checkout yourself while debugging? The Chrome or Firefox add-on notices each CAPTCHA and has the running app solve it, with no C# written at all.
A NuGet CAPTCHA solver package
Add it to any .NET project and call strongly typed async methods. Teams on Python, Node.js or PHP get sibling SDKs built around the same solving engine.
Local API for existing .NET clients
A C# client written for 2Captcha or a similar service keeps sending its usual requests. CapSkip answers that protocol on your own network, so nothing needs rewriting.
Aim a test project at a live reCAPTCHA page
Before CapSkip goes into production code, point a scratch console app at our hosted reCAPTCHA v2 demo. It loads the real widget, so you can watch RecaptchaAsync bring back a token that actually works.
From NuGet restore to the first solved CAPTCHA
-
Run CapSkip on a Windows box
Put CapSkip on whichever Windows workstation, VPS or dedicated server your .NET code can reach, then leave it running in the background while you build. Download the installer
-
Activate a plan or the trial
Buy a Bronze, Silver or Gold subscription, or claim the free 3-day trial with its 500 solves, and enter the emailed credentials in the app to activate it. Start the free trial
-
Add the package and await
Run dotnet add package CapSkip, point CapSkipClient at the host and port shown in the app, and await the method for your CAPTCHA type from a console app, service or test. See every SDK
CapSkip vs 2Captcha and CapSolver from C# code
How a local, flat-priced solver stacks up against a metered cloud API once your .NET services run at volume.
| Feature | CapSkip | 2Captcha / CapSolver |
|---|---|---|
| What you pay for | One subscription from $35 monthly, nothing per solve | Each solve, charged per 1,000, pay as you go |
| Where the CAPTCHA is solved | Inside CapSkip, on Windows hardware you own | On the vendor's servers, sometimes by human workers |
| Bill after a busy month | Unchanged, however many tasks you awaited | Climbs with every solve and every retry |
| Who sees the challenge | Nobody else: it stays on your network | A third party receives every challenge you send |
| Parallel solves | As many threads as your CPU and memory carry | Extra throughput usually costs extra |
| Getting it into .NET | NuGet package, or keep your old client through emulation | The vendor's own client library |
| Image CAPTCHA turnaround | About 0.1 seconds, with no remote queue | Each image uploaded, queued and polled over the internet |
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
How to solve CAPTCHAs in C#, from HttpClient to Hangfire jobs
In .NET code a CAPTCHA tends to appear in one of three places: an HttpClient that posts a form, a Selenium or Playwright session steering a real browser, or a background job running with nobody watching. One CapSkipClient instance serves all three; only what you do with the answer differs.
For HttpClient work, gather the site key or download the image using the session cookies of that form, await the matching method, then add result.Code to the FormUrlEncodedContent of your POST in the field the target form reads, typically g-recaptcha-response. A Cloudflare challenge page also wants its data and pagedata values in the options, and the follow-up request should carry result.UserAgent.
Inside a browser session the SDK stays away from the driver. Your test reads the key from the element, awaits RecaptchaAsync or TurnstileAsync with driver.Url, writes the token back through IJavaScriptExecutor or EvaluateAsync, and submits. These tokens stay valid for only a few minutes, so request them right before the submit step, not at the top of a long test.
Unattended work is where a flat license earns its keep. A Hangfire job or hosted worker can retry a failed solve, run overnight on a schedule and fan out with Task.WhenAll without anyone topping up a balance. Catch CapSkipError once to log an unreachable app, a rejected option or a timeout, and hand the job's CancellationToken to each call so a shutting-down host never hangs on a pending solve.
Moving off CapSolver or 2Captcha but keeping its .NET client? On the machine running CapSkip, enable that service's emulator and use the hosts file option in the app. The existing C# code stays untouched, and the CAPTCHA types it already sends are answered locally.
Related guides: reCAPTCHA v2 in C# · Turnstile challenge page in C# · Hangfire CAPTCHA jobs
Which NuGet package should I install to solve CAPTCHAs in .NET?
Will one build of the package work on .NET Framework 4.6.1 and on .NET 8?
How do I put a solved reCAPTCHA token into a Selenium WebDriver page in C#?
Does the .NET SDK handle Cloudflare's full-page check as well as the Turnstile box?
Is it safe to block on the async methods in WinForms or a console tool?
How do I cancel a slow solve or change its time limit in .NET?
Can a CapSolver or 2Captcha client written in C# keep working unchanged?
Is Tesseract good enough as a CAPTCHA reader in C#?
Reference CapSkip in your next .NET build
Install the app, add the NuGet package and await your first token within minutes. From then on, every solve your C# code requests is covered by the same monthly price, whatever the volume.
