UB Syllabus Compliance Checker

Checks a graduate course-approval PDF against UB's syllabus policy elements and a lightweight PDF accessibility screen — entirely in your browser.

Nothing you upload leaves your computer. This page runs entirely in your browser (no server, no upload) — the PDF is read locally by your browser's own JavaScript engine.

Check a syllabus

Click to browse, or drag and drop files here. Multiple files OK.

Which UB policy level(s) apply?
New-course proposal?

On by default, since this checker is used for course approvals. A proposal can't have a class number yet (one is assigned when a section is scheduled), and its semester and meeting times may not be set, so those lines are not counted as missing. Uncheck it to check a scheduled course's syllabus; a file that includes the Graduate School's course approval form is still treated as a proposal.

About this tool & its limitations

This checks syllabus content against UB's official undergraduate and graduate syllabus policy pages. Accepts PDF (a plain syllabus, or a Graduate School course-approval packet — it automatically detects and excludes the "New Graduate Course Approval Request Form" cover pages if present) or .docx.

Grading Weight Check: if a "Grading" section states percentage-based weights (e.g. "Exams: 60%, Homework: 20%, Participation: 20%"), this adds them up and flags it if they don't sum to ~100%. Deliberately scoped to the located Grading section only, not the whole document — a whole-document scan picks up unrelated percentages (attendance bonus thresholds, late-submission penalties, a Final Grade Scale's cutoff ranges) that would otherwise produce a confidently wrong total. Reports "n/a" for a points-based breakdown (no percentages to check) or when no "Grading" heading can be found at all. A grading table that reconciles to 100% here also counts as positive evidence for the separate "Grading Policy" required-element check below, even when no specific phrase like "grade breakdown" or "grading scale" is present.

Syllabi are also checked line by line against each policy page's own list under each section (delivery mode, office hours, outcomes tied to assignments, a grading scale, a specific generative-AI statement, and so on). Two lines both pages only say "should" include are not checked: outcomes linked to the program's curriculum map, and a reminder about course evaluations. A requirement or line that comes from only one level's page is labeled, e.g. "(graduate requirement)" or "(undergraduate only)". A dual-listed 4xx/5xx course must also explain the additional work graduate students do (Graduate School policy on dual- and cross-listed courses); that is checked only when both levels apply. Undergraduate syllabi are also checked for a weekly schedule that covers the whole semester and for a pointer to the Academic Integrity policy. Lines the page marks "where applicable", or only says a section "may include", are listed under "Worth a Look" rather than counted as missing. Statements a page says must be included word for word (graduate: Academic Integrity and Accessibility Resources; undergraduate: Accessibility Resources) are compared with the official text and reported as matching, close (an older or edited version), or not found. A course listed at both levels is held to the undergraduate Accessibility Resources statement, which contains everything in the graduate one; a syllabus using the graduate version is told so.

"Grading Policy" and "Incomplete Policy" are two separate checks, not one — the two are governed by different, sometimes conflicting UB policies per level, and lumping them into a single pass/fail flag made it unclear which part of a syllabus was actually missing.

Course Code Format is informational only, never a compliance flag: if the syllabus doesn't state the precise official subject code + instruction-type abbreviation (e.g. "HIS 484 SEM") — only a spelled-out equivalent like "HISTORY 484, SEMINAR" — this notes it as a heads-up to verify against the catalog listing, without counting it as a missing required element.

Which policy level applies (undergraduate/graduate) is auto-detected from the course number stated on the syllabus's first page, per UB's own numbering convention (100–499 undergraduate, 500+ graduate) — a dual-listed course (e.g. "EVS 418/518") is checked against both. If no recognizable course number is found, both levels are checked rather than guessing one. Switch to "Choose manually" if this gets it wrong for an unusually formatted syllabus.

This is a heuristic gap-flagger, not an authoritative compliance determination. A "detected" element may be a false match; a "missing" one may just be phrased unexpectedly. Always read the flagged section of the real document before acting on a finding.

The accessibility check only applies to PDF uploads — PDF/UA is a PDF-specific standard, so a .docx file has nothing to check this way; export it to PDF first if you need this part. Even for a PDF, this check is deliberately degraded compared to the full desktop version of this tool (which uses veraPDF's authoritative PDF/UA-1 / ISO 14289-1 validator). This browser-only version can only check, using the PDF's own tag structure where present:

  • Whether the PDF is flagged as a tagged PDF at all
  • Whether the document has a title set in its metadata
  • Whether the document appears to declare a language (approximate, byte-level check)
  • Images/figures with no alt-text description
  • Hyperlinks with no accessible description text
  • Tables with inconsistent row/column structure

It does not check font embedding, table header scope attributes, or full per-element tagging coverage the way the desktop veraPDF-based tool does. Treat a clean result here as "no obvious problems found," not "accessible."