ml-connector
SAP ECCDeel

SAP ECC and Deel integration

SAP ECC runs your core financials and supply chain. Deel runs payroll and HR for your global workforce across 150+ countries. Connecting the two keeps your labor cost journals and employee records synchronized. New hires, terminations, and pay adjustments in Deel flow into SAP, and the GL documents Deel produces after each payroll run post into SAP's general ledger without re-keying or waiting for month-end reconciliation. ml-connector bridges SAP ECC's on-premises RFC architecture with Deel's REST API.

How SAP ECC works

SAP ECC (SAP ERP Central Component) is SAP's on-premises ERP suite that exposes financial and logistics data through RFC/BAPI function modules, OData v2 REST via SAP Gateway, or SOAP web services. Most data is accessed via RFC/BAPI with HTTP Basic Auth against an on-premises SAP hostname and port, requiring a customer-controlled on-premises agent with the SAP .NET Connector or Java Connector installed. OData services must be manually activated by the SAP Basis team via TCODE SICF and are not active by default. SAP has no native webhook registry, so integration relies on polling via RFC_READ_TABLE on a schedule you control, or on customer configuration of outbound IDoc push via WE21/WE20.

How Deel works

Deel is a global payroll and HRIS platform that covers employer-of-record (EOR), contractor management, payroll, and compliance across 150+ countries. Data is accessed via REST JSON over HTTPS with bearer token auth (either Organization Token with no expiry or OAuth2 with 30-day access tokens and 90-day refresh tokens). OAuth2 calls require both Authorization header and x-client-id header. Deel supports real-time webhooks for events such as contract creation, employee hire, employee update, and employee termination, with HMAC-SHA256 signature verification. API rate limits are not published but the service returns 429 Too Many Requests with Retry-After header, and Idempotency-Key header is supported for POST and PATCH with 24-hour TTL.

What moves between them

The main flow runs from Deel into SAP ECC. After each payroll run, ml-connector reads Deel invoices and payslips, extracts the GL account postings and cost allocations, and posts them into SAP ECC's general ledger using BAPI_ACC_DOCUMENT_POST, mapped to the correct SAP cost centers and accounts. Employee records flow the same direction so SAP headcount reflects Deel hires, terminations, and role changes. Reference data such as cost centers and GL accounts are aligned in both directions so payroll allocations land on valid SAP dimensions. Deel's invoice and payslip data is read-only, so ml-connector never writes financial transactions back into Deel.

How ml-connector handles it

ml-connector stores both credential sets encrypted and connects to SAP ECC via an on-premises agent (SAP .NET Connector or Java Connector) that runs on the customer's network, since RFC calls cannot originate from the cloud. It authenticates to SAP with HTTP Basic Auth and calls RFC_READ_TABLE to poll SAP cost centers, GL accounts, and employee data on a schedule. On the Deel side it presents the Organization Token or refreshes the OAuth2 access token when a call returns 401, and can also receive Deel webhook events for real-time employee and contract changes. When posting labor journals to SAP, ml-connector batches GL line items using BAPI_ACC_DOCUMENT_POST and always calls BAPI_TRANSACTION_COMMIT to persist the document, since SAP leaves uncommitted documents in a locked state. It maps Deel cost allocations to SAP cost centers before posting, validates GL accounts exist, and handles SAP ECC's 512-character RFC_READ_TABLE row width limit by using BBP_RFC_READ_TABLE for wide tables. Deel Idempotency-Key headers prevent duplicate postings on retry, and ml-connector tracks both systems' rate limits and backs off on 429 responses.

A real-world example

A global consumer goods manufacturer runs SAP ECC on-premises for finance and procurement across six regional plants, and uses Deel for payroll and HR management across four countries with different tax and compliance rules. Before the integration, the finance team received payroll summaries from Deel via email, manually entered labor cost allocations into SAP by plant and cost center each month, and spent the first week of month-end reconciling headcount between HR records and the SAP labor accounts. With SAP ECC and Deel connected, payroll GL postings flow directly into SAP allocated to each plant's cost center after each pay run, and employee hires and terminations update SAP headcount the same day. The finance team's month-end close now starts with labor accounts reconciled and headcount already aligned, eliminating the manual entry and reconciliation step.

What you can do

  • Post Deel payroll invoices and GL postings into SAP ECC's general ledger after each pay run, allocated to the correct SAP cost centers and GL accounts.
  • Keep SAP ECC employee records synchronized with Deel hires, terminations, and role changes across all four countries.
  • Map Deel cost allocations to SAP cost centers and validate GL accounts before posting, preventing posting errors and reconciliation gaps.
  • Authenticate SAP ECC via on-premises RFC agent with HTTP Basic Auth and Deel via Organization Token or OAuth2, with automatic token refresh on 401.
  • Poll SAP on a schedule or receive Deel webhook events for real-time employee updates, with full audit trail and automatic retry on network failure.

Questions

What is the on-premises agent requirement for SAP ECC integration?
SAP ECC is an on-premises system that does not expose a cloud REST API. RFC and BAPI calls cannot originate from the cloud and require the SAP .NET Connector or Java Connector to run on the customer's network. ml-connector connects through that agent, which handles the low-level RFC protocol, so the integration can run from the cloud while speaking RFC to the on-premises SAP instance.
Does ml-connector handle Deel's OAuth2 token refresh and idempotency?
Yes. ml-connector refreshes Deel's OAuth2 access token when a call returns 401 and automatically retries the original request with the new token. For GL postings, it includes Deel's Idempotency-Key header (24-hour TTL) to prevent duplicate documents if a retry occurs.
How does the integration handle SAP ECC's requirement to commit GL documents?
SAP BAPI_ACC_DOCUMENT_POST requires an explicit BAPI_TRANSACTION_COMMIT call to persist each document; without it, the document remains locked and locked documents block month-end close. ml-connector always calls BAPI_TRANSACTION_COMMIT immediately after posting a labor journal, so documents are committed atomically and month-end reconciliation can proceed on schedule.

Related integrations

Connect SAP ECC and Deel

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

Get started