Sage X3 and SAP SuccessFactors integration
Sage X3 runs manufacturing and finance. SAP SuccessFactors runs HR and compensation. Connecting the two keeps your organizational structure, cost centers, and headcount aligned across systems. New hires, terminations, and job changes in SuccessFactors flow into Sage X3 cost centers and GL dimensions without manual entry. ml-connector handles the very different authentication and transport layers on each side and moves the data on a schedule you control.
What moves between them
The main flow is SAP SuccessFactors into Sage X3. Employee records, job titles, organizational units, and cost center assignments are pulled from SuccessFactors via OData and mapped into Sage X3 GL dimensions and customer/supplier cost center codes. Cost center changes in SuccessFactors update the corresponding GL analytical dimensions in Sage X3. The flow runs on a schedule tied to your HR calendar, typically daily or weekly depending on the frequency of job changes and reorganizations.
How ml-connector handles it
ml-connector generates SAML Bearer Assertions by signing with your SuccessFactors RSA private key, exchanges them for 24-hour access tokens, and polls the Employee Central OData V2 endpoint using the lastModifiedDateTime filter to detect changes since the last run. It parses the non-standard /Date(milliseconds)/ datetime format returned by SuccessFactors and maps employee records to Sage X3 cost center codes. On the Sage X3 side, ml-connector uses the customer-specific server URL and folder name to build the REST api1 or GraphQL endpoint, authenticates with OAuth2 client credentials or HTTP Basic Auth, and writes cost center assignments and GL dimension codes via the gaccount and gaccentry entities. Because Sage X3 tokens expire every five minutes, ml-connector refreshes them proactively. Because SuccessFactors pages default to 20 records, ml-connector overrides to $top=1000 on every query to avoid silently missing employees. Both systems' rate limits are respected with exponential backoff.
A real-world example
A mid-sized manufacturing company runs Sage X3 for finance and production across three plants and a central distribution center, and uses SAP SuccessFactors for global HR and payroll. Each plant has its own cost center in Sage X3, and each employee in SuccessFactors is assigned to a job and cost center. Before the integration, the finance team manually entered cost center changes into both systems when employees moved departments or plants, leading to mismatches and month-end reconciliation headaches. With Sage X3 and SuccessFactors connected, cost center and job changes in SuccessFactors automatically update the GL dimensions in Sage X3, and headcount reports in both systems stay in agreement.
What you can do
- Pull employee records, job titles, and organizational assignments from SAP SuccessFactors and sync them into Sage X3 GL dimensions.
- Map SuccessFactors cost center codes to Sage X3 analytical dimensions on GL accounts.
- Generate SAML Bearer tokens for SuccessFactors using your RSA private key, with automatic refresh on 24-hour expiry.
- Connect to customer-specific Sage X3 endpoints and handle OAuth2 or Basic Auth authentication with 5-minute token refresh.
- Poll both systems on a configurable schedule, parse OData V2 datetime formats, and handle pagination and throttle retries.
Questions
- Which direction does data flow between Sage X3 and SAP SuccessFactors?
- The flow is primarily SAP SuccessFactors into Sage X3. Employee records, job titles, cost center assignments, and organizational units are pulled from SuccessFactors via OData and synced into Sage X3 GL dimensions and cost center codes. Sage X3 finance records do not flow back to SuccessFactors, since SuccessFactors is HCM-only and has no GL or invoice entities.
- Why does ml-connector need the Sage X3 server URL and folder name?
- Sage X3 has no central tenant registry or shared base URL. Each customer instance is hosted on a unique server with a unique folder and application name, so ml-connector must use the full endpoint URL per customer to discover the correct REST or GraphQL entrypoint and authenticate against that specific instance.
- How does ml-connector handle SuccessFactors' non-standard datetime format and pagination?
- SAP SuccessFactors returns datetimes in the non-standard /Date(milliseconds)/ format, which ml-connector parses to detect changes via the lastModifiedDateTime filter. SuccessFactors defaults to 20 records per page, which risks silently dropping employees, so ml-connector explicitly sets $top=1000 on every OData query to ensure all records are fetched.
Related integrations
More Sage X3 integrations
Other systems that connect to SAP SuccessFactors
Connect Sage X3 and SAP SuccessFactors
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started