Integration

Ellucian Ethos to Salesforce Education Data Architecture Canonical Integration

ELSF Ellucian Ethos ──▶ Salesforce Education Cloud (EDA)

Canonical API integration using Ellucian Ethos as the standard data layer to feed normalized student and academic data into Salesforce Education Data Architecture.

TypeIntegration
Indicative timeline4–8 weeks
ComplexityEnterprise
DeliveryFixed-scope
  • Standardizes disparate SIS data through Ethos REST APIs into a unified Salesforce EDA data model
  • Enables real-time contact, program enrollment, and academic period synchronization via change events
  • Reduces custom API development by using Ethos as the canonical source for all EDA object mappings
student data api standardization ed-fi identity mapping contact sync academic program
How it works

This integration uses Ellucian Ethos as the canonical API layer between one or more underlying student information systems and Salesforce Education Data Architecture (EDA). Rather than building point-to-point connections from each SIS directly to Salesforce, Ethos normalizes student, program, and enrollment data into its open Ed-Fi Compatible Data Model, then publishes change events via its REST API which are mapped and pushed into EDA's Account, Contact, Affiliation, and Program Plan objects.

The complexity lies in reconciling Ethos's generalized data entities (e.g., persons, enrollments) to EDA's highly structured object model with its specific affiliation rules, academic account types, and system-to-system ID linking. Additionally, deduplicating person records, mapping multiple SIS source identifiers to a single EDA contact, and handling partial or late-arriving enrollment data require careful mapping logic and error-handling choreography.

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.

Canonical field mapping from Ellucian Ethos persons endpoint to Salesforce EDA Contact + Affiliation records:

Ethos Field (GET /persons/{id})EDA Target ObjectEDA Target FieldNotes
personGuidContactEthos_GUID__cExternal ID key
names[0].firstNameContactFirstName
names[0].lastNameContactLastName
emails[0].emailAddressContactEmailPrimary email only
demographics.birthDateContactBirthdate
student.admissions[0].programMemberships[0].accountGuidAffiliationAccount__cLook up by Ethos_GUID__c
student.admissions[0].applicationStatusAffiliationStatus__cMap coded values to EDA picklist
// Ellucian Ethos GET /persons/{guid}
// Response → Transform → Salesforce EDA upsert

const ethosPerson = {
  personGuid: "8f1a7c3e-9b2d-4f6a-8e1c-2b4d5f6a7e8c",
  names: [{ firstName: "Jane", lastName: "Rivera" }],
  emails: [{ emailAddress: "[email protected]", primary: true }],
  demographics: { birthDate: "2001-04-15" },
  student: {
    admissions: [{
      programMemberships: [{
        accountGuid: "a3c5e7f9-1b4d-6a8c-2e4f-8b1d3f5a7e9c",
        program: "BS Computer Science"
      }],
      applicationStatus: "admitted"
    }]
  }
};

// Map to EDA Contact + Affiliation composite request
const sfPayload = {
  records: [
    {
      attributes: { type: "Contact", referenceId: "refContact" },
      Ethos_GUID__c: ethosPerson.personGuid,
      FirstName: ethosPerson.names[0].firstName,
      LastName: ethosPerson.names[0].lastName,
      Email: ethosPerson.emails.find(e => e.primary)?.emailAddress,
      Birthdate: ethosPerson.demographics.birthDate
    },
    {
      attributes: { type: "Affiliation__c", referenceId: "refAffiliation" },
      Contact__r: { Ethos_GUID__c: ethosPerson.personGuid },
      Account__r: { Ethos_GUID__c: 
        ethosPerson.student.admissions[0].programMemberships[0].accountGuid },
      Status__c: "Current"
    }
  ]
};

// POST /services/data/v59.0/composite/tree/ with sfPayload

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.

This integration connects Ellucian Ethos as the canonical data source to Salesforce Education Cloud's custom data model, synchronizing student records, academic programs, course connections, and enrollment data. The implementation follows a staged approach from discovery through production cutover with rollback capability.

Implementation Phases

  1. Discovery and Source Analysis — Inventory available Ellucian Ethos APIs (persons, students, academicRecords, enrollments, programs, terms); identify data availability, rate limits, and pagination behavior. Confirm which SIS (Banner, Colleague, PowerCampus) feeds Ethos and assess data latency. Map Ethos resource versions to ensure API contract stability.
  2. Target Schema Mapping — Review Salesforce EDA custom objects (Account, Contact, Affiliation, Course, CourseConnection, Term, AcademicRecord, PlanRequirement). Identify EDA custom fields vs. standard fields. Document the Account naming convention (typically organization-based for institutions using Administrative Account模式). Determine which records require Parent Account lookups.
  3. Authentication and Middleware Configuration — Configure OAuth 2.0 client credentials flow for Ellucian Ethos API consumption. Set up Salesforce Connected App with OAuth scopes for api, refresh_token, and offline_access. Establish middleware (MuleSoft, Boomi, or similar) project with connection endpoints, retry logic (exponential backoff), and webhook/schedule triggers.
  4. Field Mapping and Transformation Build — Build mapping layer translating Ethos payload structures to EDA object fields. Implement UUID-to-Salesforce-ID correlation table for bidirectional reference. Create lookup resolution logic for Term, Program, and PlanRequirement relationships. Handle date format normalization (ISO 8601 to Salesforce DATETIME).
  5. Testing and Data Quality Validation — Execute unit tests per mapping rule. Run sandbox integration with synthetic data sets covering active students, alumni, applicants, and faculty. Validate record matching (no duplicate Contacts), affiliation accuracy, and academic record completeness. Use Salesforce Field Audit Trail for data integrity verification.
  6. User Acceptance and Reconciliation — Partner with Registrar and Admissions offices to validate student records, enrollment counts, and academic standings. Compare aggregate counts between Ethos-sourced reports and Salesforce reports. Resolve discrepancies before production. Document data ownership and exception handling procedures.
  7. Production Cutover with Rollback — Execute phased activation: disable write access in Salesforce EDA, perform final sync, validate record counts, enable read/write, and monitor for 72-hour stabilization period. Retain middleware disable switch for rollback. Schedule daily reconciliation jobs for 30 days post-go-live.

Canonical Field Mapping

Ethos Resource / Field Salesforce EDA Object EDA Field / Relationship Mapping Logic
persons.guid Contact Ethos_Person_Id__c (External ID) Direct map; used for upsert matching
students.academicProgram.programGuid Affiliation Account lookup Lookup to Program Account via correlation table
academicRecords.grade Academic Record Grade__c Map to EDA grade scale; handle incomplete/missing grades
enrollments.section.referenceCode Course Connection Course__c lookup Match to Course via Course_ID__c or section identifier
students.enrollmentStatus Contact / Affiliation Status__c Map: active→Current, withdrawn→Former; update Affiliation accordingly
terms.academicTerm.value Term Term_ID__c Direct map for upsert; must pre-exist in EDA
persons.emailAddress Contact Email Map to primary email; validate format; flag non-institutional
admissions.applicationStatus Application (EDA) Application_Status__c Map to picklist values; trigger Lead→Contact conversion logic

Edge Cases

  • Duplicate Contact creation — Ethos person creates multiple Contacts if matching on Name alone. Must enforce Ethos_Person_Id__c as sole upsert key; deduplicate by SSN/ID where permitted.
  • Missing or null academic records — Students with no completed enrollments produce no Academic Record; this is valid but can cause downstream reporting gaps. Insert placeholder record with No_Record_Yet__c flag.
  • Stale Term data — EDA Terms must exist before Course Connections reference them. If Ethos returns enrollment for a term not yet in Salesforce, queue for deferred processing and alert admin.
  • Program/Plan mismatches — Ethos program GUIDs that do not resolve to an EDA Account record orphan the Affiliation. Implement nightly reconciliation job to flag unresolvable programs.
  • Concurrent modifications — If users edit records in Salesforce while sync runs, last-write-wins can overwrite manual changes. Use SystemModstamp comparison; skip update if Salesforce record modified within last sync window.
  • Non-matches on email — Applicants with multiple email addresses or missing institutional email create duplicate Leads. Canonicalize to preferred email before upsert; reject records missing any valid email.

Cutover

Cutover is executed in a maintenance window with Salesforce EDA in read-only mode. The middleware performs a full extract from Ethos covering all active records with timestamps greater than the last successful sync checkpoint. A validation step compares record counts by entity (Contact, Affiliation, CourseConnection) against Ethos aggregate reports, halting cutover if variance exceeds 0.1%. Upon validation, the middleware enables bidirectional sync and disables the Salesforce manual-entry lock. A rollback script reverts EDA to the pre-cutover snapshot (stored as a weekly export) and re-enables the read-only mode within 15 minutes of triggering. For 30 days post-cutover, a nightly reconciliation report emails discrepancies to the integration owner, and the middleware retains a 90-day event log for audit traceability.

What a full implementation includes

  • Canonical mapping between Ellucian Ethos 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.

$28,000–$67,000
Contact us