ml-connector
Sage IntacctStampli

Sage Intacct and Stampli integration

Sage Intacct runs your general ledger and vendor management. Stampli runs your invoice capture and approval workflows. Connecting the two keeps your AP records and your accounting ledger in sync without manual re-entry. Invoices approved in Stampli post into Sage Intacct as vendor bills on the correct GL accounts and cost centers, and payments processed in Stampli flow into Intacct's payment records. ml-connector manages the differences between Intacct's XML gateway and Stampli's file-based transport, handles session expiry and file polling, and ensures every transaction carries a full audit trail.

How Sage Intacct works

Sage Intacct exposes vendors, AP bills, AP payments, GL accounts, and accounting dimensions through a single XML gateway endpoint at https://api.intacct.com/ia/xml/xmlgw.phtml. Authentication is session-based, with credentials (senderId, senderPassword, companyId, userId, userPassword) exchanged in an initial call for a sessionid that remains valid for 50 minutes. Sessions are cached in-process per company and user, and refreshed automatically when they expire. HTTP 200 responses may contain application-level errors inside the XML body, so ml-connector parses error messages from the response to detect failures. Intacct has no public webhook system, so all data flows are polling-driven or scheduler-initiated. Operations include a uniqueid flag for server-side deduplication on retried requests.

How Stampli works

Stampli is an AI-powered Accounts Payable platform covering invoice capture, approval workflows, PO matching, vendor management, and payment execution. Because Stampli does not publish a public REST API, integration occurs via SFTP with flat files (CSV or XML templates). SFTP credentials are username and password on Stampli's outbound directory. Stampli's internal sync refresh rates are approximately 5 minutes for invoices and GL accounts, 2 hours for purchase orders. Stampli exports files to SFTP at defined intervals; ml-connector polls the outbound directory on a schedule that aligns with expected file arrival times. The platform includes built-in duplicate detection for invoices, so ml-connector implements additional dedup logic to prevent rework.

What moves between them

Data flows from Stampli into Sage Intacct. Approved invoices in Stampli are exported to SFTP files on Stampli's schedule (typically every 15 minutes). ml-connector polls those files, parses invoices and vendor references, and creates AP bills in Sage Intacct, mapped to the corresponding vendors and GL accounts. Payments processed in Stampli are similarly exported and created as AP payment records in Intacct. GL accounts and vendors are aligned in both systems beforehand so each invoice posts to the correct account and vendor. Sage Intacct is the system of record for the general ledger; Stampli's export is the trigger for new bills and payments to be recorded.

How ml-connector handles it

ml-connector stores SFTP credentials encrypted and connects to Stampli's outbound directory on a configurable polling interval. When new CSV files arrive, they are fetched, parsed, and deduplicated to avoid rework. Each row is then translated into a Sage Intacct request: vendors are matched by name or ID, invoices create APBILL records with the GL account from the CSV, and payments create APPAYMENT records. Requests are dispatched to Intacct's XML gateway with the cached sessionid; if the session has expired (over 50 minutes), ml-connector refreshes it with new partner and user credentials before retrying. Because Intacct returns HTTP 200 even on application-level errors, every response is parsed for error messages, and failures are retried with exponential backoff. Each record is tagged with a uniqueid for server-side deduplication in case a network timeout forces a retry. Once a file is successfully processed, it is archived in the SFTP directory so the next poll cycle does not reprocess it. Every transaction is logged with full context: source file, row number, vendor name, amount, GL account, Intacct request ID, and result status.

A real-world example

A mid-sized professional services firm uses Sage Intacct for general ledger and vendor management, and Stampli for invoice capture and AP approval workflows across 40 vendors. Before the integration, the AP team reviewed approved invoices in Stampli, then manually entered them into Sage Intacct, matching each to the correct vendor and project-based cost center. Invoice approval in Stampli did not guarantee the entry would make it to the ledger the same day, and month-end close began with a hunt for missing invoices and AP-to-ledger reconciliation gaps. With Stampli and Intacct connected, each approved invoice flows automatically into Sage Intacct within minutes of Stampli's export, posting to the vendor and GL account specified in the approval workflow. The AP team confirms entry and release to the ledger, but manual re-keying is eliminated. Month-end close now starts with AP and GL already aligned.

What you can do

  • Post approved Stampli invoices into Sage Intacct as AP bills, mapped to the correct vendors and GL accounts.
  • Create AP payment records in Sage Intacct when payments are processed in Stampli.
  • Align GL accounts and vendors in both systems so invoices post to valid accounts and cost centers.
  • Refresh Sage Intacct sessions automatically when they expire, and handle Intacct's XML error responses gracefully.
  • Poll Stampli's SFTP directory on a schedule you control, with deduplication, retries, and a full audit trail on every invoice and payment.

Questions

How does the integration handle Stampli's file-based transport and Sage Intacct's XML gateway?
ml-connector connects to Stampli's SFTP server using encrypted credentials and polls the outbound directory on a configurable schedule for new invoice and payment files. Each CSV file is parsed and translated into XML requests for Sage Intacct's gateway. Because Intacct returns HTTP 200 even on errors, ml-connector parses the XML response for error messages and retries with exponential backoff.
What happens when Sage Intacct's session expires after 50 minutes?
ml-connector caches sessions in-process and automatically refreshes them when they expire. When a request fails because the sessionid is stale, ml-connector makes a fresh getAPISession call and retries the operation with the new sessionid. Every retry is tagged with a uniqueid for server-side deduplication.
How does the integration prevent duplicate invoices from being entered twice?
ml-connector archives processed files in Stampli's SFTP directory so they are not re-fetched on the next poll cycle. Stampli includes built-in duplicate detection for invoices, and ml-connector adds an additional dedup layer to prevent rework if a file is reprocessed. Each invoice carries its source file and row number in the audit trail for traceability.

Related integrations

Connect Sage Intacct and Stampli

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

Get started