Sage Intacct and Shopify integration
Shopify processes orders and payments; Sage Intacct records revenue and maintains the general ledger. Connecting the two keeps your AR and GL in sync without manual journal entry. When a customer places an order in Shopify, ml-connector creates the AR invoice in Intacct and posts the revenue to the correct GL account and dimension based on your order mapping. Refunds and cancelled orders reverse the postings automatically.
What moves between them
Orders flow from Shopify into Sage Intacct. When an order is placed or updated in Shopify, ml-connector creates an AR invoice in Intacct with line items mapped to GL accounts and dimensions. Customer records sync the same direction so invoice lookups match. Payments and refunds update the invoice status and reverse GL postings. The flow is unidirectional: Shopify is the source of truth for e-commerce transactions, and Intacct records the accounting consequence.
How ml-connector handles it
ml-connector subscribes to Shopify webhooks for orders/create, orders/updated, orders/cancelled, and refunds/create. On each event, it retrieves full order and customer details via the Shopify GraphQL API using the stored OAuth offline token. It then opens an Intacct session via the XML gateway using cached credentials, mapping Shopify order details into Intacct ARINVOICE records with LINEITEM entries for each product, assigned to GL accounts and dimensions configured per order type or customer class. The Intacct session is cached for 50 minutes and auto-refreshes on next request after expiry. Every Shopify webhook ID is stored in Intacct via the uniqueid flag to prevent duplicate posting if a webhook is retried. Refunds create offsetting GL reversals. Order cancellations set the invoice status to cancelled. Because Intacct requires XML with forbidden C0 control characters stripped, ml-connector sanitizes all text fields before XML serialization.
A real-world example
A mid-market consumer goods retailer runs Shopify for direct-to-consumer sales across web and mobile and uses Sage Intacct for accounting, AR, and GL consolidation across three business units. Before the integration, the finance team pulled order exports from Shopify daily and re-entered each transaction as an AR invoice in Intacct by hand, then manually posted revenue to GL accounts and dimensions per customer region. With Shopify and Intacct connected, each order creates an AR invoice and GL posting automatically, assigned to the correct dimension for the customer region and product line. Refunds and cancellations reverse the postings automatically. Month-end close starts with revenue already posted and reconciled, and the manual re-keying step is gone.
What you can do
- Transform Shopify orders into Sage Intacct AR invoices with line items mapped to GL accounts and dimensions.
- Sync Shopify customers into Intacct as AR customers so invoice lookups and aging reports are accurate.
- Post Shopify revenue to the correct GL account and cost dimension based on order type or customer class.
- Handle refunds and order cancellations by reversing the corresponding AR invoice and GL postings.
- Authenticate Shopify via OAuth2 offline tokens and Intacct via session-based XML gateway, with automatic token and session refresh on expiry.
Questions
- Which direction does data move between Shopify and Sage Intacct?
- Orders, customers, and refunds flow from Shopify into Sage Intacct. Shopify is the source of truth for e-commerce transactions; Intacct is the accounting sink. ml-connector creates AR invoices and GL postings in Intacct when orders are placed or updated, and reverses them when orders are cancelled or refunded.
- How does ml-connector prevent duplicate AR invoices if a Shopify webhook is retried?
- ml-connector stores the Shopify webhook ID in the Intacct ARINVOICE uniqueid field. On webhook retry, Intacct's server-side deduplication on uniqueid prevents a second invoice from being posted, even if ml-connector receives the same webhook twice.
- What happens when an Intacct session expires or a Shopify token needs refreshing?
- Intacct sessions expire after 50 minutes and are automatically refreshed on the next API call. Shopify OAuth offline tokens do not expire but are refreshed if a 401 response is received. ml-connector handles both transparently so outages from expired credentials do not occur.
Related integrations
More Sage Intacct integrations
Other systems that connect to Shopify
Connect Sage Intacct and Shopify
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started