Sage Intacct and Plaid integration
Sage Intacct manages your accounting and general ledger. Plaid gives you access to bank account data and the ability to initiate payments. Connecting the two means bank transactions from all your accounts flow into Intacct's general ledger automatically, posted to the correct GL accounts and cost centers, and reconciled without manual re-entry. Payments initiated in Intacct can move money through Plaid's ACH and wire transfer capabilities.
What moves between them
Bank transactions flow from Plaid into Sage Intacct. When Plaid webhooks arrive with TRANSACTIONS_SYNC_UPDATES_AVAILABLE or RECURRING_TRANSACTIONS_UPDATE, ml-connector fetches the new transactions and posts them into Intacct's general ledger and expense accounts, matching each transaction to the correct GL account and cost center based on merchant name and account type. Vendor payments can flow from Intacct back to Plaid when a payment is marked for electronic processing, initiating an ACH transfer if the vendor is enrolled in Plaid's transfer network. The sync runs on Plaid webhook events rather than on a fixed schedule, so Intacct's books stay current as bank data arrives.
How ml-connector handles it
ml-connector maintains two credential sets: Intacct session credentials (senderId, senderPassword, companyId, userId, userPassword) which are refreshed every 50 minutes, and Plaid API credentials (client_id, secret) that persist across calls. When a Plaid webhook arrives, ml-connector validates the JWT signature using Plaid's public key, checks that the iat claim is no more than 5 minutes old, and verifies the request_body_sha256 claim against the raw payload. It then fetches transactions from Plaid using the supplied cursor for pagination. For each transaction, ml-connector maps the bank account to an Intacct GL account, derives the expense or revenue account from the merchant category and transaction type, and posts the entry into Intacct's general ledger using the XML gateway with a uniqueid flag for server-side deduplication. Outbound vendor payments use Plaid's /transfer/create endpoint, passing an idempotency key to prevent duplicates and respecting the character limit on transfer descriptions. Every transaction carries full audit data linking the Plaid transaction_id to the Intacct batch and entry, enabling replay if a downstream call fails.
A real-world example
A mid-sized accounting firm with multiple client accounts across different banks uses Sage Intacct for consolidated reporting and GL management, and relies on Plaid to aggregate transactions from corporate bank accounts, credit cards, and investment accounts. Before the integration, accountants spent hours each week downloading bank statements, categorizing transactions by account and GL dimension, and manually posting entries into Intacct, chasing reconciliation breaks when merchant names did not match or when transactions arrived out of order. With Sage Intacct and Plaid connected, each bank transaction appears in Intacct's ledger within minutes of posting to the bank, automatically categorized by account type and cost center, and reconciliation happens by comparing a single Plaid source against the posted ledger rather than juggling separate statements.
What you can do
- Post bank transactions from Plaid into Sage Intacct's general ledger with automatic GL account and cost center assignment based on merchant name and account type.
- Validate Plaid webhook signatures using JWT verification and reject messages older than 5 minutes, ensuring only authentic bank data flows into the ledger.
- Support Intacct's 50-minute session refresh cycle and XML gateway serialization, mapping vendors and GL dimensions across the two APIs.
- Initiate ACH transfers from Intacct vendor payments through Plaid's transfer network, with idempotency keys and description length enforcement.
- Maintain a full audit trail linking Plaid transaction IDs to Intacct GL entries for reconciliation, replay, and regulatory compliance.
Questions
- How does data flow between Sage Intacct and Plaid?
- Bank transactions flow from Plaid into Sage Intacct. When a Plaid webhook arrives with a transaction update, ml-connector fetches the transactions and posts them into Intacct's general ledger, matched to the correct GL account and cost center. Vendor payments can flow from Intacct back to Plaid to initiate ACH transfers if the vendor is enrolled in Plaid's transfer network.
- How does ml-connector handle Sage Intacct's XML gateway and session management?
- ml-connector connects to Intacct's single XML gateway endpoint at https://api.intacct.com/ia/xml/xmlgw.phtml using session-based credentials. Sessions last 50 minutes and are cached for reuse; ml-connector refreshes the session automatically on the next call after expiry. All GL posting operations serialize through the XML gateway with a uniqueid flag for server-side deduplication.
- What validation happens when Plaid webhooks arrive?
- ml-connector validates the JWT signature using Plaid's public key with the ES256 algorithm, rejects messages where the iat claim is older than 5 minutes, and verifies the request_body_sha256 claim against the raw webhook body. Only signatures that pass all three checks proceed to transaction posting.
Related integrations
More Sage Intacct integrations
Other systems that connect to Plaid
Connect Sage Intacct and Plaid
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started