Skip to main content

PSLO Automation System

Replacing a two-month manual collection process across 300+ program websites with a validated Python pipeline.

Context
Institutional research, California community college
Period
Since 2024
Categories
AutomationBusiness AnalysisAnalytics

Executive Summary

An institutional research office needed program student learning outcome (PSLO) information collected from 300+ program websites and delivered as 300+ individual, consistently formatted Excel workbooks. The existing plan was months of manual copy-paste work, likely with temporary staffing. I built a Python pipeline that automated the collection, structuring, workbook generation, and QA — saving roughly two months of manual effort in a single cycle.

300+
program websites processed
300+
Excel workbooks generated
~2 months
manual effort saved

The Problem

Program learning outcomes live on public program webpages, maintained by many hands over many years — which means inconsistent page structures, inconsistent formatting, and no machine-readable source. The institutional process required this information gathered into a separate, per-program Excel workbook with a specific structure, for every program, on a deadline.

Done by hand, this is weeks of a person's time spent copying text between a browser and Excel — tedious, error-prone, and expensive. The anticipated solution was temporary staffing. That was the moment to ask the automation question: is this actually a people problem, or a pipeline problem?

My Role

I identified the automation opportunity, scoped the requirements with the process owners, built the pipeline, validated the output, and handled the exceptions. This included the business-analysis half — understanding exactly what the downstream process needed each workbook to contain — not just the scripting half.

Constraints

  • Source pages were inconsistent — the pipeline had to be robust to structural variation and fail loudly, not silently, on pages it couldn't parse.
  • Output workbooks had to match the expected format exactly; downstream users would open them in Excel, not in a database.
  • A hard institutional deadline: the automation had to beat the manual alternative in calendar time, not just effort.
  • Accuracy standards of an IR office — a wrong outcome statement attached to a program is worse than a blank one.

Approach & Architecture

The pipeline has four stages: collect page content from the program URL inventory, extract and structure the outcome information, generate per-program workbooks with openpyxl, and run QA checks comparing structured output back against source content. Programs that failed automated parsing dropped into a short manual-review queue — automating 95% and routing the rest is how the deadline was met.

URL inventory300+ programsCollectionpage contentExtractionstructuringGeneration300+ workbooksQAreconciliationException queuemanual reviewunparseable pages
Anonymized pipeline architecture: collection → extraction → generation → QA.
python· Workbook generation stage (synthetic example)Synthetic example
for program in structured_programs:
    wb = build_workbook(template)
    sheet = wb["PSLOs"]
    sheet["B2"] = program.name
    for row, outcome in enumerate(program.outcomes, start=OUTCOME_START_ROW):
        sheet.cell(row=row, column=2, value=outcome.text)
        sheet.cell(row=row, column=3, value=outcome.source_url)
    validate_workbook(wb, program)   # raises on structural mismatch
    wb.save(out_dir / f"{program.code}.xlsx")

Validation & QA

  • Every extracted outcome kept a pointer to its source page for spot-check auditing.
  • Structural validation on every generated workbook before save — missing sections fail the run for that program instead of shipping a bad file.
  • Coverage reconciliation: the set of generated workbooks was checked against the full program inventory, so nothing fell through silently.
  • Human review focused where it mattered — the exception queue — instead of spread thin across 300+ programs.

Outcome

300+ validated workbooks delivered, roughly two months of manual effort avoided, and the anticipated temporary staffing need removed or reduced. Just as importantly, the process is now repeatable: the next cycle starts from a pipeline, not from a blank spreadsheet and a webpage.

Limitations & Next Improvements

  • Source-page inconsistency means some manual review will always remain; the win is shrinking it, not pretending it's zero.
  • The longer-term fix is upstream: a structured source of record for outcomes, so future cycles are exports rather than extractions. That's a systems recommendation, not just a script.

Skills Demonstrated

  • Python, web automation, and data extraction against inconsistent sources
  • Excel automation with pandas and openpyxl
  • Requirements analysis with process owners; validation and QA design
  • Process improvement framing: recognizing a staffing plan as an automation opportunity

Skills in this project

  • Python
  • Web automation
  • Data extraction
  • pandas
  • openpyxl
  • Validation & QA
  • Requirements analysis
  • Process improvement