ml-connector
Sage IntacctTradeshift

Sage Intacct and Tradeshift integration

Sage Intacct runs accounting and finance. Tradeshift connects suppliers to exchange invoices and purchase orders. Joining the two lets you receive supplier invoices from the Tradeshift network and post them into Intacct's AP module without re-keying. Vendors are kept in sync between both systems so every invoice lands on the right payable. ml-connector bridges the very different auth models and document formats on each side and moves the data on a schedule you control.

How Sage Intacct works

Sage Intacct is a cloud-based ERP and accounting system that exposes vendors, AP bills, AP payments, GL accounts, and cost dimensions through a single XML gateway endpoint over HTTPS POST. Authentication uses a session-based model where an initial getAPISession call exchanges a senderId, senderPassword, companyId, userId, and userPassword for a sessionid that is cached for 50 minutes. All operations serialize through the one XML endpoint and return HTTP 200 with application-level errors embedded in XML errormessage tags rather than HTTP error codes. Intacct does not push webhooks, so all integrations are polling-based and rely on session refresh and uniqueid flags for deduplication across retries.

How Tradeshift works

Tradeshift is a cloud-based B2B network and spend management platform that exposes invoices, purchase orders, credit notes, receipts, and other business documents through a REST API over HTTPS. Documents are exchanged in UBL 2.0 and 2.2 XML format. Authentication uses OAuth 1.0a with consumer_key, consumer_secret, token, and token_secret in two-legged server-to-server mode, and every request requires the X-Tradeshift-TenantId header. Polling uses GET /documents/v2/ with a changedAfter timestamp filter to fetch only recently modified documents. Tradeshift has no native GL account or cost dimension API, so line-item accounts and dimensions must be embedded in the outbound documents.

What moves between them

The main flow runs from Tradeshift into Sage Intacct. ml-connector polls Tradeshift on a daily or weekly schedule for new and changed invoices, transforms each invoice from UBL format into an Intacct APBILL, and posts it into Intacct's AP module with the vendor and GL accounts matched to the Intacct chart of accounts. Vendor records are synced bidirectionally so supplier details in Tradeshift map to the VENDOR records in Intacct. Reference dimensions such as GL accounts, cost centers, and departments are read from Intacct during the initial setup and cached so every invoice posted references valid Intacct GL accounts.

How ml-connector handles it

ml-connector stores both credential sets encrypted and manages Intacct session caching so the 50-minute session expiry does not interrupt a workflow. It refreshes the Intacct session on the next call if it expires, and parses XML error responses from Intacct to surface application-level failures separate from network errors. On the Tradeshift side it uses OAuth 1.0a two-legged auth with the tenant ID header on every call. The integration polls Tradeshift at a fixed cadence and transforms each UBL invoice into Intacct APBILL structure, validating that the vendor exists in Intacct before posting and that the GL accounts in the invoice map to real Intacct GL accounts. Because both systems use polling (Intacct has no webhooks), ml-connector runs on a schedule you set, and because Intacct lacks a native idempotency mechanism, the integration uses the uniqueid flag and Intacct's deduplication to prevent double-posting on retried calls. Every invoice carries a full audit trail, including the original UBL document, the mapped APBILL, and the Intacct response.

A real-world example

A mid-sized manufacturing company runs Sage Intacct for accounting and AP, and uses Tradeshift to collaborate with suppliers on purchase orders and invoices across a global supply chain. Before the integration, AP staff manually entered invoices received through Tradeshift into Intacct twice a week, a slow and error-prone process where vendor names and GL account numbers often mismatched. With Sage Intacct and Tradeshift connected, supplier invoices flow automatically from Tradeshift into Intacct's AP module, pre-matched to the correct vendors and GL accounts. The AP team now spends time on exception handling and approvals rather than data entry, and invoices post on the same day they arrive.

What you can do

  • Poll Tradeshift for new and changed invoices on a schedule you control, and post each one into Sage Intacct as an AP bill.
  • Sync supplier records between Tradeshift and Sage Intacct so invoices land on valid vendors without manual lookup.
  • Transform Tradeshift UBL invoice documents into Sage Intacct APBILL structure, mapping line-item GL accounts to the Intacct chart of accounts.
  • Bridge Sage Intacct session-based XML auth (with automatic 50-minute refresh) and Tradeshift OAuth 1.0a, managing both credential sets encrypted.
  • Track every invoice through audit, including the original UBL, the mapped APBILL, and the Intacct posting response, with deduplication on retries.

Questions

Which direction does data move between Sage Intacct and Tradeshift?
Invoices flow from Tradeshift into Sage Intacct where they are posted as AP bills. Vendor records are synced bidirectionally so supplier details in Tradeshift map to Intacct vendors. GL accounts and cost dimensions are validated against Intacct so invoice line items are matched to the correct accounts before posting.
How does the integration handle Sage Intacct's session-based auth and Tradeshift's OAuth?
ml-connector caches the Intacct sessionid and refreshes it automatically when it expires after 50 minutes, so a session expiry does not interrupt processing. Tradeshift OAuth 1.0a credentials are stored encrypted and used on every call with the required X-Tradeshift-TenantId header. Both credential sets are managed separately and neither is logged.
What happens if an invoice fails to post into Sage Intacct?
ml-connector retries failed invoices with exponential backoff, using Intacct's uniqueid flag to prevent double-posting on retry. Every invoice, including failures, is logged in the full audit trail with the original UBL document and the Intacct response so failures can be reviewed and replayed after the issue is fixed.

Related integrations

Connect Sage Intacct and Tradeshift

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

Get started