ml-connector
Sage 300SAP SuccessFactors

Sage 300 and SAP SuccessFactors integration

Sage 300 runs accounting, purchasing, and inventory for mid-market manufacturers. SAP SuccessFactors runs HR and compensation. Connecting the two keeps employee records in sync between systems and ensures cost centers and GL dimensions match, so payroll allocations land on the correct accounts. New hires and terminations in SAP SuccessFactors propagate into Sage 300's employee and cost center tables, and the two systems stay aligned without manual re-keying.

How Sage 300 works

Sage 300 is an on-premise ERP running on Windows IIS with SQL Server, exposing Accounts Payable, Accounts Receivable, General Ledger, Purchase Orders, and Inventory Control through REST and OData endpoints. The API requires HTTP Basic Authentication with uppercase username and password included in every request header, sent to a customer-hosted URL with no shared cloud endpoint. Sage 300 has no webhooks or push notifications, so all data retrieval is pull-based via polling with OData filters on dates and pagination parameters. An API user must be created in Administrative Services with the Web API security group; the built-in Admin user does not have API privileges.

How SAP SuccessFactors works

SAP SuccessFactors is a cloud-based Human Capital Management suite with Employee Central as the system of record for employee master data, jobs, organizational structure, cost centers, and compensation. It exposes data via REST OData V2 and V4 endpoints on datacenter-specific hostnames and requires OAuth2 SAML Bearer Assertion authentication, with a 24-hour token lifespan. SAP SuccessFactors can push HR lifecycle events such as new hire, termination, and job change to a registered HTTP endpoint, or data can be pulled on a schedule using lastModifiedDateTime filters. The CompoundEmployee API provides a legacy change-delta feed for payroll integrations.

What moves between them

Employee records flow from SAP SuccessFactors into Sage 300 on a schedule aligned with HR events. New hires, terminations, rehires, and job changes sync as new or updated employee records in Sage 300, mapped to matching departments and cost centers. Cost center codes and organizational dimensions are aligned in both directions so that when payroll allocations are made in SAP SuccessFactors, they reference cost centers that exist in Sage 300. Employee data is read from SAP SuccessFactors and written to Sage 300 as master data; no HR records are written back.

How ml-connector handles it

ml-connector accepts the customer's Sage 300 instance URL and credentials, constructs HTTP Basic Auth headers with uppercase username and password, and polls Sage 300's REST endpoints on a schedule. On the SAP SuccessFactors side, ml-connector generates SAML Bearer tokens using the customer's RSA private key and OAuth2 client credentials, refreshing when tokens approach expiry, and pulls employee and cost center data via OData with lastModifiedDateTime filters. The integration maps SAP SuccessFactors employee records to Sage 300's PerPerson-equivalent entity and cost center codes to Sage 300 GL cost center dimensions. Because Sage 300 is self-hosted and has no webhooks, polling is pull-only; SAP SuccessFactors event notifications are available as an optional enhancement but are not required. Every employee record carries an audit trail and can be replayed if a downstream write to Sage 300 fails. Rate-limit handling and IIS AppPool timeout considerations are managed per the Sage 300 configuration constraints.

A real-world example

A mid-sized distributor runs Sage 300 on-premise for AP, AR, GL, and inventory, and recently migrated payroll and HR to SAP SuccessFactors in the cloud. Before the integration, the HR team notified the finance team of new hires, terminations, and cost center transfers by email, and the accounting team manually entered these changes into Sage 300 employee and cost center tables. With Sage 300 and SAP SuccessFactors connected, employee hires and terminations sync automatically from the cloud HR system into the on-premise ERP on a daily schedule. Cost centers are reconciled, and the accounting team's manual data entry step is eliminated.

What you can do

  • Sync employee hires, terminations, rehires, and job changes from SAP SuccessFactors into Sage 300 on a schedule.
  • Map SAP SuccessFactors cost center codes to Sage 300 GL cost center dimensions and organizational structure.
  • Authenticate SAP SuccessFactors via OAuth2 SAML Bearer Assertion and Sage 300 via HTTP Basic Auth with uppercase credentials.
  • Handle the differences between SAP SuccessFactors cloud OData and Sage 300 on-premise REST endpoints and polling-only retrieval.
  • Maintain a full audit trail on every employee record and replay failed writes with automatic retries.

Questions

How does the integration work if Sage 300 has no webhooks?
Sage 300 is self-hosted and pull-only, so ml-connector polls the Sage 300 API on a schedule aligned with your HR change frequency. SAP SuccessFactors can push new hire and termination events to ml-connector, which then pulls the full employee record from Sage 300 and writes the updates. Polling ensures no HR changes are missed even if webhooks are not available.
What happens if SAP SuccessFactors OAuth2 tokens expire?
SAP SuccessFactors Bearer tokens last 24 hours. ml-connector refreshes the token before expiry by generating a new SAML assertion signed with the customer's private RSA key and trading it for a fresh access token. This is handled transparently and does not interrupt the sync schedule.
Are cost centers the only finance data that flows between these systems?
Yes. SAP SuccessFactors is an HCM system and does not hold purchase orders, invoices, or general ledger accounts. Cost centers and organizational dimensions flow in both directions so that payroll allocations reference valid Sage 300 dimensions. All payroll and GL posting logic remains in Sage 300.

Related integrations

Connect Sage 300 and SAP SuccessFactors

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

Get started