ml-connector
SAP Business OneSAP SuccessFactors

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.

How SAP Business One works

SAP Business One is an on-premise ERP platform deployed on customer-specific Service Layer instances with no global shared endpoint. It exposes OData v4 APIs at each customer's provided base URL (https://<customer-server>:<port>/b1s/v2/) and authenticates with session tokens obtained via POST /Login, which return a B1SESSION cookie that expires after 30 minutes of inactivity. Session tokens must be reused across multiple API calls to avoid repeated authentication overhead. Business One supports webhooks in version 10.0 FP 2602 and later if the customer has enabled the Webhook Messenger Service, but polling is the recommended default, using OData UpdateDate filters to retrieve only changed records since the last sync.

How SAP SuccessFactors works

SAP SuccessFactors is a cloud HR and HCM suite accessible via datacenter-specific OData endpoints (https://api<DC>.successfactors.com/odata/v2). It uses OAuth2 with SAML Bearer assertion authentication: the connector registers an OAuth2 client in the customer's Admin Center, generates an RSA key pair, signs a SAML assertion with the private key, and POSTs to the token endpoint to obtain a 24-hour bearer token. SuccessFactors supports configured event push (set up through the Admin Center UI, not via API) for predefined HR lifecycle events, but does not provide a programmatic webhook subscription API. Delta synchronization is recommended using OData filters on lastModifiedDateTime. Rate limiting is enforced with HTTP 429 or 503 responses and a maximum of 10 concurrent threads per client.

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

Connect SAP Business One and SAP SuccessFactors

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started