ml-connector
SAP ECCBILL

SAP ECC and BILL integration

SAP ECC runs procurement and finance on premises. BILL runs accounts payable and invoice management in the cloud. Connecting the two keeps your purchase orders and vendor records synchronized across systems. When a new PO is created in SAP ECC, it flows into BILL as a bill record so the accounting team can match invoices and schedule payments without re-keying. Vendor master data stays aligned between systems, and a full audit trail tracks every record that moves.

How SAP ECC works

SAP ECC exposes vendors, purchase orders, GL accounts, cost centers, and customer master records through RFC/BAPI function modules (BAPI_VENDOR_GETLIST, BAPI_VENDOR_GETDETAIL, BAPI_PO_GETDETAIL1, BAPI_GL_ACC_GETLIST), OData v2 REST via SAP Gateway at http://<host>:<port>/sap/opu/odata/<namespace>/<service>/, and SOAP web services. Authentication uses HTTP Basic Auth for OData and IDoc, or RFC Basic Auth for BAPI function calls via SAP .NET Connector or Java Connector. Because SAP ECC is on premises, ml-connector requires a customer-hosted agent to initiate RFC calls. SAP ECC has no native webhook registry, so data is read by polling on a scheduled interval rather than relying on a push from the system.

How BILL works

BILL exposes vendors, bills, payments, invoices, and chart of accounts through REST API at https://gateway.prod.bill.com/connect/v3/. Authentication uses a session token obtained by calling POST /v3/login with username, password, organizationId, and devKey; sessions expire after 35 minutes of inactivity for standard flows or 48 hours for AP sync token login. BILL also supports webhooks for push notifications on vendor and bill events (vendor.created, vendor.updated, bill.created, bill.updated, payment.updated), with HMAC-SHA256 signature verification via the x-bill-sha-signature header. The webhook securityKey is provided once during subscription creation and must be stored immediately.

What moves between them

The main flow runs from SAP ECC into BILL. ml-connector polls SAP ECC on a scheduled interval for new and updated purchase orders (via BAPI_PO_GETDETAIL1), translates them to BILL bill records, and posts them into BILL. Vendor master records (BAPI_VENDOR_GETLIST, BAPI_VENDOR_GETDETAIL) also flow from SAP ECC to BILL so the vendor database in BILL stays current with new suppliers and contact information created in the ERP. Payments approved and scheduled in BILL do not flow back to SAP ECC; the integration is read-heavy on the ERP side and write-heavy on BILL.

How ml-connector handles it

ml-connector maintains the SAP .NET Connector or Java Connector configuration on the customer-hosted agent and uses HTTP Basic Auth to establish RFC connections. It polls BAPI_PO_GETDETAIL1 and BAPI_VENDOR_GETLIST on a configurable schedule (e.g., every 4 hours), translating SAP ECC cost centers and GL accounts to BILL's chart of accounts and vendor hierarchy. Each purchase order becomes a BILL bill record tagged with the SAP PO number as an external reference so the accounting team can match invoices to the original PO. ml-connector retrieves a BILL session token by calling POST /v3/login and refreshes it before expiry. BILL enforces a rate limit on concurrent sessions, so ml-connector maintains a single persistent session and queues concurrent writes. If a POST to BILL returns a 4xx or 5xx error, ml-connector retries with exponential backoff, and every record carries a full audit trail so failed transactions can be replayed once the downstream issue is resolved.

A real-world example

A mid-sized manufacturing company runs SAP ECC for procurement and GL, and uses BILL for accounts payable and invoice management. The procurement team creates purchase orders in SAP ECC for materials and subcontracted work, and previously the AP team had to manually re-enter each PO into BILL when supplier invoices arrived, matching vendor names and line-item amounts by hand and often creating duplicate records. With SAP ECC and BILL connected, every PO flows from SAP ECC to BILL automatically, complete with cost center, GL account, and supplier details. When the supplier invoice lands, BILL's matching engine has an accurate PO on file and the AP team can approve and schedule payment in minutes instead of hours spent on data entry and reconciliation.

What you can do

  • Poll SAP ECC purchase orders on a scheduled interval and post them to BILL as bill records with full line-item and cost-center detail.
  • Sync vendor master data from SAP ECC to BILL so the accounting team works with current supplier names, addresses, and payment terms.
  • Translate SAP ECC cost centers and GL accounts to BILL's chart of accounts during the sync so bills post to the correct expense buckets.
  • Authenticate SAP ECC via RFC Basic Auth through a customer-hosted agent, and authenticate BILL via session token with automatic refresh before expiry.
  • Retry failed API calls with exponential backoff and maintain a full audit trail so records can be replayed if a downstream system becomes unavailable.

Questions

How does the integration handle SAP ECC's on-premises architecture?
SAP ECC is on premises and cannot be reached directly from the cloud. ml-connector requires a customer-hosted agent (running SAP .NET Connector or Java Connector) that sits on the customer's network and initiates RFC calls on demand. The agent maintains the connection pool and translates BAPI responses into the format ml-connector sends to BILL.
Which direction do purchase orders and vendors flow between SAP ECC and BILL?
The main flow is from SAP ECC into BILL. Purchase orders and vendor master records are read from SAP ECC on a scheduled interval and posted to BILL so the accounting team has an accurate PO and vendor database for invoice matching. Payments approved in BILL do not flow back to SAP ECC; the integration is one-way for procurement and vendor data.
What happens if the polling schedule misses a PO or a BILL API call fails?
ml-connector polls on a schedule you set (e.g., every 4 hours). Any PO created between polling cycles is picked up on the next poll. If a POST to BILL times out or returns an error, ml-connector retries with exponential backoff, and every record is logged with a timestamp and result code. If retries are exhausted, the transaction is flagged for manual review and can be replayed once the issue is resolved.

Related integrations

Connect SAP ECC and BILL

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

Get started