audit.icjia.app · built for Title II ADA · WCAG · Illinois IITAA

Built to be checked.
See for yourself.

Every claim on this page can be verified without taking anyone's word for it — including ours.

Every number below was pulled live from the running system onOCT 6, 2026
12,659
check-ups run for internal and external agencies — the quick per-file check-up that has caught on beyond ICJIA: easier than SiteImprove, clearer than PAC. 146 in the last 30 days
4,118
self-checks the software runs on itself before anything goes live — all must pass, or nothing ships
How it’s tested →
222 / 222
trap documents built to fool it — every one judged correctly
See all 222 →
881
saved, dated, public changes over 31 weeks — every step on the record
what it does

One job: is this document readable by everyone?

Many people who are blind or can't see well use a screen reader — software that reads what's on the screen out loud. A document is accessible when a screen reader can read it correctly. Upload a PDF, Word, PowerPoint, or Excel file and in about a minute this tool reports everything that would trip a screen reader up — and exactly how to fix each one. Title II of the ADA and the Illinois Information Technology Accessibility Act (IITAA) require this of every public body — and both point to the same rulebook: WCAG.

the law · three names, one idea

Title II. IITAA. WCAG.

Government information must work for everyone. Two laws say so; one rulebook defines "works."

Federal law

Title II of the ADA

The Department of Justice rule for state and local government. It names WCAG 2.1 Level AA as the standard — and its compliance dates are April 26, 2027 for entities serving 50,000 people or more and April 26, 2028 for smaller ones and special districts. This is not optional, and it is close.

Illinois law

IITAA

The Illinois Information Technology Accessibility Act — our state's own accessibility law, older than the federal rule, also built on WCAG 2.1 AA. It applies to every Illinois public body, including this one.

The rulebook

WCAG

The Web Content Accessibility Guidelines — the international rulebook both laws point to. This checker tests WCAG 2.1 AA — the exact version both laws name. WCAG 2.2 exists and adds to it, but nothing 2.2 added can move your grade here.

Every finding on every report names the WCAG rule behind it, so a reviewer can trace any grade straight back to the law's own standard.

the tests

What every check-up looks at.

Up to nine graded areas per document, matched against the PDF industry's official 31-point checklist — the same one professional human reviewers work from. Every finding cites the WCAG rule behind it — plus an honest list of what only a person can judge.

Real, selectable textwords, not pictures of words
Title & languagewhat a screen reader announces first
True headingslevels, order — and whether they say anything
Image descriptionsevery picture a reader can't see
Table structureheader cells, and which way they point
Reading orderis it read aloud in the order a person would read it?
Links & navigationbookmarks, link text that means something
Formslabeled fields, keyboard order
Word · PowerPoint · Exceltheir own check suites, same scoring rules

Every report also states plainly what automation cannot check — about 60–70% of accessibility is human judgment, and the report says so on every grade.

The 31-point checklist has a name: the Matterhorn Protocol. It is published by the PDF Association — the same industry body that builds the veraPDF referee — and it is the test model professional evaluators and tools like PAC work through. Here is how the pieces fit: Title II and IITAA name the law’s standard, WCAG — rules for what must be true of any content. Matterhorn translates those rules into 31 PDF-specific, testable checkpoints — where inside a PDF to look. So the law, our checker, veraPDF, and a human evaluator’s checklist are all reading from connected pages, and every report maps its findings onto all 31:

01Real content tagged02Role Mapping03Flicker04Color and Contrast05Sound06Metadata07Dictionary08OCR-generated content09Appropriate Tags10Character Mappings11Declared Natural Language12Stretchable Characters13Graphics14Headings15Tables16Lists17Mathematical Expressions18Page Headers and Footers19Notes and References20Optional Content21Embedded Files22Article Threads23Digital Signatures24Non-Interactive Forms25XFA26Security27Navigation28Annotations29Actions30XObjects31Fonts
the referee · PDF/UA & veraPDF

It doesn't grade its own homework.

PDF/UA is the international rulebook for PDFs a screen reader can use — an official standard, like a building code for documents. veraPDF is a separate referee program that checks files against that rulebook, built by the PDF industry's own association — not by us, and used by national libraries worldwide. It runs beside our checker on every single report, as an independent second opinion.

Your document

Checked, never stored. Deleted the moment the report is built.

Built in-house

Our checker

Structure, headings, image descriptions, tables, forms, reading order.

PDF Association

veraPDF

The industry's own PDF/UA validator. We did not write one line of it.

Our verdictThe 0–100 score, the letter grade, and the fix-it list
Their verdictveraPDF’s independent pass / fail against the PDF/UA rulebook

Two independent referees on every report. If ours were wrong, theirs would say so — in public, on every audit. And one precision the experts will appreciate: Title II and IITAA require WCAG, not a PDF/UA badge — the two overlap heavily by design, and this report checks both, telling you plainly which rulebook each finding belongs to.

the trap test · modeled on canva, indesign, and word

We built 222 documents designed to fool it.

Real documents can't prove a checker is right — nobody knows their ground truth. So we built trap PDFs where the correct answer is known in advance, including the exact tricks Canva, InDesign, and lazy shortcuts produce. Anyone can re-run the whole battery; the traps are rebuilt from scratch every time.

synthetic-02Perfect title & language — secretly one big photoCaught · scored 0
synthetic-03Image "description" of nothing but blank spacesFound a real bug
synthetic-07Whole paragraphs disguised as headingsCaught
synthetic-13Big bold text instead of real headingsCaught
synthetic-14InDesign's custom naming soup, one typo deepRead correctly
synthetic-15A page built the way Canva sometimes builds them — unreadable insideSaid "can't judge" instead of guessing
synthetic-16A form with no labels on any fieldCaught
synthetic-12Hostile computer code hidden in the textStayed harmless
synthetic-05Internal structure that loops foreverNo crash, no hang
…and 213 more — modeled on what Canva, InDesign, and Word actually export (flat untagged posters, decorative-shape swarms, naming soup, picture-of-words titles, “Print to PDF”), plus native Word, PowerPoint, and Excel traps — unmarked header rows, alt panels never opened, slides with no titles, “Sheet1” — and, for each flawed file, a matching corrected copy (the same document with the mistake fixed) that the checker must NOT flag. All 222 held, and for every such pair the broken version may never outscore the corrected one.

27 real bugs in this checker, found and fixed — every one on this page, because that is exactly what all this machinery is for.

Each one is now a trap document that re-proves the fix on every run, wearing a FOUND A REAL BUG chip in the inventory below. In the spirit of the rest of this page: here is every one, who found it, and what it wrongly cost.

  • Blank spaces counted as a description. An image whose “description” was nothing but spaces passed the alt-text check. Found by the battery's own first full run; fixed the same day, and no real document in the test set had the defect, so no score changed. synthetic-03
  • The third legal value of a header direction, rejected. The PDF standard lets a corner header label its row and its column (“Both”); this checker accepted only Row and Column, so the most carefully marked-up tables read as broken — a correct Illinois DoIT reference file was graded 89/B instead of 100/A. The agency was right, the checker was wrong, and that file's exact score is now pinned in the public ledger. synthetic-116
  • Values hidden behind references, unread. Word sometimes stores a header's direction or a cell's span as a reference to another object instead of writing it in place. The checker read only in-place values and invented two false failures on a genuinely accessible syllabus (85 → 100 after the fix). Found by real files submitted as “100% accessible” — and they were. synthetic-117
  • A language tag present — and wrong — sailed past everyone. English text declaring itself French means a screen reader pronounces the whole document with French rules. No tool flagged it, this one included; the silence was the bug. The check that closed it carries four guards against false accusations, and the trap holds both directions: the mislabeled file is caught, its correctly-labeled twin is not. synthetic-118
  • The class-map route, unread — caught before any file arrived. The standard's third way to attach header directions (by named class) was invisible to the parser. Found by this project's own encoding gate, which rewrites one document every legal way and demands identical grades — the first bug caught preemptively instead of by an agency's file. synthetic-120
  • One-row tables misread as crosstabs. A single-row table puts its only header in the first row and the first column at once, and the exactly-one-axis logic called that a two-axis grid and docked it. The trap was written first, watched fail at 89/B, and forced the fix — the battery catching the checker, by design. synthetic-124
  • A header row marked the way Microsoft says, called unmarked. Microsoft tells Word authors to mark a table’s header row with the Header Row box on the Table Design tab, and Microsoft’s own checker accepts it; this checker accepted only an older setting, so a correctly built agency meeting agenda was graded 69/D. The agenda was right and the checker was wrong — it now grades 100/A. Tracing it also showed the same unmarked table costing a D in Word, a C in a PDF and a B in Excel; it now costs the same in all four formats. synthetic-157
  • “No shading” read as shading. Text pasted from a web page carries a marker that means no shading, and the checker took that marker as the styling of a data table — so a borderless grid used only for layout could be graded as a data table missing its header row. Found while tracing the agenda bug above; no file in the test set was affected. synthetic-162
  • A memo’s title, graded as missing sections. A Word document whose only heading-like line was its bold title — no Heading styles anywhere — lost 70 points and graded D, while the same memo saved as a PDF graded A: the PDF check had already learned that one such line is a title and two or more are sections. Word and PowerPoint now apply the same rule, and an agency quick-reference guide in the test set stopped being accused of hiding sections it does not have. Found by this project’s own comparison of the same defect across all four formats. synthetic-163
  • PowerPoint’s default title, checked nowhere. A deck still titled “PowerPoint Presentation” — PowerPoint’s own default, inherited by every deck made from a template that carries it, including an agency template in the test set — names the program, not the presentation: a WCAG 2.4.2 failure (F25). No format caught it. The PDF check’s list of tool defaults lacked it, and Word, PowerPoint and Excel titles were never checked at all. Every format now applies the same title check. synthetic-167
  • A PowerPoint layout grid, graded as a data table. Authors line up an agenda in a table stripped of every style, border and fill. Word has never counted a bare grid like that as a data table; PowerPoint did, so the same agenda lost its header-row points and capped at C as a deck. PowerPoint now applies Word’s rule. Found by this project’s own comparison of the same defect across all four formats; no deck in the test set was affected. synthetic-170
  • A damaged properties part, reported as a missing title. When the part of a PowerPoint or Excel file that holds its title could not be read, the checker reported “no title” — a WCAG 2.4.2 failure about a title it never saw — while Word had long said “could not be read” and left that half unscored. All three now say so. Found by the same comparison; no file in the test set was affected. synthetic-175
  • The same share of described images, a letter apart. A report with 16 of its 23 images described scored 69 as a PDF (a C ceiling) and 70 as a Word file (a B ceiling): PDF rounded the share down, while Word, PowerPoint and Excel rounded it to the nearest point and then capped any failing share at 85. Every format now scores alt text and link names by one rule. Found by the same comparison; two real decks in the test set moved a few points within their band, and no grade changed. synthetic-178
  • Untagged section headings, reported as “no issues found”. Two agency annual reports in the test set tag only three of their headings — seventy-odd section titles are tagged as plain paragraphs — and their heading score read 100, “No issues found”: the PDF check for headings that are only visual ran only on documents with no heading tags at all. Word has always counted the same lines. PDF now does too, with guards measured against the test set first (cover pages, letterheads, pull quotes and captions all look like headings and are not); four real reports lose a score they never earned, and all four stay D for other problems. Found by this project’s own comparison of the same defect across all four formats. synthetic-179
  • A language set the way this report advises, not recognised. A Word file with no document-wide language setting whose every word is marked English — exactly what this report’s own advice (Set Proofing Language on the selected text) produces — was still accused of declaring no language, while PowerPoint read the same marks. Both now take the language marked on most of the text. Found while checking that the advice actually works; no file in the test set was affected. synthetic-184
  • Word tables judged by their markup, not by what they draw. Whether a Word table counts as a data table (scored, needs a header row) or a grid used only for layout (not scored) was decided by which elements the table carried. So a grid whose borders were all explicitly switched off — how Google Docs, LibreOffice and pasted web content write an invisible table — or one carrying a table style that draws nothing was accused of a missing header row, while a real data table drawn with borders on its cells instead of the table was never checked at all. The checker now asks what the table actually draws. Found by the first table traps written before any fix; no file in the test set was affected. synthetic-186
  • Line breaks in a description, kept as code. PowerPoint stores a line break inside a picture’s description as a short code (
) that every program reading the file is required to turn back into a line break. The checker kept the code as text, so descriptions carried stray codes, and a description made of nothing but line breaks passed as a description. Found by the new Office encoding gate, which rewrites one Word document, one deck and one workbook every legal way and demands identical grades; no file in the test set changed score. synthetic-199
  • A file saved as UTF-16, refused. The Office file format lets each part of a file be stored as UTF-8 or UTF-16 text, and Word opens both. The checker read every part as UTF-8, so a perfectly good UTF-16 file was turned away as “not a supported document”. Found by the new Office encoding gate, which rewrites one Word document, one deck and one workbook every legal way and demands identical grades; no file in the test set changed score. synthetic-200
  • “Bold: off” read as bold, in Word. A Word file can say outright that text is not bold, and the python-docx library writes it that way whenever a script switches bold off. The checker saw the bold setting and never read its value, so a short line of plain 14-point text was reported as a heading typed by hand, costing points on a document with nothing wrong. Found by the new Office encoding gate, which rewrites one Word document, one deck and one workbook every legal way and demands identical grades; no file in the test set changed score. synthetic-201
  • “Bold: off” read as bold, in Excel — a failure missed. The same misreading in a workbook made 14-point grey text count as large text, which needs less contrast, so text too faint to read passed the contrast check. Missing a real failure is the more damaging of the two errors. Found by the new Office encoding gate, which rewrites one Word document, one deck and one workbook every legal way and demands identical grades; no file in the test set changed score. synthetic-202
  • “True” and “false” not understood. PowerPoint, and the drawing format inside all three Office formats, let a setting be written as 1 or “true”, 0 or “false”. The checker knew only the digits, so a slide hidden with “false” was judged for its missing title, and a picture marked decorative with “true” counted as an undescribed image, in Word, PowerPoint and Excel alike. Found by the new Office encoding gate, which rewrites one Word document, one deck and one workbook every legal way and demands identical grades; no file in the test set changed score. synthetic-203
  • The wrong slide named. A deck lists its slides in the order they are shown, and that order need not match the order the slides are stored in. When the list was written in a different but equally valid way, the checker silently fell back to the storage order, and its report named the wrong slide. Found by the new Office encoding gate, which rewrites one Word document, one deck and one workbook every legal way and demands identical grades; no file in the test set changed score. synthetic-204
  • Cells found only by a written address. Each cell in a workbook may state its own address (“B7”) or leave it out, in which case its position gives it. The checker read only written addresses, so in a workbook that leaves them out it never found a link’s text and never checked the link. Found by the new Office encoding gate, which rewrites one Word document, one deck and one workbook every legal way and demands identical grades; no file in the test set changed score. synthetic-205
  • Bullets a slide’s layout switched off, never read. PowerPoint decides whether a line gets a bullet through a chain — the line itself, its text box, the slide’s layout, then the master — and the checker read only the master. So lines whose layout turns bullets off were counted as real list items: bullets typed by hand with a “•” character passed as a real list, and a title slide’s subtitle or a slide number counted as list items too. Found by building test decks the way PowerPoint’s and python-pptx’s templates write them, then confirmed on a real agency deck, which drops from 100/A to 89/B for four hand-typed bullets. synthetic-206
  • A shaded band read as its plain colour. PowerPoint can shade a theme colour lighter or darker, and the checker read the shading off. White titles on a band shaded 25% darker than the theme’s blue were judged against the plain, lighter blue and failed at 2.96:1 — six failures on a real survey-results deck in the test set that were not there (the shaded band gives about 4.85:1). A shaded colour is now left unassessed rather than guessed at, the rule the checker already applied to slide backgrounds, and that deck’s contrast score rises from 50 to 100. Found while teaching the checker to follow text colours through PowerPoint’s layouts and masters. synthetic-219
  • Link text judged in a colour it is not drawn in. PowerPoint draws link text in the theme’s link colour, whatever colour the text itself is set to, unless the link carries a newer mark asking for the text’s colour. The checker judged links by their text colour, so a link set to white on a navy slide passed at 11.6:1 while what is actually drawn — blue on navy — is 1.97:1: a real failure, missed. Links are now judged in the colour they are drawn in, which LibreOffice’s rendering of two real decks in the test set confirms. Found the same way; no file in the test set was affected. synthetic-220
  • Highlighted text judged against the slide. A highlight paints a colour behind the text, so that colour is the text’s background. The checker ignored highlights: black text on a yellow highlight, on a navy slide, was judged black on navy and failed at 1.81:1 — a failure that is not there (19.6:1 against the yellow). Highlighted text is now judged against its highlight. Found the same way; no file in the test set was affected. synthetic-221

And the battery is not just spelling tests. It re-proves, on every run, the hard cases real documents taught this checker the hard way: Canva's phantom leftovers that once cost a clean report a grade, InDesign's custom naming soup, the rubble Acrobat's page-combining leaves behind, headings that exist but say nothing, tables whose headers point nowhere, forms with no labels — document structure errors, not typos.

Open the full inventory: all 222 trap documents and what each one tries → No download needed — every card below is also a rebuildable file anyone can run through the checker.

the feedback loop · internal & external specialists

Honed with internal and external accessibility specialists.

This is not an internal experiment. The checker is used every day — by ICJIA and by outside agencies and document specialists — and tuned in working sessions with accessibility specialists inside and outside the agency: real documents, real disputes, fixes shipped the same day. Four grade challenges from document experts and state reviewers, each settled by reading the file itself — never by defending the tool. Don't take the "every day" on faith either — the public stats page counts every check-up as it happens.

State accessibility team · a form
65 D → 100 A

The expert was right. The checker mis-measured forms. Fixed and published the same day.

A document-repair specialist · two "missing" images
79 C → 100 A

Right again — the "images" were leftovers from a rebuilt page, on no page at all. Fixed the same day.

Another expert · table headers
Checker was right ✓

Verified against the file's internals — the flag was real. The advice was made clearer instead.

The state IT agency · a reference document
89 B → 100 A

Their file was right and the checker was wrong: a table’s corner header was labelled with the standard’s third scope value, which this checker did not recognise. Fixed, and a trap document added so it can never come back.

Software that only pretends to work can't afford to lose an argument in public. This one has — three times — and got better every time. One of the four it won on the evidence; every one of them was settled by reading the file, not by defending the tool.

does it actually work? · the same document, measured twice

Fail. Fix. Re-check. Pass.

The strongest evidence is not a promise — it is the same document graded twice. A grade here is a to-do list, not a verdict: the report names every problem and the exact steps to repair it, and the re-check runs the same rules with no memory of the first attempt.

D

First check-up: fails

The report lists every problem found — and the exact fix-it steps for each one.

→
FIX

The author repairs it

Headings, image descriptions, table labels, reading order — following the steps in the report.

→
A

Re-checked: passes

Same document, same rules. The grade moved because the file did.

12
documents came back for a re-check after repairs — in the last 30 days
3
of them climbed all the way to an A — failed, fixed, and passed under the same rules

This is the question behind every other question — and the answer no sales pitch can fake: the same file, failed and then passed.

the comparison · siteimprove

Different tools, different jobs. Both viable.

Many agencies already have SiteImprove. Being honest about both is the fastest way to trust either.

SiteImprove

What it does well

  • Watches an entire website — crawls every page on a schedule, tracks trends over months
  • Governance at scale: dashboards, policies, history for a whole organization

What it isn't built for

  • The document in your hand right now — single-file answers wait on crawl cycles
  • Its scores mix the legal AA requirements with stricter AAA and best-practice items the law does not name — a sub-100 is not necessarily a legal problem
  • It is a paid enterprise subscription
This checker

What it does well

  • One file, answered in about a minute — free, no account, nothing stored
  • Scores against the legal standard, with every finding labeled by the rulebook it belongs to
  • Fix-by-fix instructions, plus two independent verdicts on every report

What it isn't built for

  • It does not crawl websites, watch trends, or keep dashboards
  • One document at a time, on demand
  • Like every automated checker — SiteImprove and Acrobat included — it sees only the 30–40% a machine can judge

Use SiteImprove to watch the whole site. Use this when a document is in your hand and you need an answer now. The advantage here is simple: it is faster, and it is free.

the evolution · march to october 2026

Seven months. 881 commits. 166 versions.

This is not a weekend project. Since March it has grown from a single PDF check into a checker for four kinds of files — 28 saved changes in the last 30 days, its battery of self-checks grown from about 1,500 in June to 4,118 today. Every strange document an agency has thrown at it became a documented fix. All of it is public, on GitHub: the full change log and every numbered version, open for anyone to read.

v1.163
PDF tables, judged by what they drawA PDF table with no header cells and nothing drawn on the page is a grid used only to line things up, as it always was in Word; a ruled one still needs its headers. Header rows that are marked but empty, and Excel tables still headed “Column1, Column2”, are now pointed out — noted, never scored.
v1.162
Tables, judged by what they drawThe first round of table traps, written before any fix: a Word grid whose borders are switched off, or whose style draws nothing, is a layout grid; a table drawn with borders on its cells is a data table and needs its header row. Two PDF guards joined them — tables grouped into header, body and footer sections, and headers that run down the first column.
v1.161
What the report says, true in every formatSection titles that look like headings but are tagged as plain paragraphs now cost a PDF what they always cost a Word file — four annual reports in the test set stop claiming “No issues found”. A language marked on the text itself now counts in Word as it did in PowerPoint, so a file fixed exactly as this report advises is no longer accused. And the best-practices section gained PowerPoint’s row for tables used only for layout.
v1.160
The last small differences between formatsA table used only to line things up on a slide is no longer graded as a data table — Word never did. Light text typed onto Excel’s plain grid is now checked against white, as unshaded Word text always was, and Word and PowerPoint now check that a declared language is a real code that matches the text, as PDF does. A damaged properties part now reads “could not be read”, never “no title”, and the same share of described images earns the same score in every format.
v1.159
Three more defects, one grade eachA list typed by hand no longer costs a D — every word is still there, in order, so it now costs what an unmarked table does. A PowerPoint deck whose section headings are all typed into text boxes now costs what the same headings cost in Word or a PDF. And Word, PowerPoint and Excel titles get the check PDF titles always had — including PowerPoint’s default, “PowerPoint Presentation”, which nothing had flagged before.
v1.158
A title is not a sectionOne bold line at the top of a Word memo — its title — used to count as hidden section headings and grade the memo D, though the same memo saved as a PDF graded A. One heading-like line is now a title in every format; two or more are still sections that need real heading markup.
v1.157
One table problem, one grade — in every formatAn agency’s meeting agenda graded D for a table whose header row was marked exactly the way Microsoft tells Word authors to mark it. The checker accepted only an older setting; it now accepts both, and the agenda grades A. Tracing it showed a table that really was unmarked costing a D in Word, a C in a PDF and a B in Excel — the same mistake, three different grades. It now costs the same everywhere.
v1.155
Accuses only what it can seeA PDF with no heading tags used to be failed on page count alone. Now the checker looks for headings painted on the page first — larger or bold lines over body text — and a document with none is not accused of hiding sections it does not have. A real title with a download timestamp glued on is no longer a failure either. Three real documents in the reference corpus stopped being accused of things nobody had observed, and every threshold the checker turns on is now published.
v1.151
Measured its own light mode, and found it wantingThis site opens in dark mode, so every automatic check it runs on itself had only ever looked at one of the two appearances it offers — including the checks behind its own claim that both were fine. Switching the default and re-testing found 136 places where text was too faint to read, one of them at roughly a quarter of the required contrast. All fixed, and every page now passes in both appearances. Publishing the number rather than quietly correcting it is the only consistent thing to do, on a tool that checks other people’s documents for exactly this.
v1.150
PowerPoint catches a heading that only looks like oneText made big and bold to stand in for a heading is a real accessibility failure, and Word has always caught it. PowerPoint reported nothing at all — the one place the checker said too little rather than too much, which is the more damaging way to be wrong.
v1.149
A perfect score stopped claiming silenceA check could score 100 and still print something it had found — and label itself “no issues found” over the top. Those now read “no scored issues”: nothing counted against the document, and something was still worth saying. 128 labels changed; not one score did.
v1.148
Stopped calling a real failure “not applicable”A reader spotted a report showing five “not applicable” labels about headings, on a document whose heading structure had scored zero. That label was itself the wrong answer and was withdrawn the same afternoon: rows about something already graded are simply gone from the list now. What remains is only genuine extra credit — worth doing, required by nothing — so nothing in it can repeat a point the action plan has already made.
v1.147
An audit survives leaving the pageOpening the status page or following a link while a document was being checked used to cancel it and demand the file again. The check actually runs on the server, so the page now remembers which one is yours and picks it back up on return — and the warning about leaving appears only when leaving would really lose something.
v1.146
Stopped taking points it could not tie to the lawAn audit of its own test suite found nine checks that could no longer fail for the reason they were written — and three scoring rules quietly escaping the rule that every deduction must name a WCAG criterion. A Word file with two “click here” links had been losing an entire category at the highest severity while the verdict named nothing. Weak link text is now reported and never counted; fourteen new trap documents make sure it stays that way.
v1.144
Audited its own claims — and found them wantingFour hostile reviews, checking every statement the reports make against the standards bodies’ own pages. They found a false accusation this checker had just shipped, compliance dates the Department of Justice had moved, and five wrong citations. All corrected, and two automatic checks widened so the same classes of error stop a release.
v1.143
Says what is worth doing beyond the lawEvery report now lists the practices that are not required but still help readers — with this document’s own evidence for each, and a plain statement that none of it touched the grade.
v1.130–136
The grade measures the law, and only the lawEvery check in the scoring engine was re-examined against one rule: a deduction must name a failing WCAG 2.1 criterion. Fifteen checks that measured good practice instead were moved out of the score and are now reported beside it.
v1.117
Passes its own trap test, 222 / 222And caught the first of its own bugs doing it — every one since is documented above, chips and all.
v1.109
Fixed the outlier that refused big reportsA 246-page annual report was wrongly called "too complex" — traced to the server, not the file, and fixed with proof.
v1.110
Made itself stricterHeadings now judged by what they say, not just how they're numbered — scores went down, not up.
v1.107–111
Loses public arguments — and fixes themWhen an outside expert has been right, the file was reread, the grade corrected the same day, and the case became a trap document. Every loss is in the bug list above.
v1.91–95
Covered all 31 industry checkpointsThe Matterhorn Protocol — the PDF industry's own test model — mapped on every report.
v1.68
Removed all accounts and identityNo logins, no emails, nothing stored about who uses it.
v1.24–130
Settled on WCAG 2.1 AAv1.24 adopted WCAG 2.2; since v1.130 only WCAG 2.1 — the version Title II ADA and IITAA name — can move a grade. What 2.2 adds is still reported, never counted.
the objection

"But... but one person built this. It's not Google or Microsoft or Adobe."

True — and it doesn’t need to be. This is real software, battle-tested: 12,659 check-ups for internal and external agencies, 222 trap documents designed to fool it, an independent referee co-signing every report, and a public record of every change — and it is free. Nothing here asks for trust; every claim below is checkable by anyone:

The recipe is public

Every line of code and every change is published on GitHub, for anyone to read — a kitchen that cooks with the door open.

Independent referee

veraPDF — the PDF industry's own validator — co-signs or contradicts every report.

4,118 self-checks

Before anything new goes live, the software re-runs every promise it has ever made — all 4,118 must pass. A single failure stops the release cold: fix it, then run the full battery again from the top. A few of those promises, in plain words:

  • A scanned page with no readable text must score zero — no partial credit for a picture of words.
  • A file with no tables must never be graded on tables.
  • The grade on screen and the grade in the downloaded report must match, digit for digit.
  • An image description made of nothing but blank spaces must be caught as empty.
  • A re-saved copy of a document must receive the identical grade, digit for digit.
  • All 222 trap documents must still be judged correctly, every release.
Public paper trail

166 version notes plus a plain-language security log written for records auditors — mistakes included.

The best analysis tools

Inside it runs qpdf and veraPDF — the accessibility field’s own best-of-breed analysis tools, used every day by professional remediators and certified specialists worldwide — and it checks all 31 points of the Matterhorn Protocol, the PDF industry’s official test model. One person assembled them; the world builds and checks them.

Free & open source

No license, no subscription, no per-seat fee — run as many check-ups as you like, from any agency. And the whole thing is open source: the code can be read, copied, run on your own servers, and checked line by line. There is nothing to buy, and nothing hidden to sell.

To be precise about the rivals: “Microsoft’s checker” is the Accessibility Checker built into Word, PowerPoint and Excel; Adobe Acrobat Pro has one too — 32 pass/fail rules. Both are respectable, and both are closed: you cannot read their code, their tests, or their history of mistakes. This page is that reading, for this tool. And rather than asking you to choose, every PDF report here includes an Acrobat-parity panel — the same 32 rules Acrobat runs, shown beside our verdict, so you can compare checkers without leaving the page.

The built-in checkers ask for your trust.
This one hands you its evidence.