The best AI humanizers, ranked by a monthly benchmark. HumanizerBench measures how well each AI humanizer bypasses the major AI detectors (GPTZero, Originality.ai, Copyleaks, Winston AI, and ZeroGPT) while preserving the original meaning and readability. We pay for every tool ourselves and run each one by hand on the most undetectable setting it advertises; there are no affiliate deals and no vendor-supplied numbers. Every input, every humanized output, every detector verdict, and the scoring code itself is published in this repository, so anyone can reproduce the rankings from scratch.
| # | AI humanizer | Score / 100 | Bypass | Meaning | Readability | Consistency | Penalty |
|---|---|---|---|---|---|---|---|
| 1 | WriteHuman | 73.07 | 82% | 73% | 56% | 75% | -1.0 |
| 2 | Undetectable.ai | 72.17 | 96% | 73% | 56% | 97% | -10.0 |
| 3 | Humanize AI Pro | 70.49 | 70% | 74% | 60% | 75% | 0 |
| 4 | Stealth Writer | 68.07 | 81% | 69% | 44% | 79% | -3.0 |
| 5 | Humbot | 66.42 | 71% | 75% | 44% | 66% | -1.0 |
| 6 | HIX Bypass | 64.84 | 66% | 74% | 43% | 67% | 0 |
| 7 | Walter Writes | 62.84 | 81% | 65% | 62% | 65% | -8.0 |
| 8 | StealthGPT | 61.52 | 82% | 63% | 61% | 74% | -10.0 |
| 9 | Phrasly | 61.47 | 73% | 61% | 72% | 76% | -8.0 |
| 10 | AI Humanize io | 59.66 | 76% | 70% | 56% | 65% | -10.0 |
| 11 | Super Humanizer | 54.13 | 42% | 73% | 67% | 72% | -5.0 |
| 12 | Grammarly | 53.38 | 0% | 95% | 82% | 100% | 0 |
| 13 | NoteGPT | 44.04 | 0% | 69% | 75% | 100% | 0 |
The composite (out of 100) weights detector bypass (42%), meaning preservation (32%), readability (16%), and consistency across writing categories (10%); the Bypass, Meaning, Readability, and Consistency columns are those sub-scores. Penalty is the total points deducted for quality failures (meaning drift, length inflation or deflation, refusals, or output returned unchanged) — already reflected in the score. We pay for every tool ourselves and run each one by hand on its most undetectable advertised setting. Scored against 5 AI detectors; every score is reproducible from the data in this repo. See the full leaderboard with per-detector breakdowns and 12-month trends at humanizerbench.com/leaderboard.
Per-detector breakdowns, meaning & readability sub-scores, penalties, pricing, and 12-month trends for every humanizer.
This repository is the public audit record: the live site at humanizerbench.com is rendered from the data here, and anyone can clone this repo and prove every published cycle wasn't tampered with.
data/
cycles/
<cycle>/ # one directory per published cycle
# Transparency bundle (proves prompts weren't predictable or swapped)
commit.json # sha256(nonce), published at cycle start
nonce.txt # the nonce, published at cycle close
prompts.json # resolved prompts (templates with placeholders filled)
templates.json # the prompt templates (with [BRACKETED] tokens)
banks.json # the value banks the placeholders are drawn from
select-placeholders.js # the frozen selection algorithm
# Reproducibility bundle (lets you re-derive the leaderboard)
samples.json # the source samples (input texts)
tests.json # every humanizer's output + per-test metrics
detector-scores.json # every detector verdict on every output
scoring.js # the frozen scoring aggregator
cycle.json # SHA-256 manifest of every per-cycle file above
# Final result
leaderboard.json # composite + sub-scores per humanizer
humanizers/
<slug>.json # per-humanizer history across all cycles
scripts/
verify-cycle.ts # the audit script (see below)
CHANGES.md # cycle-to-cycle methodology changelog
The benchmark itself runs from a separate private repo (corpus generation, detector integrations, humanizer adapters, API keys). This public repo receives every input, every output, every detector verdict, and a frozen copy of the scoring algorithm each cycle produces, enough that anyone can re-derive the leaderboard from scratch, not just spot-check it.
git clone https://github.com/HumanizerBench/humanizerbench.git
cd humanizerbench
npm install
npm run verify # verify every published cycle
npx tsx scripts/verify-cycle.ts "January 2026" # verify one cycleA successful verification looks like:
[ok] January 2026: 72 prompts verified, 6 humanizers replayed
verify-cycle OK
A tampered cycle looks like:
verify-cycle FAILED:
- January 2026: sha256(nonce) mismatch, expected <hash-A>, got <hash-B>
- January 2026: resolved text for "academic_essay_1" differs from published
The script runs five separate checks for each cycle:
- Hash commitment.
sha256(nonce.txt) === commit.json.committed_hash. Proves the nonce revealed at cycle close is the same one whose hash was published at cycle start. - Algorithm replay. Re-runs the frozen
select-placeholders.jsagainstnonce.txt,templates.json, andbanks.jsonto re-derive the placeholder map. - Substitution match. Substitutes the re-derived placeholders into the templates and asserts the resulting prompts equal
prompts.jsonbyte-for-byte. - Manifest integrity. For every entry in
cycle.json.files, recomputes the SHA-256 of the named file and asserts it matches the manifest. The four reproducibility data files (samples.json,tests.json,detector-scores.json,scoring.js) are required-minimum entries; recent cycles also manifest the transparency bundle (commit.json,nonce.txt,prompts.json,templates.json,banks.json,select-placeholders.js) and the publishedleaderboard.json. Unknown filenames in the manifest are rejected. Catches truncated, corrupted, or doctored publishes. - Score replay. Runs the frozen
scoring.jsagainst the raw data and asserts every humanizer's composite, sub-scores, detector breakdown, category breakdown, and penalty counts matchleaderboard.jsonwithin1e-4.
If all five pass for every cycle, no one (including the benchmark operator) could have altered the prompts, inputs, outputs, detector verdicts, or scoring math after the cycle started without breaking the chain.
The verifier is also wired into CI on this repo: every push to main runs npm run verify and fails the build if any cycle's chain has broken.
Cycle names are predictable (January 2026, then February 2026, and so on). If placeholder selection were seeded on the cycle name, a humanizer with access to the public banks and algorithm could pre-compute next month's prompts and fine-tune against them. Instead, each cycle is seeded by a random 32-byte nonce that is generated at cycle creation and kept private during the cycle. Only sha256(nonce) is published at start. At cycle close, after every humanizer has been scored against the prompts derived from that nonce, the nonce itself is published, and anyone can re-derive the prompts and check the hash. Vendors get auditability; they don't get predictability. The full version of this argument is on the methodology page.
If you spot an error in a cycle (a bad score, a stale humanizer record, a verifier failure on a cycle that should be clean), open an issue in this repo or follow the contact path on the live site's /fairness page. We aim to respond within one cycle.
- Verifier code, workflows, and configuration: MIT.
- Cycle data under
data/: CC BY 4.0. Reproduction with attribution is welcome. - The name "HumanizerBench" and associated branding are not licensed for reuse on competing benchmark services or AI-detector-evasion products.
Found a verifier bug, a tampered cycle, or a security issue with this repo? See SECURITY.md. For non-security audit findings, open a regular GitHub issue.