ml-connector
Microsoft Dynamics 365 F&OSAP SuccessFactors

Microsoft Dynamics 365 F&O and SAP SuccessFactors integration

Microsoft Dynamics 365 F&O runs financials, procurement, supply chain, and manufacturing. SAP SuccessFactors is the HR system of record for workers, jobs, org structure, and cost centers. Connecting the two keeps the worker and cost center reference data in F&O aligned with the HR truth in SuccessFactors, so hires, terminations, and job moves do not have to be re-keyed into the ERP. ml-connector reads worker, employment, and job records from SuccessFactors and maps them onto F&O workers and financial dimensions. Because SuccessFactors holds no invoices, purchase orders, or GL accounts, the ledger stays in F&O where it belongs.

How Microsoft Dynamics 365 F&O works

Microsoft Dynamics 365 F&O exposes vendors, customers, purchase orders, vendor invoices, main accounts, general journal entries, financial dimensions, and products through the Finance and Operations OData v4 service, a REST surface with JSON payloads. There is no shared base URL: every customer runs a tenant-specific environment host such as contoso.operations.dynamics.com, captured as a credential. Authentication is OAuth 2.0 client credentials against Microsoft Entra ID using the scope https://{environment_host}/.default, and the registered app must be linked to a service account user with roles inside F&O. OData reads use server-driven paging up to 10,000 records per request, following @odata.nextLink, and queries scope to the default legal entity unless cross-company=true is added with a dataAreaId filter. F&O also pushes outbound Business Events to an HTTPS endpoint, but those payloads are stubs that carry identifiers, not full records, and they must be activated per legal entity in the admin UI.

How SAP SuccessFactors works

SAP SuccessFactors exposes Employee Central through the HCM Suite OData V2 API over HTTPS and JSON, including PerPerson, PerPersonal, EmpEmployment, EmpJob, EmpCompensation, FOCostCenter, and FODepartment. The API host is datacenter-specific, so the hostname is captured per tenant rather than assumed. Authentication is OAuth 2.0 SAML Bearer Assertion: an RSA private key signs a SAML assertion that is exchanged for a Bearer token valid for up to 24 hours, and a valid token still needs Role-Based Permissions for every entity read or a call returns 403. Reads use delta sync on lastModifiedDateTime with the page size set explicitly, since the default is only 20 records. Intelligent Services can push HR events such as NewHire, Termination, or JobInfoChange to a configured endpoint signed with HMAC-SHA256, but those subscriptions are set up in the Admin Center, not through an API.

What moves between them

The flow runs from SAP SuccessFactors into Microsoft Dynamics 365 F&O. ml-connector reads worker, employment, and job records from SuccessFactors and keeps the F&O worker and reference data current with hires, terminations, rehires, and job changes such as department, title, manager, or cost center. Cost center and department reference data from FOCostCenter and FODepartment is aligned to F&O financial dimension values so each worker and allocation resolves to a valid dimension string. SuccessFactors is the HR system of record and holds no GL accounts, invoices, or purchase orders, so the chart of accounts and the ledger stay in F&O and ml-connector never writes financial entries back into SuccessFactors. Reads run on a schedule you control, with Intelligent Services events used as an optional trigger to start a pull sooner.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the SuccessFactors side it signs a SAML assertion with the customer's RSA private key, exchanges it for a Bearer token against the datacenter-specific API host for that tenant, and refreshes the token before its 24-hour expiry; a missing Role-Based Permission shows up as a 403 rather than a 401, so the integration user needs grants for every entity it reads. On the F&O side it requests an OAuth 2.0 client-credentials token from Microsoft Entra ID with the https://{environment_host}/.default scope, builds the base URL from the stored environment host, and scopes every write to the right legal entity, adding cross-company=true with a dataAreaId filter for multi-entity tenants. SuccessFactors is read by delta sync on lastModifiedDateTime with the page size set to 1000 so records are not silently missed, and Intelligent Services events such as NewHire or JobInfoChange can trigger an immediate pull where they are configured. SuccessFactors cost centers and departments are mapped to F&O financial dimensions first, and because F&O passes dimensions as a formatted display string the customer must configure the format in Financial dimension configuration for integrating applications, or the write fails silently. F&O has no idempotency-key header and uses natural keys, so ml-connector checks the worker or dimension key before it writes and uses a stable BullMQ jobId to avoid duplicate enqueues. Because SuccessFactors deactivates employees rather than deleting them, termination logic keys on a status change to inactive rather than a delete event. Both sides throttle with HTTP 429: F&O returns a Retry-After header to obey, while SuccessFactors sends no rate-limit headers, so the connector keeps SuccessFactors concurrency low and backs off with jitter. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized discrete manufacturer with around 600 staff across two plants and a head office runs Microsoft Dynamics 365 F&O for finance, procurement, and production, and uses SAP SuccessFactors Employee Central as the HR system of record. Before the integration, a finance administrator re-keyed every new hire, termination, and transfer into F&O by hand, and the cost center values in the ERP drifted out of step whenever a team was renamed or someone moved plants, which showed up as misallocated labor at month-end close. With Microsoft Dynamics 365 F&O and SAP SuccessFactors connected, worker and job changes flow into F&O automatically, SuccessFactors cost centers map onto the matching financial dimension strings, and the org data in the ERP matches the HR records. The manual re-keying is gone and labor lands on valid dimensions before close begins.

What you can do

  • Keep Microsoft Dynamics 365 F&O worker and reference data aligned with SAP SuccessFactors hires, terminations, rehires, and job changes.
  • Map SAP SuccessFactors cost centers and departments onto Microsoft Dynamics 365 F&O financial dimensions so allocations land on valid dimension strings.
  • Read workers, employment, and jobs from SAP SuccessFactors by OData V2 delta sync on lastModifiedDateTime with the page size set explicitly.
  • Treat a SAP SuccessFactors status change to inactive as a termination, since SuccessFactors deactivates rather than deletes.
  • Bridge the SAP SuccessFactors SAML Bearer token and the Microsoft Entra ID client-credentials token, with retries, error replay, and a full audit trail.

Questions

Which direction does data move between Microsoft Dynamics 365 F&O and SAP SuccessFactors?
The flow is SAP SuccessFactors into Microsoft Dynamics 365 F&O. Worker, job, and cost center data moves from SuccessFactors into the F&O worker and financial dimension records, while cost centers and departments are aligned so each worker resolves to a valid dimension string. SuccessFactors is the HR system of record and holds no GL accounts, so ml-connector does not write financial entries back into it.
Does SAP SuccessFactors hold invoices or GL accounts that post into Microsoft Dynamics 365 F&O?
No. SAP SuccessFactors is an HCM system with no invoice, purchase order, payment, or general ledger objects. What it provides is workers, jobs, compensation, and cost center codes in EmpJob and FOCostCenter, and ml-connector maps that into F&O as worker records and financial dimension values. The chart of accounts and the ledger stay in Microsoft Dynamics 365 F&O, which is the source of truth for finance.
How does the integration handle authentication and SuccessFactors financial dimensions in F&O?
On the SuccessFactors side ml-connector signs a SAML assertion with the customer's RSA private key and exchanges it for a Bearer token that lasts up to 24 hours, and the API user must also hold Role-Based Permissions for each entity or the call returns a 403. On the F&O side it uses OAuth 2.0 client credentials against Microsoft Entra ID and builds the base URL from the stored environment host. SuccessFactors cost centers are mapped to F&O financial dimensions first, and because F&O expects a formatted dimension display string the customer configures that format in Financial dimension configuration for integrating applications so writes do not fail silently.

Related integrations

Connect Microsoft Dynamics 365 F&O and SAP SuccessFactors

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

Get started