ml-connector
Sage IntacctSalesforce

Sage Intacct and Salesforce integration

Sage Intacct manages your accounting and AP. Salesforce manages your customer relationships and sales pipeline. Connecting them keeps your customer financial data in Salesforce aligned with what Intacct knows: vendor bills tied to customer projects or accounts, invoice totals reflected in opportunity history, and procurement milestones visible to sales. ml-connector handles the very different APIs on each side and moves the data on a schedule you control.

How Sage Intacct works

Sage Intacct exposes vendors, AP bills, GL accounts, cost centers, and dimensions through an XML gateway over HTTPS POST to a single endpoint. It uses session-based authentication via senderId, senderPassword, companyId, userId, and userPassword, with the initial API session call exchanging credentials for a sessionid cached for 50 minutes. Intacct has no webhooks; all data flows are polling-driven or manual-run. Sessions are isolated per user and company, and HTTP 200 responses may contain application-level errors inside the XML body that must be parsed for errormessage tags.

How Salesforce works

Salesforce exposes accounts, contacts, opportunities, orders, invoices, and products through REST API with OAuth 2.0 client credentials authentication. Tokens expire after a configurable session timeout, defaulting to 2 hours. Salesforce can push real-time events via Change Data Capture and Pub/Sub API with a 3-day retention window, or you can poll with datetime range queries. The Invoice object requires Revenue Cloud or Order Management, and basic Sales/Service Cloud orgs may not have all billing objects available.

What moves between them

AP bills and vendor records flow from Sage Intacct into Salesforce, with a new bill creating or updating a related Salesforce account or opportunity record. Vendor master data and invoice totals sync on a schedule you define, typically daily or weekly. The flow is unidirectional: Salesforce does not write back to Intacct. Intacct supplies vendor details, invoice amounts, and GL account codes; Salesforce receives them as account notes, opportunity line items, or custom fields. The mapping aligns Intacct vendors to Salesforce accounts by external ID and GL dimensions to Salesforce picklist values where defined.

How ml-connector handles it

ml-connector stores both credential sets encrypted and exchanges Intacct's session credentials for a sessionid at startup, caching it for 50 minutes and refreshing on expiry or session timeout. On the Salesforce side it presents the OAuth client credentials to the token endpoint, refreshes the bearer token when a call returns 401, and routes all calls through the customer's My Domain URL. Because Sage Intacct is pull-only and has no webhooks, ml-connector polls AP bills and vendor data on your schedule rather than waiting for a push, parsing XML responses for application-level errors inside the HTTP 200 body. Salesforce's rate limits return HTTP 429 per org, so ml-connector backs off and retries with exponential jitter. Vendor IDs are matched via external ID on Salesforce accounts so a duplicate bill does not create duplicate records. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized consulting firm runs Sage Intacct for project accounting and AP, and uses Salesforce for pipeline and customer accounts. Before the integration, the billing team exported vendor invoices from Intacct monthly and manually noted them in Salesforce opportunity history or contact records, creating a lag between when an invoice was approved and when sales could see it. With Intacct and Salesforce connected, each AP bill flows into Salesforce automatically, attached to the matching customer account or project opportunity with vendor name and amount, so sales can see the full financial picture and timeline without re-keying.

What you can do

  • Sync AP bills from Sage Intacct into Salesforce accounts and opportunities, with vendor name and invoice totals.
  • Map Intacct vendors to Salesforce accounts by external ID to avoid duplicate records.
  • Poll Sage Intacct on your schedule since Intacct does not offer webhooks; Salesforce can optionally receive real-time updates via Pub/Sub API where enabled.
  • Authenticate Sage Intacct via session-based XML gateway credentials and Salesforce via OAuth 2.0 client credentials, refreshing tokens as they expire.
  • Carry a full audit trail on every record and replay failed syncs without duplication.

Questions

Which direction does data move between Sage Intacct and Salesforce?
The flow is from Sage Intacct into Salesforce only. AP bills and vendor records move from Intacct into Salesforce as account or opportunity records, while Salesforce does not write back to Intacct. The integration keeps Salesforce's view of customer financials in sync with Intacct's AP data, but Intacct remains the system of record for accounting.
Does Sage Intacct's XML gateway require special handling?
Yes. Intacct's single XML gateway endpoint serializes all operations through one HTTPS POST connection and returns application-level errors inside HTTP 200 responses. ml-connector parses the XML body for errormessage tags and status codes, handles session timeouts by refreshing the sessionid every 50 minutes, and strips forbidden XML control characters before encoding data to avoid gateway rejections.
How does polling work if Intacct has no webhooks?
ml-connector polls AP bills and vendor data from Sage Intacct on a schedule you define, typically daily or weekly. Salesforce can optionally push real-time changes via Pub/Sub API if Change Data Capture is enabled in your org. The polling schedule is independent of Salesforce's Pub/Sub; you can use both or either depending on your latency and volume needs.

Related integrations

Connect Sage Intacct and Salesforce

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

Get started