SAP Business One and SAP SuccessFactors integration
SAP Business One runs your financials and inventory. SAP SuccessFactors runs your workforce. Connecting the two keeps your employee master in Business One synchronized with your HR system of record in SuccessFactors. New hires and terminations in SuccessFactors automatically create or deactivate corresponding employees in Business One, mapped to the correct cost centers and job codes. ml-connector handles the very different authentication flows (Business One session tokens, SuccessFactors SAML Bearer assertions) and coordinates the delta-pull timing so your organization stays in sync without manual re-entry.
What moves between them
Employee records flow from SAP SuccessFactors into SAP Business One. When a new hire is recorded in SuccessFactors Employee Central (PerPerson, EmpJob), ml-connector creates a corresponding employee record in Business One's BusinessPartners entity (type employee) with the hire date, legal name, job code, and cost center from the SuccessFactors record. When a termination is recorded, the employee is marked inactive in Business One. Job changes, cost center moves, and compensation updates in SuccessFactors trigger updates to the matching Business One employee record. Reference data (cost centers, departments, job codes) are validated against Business One's existing chart of accounts and organizational structure to ensure every incoming record maps to a valid dimension. The sync runs on a configurable daily schedule, pulling only records modified since the last sync using SuccessFactors' lastModifiedDateTime filter.
How ml-connector handles it
ml-connector stores both credential sets encrypted: the Business One Service Layer URL and session login credentials, and the SuccessFactors OAuth2 client ID, RSA private key, and company ID for SAML assertion signing. On each sync cycle, it signs a SAML bearer assertion using the private key with a 10-minute expiry window, POSTs to the SuccessFactors token endpoint to obtain a new 24-hour bearer token (refreshing when tokens near expiry), and uses that token to query the SuccessFactors OData API with a lastModifiedDateTime filter set to the time of the last successful sync. It receives employee records in OData V2 format (with non-standard datetime encoding like /Date(milliseconds)/) and parses them into a canonical employee structure. On the Business One side, it logs into the Service Layer with cached credentials, reusing the session token across all API calls within the sync window to amortize the 5-second cold-start cost, and then UPSERTs employee records into the BusinessPartners entity by matching on the external ID (SuccessFactors employee ID). Before creating or updating an employee in Business One, it validates that the employee's assigned cost center exists in the Business One chart of accounts (FOCostCenter). If a cost center does not exist in Business One, the record is queued for retry with a note in the audit trail so the finance team can see what awaits sync. If SuccessFactors returns a rate-limit response (429 or 503), ml-connector backs off exponentially and retries. Every employee record and its audit trail (sync timestamp, source values, mapping decisions, any validation errors) is stored so records can be traced back to their source and a failed sync can be manually reviewed before retry.
A real-world example
A mid-sized manufacturing company runs SAP Business One on-premise for procurement, production, and finance, and SAP SuccessFactors in the cloud for global HR across three plants, a regional office, and a shared services center. Before integration, the HR team exported employee rosters from SuccessFactors each month and emailed CSV files to Finance, who manually created or updated corresponding employee records in Business One's master data. When employees moved between plants or cost centers in SuccessFactors, Finance often missed the updates, resulting in month-end reconciliation problems where labor costs didn't align to the correct plant cost centers. With the integration in place, every hire, termination, and cost center move in SuccessFactors automatically syncs into Business One within hours. Finance can now run accurate cost center variance reports and spend no time on manual employee master maintenance.
What you can do
- Automatically sync new hires, terminations, and job changes from SAP SuccessFactors into SAP Business One employee records.
- Map SuccessFactors cost centers and job codes to Business One cost centers and chart of accounts dimensions so employee assignments are always valid.
- Authenticate Business One with reused session tokens and SuccessFactors with OAuth2 SAML Bearer assertions, handling token expiry and refresh transparently.
- Pull employee delta changes from SuccessFactors using lastModifiedDateTime filters on a configurable daily or weekly schedule.
- Track every employee sync, mapping decision, validation error, and retry through a complete audit trail so no change is lost.
Questions
- Does the integration pull from SuccessFactors or receive pushed events?
- ml-connector pulls from SuccessFactors using OData filters on lastModifiedDateTime to retrieve only records changed since the last sync. While SuccessFactors supports configured event push for HR lifecycle events (set up in the Admin Center UI), pull-based delta sync is the recommended default because it does not require programmatic webhook subscription APIs, which SuccessFactors does not expose.
- How does the integration handle Business One session tokens and SuccessFactors bearer tokens?
- On the Business One side, ml-connector logs in once at the start of each sync cycle and reuses the session token across all OData calls within that cycle to amortize the 5-second cold-start cost. Session tokens expire after 30 minutes of inactivity, so ml-connector refreshes the token if a call fails with the session-expired error code. On the SuccessFactors side, ml-connector signs a SAML bearer assertion with the customer's RSA private key and POSTs to the token endpoint to obtain a 24-hour bearer token, refreshing proactively before expiry to avoid mid-sync token failures.
- What happens if an employee's cost center does not exist in SAP Business One?
- Before creating or updating an employee record in Business One, ml-connector validates that the assigned cost center exists in the Business One chart of accounts. If the cost center is missing, the record is queued for retry and flagged in the audit trail with a detailed note so the finance team can see what is waiting for sync and add the missing cost center to Business One. The sync resumes automatically once the cost center is created.
Related integrations
More SAP Business One integrations
Other systems that connect to SAP SuccessFactors
Connect SAP Business One and SAP SuccessFactors
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started