Sync / roster

PeopleSoft Campus Solutions ↔ Canvas LMS Bidirectional Sync

PSCV PeopleSoft Campus Solutions ──▶ Canvas LMS (Instructure)

Two-way synchronization of course sections, enrollments, and grades between PeopleSoft Campus Solutions and Canvas LMS via the Canvas REST and SIS Import APIs.

TypeSync / roster
Indicative timeline3–6 weeks
ComplexityEnterprise
DeliveryFixed-scope
  • Automated section and enrollment provisioning eliminates manual LMS setup each term
  • Grade passback ensures student scores flow back from Canvas to PeopleSoft grading
  • Near-real-time sync handles enrollment adds/drops without waiting for batch windows
sis lms higher-ed synchronization enrollment grades canvas instructure integration
How it works

Most institutions run PeopleSoft Campus Solutions as their system of record for student data while adopting Canvas as their primary learning platform. This integration bridges the two by syncing course section definitions, student enrollments, and instructor assignments on a scheduled and event-driven basis, then pushing final grades back into PeopleSoft grading screens via the SIS Import API.

The complexity stems from mismatched data models: PeopleSoft stores enrollments as separate STDNT_ENRL and CLASS_MTG records while Canvas uses courses → sections → enrollments hierarchies. Additionally, enrollment status codes (A/D/W) map differently to Canvas enrollment states, and the term/subterm date logic in PeopleSoft must be decomposed into Canvas course start/end dates and Blueprint locking rules. Handling mid-term adds/drops and retroactive grade updates without creating duplicate records requires careful idempotency design.

Free reference snippet

Yours to use

A working piece from this integration — no sign-up. The full build handles the edge cases, safeguards, and cutover.

# PeopleSoft → Canvas SIS Import CSV (enrollment sync)
# File: enrollment_sync_2024-01-15.csv
# Endpoint: POST /api/v1/accounts/:account_id/sis_imports
# PeopleSoft IB delivers this via REST/SOAP from STDNT_ENRL record

course_id,user_id,section_id,enrollment_type,status,associated_user_id
PS_CC_SPRING24_CS101_001,PSUID:123456789,PS_SEC_2024_001,student,active,
PS_CC_SPRING24_CS101_001,PSUID:987654321,PS_SEC_2024_001,student,active,
PS_CC_SPRING24_CS101_001,PSUID:555555555,PS_SEC_2024_001,ta,active,

# Canvas → PeopleSoft Grade Passback via REST
# PeopleSoft consumes Canvas submissions webhook, maps to STDNT_GRADE
GET /api/v1/courses/canvas_course_id/courses/canvas_section_sis_id/submissions?student_ids=all&assignment_ids=all
Authorization: Bearer canvas_access_token

{
  "submissions": [
    {
      "user_id": "canvas_user_id",
      "assignment_id": "canvas_assignment_id",
      "score": 87.5,
      "grade": "B+",
      "workflow_state": "graded"
    }
  ]
}

# PeopleSoft mapping (STDNT_GRADE ← Canvas submission)
Canvas.user_idSTDNT_ENRL.EMPLID    (via SIS_ID cross-reference)
Canvas.section_idSTDNT_ENRL.CLASS_NBR
Canvas.assignment_idSTDNT_GRADE.ASSIGNMENT_ID
Canvas.scoreSTDNT_GRADE.GRADE_POINTS

Implementation pathway

Step by step

How we'd take this from discovery to a production-safe cutover — the phases, the canonical mapping, and the edge cases that bite.

Bidirectional synchronization between PeopleSoft Campus Solutions and Canvas LMS ensures consistent course sections, enrollment records, and grades across both systems. PeopleSoft serves as the authoritative source for student identity and enrollment status, while Canvas is the system of record for academic grades. The integration uses Canvas SIS Import API for bulk operations and Canvas REST API for real-time grade push-back.

Implementation Phases

  1. Discovery and API Baseline — Inventory PeopleSoft tables (SFAENRL, CRSE_CATALOG, CRSE_OFFER, CLASS_TBL, CRSE_GRADE_OFF) and Canvas endpoints (courses, sections, enrollments, submissions). Validate test tenant access and confirm SIS Import SFTP credentials with Instructure support. Map existing PeopleSoft STRM codes to Canvas term sis_id values.
  2. Schema Alignment and Identifier Strategy — Standardize on PeopleSoft EMPLID as the primary sis_user_id in Canvas and CRSE_ID + STRM + CLASS_NBR concatenated as the sis_section_id. Define the enrollment role mapping: PEOPLESOFT ENRL_STATUS = 'E' maps to Canvas enrollment_state 'active'. Establish that PeopleSoft grades (from CRSE_GRADE_OFF) override Canvas when conflict resolution is required.
  3. Outbound Pipeline: PeopleSoft → Canvas — Build a nightly batch job using PeopleSoft Integration Broker or a custom Application Engine to extract enrollment deltas since last sync. Generate Canvas SIS CSV format (sections.csv, enrollments.csv, terms.csv) and upload via SFTP to the Canvas-managed SIS Import endpoint. Implement idempotency using CLASS_NBR + STRM composite keys.
  4. Inbound Pipeline: Canvas → PeopleSoft — Poll Canvas Assignments API (GET /api/v1/courses/:id/assignments) and Submissions API (GET /api/v1/courses/:id/assignments/:id/submissions) on a configurable schedule (default: every 15 minutes). Transform posted_grade into PeopleSoft CRSE_GRADE_OFF grade_final values. Write grades back via PeopleSoft Grade Collection component or CRSE_GRADE_OFF CI.
  5. Error Handling and Retry Logic — Implement dead-letter queues for failed API calls. If a Canvas SIS Import returns a 422 with duplicate sis_id conflicts, flag for manual resolution rather than retry. For PeopleSoft CI failures, log to ETL_ERROR_LOG and alert the SIS team within one business hour.
  6. Data Validation and Reconciliation Report — Generate a daily reconciliation comparing PeopleSoft SFAENRL count against Canvas active enrollments per section. Report on missing grades in CRSE_GRADE_OFF where Canvas submissions show posted_grade. Set tolerance threshold: flag mismatches > 0.5% of section enrollment.
  7. User Acceptance Testing — Execute parallel-run with three representative terms (past, current, future). Validate that drops processed in PeopleSoft reflect as enrollment_state 'inactive' in Canvas within one sync cycle. Confirm grade push-back populates CRSE_GRADE_OFF.GRADE_OFF in PeopleSoft without stripping existing manually entered grades.
  8. Production Cutover — Execute a full historical sync of current term enrollments and active course sections before go-live. Disable manual grade entry in Canvas for integrated sections to prevent divergence. Enable real-time delta sync and schedule nightly full reconciliation.

Canonical Field Mapping

PeopleSoft Field Canvas Field / API Transform Rule
STDNT_ENRL.EMPLID enrollment.user_sis_user_id Direct map; EMPLID used as sis_user_id on Canvas user
CLASS_TBL.CRSE_ID + CLASS_TBL.STRM + CLASS_TBL.CLASS_NBR sis_section_id (SIS Import) / section.sis_id (REST) Concatenate as {CRSE_ID}-{STRM}-{CLASS_NBR}; strip leading zeros
SFAENRL.STM_COMMIT_CREDIT enrollment.enrollment_type If credit > 0, type = 'StudentEnrollment'; audit = 'ObserverEnrollment'
SFAENRL.ENRL_STATUS enrollment.enrollment_state 'E' → 'active'; 'D' → 'inactive'; 'W' → 'completed'
CRSE_CATALOG.SUBJECT + CRSE_CATALOG.CATALOG_NBR course.course_code Format as {SUBJECT} {CATALOG_NBR}; e.g., 'CS 101'
CRSE_GRADE_OFF.GRADE_OFF submission.posted_grade (PUT /courses/:id/assignments/:id/submissions/:id) Map PeopleSoft grade codes to Canvas grade strings; handle incomplete ('I') as 'incomplete'
CRSE_OFFER.STRM term.sis_term_id Direct map; STRM '2244' becomes Canvas term sis_id '2244'

Edge Cases

  • Duplicate EMPLID in Canvas — If a user merges occurs in PeopleSoft (OLD_EMPLID → NEW_EMPLID), Canvas retains the old sis_user_id. The sync will create a duplicate user; manually delete the ghost account or run a Canvas user merge before re-enrollment.
  • Mid-Term Section Recreates — If PeopleSoft issues a new CLASS_NBR for an existing section (rare but occurs with section splits), the Canvas sis_section_id changes, orphaning prior grades and posts. Freeze the old section in Canvas and crosswalk grades manually.
  • Grade Override Conflicts — When an instructor manually changes a grade in Canvas after the sync has pushed a PeopleSoft grade, the inbound pipeline will overwrite it on next poll unless the instructor flag override is set. Lock grades for synced sections to prevent rollback.
  • Incomplete Grades ('I') — PeopleSoft incomplete placeholders sync to Canvas as 'incomplete' but do not calculate into course totals. If Canvas has a grade weighting scheme, ensure the incomplete assignment is excluded from final percentage calculations via Canvas assignment group rules.
  • SIS Import Race Conditions — Rapid successive SIS imports (e.g., drop-then-add for the same student in the same batch) can cause Canvas to reject the second operation. Sequence operations: process drops first, wait for SIS Import completion webhook confirmation, then process adds.
  • Cross-Listed Sections — PeopleSoft cross-listed classes share one CLASS_NBR but belong to multiple CRSE_IDs. Map to a single Canvas section and handle grade rostering by course-specific enrollments rather than section-level.

Cutover

Cutover must be executed with a reversible checkpoint. Before go-live, export a snapshot of CRSE_GRADE_OFF.GRADE_OFF and SFAENRL for all active terms. If the Canvas integration corrupts grade data (e.g., inbound pipeline writes null or malformed grades), disable the inbound job, restore CRSE_GRADE_OFF from the snapshot, and re-import via PeopleSoft grade rostering. For enrollments, if Canvas diverges from PeopleSoft after cutover, re-run the full SIS Import with the overrides flag to overwrite Canvas state with PeopleSoft. Schedule the first reconciliation report within 24 hours of cutover and retain rollback capability for 14 days. Establish a freeze window: no manual grade changes in Canvas for integrated courses during the first 72 hours post-cutover.

What a full implementation includes

  • Canonical mapping between PeopleSoft Campus Solutions and Canvas LMS (Instructure), to the field level.
  • The edge cases that corrupt data at cutover — identified, handled, and tested.
  • Production-safe rollout: reversible, phased, with reconciliation checks.
  • Handover documentation your team can operate from.

Build this against your estate

Reading the reference is free. Delivering it under liability — with the safeguards that keep production running through the cutover — is what we do.

$25,000–$65,000
Contact us