ml-connector
Sage IntacctSquare

Sage Intacct and Square integration

Sage Intacct runs your accounting and GL. Square processes your payments and invoices. When they are connected, invoices issued through Square post into Intacct's payables and receive payments without re-entry. ml-connector bridges the session-based XML gateway on the Intacct side with Square's OAuth 2.0 REST API, caches credentials across both systems, and keeps your financial records in one place.

How Sage Intacct works

Sage Intacct exposes vendors, AP bills, AP payments, GL accounts, and dimensions through a single XML gateway endpoint at https://api.intacct.com/ia/xml/xmlgw.phtml using Content-Type: application/xml. Authentication is session-based via senderId, senderPassword, companyId, userId, and userPassword. The initial getAPISession call exchanges partner and user credentials for a sessionid that is cached and expires after 50 minutes; the session is automatically refreshed on the next call. Intacct does not push webhooks, so all reads are polling-driven. HTTP 200 responses may contain application-level errors inside the XML body, and control characters must be stripped before escaping entity references. Retried operations use the uniqueid flag in the control block for server-side deduplication.

How Square works

Square exposes payments, invoices, orders, vendors, customers, catalog, inventory, and team members via a versioned REST API at https://connect.squareup.com/v2. Authentication uses OAuth 2.0 with Bearer tokens that expire in 30 days; refresh tokens are non-expiring (Authorization Code flow) or single-use 90-day (PKCE flow). Square supports push webhooks for payment, invoice, order, and inventory events with HMAC-SHA256 signature verification. Vendors and Orders APIs are in beta. Square is commerce-layer only; there is no GL Accounts or Chart of Accounts API, so GL sync requires mapping to an external accounting system. Inventory is read and write for adjustments only; Team Members are writeable but Shifts are read-only.

What moves between them

Invoices created in Square flow into Sage Intacct as AP bills mapped to Intacct vendors and GL accounts. Payments received via Square update the AP payment status in Intacct. Reference data such as vendors and GL mappings are maintained in both directions so Square invoices land on valid Intacct chart accounts. Data flows on a polling schedule or at the cadence of Square webhook events if enabled. Intacct GL posting is authoritative; Square is the payments source.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Intacct side, it caches the 50-minute session to avoid repeated getAPISession calls, and automatically refreshes it before expiry by re-authenticating with the stored partner and user credentials. Square access tokens are cached and refreshed using the refresh token when the 30-day window approaches, with no extra re-authentication required if the non-expiring refresh token is provided. All Intacct operations serialize through the single XML gateway, so ml-connector batches requests and parses XML responses for application-level errors inside the body. Square does not expose a native GL Accounts API, so invoice-to-GL mapping is driven by customer-supplied vendor-to-GL rules stored as a mapping table in ml-connector. Square vendor records are read from the beta Vendors API and may be incomplete; Intacct vendors remain the system of record. HTTP 429 rate limits on either side trigger exponential backoff and retry. Every record carries a full audit trail.

A real-world example

A mid-sized services firm uses Square for invoicing and payment processing across multiple locations and Sage Intacct for consolidated accounting and GL reporting. Before integration, the finance team exported Square payment records weekly and manually entered them into Intacct as AP payments, then reconciled vendor balances by hand. With the two connected, each Square invoice automatically creates an AP bill in Intacct mapped to the correct vendor and GL account, and payments flow in without re-keying. Month-end close is faster because the AP ledger and cash accounts are already synchronized.

What you can do

  • Sync Square invoices into Sage Intacct as AP bills, mapped to vendors and GL accounts.
  • Reflect Square payments in Intacct AP payment status so cash and payables stay aligned.
  • Cache Intacct sessions to avoid re-authentication on every call and refresh Square access tokens before expiry.
  • Parse Intacct XML responses for application-level errors and handle rate limits on both sides with exponential backoff.
  • Maintain a full audit trail on every record so failed syncs can be investigated and replayed.

Questions

How does the integration handle Sage Intacct's session timeout and Square's token expiry?
ml-connector caches the Intacct session for its full 50-minute lifetime and automatically refreshes it with the stored credentials before expiry on the next call. Square access tokens are refreshed 5 days before the 30-day window closes using the non-expiring refresh token. No manual re-authentication is needed for either system.
Sage Intacct has no GL Accounts API and Square is payments-only. How does the integration map invoices to GL?
ml-connector uses a customer-supplied vendor-to-GL mapping table to post invoices on the correct GL accounts when they are imported from Square. Intacct vendors remain the system of record. If a Square vendor does not match an Intacct vendor, the record is flagged in the audit log and the sync is paused pending vendor alignment.
What if a Square invoice or payment fails to post into Intacct?
ml-connector stores the credential sets and request/response pairs in its audit log, so a failed record can be investigated and replayed without re-downloading the original data. If a rate limit is hit, ml-connector backs off exponentially and retries automatically.

Related integrations

Connect Sage Intacct and Square

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

Get started