← toolkit.bot

Batch PDF to EPUB3 Conversion for EAA Compliance at Scale

The European Accessibility Act entered enforcement on June 28, 2026. For publishers, universities, libraries, and large organizations, the compliance challenge is not a single document — it's hundreds or thousands of PDFs in circulation that are now out of compliance by definition.

This guide covers the batch conversion workflow: how to triage a PDF library, automate conversions at scale using the toolkit.bot API, validate output, and estimate cost versus manual remediation alternatives.

Who Needs Batch Remediation

The following organization types typically have PDF inventories too large for document-by-document manual remediation:

If your organization has more than 50 PDFs in public distribution, a systematic batch approach is the only viable path to compliance within a defensible timeframe.

Step 1: Triage Your PDF Inventory

Not every PDF in your archive requires equal urgency. Prioritize based on three factors:

Compliance exposure

Conversion complexity

Volume estimate

A rough sizing exercise: audit your CMS, SharePoint, or document repository for PDF file counts by category. Even an estimate within 2× of reality is sufficient for planning purposes.

Step 2: Automated Batch Conversion with the toolkit.bot API

The toolkit.bot API accepts PDF uploads and returns EPUB3 files — one request per document. For batch workflows, run requests in parallel to maximize throughput.

Python batch script (recommended)

import pathlib, requests, time, concurrent.futures, logging

logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s")
log = logging.getLogger(__name__)

API_KEY   = "your_api_key_here"   # from toolkit.bot/premium
PDF_DIR   = pathlib.Path("./pdfs")
OUT_DIR   = pathlib.Path("./epub3")
OUT_DIR.mkdir(exist_ok=True)

HEADERS   = {"X-API-Key": API_KEY}
WORKERS   = 5   # parallel conversions; increase for API tier

def convert_one(pdf_path: pathlib.Path) -> tuple[str, bool]:
    out = OUT_DIR / pdf_path.with_suffix(".epub").name
    if out.exists():
        return pdf_path.name, True  # already done
    try:
        with open(pdf_path, "rb") as fh:
            r = requests.post(
                "https://toolkit.bot/convert",
                files={"file": (pdf_path.name, fh, "application/pdf")},
                headers=HEADERS,
                timeout=180,
            )
        if r.status_code == 200:
            out.write_bytes(r.content)
            log.info("OK  %s -> %s", pdf_path.name, out.name)
            return pdf_path.name, True
        else:
            log.error("ERR %s -- HTTP %s: %s", pdf_path.name, r.status_code, r.text[:120])
            return pdf_path.name, False
    except Exception as exc:
        log.error("EXC %s -- %s", pdf_path.name, exc)
        return pdf_path.name, False

pdfs = sorted(PDF_DIR.glob("*.pdf"))
log.info("Found %d PDFs to process", len(pdfs))

with concurrent.futures.ThreadPoolExecutor(max_workers=WORKERS) as pool:
    results = list(pool.map(convert_one, pdfs))

ok  = sum(1 for _, s in results if s)
err = len(results) - ok
log.info("Done: %d converted, %d errors", ok, err)

Install dependencies: pip install requests. The script skips already-converted files, so you can restart safely after interruption. Increase WORKERS for API tier accounts — the free tier limits concurrent requests.

Shell script (simpler, sequential)

#!/bin/bash
# eaa_batch.sh -- sequential batch conversion
mkdir -p epub3
for f in pdfs/*.pdf; do
  out="epub3/$(basename "${f%.pdf}.epub")"
  [ -f "$out" ] && echo "Skip: $f" && continue
  echo "Converting: $f"
  curl -sX POST https://toolkit.bot/convert     -H "X-API-Key: your_api_key_here"     -F "file=@$f"     -o "$out"
  echo "  -> $out"
  sleep 1
done
echo "Batch complete."

Step 3: Quality Assurance — Sampling Strategy

Validating every converted EPUB manually is not practical at scale. A sampling strategy gives defensible assurance without exhausting QA resources:

Automated validation (every file)

Run ACE by DAISY on every converted EPUB automatically. It generates a WCAG 2.2 report in about 10 seconds per file:

# Install: npm install -g @daisy/ace
# Validate all EPUBs and write reports to ./ace-reports/
for f in epub3/*.epub; do
  name=$(basename "${f%.epub}")
  ace "$f" --outdir "ace-reports/$name" --silent
done

Review the ace-reports/*/report.json files for violations. A clean ACE report is the primary artifact for demonstrating EAA compliance due diligence.

Manual spot-check (5–10% sample)

Select a stratified sample across document types and verify in Thorium Reader:

Step 4: Record-Keeping for Compliance Audits

EAA enforcement relies on organizations demonstrating good-faith compliance efforts. Maintain a conversion log as an auditable artifact:

The ACE by DAISY reports serve as the primary technical evidence. Store them alongside the EPUB3 files in your document management system.

Cost and Time Benchmarks

Organizations evaluating batch remediation often ask whether automated conversion is materially cheaper than alternatives. Based on typical document profiles:

Method Cost per document Time per document Quality
Manual PDF remediation (accessibility specialist) €50–€250 2–8 hours High
PDF tagging service (outsourced) €15–€60 1–5 days turnaround Medium-High
toolkit.bot API (automated PDF→EPUB3) €0.50–€1.00 30–180 seconds High (simple layouts)
toolkit.bot Premium (API + human review) €15–€49 1–2 business days High (all layouts)

ROI illustration: An organization with 500 PDFs to remediate faces a manual cost of approximately €25,000–€125,000 (at €50–€250/doc). Automated batch conversion via the API reduces this to €250–€500 for straightforward documents, with premium review reserved for the 10–20% of complex documents that require it — typically €1,500–€10,000 total. The saving on a 500-document remediation project is €20,000–€115,000.

For Complex or High-Stakes Documents

Automated conversion handles single-column reports, business documents, e-books, and most academic papers reliably. For documents where failure carries legal or reputational risk — financial disclosures, regulatory submissions, legal contracts, highly designed print publications — human review after automated conversion is advisable.

toolkit.bot Premium Verification combines automated conversion with a human accessibility review pass, producing an EPUB3 with a signed ACE validation report. Starting at €49 per document. Suitable for high-value, high-stakes, or publicly prominent documents.

Start batch conversion — free tier for testing, API tier for production scale.

View API docs →   Premium for complex docs →

For accessibility teams managing EAA compliance workflows, see our dedicated guide at toolkit.bot/for/accessibility-teams →

Related guides