Built to be checked.
See for yourself.
Every claim on this page can be verified without taking anyone's word for it — including ours.
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.
Title II. IITAA. WCAG.
Government information must work for everyone. Two laws say so; one rulebook defines "works."
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.
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.
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.
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.
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:
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.
Our checker
Structure, headings, image descriptions, tables, forms, reading order.
veraPDF
The industry's own PDF/UA validator. We did not write one line of it.
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.
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.
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.
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.
The expert was right. The checker mis-measured forms. Fixed and published the same day.
Right again — the "images" were leftovers from a rebuilt page, on no page at all. Fixed the same day.
Verified against the file's internals — the flag was real. The advice was made clearer instead.
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.
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.
First check-up: fails
The report lists every problem found — and the exact fix-it steps for each one.
The author repairs it
Headings, image descriptions, table labels, reading order — following the steps in the report.
Re-checked: passes
Same document, same rules. The grade moved because the file did.
This is the question behind every other question — and the answer no sales pitch can fake: the same file, failed and then passed.
Different tools, different jobs. Both viable.
Many agencies already have SiteImprove. Being honest about both is the fastest way to trust either.
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
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.
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.
"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:
Every line of code and every change is published on GitHub, for anyone to read — a kitchen that cooks with the door open.
veraPDF — the PDF industry's own validator — co-signs or contradicts every report.
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.
166 version notes plus a plain-language security log written for records auditors — mistakes included.
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.
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.