ml-connector
Sage IntacctCoupa

Sage Intacct and Coupa integration

Sage Intacct runs accounting and finance. Coupa runs procurement and supplier management. Connecting the two keeps your vendor data, purchase orders, and invoices in agreement across both systems. New suppliers and changes in Coupa reflect in Sage Intacct's vendor master, invoice lines flow into GL accounts at the cost centers you control, and payments processed in Intacct can be posted back to Coupa. ml-connector handles the very different protocols on each side and keeps both systems synchronized on a schedule you set.

How Sage Intacct works

Sage Intacct exposes vendors, accounts payable bills, payments, GL accounts, and dimensions through a single XML gateway endpoint at https://api.intacct.com/ia/xml/xmlgw.phtml. Authentication is session-based: an initial getAPISession call exchanges senderId, senderPassword, companyId, userId, and userPassword for a sessionid, cached for 50 minutes. HTTP 200 responses may contain application-level errors inside the XML body, so every response must be parsed for errormessage tags. Sage Intacct does not expose webhooks, so all data flows are polling-based or manual-run. The single gateway endpoint serializes all operations through one connection, and XML control characters must be stripped before entity escaping.

How Coupa works

Coupa exposes suppliers, purchase orders, invoices, payments, and lookup values through a REST API at the customer's tenant URL (e.g., https://acme.coupahost.com/api). Authentication is OAuth 2.0 client credentials with X-Coupa-API-Version header pinning. Coupa can push webhook events for requisitions, purchase orders, invoices, suppliers, expense reports, and payments via webhook signature verified by HMAC-SHA256. Webhook bodies are capped at 256KB, rate limits return HTTP 429 and require exponential backoff with a 30 second cap, and the default request timeout is 30 seconds.

What moves between them

The main flow is from Coupa into Sage Intacct. Supplier events from Coupa are matched to Sage Intacct vendors, purchase order and invoice events flow into Intacct's GL accounts mapped to cost centers, and payments are posted to the AP transaction log. Dimension data such as cost centers and departments is validated in Intacct before invoice lines are allocated, so every line lands on a valid GL account and cost center. Payments processed in Sage Intacct can be synced back to Coupa as status updates.

How ml-connector handles it

ml-connector caches the Sage Intacct session for 50 minutes and refreshes it automatically on the next call if it expires. Coupa webhook signatures are verified by computing HMAC-SHA256 with the shared secret and comparing to the X-Coupa-Signature header. Because Sage Intacct requires all operations to serialize through a single XML gateway, ml-connector queues requests and executes them in order, appending the uniqueid flag to each operation for server-side deduplication if a retry is needed. Forbidden XML control characters are stripped before the XML is sent. Coupa rate-limit responses (HTTP 429) trigger exponential backoff with jitter, capped at 30 seconds. Webhook events from Coupa are buffered, deduplicated by Coupa-Signature, and replayed if a downstream Intacct call fails, ensuring no invoice is lost in the sync.

A real-world example

A mid-sized manufacturing company runs Sage Intacct for accounting and finance, and uses Coupa for procurement across multiple plants and departments. Before the integration, supplier data had to be re-entered into Intacct by hand whenever procurement added a new vendor or changed terms in Coupa. Purchase orders created in Coupa required manual entry into Intacct's AP module, and invoice lines had to be matched and allocated to the correct cost center and GL account in Intacct before payment. With Sage Intacct and Coupa connected, supplier master changes flow automatically into Intacct's vendor table, invoice lines are allocated to the correct cost centers by the integration rules, and the AP team can match and approve invoices in Intacct with confidence that line items are already synced.

What you can do

  • Sync supplier records from Coupa into Sage Intacct vendor master, keeping new suppliers and vendor changes in step across both platforms.
  • Flow purchase order and invoice data from Coupa into Sage Intacct's general ledger, allocated to the correct GL accounts and cost centers.
  • Validate cost centers and dimensions in Sage Intacct before invoice lines are posted, so every line lands on a valid account.
  • Handle Sage Intacct session caching and automatic refresh, XML control-character stripping, and Coupa webhook signature verification.
  • Retry failed operations with exponential backoff and full audit replay on both systems, ensuring no invoice is lost.

Questions

Which direction does data move between Sage Intacct and Coupa?
The main flow is from Coupa into Sage Intacct. Suppliers, purchase orders, and invoices flow from Coupa into Intacct, where they are allocated to GL accounts and cost centers. Payments processed in Sage Intacct can be posted back to Coupa as status updates. Sage Intacct does not push data to Coupa; the integration receives webhook events from Coupa to trigger the sync.
How does the integration handle Sage Intacct's session-based authentication and single XML gateway?
ml-connector manages the Sage Intacct session by exchanging credentials for a sessionid on the first call, caching it for 50 minutes, and refreshing it automatically if it expires on a subsequent call. Because Sage Intacct requires all operations to serialize through a single XML gateway endpoint, ml-connector queues requests and executes them in order, appending a uniqueid flag to each operation for server-side deduplication if a retry is needed.
What happens if Coupa rate-limits the integration or a webhook signature does not match?
Coupa rate-limit responses (HTTP 429) trigger exponential backoff with jitter, capped at 30 seconds. Webhook signatures are verified by computing HMAC-SHA256 with the shared secret and comparing to the X-Coupa-Signature header; a mismatch is rejected as untrusted. Both situations are logged and can be reviewed in the full audit trail.

Related integrations

Connect Sage Intacct and Coupa

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

Get started