Sage Intacct and Stedi integration
Sage Intacct manages your general ledger, vendors, and payables. Stedi translates and routes EDI documents to your trading partners via SFTP, FTPS, and AS2. Connecting the two lets you send invoices and purchase orders from Intacct to trading partners as X12 EDI without manual file prep or re-keying. When inbound EDI arrives through Stedi, it flows back into Intacct as new payables and vendor master updates.
What moves between them
Sage Intacct vendors and AP bills flow outbound to Stedi, where ml-connector maps them to EDI 810 Invoice and 850 Purchase Order documents and routes them via SFTP, FTPS, or AS2 based on the trading partner's connection profile. Inbound EDI arrives at Stedi's webhook endpoint as transaction.processed.v2 events, which ml-connector parses and writes back into Sage Intacct as vendor master records and new AP bills. The sync is scheduler-driven for outbound (polling Intacct on a cadence you define) and event-driven for inbound (Stedi webhooks notify ml-connector when a new EDI file is received and parsed).
How ml-connector handles it
ml-connector maintains the Sage Intacct session token automatically, refreshing it before the 50-minute expiry, and wraps all XML responses in error parsing to catch and surface application-level errors instead of treating HTTP 200 as success. Outbound flows read Intacct vendors and AP bills, format them to the EDI structure expected by the target trading partner (810 for invoices, 850 for purchase orders), and POST them to Stedi with a unique Idempotency-Key. Inbound flows receive Stedi's webhook notifications (with a 5-second timeout requirement), parse the EDI JSON back to Intacct field names and dimensions, and insert or update vendor and bill records via Intacct's XML gateway. The mapping between Intacct GL accounts and dimensions to X12 segments is configurable per trading partner, and retries on timeout or transient errors respect Stedi's webhook retry policy (up to 4 retries over 90 seconds) and Intacct's session refresh window.
A real-world example
A mid-sized wholesale distributor uses Sage Intacct for accounting and vendor management, and ships to several regional retail chains that expect invoices and purchase order acknowledgments as X12 EDI files. Before the integration, the accounting team exported invoices from Intacct, converted them manually to EDI using a separate tool, and uploaded them to each retailer's SFTP or AS2 gateway. Inbound purchase orders from retailers arrived as EDI files, which the team parsed by hand and re-entered into Intacct. With Sage Intacct and Stedi connected, outbound invoices flow automatically to Stedi and route to each retailer's preferred channel (SFTP for one, AS2 for another), and inbound purchase orders from retailers are parsed and land in Intacct's AP module without manual intervention.
What you can do
- Send Sage Intacct AP bills and invoices to trading partners as X12 810 EDI documents via Stedi's SFTP, FTPS, and AS2 channels.
- Receive inbound EDI purchase orders and invoices from trading partners through Stedi webhooks and write them to Sage Intacct as new AP bills and vendor master records.
- Maintain and auto-refresh Sage Intacct's 50-minute session tokens and parse XML responses for application-level errors.
- Map Sage Intacct GL accounts and dimensions to X12 EDI segments, configurable per trading partner.
- Deduplicate outbound API calls to Stedi with Idempotency-Key headers and retry inbound webhooks within Stedi's 4-retry, 90-second window.
Questions
- Which direction does data move between Sage Intacct and Stedi?
- Both directions. Outbound flows Sage Intacct vendors and AP bills to Stedi for translation to X12 and delivery to trading partners via SFTP, FTPS, or AS2. Inbound flows through Stedi's webhooks when EDI documents arrive from trading partners; ml-connector parses the EDI and writes vendor records and AP bills back into Sage Intacct.
- How does the integration handle Sage Intacct's XML gateway and session expiry?
- ml-connector maintains the session token and refreshes it automatically before the 50-minute expiry window. All XML responses are parsed for application-level errors inside the message body, not just HTTP status codes, because Intacct returns HTTP 200 even when an operation fails.
- What EDI formats does the integration support, and how are they mapped?
- The integration focuses on X12 810 (Invoices) and 850 (Purchase Orders) for outbound flows. Mappings between Sage Intacct GL accounts, cost centers, and dimensions to X12 segments are configurable per trading partner, so each retailer or supplier receives data in the structure they expect.
Related integrations
More Sage Intacct integrations
Other systems that connect to Stedi
Connect Sage Intacct and Stedi
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started