mrkeyoor.com_
Fri 16 Oct 18:51 UTC
Automationevaluationupdated 14 Oct 2026

captcha-api review

captcha-api is an unofficial Python client and command-line tool for Clearance's hosted Cloudflare Challenge and Turnstile solving service. It handles task submission and polling, with local cost estimates and concurrent batches, so you don't have to write that API plumbing yourself.

+0 / 1dstars / 7d
Verdict

Our captcha-api run passed all 36 tests, but its batch response drops the browser identity the README says follow-up requests need. Use the individual methods if you've chosen Clearance and can finish the transport integration yourself. I'd pass on it as a ready-made batch clearance pipeline or an authoritative billing tracker.

We ran it

Lab card: what happened when we ran captcha-apiScreenshot of captcha-api (github.com/jamespolyakov9829/captcha-api)
Install✓ · 34s36 packages · 38 MB
Build✓ · 4s
Tests✓ · 6s36 passed · 0 failed of 36 (pytest)
Known vulns0(pip-audit)
Repo16 files~1,187 lines of source · 0.3 MB · 0 CI workflows · tests dir

Answers from our run

Does captcha-api build from source?

Dependencies installed in 34 seconds (36 packages), and the build succeeded in 4 seconds. We cloned commit b817110 into a clean Debian container with 3 CPUs and no project-specific setup.

Do captcha-api's tests pass?

Yes: 36 of 36 passed when we ran the project's own test command (pytest). Some failures need services or credentials a bare container does not have.

Does captcha-api have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use captcha-api?

Teams looking for a self-hosted solver: the README requires a Clearance account and API key.

What are the alternatives to captcha-api?

2Captcha Python, Anti-Captcha Python. Our captcha-api run passed all 36 tests, but its batch response drops the browser identity the README says follow-up requests need.

Setup3/534-second install, then credentials and identity replay work
Docs3/5Detailed API guidance, but batch and billing claims need qualification
Community2/5September push, 261 stars, and no issue discussion to assess
Maturity2/5Passing offline checks, missing batch identity, no GitHub release

Who it’s for

Python developers already choosing Clearance who want readable client code they can adapt.
Integrators prepared to configure the follow-up HTTP client's browser identity.
Operators who need per-URL batch results and can add their own billing reconciliation.

Who it’s NOT for

Teams looking for a self-hosted solver: the README requires a Clearance account and API key.
Callers expecting the quick start to perform the final cleared request: its replay example leaves TLS and HTTP/2 configuration to the application.
Batch users needing complete replay data: the README requires cookies and identity, but batch results omit them.
Buyers seeking demonstrated deployment history: GitHub has no release and an empty recent issue listing despite the README's production integration pitch.

Setup reality

Our sandbox installed commit b817110 in 34 seconds: 36 packages and 38 MB on disk. The build passed in 4 seconds, and pytest passed in 6 seconds with 36 passed and 0 failed. Pip-audit reported 0 known vulnerabilities.

Useful requests require a Clearance account and CLEARANCE_API_KEY, a target URL, and a Turnstile sitekey where applicable. The project wraps a hosted service, so installing the client doesn't provide local solving.

The measured environment used Python 3.12 on Debian with 3 CPUs and 8 GB of RAM. Follow-up requests need a client configured for the returned browser identity. The batch helper drops that identity, and the scan found 0 CI workflow files and no Dockerfile.

Batch results leave out the identity you need to reuse them

Call Solver.batch() and you get a token for each successful URL. You don't get its cookies, headers, or browser fingerprint. That matters because captcha-api's own README says a follow-up request needs the identity that earned the token. The individual challenge() and turnstile() methods return that information. The batch shortcut discards it. For an integration built around Cloudflare clearance, this is the difference between collecting results and being able to use them.

The project is small enough to inspect: our checkout contained 16 files and about 1,187 source lines, occupying 0.3 MB. Its main module wraps Clearance's hosted API with a Python interface and command-line tool. The MIT license covers that client code. It doesn't give you a local captcha-solving service. You'll still need a Clearance account, an API credential, and an integration that handles the returned identity correctly.

What happened when we ran it

Our sandbox installed commit b817110 in 34 seconds, adding 36 packages and occupying 38 MB. The build succeeded in 4 seconds. Pytest finished in 6 seconds with 36 passed and 0 failed. Pip-audit reported 0 known vulnerabilities. Our measurement setup was an unprivileged Debian container with 3 CPUs, 8 GB of RAM, Python 3.12, and no secrets, on October 14, 2026.

Those results establish that the measured checkout installs, builds, and passes its available checks in that environment. They don't establish Clearance's live solve speed or whether a token clears a particular website. The repository describes its suite as offline and replaces network transport with fakes. The README's advertised solve times therefore remain vendor claims. We wouldn't use them to size a production job or promise a customer a response deadline.

The Python install leaves the hosted service outside your control

The 38 MB environment we measured is a modest local commitment. Configuration is also short: Solver.from_env() reads CLEARANCE_API_KEY, and the CLI accepts an explicit credential. A Challenge request needs a page URL. Turnstile needs a sitekey too, which the individual helper can attempt to extract from page HTML. That extraction uses patterns in fetched text, so don't expect it to execute a page's JavaScript.

The README's response and identity section makes the expensive integration step clear. Receiving a cookie is only part of the job. Your subsequent HTTP client must reproduce the supplied headers and browser identity, including TLS and HTTP/2 settings. The example leaves that transport configuration to you. If your application uses an ordinary HTTP client without fingerprint controls, budget engineering work beyond the quick-start call.

Cost estimates are local arithmetic, not a spending limit

Our 36 passing tests don't turn estimate_cost() into a billing control. The function multiplies a requested count by a price constant in the module. CostTracker accumulates local successes and failures, while _result() leaves the result's cost at its dataclass default instead of reading a charged amount from the service response. These are useful estimates if the assumptions hold. They aren't an account ledger reconciled against actual charges.

There's another accounting wrinkle in the source at the measured commit. Batch failures call the tracker's failure recorder, but a failed individual solve() raises before recording that failure. An operator expecting the summary to represent every attempted request would miss those individual errors. Keep your own attempt log and spending controls if money reporting is the reason you're choosing this wrapper.

Batch convenience requires a narrower use case

The 0.3 MB checkout includes a thread-pool batch helper that catches API errors per URL and returns results in input order. That's handy when a batch contains an occasional bad target: the other results can still come back. However, its result dictionary keeps only the URL, success flag, token, and elapsed value. It drops the richer Result object. The README's promise about replaying an identity and its batch example deserve to be read together.

I'd use the individual methods when the downstream request needs cookies or fingerprint data. I'd also pass known sitekeys explicitly for mixed workflows: the batch function calls solve() directly, bypassing the individual Turnstile helper's HTML discovery. This is manageable code to adapt, but it makes the batch interface a poor default for someone expecting a complete fetch-and-clear pipeline. The wrapper submits work and polls results. It doesn't perform the final application request.

September activity offers little evidence of outside use

The last push was September 25, 2026. GitHub showed 261 stars and 0 open issues and PRs, and the recent all-state issue listing was empty. The latest-release endpoint returned no release. A changelog describes versions, but that's different from a published GitHub release. Recent source activity argues against calling the project abandoned. The empty discussion record also gives us little evidence about independent deployment experience.

Our scan found 0 CI workflow files and no Dockerfile, although a tests directory exists. Choose captcha-api for a readable Clearance integration you can own and adjust. Choose 2Captcha's Python client or Anti-Captcha's official library when you need those providers or their broader captcha coverage. If you adopt this one for batches, preserve the full result before relying on the token: the information you need is already present in the individual response.

Alternatives

ProjectWhat it isPick it when
2Captcha PythonA Python client for 2Captcha with Turnstile and other captcha types.pick this instead when your provider is 2Captcha or you need its broader captcha coverage.
Anti-Captcha PythonAnti-Captcha's official Python library for its hosted solving service.pick this instead when you want the provider's own client and support for its task types.

What people are saying

  1. [velocity-scout] jamespolyakov9829/captcha-api

Sources

  1. captcha-api README
  2. Measured client source
  3. Repository facts
  4. Issue and PR history
  5. Release history
  6. 2Captcha Python client
  7. Anti-Captcha Python library

More automation reviews

supersidian · genspark-claw · orc-claude-plugin · tiktok-views-bot · Ydisks-Xianyu-Helper · jev-gui-delegate · the whole board →