Middleware

Anthology Planetaris to Salesforce Education Data Architecture Sync

ASF Anthology Planetaris ──▶ Salesforce Education Cloud (EDA)

Middleware pipeline syncing student enrollments, course data, and grade outcomes from Anthology Planetaris SIS into Salesforce Education Data Architecture for recruitment and engagement tracking.

TypeMiddleware
Indicative timeline4–8 weeks
ComplexityHigh
DeliveryFixed-scope
  • Eliminates manual enrollment entry across student information and CRM systems
  • Enables real-time grade reporting within Salesforce recruitment and engagement workflows
  • Creates unified student record linking Anthology academic data to EDA constituent profiles
student enrollment course sync grade exchange anthology salesforce eda middleware
How it works

This middleware integration builds a bidirectional sync layer between Anthology Planetaris (the student information system) and Salesforce Education Data Architecture (the institutional CRM), automating the flow of enrollment, course, and grade data that admissions and student affairs teams rely on for outreach and retention.

The hardest part is resolving the structural mismatch: Anthology Planetaris organizes data around SECTION, ENROLLMENT, and GRADE tables with term-based sections, while Salesforce EDA stores program affiliations, course connections, and contact roles in custom objects like Course_Offering__c, Course_Enrollment__c, and Academic_Standing__c that require careful field mapping and ID correlation to avoid duplicate records or stale data.

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.

/* Middleware: Planetaris SIS → Salesforce EDA transformation */

/* Inbound from Anthology Planetaris */
{
  "student": {
    "person_id": "STU-2024-00142",
    "first_name": "Mariana",
    "last_name": "Okonkwo",
    "email": "[email protected]",
    "sis_enrollment_status": "active"
  },
  "enrollments": [{
    "course_id": "CS-301-A",
    "course_title": "Data Structures",
    "term": "Fall-2024",
    "grade": "B+",
    "credits": 3
  }]
}

/* EDA Contact upsert payload */
{ "FirstName": "Mariana",
  "LastName": "Okonkwo",
  "Email": "[email protected]",
  "University_ID__c": "STU-2024-00142",
  "Primary_Language__c": "English"
}

/* EDA Course Enrollment → Course Connection */
{ "Contact__c": "{Contact.Id}",
  "Course_Offering__c": "{lookup: CS-301-A, Fall-2024}",
  "Status__c": "Current",
  "Grade__c": "B+",
  "Credits__c": 3,
  "Academic_Status__c": "Earned Credit"
}

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.

Middleware pipeline synchronizing student enrollment, course, and grade data from Anthology Planetaris SIS into Salesforce Education Data Architecture (EDA) for recruitment funnel tracking and student engagement lifecycle management. The integration runs on a scheduled middleware layer (e.g., MuleSoft, Boomi, or custom API gateway) performing bidirectional delta-sync with conflict resolution based on a Planetaris timestamp hierarchy.

Implementation Phases

  1. Discovery & API Inventory — Enumerate Anthology Planetaris REST endpoints for students, enrollments, courses, and grades. Map each to EDA custom objects. Document pagination limits, rate thresholds, and OAuth2 token refresh cadence on the source system.
  2. Schema Alignment & Custom Objects — Extend EDA objects with custom fields (Planetaris_Id__c, Last_Sync_Timestamp__c) to store origin-system keys and sync metadata. Create a Planetaris_Sync_Log__c object to record each batch run outcome.
  3. Field Mapping & Transformation Rules — Build transformation maps for each entity type. Normalize enrollment statuses (Active/Withdrawn/Dropped) to EDA Status__c picklist values. Convert grade strings to the Grade__c decimal field using a lookup table.
  4. Delta-Sync Logic — Implement last-modified polling using modified_since query parameters per endpoint. Maintain a watermark table in middleware tracking the latest synced Planetaris_Id per entity. Handle re-sync of historical records via an initial full-backfill flag.
  5. Error Handling & Retry Queue — Configure dead-letter queues for failed transforms. Retry transient failures (5xx, timeout) with exponential backoff. Surface data-quality rejects (missing required fields) to an ops dashboard for manual remediation before re-queuing.
  6. Duplicate Detection — Match incoming students to existing EDA Contact records on Planetaris_Id__c first, falling back to Email fuzzy-match. Prevent duplicate Course_Offering__c inserts using a composite unique key of Course_Code__c + Term_Id__c.
  7. UAT & Data Reconciliation — Pull a 90-day sample from Planetaris and validate record counts, field values, and enrollment counts in EDA. Run row-level diff reports between source and target; target tolerance for field-level variance is zero for required keys, ±1 day for date fields.
  8. Go-Live Cutover — Execute final full-backfill load during a maintenance window. Switch delta-sync to production endpoints. Validate real-time inserts land correctly in EDA within the first 15 minutes. Monitor Planetaris_Sync_Log__c for zero ERROR rows before handing over to ops.

Field Mapping

Planetaris Field EDA Target Object EDA Target Field Transform Rule
student_id Contact Planetaris_Id__c Direct assignment; set as External ID
last_name Contact LastName Direct; trim whitespace
email_address Contact Email Direct; lowercase normalization
enrollment.course_offering_id Course_Enrollment__c Course_Offering__c Lookup by Planetaris_Offering_Id__c
enrollment.status Course_Enrollment__c Enrollment_Status__c Map "A"→"Active", "W"→"Withdrawn", "D"→"Dropped"
grade.numeric_value Grade__c Final_Grade__c Parse decimal; default 0.00 if null
course.catalog_number Course_Offering__c Course_Code__c Direct; concatenate with term prefix if needed

Edge Cases

  • Mid-term withdrawals — A status change from "Active" to "Withdrawn" after initial sync must update the existing Course_Enrollment__c record rather than create a duplicate; the upsert key is Planetaris_Enrollment_Id__c.
  • Incomplete grades — Planetaris may return grade = null for in-progress courses; these must not overwrite an existing Final_Grade__c value in EDA.
  • Student re-enrollment — If the same student re-enrolls in a course across terms, ensure the Course_Enrollment__c record is scoped to the correct Term__c lookup to avoid cross-term contamination.
  • Email domain changes — If a student updates their email in Planetaris, the integration must update Contact.Email and handle any existing EDA duplicate-matching rules that may have matched on the old address.
  • Course catalog restructuring — If catalog_number changes mid-sync, the composite key on Course_Offering__c breaks; run a pre-check to flag orphaned offerings before enabling production delta-sync.

Cutover

Cutover is executed as a two-phase switch to preserve reversibility. First, a final historical backfill loads all records with Last_Sync_Timestamp__c set to the cutover window start; EDA records receive a Synced_From_Planetaris__c = true flag for auditability. Second, the delta-sync job is pointed at production Planetaris endpoints with the watermark reset to NULL, forcing a fresh delta from cutover time forward. Reconciliation runs immediately post-switch: a row-count comparison between the Planetaris_Sync_Log__c summary and source system counts per entity type, plus a spot-check of 20 randomly selected records confirming field fidelity. If reconciliation reveals discrepancies exceeding tolerance, the middleware reverts to the pre-cutover configuration and re-runs the backfill. Rollback restores the last known-good watermark and pauses delta-sync until the issue is resolved and re-certified.

What a full implementation includes

  • Canonical mapping between Anthology Planetaris and Salesforce Education Cloud (EDA), 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.

$12,000–$35,000
Contact us