PDF Accessibility Auto-Tagger with veraPDF PDF/UA-1 Check avatar

PDF Accessibility Auto-Tagger with veraPDF PDF/UA-1 Check

Pricing

from $20.00 / 1,000 page taggeds

Go to Apify Store
PDF Accessibility Auto-Tagger with veraPDF PDF/UA-1 Check

PDF Accessibility Auto-Tagger with veraPDF PDF/UA-1 Check

Adds tags, language and title to untagged born-digital PDFs and returns the tagged PDF with a before/after veraPDF PDF/UA-1 report. Machine checks only; no compliance guarantee. Human review is still needed.

Pricing

from $20.00 / 1,000 page taggeds

Rating

0.0

(0)

Developer

Jack Valmadre

Jack Valmadre

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Security

Limited permissions

Share

Adds the tag structure, language and title that screen readers rely on to untagged, born-digital PDFs, and checks the result.

This is not a compliance tool. It does not certify a PDF as accessible or as meeting any accessibility law or standard (ADA, Section 508, the European Accessibility Act, WCAG or any other rule). It runs the open-source veraPDF validator against its PDF/UA-1 profile, which covers the machine-checkable PDF/UA-1 rules only, and a person still needs to review the result. See "What it does not do" below before relying on it.

In automated tests (2026-09-25), the actor tagged 14 untagged PDFs: from pdfLaTeX, LibreOffice with tagging off, a Windows print driver (Acrobat Distiller), and Chrome and Word output with its tags removed. The pages compared by script checks (up to the first 6 of each file) had matching sampled pixels before and after, and the extracted text was unchanged except in one Chrome file, where ligature text given through ActualText (for example "ff") was lost. Build 0.1.7 fixes this: when automated script checks re-checked the three Chrome files with the fixed code (2026-09-26), their extracted text was unchanged. On the 10 of these also checked automatically with veraPDF (LaTeX, LibreOffice, Chrome), failed PDF/UA-1 rules went from 4–13 before to 0–3 after; the rules left were figures without alt text and font problems in the original files. We have not tested the output with specific screen readers (such as NVDA, JAWS or VoiceOver); the checks below are veraPDF's automated rules. Give the actor links to PDF files; for each file it adds an accessibility tag structure, document language and title, then runs the open-source veraPDF validator with its PDF/UA-1 profile on the file before and after tagging. You get the tagged PDF, a before/after row in the dataset and a readable report.

What it does to each PDF

  • Builds a structure tree from the page content: headings (H1–H6, by font size), paragraphs, lists (L/LI/Lbl/LBody), tables (Table/TR/TH/TD with header scope), figures (images, and embedded vector graphics that contain text or images) and links, in reading order (two-column pages are read column by column).
  • Marks everything else (page numbers, running headers you describe with a pattern, decoration) as artifacts so screen readers skip it.
  • Sets the document language, the title (shown in the viewer title bar), the PDF/UA identifier in the XMP metadata, and tab order on every page.
  • Adds your alt text to figures, in page order.
  • Validates the input and the output with veraPDF (PDF/UA-1 profile) and lists which rules pass and fail.

What it does not do (read this)

  • Passing veraPDF is not the same as being accessible, and it is not a legal-compliance guarantee (ADA, Section 508, the European Accessibility Act, WCAG or any other law or standard). veraPDF checks the machine-checkable PDF/UA-1 rules only.
  • A person still needs to review the result: reading order, heading levels, whether tables were detected correctly, and that every image has meaningful alt text. The tagging is automatic and heuristic; on unusual layouts it can be wrong even when the checks pass.
  • Images need alt text from you. Without it, images are tagged as figures without alt text, listed in the report, and the PDF/UA-1 check fails on them.
  • Scanned (image-only) PDFs are not supported: they need OCR first.
  • Already-tagged PDFs keep their tags. Re-tagging could destroy existing work, so for a PDF that already has a tag structure the actor only finishes the document-level metadata (input 'Already-tagged PDFs', default 'finish'; choose 'leave' to only validate): it adds the PDF/UA-1 identifier to the XMP metadata, copies the file's own title into the XMP title (or uses your 'Document title'), sets the document language from your 'Document language' input (default en) only if the file declares none, and turns on DisplayDocTitle and MarkInfo Marked where missing. Every change is listed in the report. It never invents a title: a file with no title of its own is reported as needing one. The existing tags (reading order, headings, tables, alt text) are not checked or repaired; the veraPDF after-check shows what still fails. Finished files are not charged. Many common exports are already tagged: in automated tests, Chrome "Print to PDF" output, LibreOffice exports with tagging on and Word exports with accessibility tags on. On the 13 unencrypted already-tagged files in our test set (2026-09-26), the pages compared by script checks (up to the first 6 of each file) had matching sampled pixels and the extracted text was unchanged after finishing. On 14 already-tagged real-world files (2026-09-26), finish mode opened 13 (one was encrypted and refused); all document-level metadata rules passed afterwards on the 10 with a title of their own, and the other 3 were reported as needing a title. veraPDF still reports the tag-tree rules it does not touch.
  • Word output without tags is tagged, but in automated tests the text was split into many small paragraphs (often several per line) and too many lines were tagged as headings. Check the result, or export from Word with its accessibility tags option switched on.
  • Known rendering issue: in the microtype LaTeX manual, tagging moves the XeTeX logo and changes extracted text. Compare the output with the original before using it.
  • Font problems from the program that made the PDF (fonts not embedded, missing Unicode maps) are not repaired; veraPDF reports them in the after-check.
  • Text inside embedded vector graphics is not tagged. Charts and diagrams drawn as embedded graphics (PDF form XObjects), such as LaTeX figures, are tagged as a single Figure; the labels inside them are not tagged as text. Without alt text from you, a screen reader only announces "graphic" for them, and each one is listed as a warning ("page N: embedded graphic ... was tagged as a Figure with NO alt text"). Give alt text for them in the image alt texts input.
  • Vector drawings with no text (lines, shapes, charts whose labels are drawn as outlines) are marked as decoration and skipped by screen readers. If such a drawing carries meaning, it needs manual tagging.
  • Form fields (AcroForm) and password-protected PDFs are not handled.

Results we have measured

These are automated test results, not a promise for your files:

  • RFC 9562 (46 pages, from rfc-editor.org): 12 failed PDF/UA-1 rules before, 0 after (106 rules passed).
  • Eight more RFCs in one run (RFC 9110, 9000, 9111, 9112, 9113, 9114, 9204, 8949; 35 to 194 pages each): 12 or 13 failed rules before each; 0 after for seven of them. RFC 9113 kept 1 failed rule: a diagram on page 15 is an embedded graphic, tagged as a figure without alt text and listed in the report.
  • An arXiv paper made with LaTeX (arXiv 1706.03762, 15 pages, 3 images and 5 vector figures, no alt text supplied): 13 failed rules before, 3 after. The remaining failures were one rule failed by all 8 figures (no alt text supplied) and two font rules (a font not embedded, a font without a Unicode map) from the original file, which this actor does not repair. The 5 vector figures' labels (pages 13–15) are not tagged as text; the report lists each one.
  • Test documents generated with WeasyPrint (invoices, reports, tables, lists, two-column pages, images with alt text) passed veraPDF's PDF/UA-1 checks after tagging in automated development tests.

Input

  • PDF links (required): direct links to the PDF files, reachable from the internet (for example a signed link from your storage), up to 10 per run. The default run timeout is 900 seconds; we measured about 0.7 seconds per page (9 RFCs, 714 pages, 488 seconds), so split very large batches or raise the timeout in the run options.
  • Document language (default en), Document title (default: the PDF's own title, else the file name without .pdf; the report warns when the file name was used).
  • Image alt texts: for images and embedded graphics, in page order; best with one file per run.
  • Page furniture patterns: regular expressions for lines to mark as artifacts (default: page numbers like "Page 3 of 10").
  • Run veraPDF check (default on), Maximum file size (default 100 MB).

Output

Dataset, one row per file:

{"fileName": "rfc9562.pdf", "status": "tagged", "pages": 46, "lang": "en",
"title": "RFC 9562: Universally Unique IDentifiers (UUIDs)",
"failedRulesBefore": 12, "failedRulesAfter": 0, "passesPdfUa1ChecksAfter": true,
"structure": {"H1": 2, "H2": 18, "H3": 40, "P": 2647, "L": 56, "Table": 2, "Link": 634},
"changes": ["Added a tag structure: ...", "Set document language ..."],
"warnings": [], "before": {"compliant": false, "failed": [{"rule": "7.1-3", "description": "..."}]},
"after": {"compliant": true, "passedRules": 106, "failedRules": 0},
"taggedPdfUrl": "https://api.apify.com/v2/key-value-stores/.../records/001-rfc9562-tagged.pdf",
"reportUrl": "https://api.apify.com/v2/key-value-stores/.../records/001-rfc9562-report.html"}

status is tagged, finished (already tagged; document-level metadata fixed, saved as NNN-<name>-finished.pdf), unchanged (already tagged and its metadata was already complete), refused (with reason: already tagged with 'leave' chosen, encrypted, unreadable), fetch-failed or skipped.

Key-value store: NNN-<name>-tagged.pdf, NNN-<name>-report.html and .md for each file, and OUTPUT (JSON summary).

Pricing

Pay per event:

  • US$0.02 per page tagged (event page-tagged): every page of each PDF the actor tagged (status tagged). Not charged: already-tagged PDFs whose metadata was only finished (finished) or needed nothing (unchanged), and files that were refused, fetch-failed or skipped.
  • Our start charge, once per run: US$0.00005 per GB of run memory, minimum one GB (event apify-actor-start). At this actor's default 2 GB that is US$0.0001 per run; at its 8 GB maximum, US$0.0004.

There's no extra charge for platform usage. For example, tagging one 10-page PDF at the default memory costs 10 × US$0.02 + US$0.0001 = about US$0.20. The prefilled example, RFC 9405 (5 pages, from rfc-editor.org), costs 5 × US$0.02 + US$0.0001 = about US$0.10 if you run the form as it opens. Apify shows the price before you run, and you can cap the cost of a run: if you set a maximum charge per run, a PDF whose pages would go over it is listed as skipped and not charged.

Privacy

Your files are downloaded into the run, processed, and stored only in your own Apify storage. Nothing is sent anywhere else.

Support

Open an issue on the actor's Issues tab. This actor is built and maintained by AI agents for Madrasco; platform replies may be AI-assisted and a human owner can be reached on request through the Issues tab.

veraPDF is developed by the veraPDF consortium and the Open Preservation Foundation and is used unmodified under its open-source licence (GPLv3+ / MPLv2+). This actor is independent and not affiliated with or endorsed by them.